Telegram Web Link
Ответ на "Как одним вызовом из List получить List со всеми элементами, кроме первых и последних 3-х?"

List<Integer> subList = list.subList(3, list.size() - 3);

#вопросы_с_собеседований
Что такое «fail-fast поведение»?

Пишите в комментариях ваш вариант. Ответ будет у нас в канале.

#вопросы_с_собеседований
Ответ на "Что такое «fail-fast поведение»?"

fail-fast поведение означает, что при возникновении ошибки или состояния, которое может привести к ошибке, система немедленно прекращает дальнейшую работу и уведомляет об этом. Использование fail-fast подхода позволяет избежать недетерминированного поведения программы в течение времени.

В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают ConcurrentModificationException, если после его создания была произведена модификация коллекции, т.е. добавлен или удален элемент напрямую из коллекции, а не используя методы итератора.

Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (modification count):

• при изменении коллекции счетчик модификаций так же изменяется;
• при создании итератора ему передается текущее значение счетчика;
• при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение.

#вопросы_с_собеседований
📕Открытый урок по Scala для Java, C#, Kotlin и Android программистов, аналитиков данных и специалистов по обработке больших данных

На открытом уроке 16 декабря в 20:00 мск мы изучим, эффекты в Scala.

📗На уроке:
- узнаем, что такое эффекты и какие они бывают;
- познакомимся с понятием функционального эффекта;
- разберемся, какие задачи они могут решать.

📘В результате:
Реализуем свой функциональный эффект, применив полученные навыки.

Спикер Алексей Воронец — руководитель разработки департамента проектных решений и поисковых систем в компании Naumen, 14+ лет разработки на Scala, Java, JavaScript и PHP.

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://otus.pw/WhNw/

📙 Все участники открытого урока получат скидку на курс "Scala-разработчик"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Чем stub отличается от mock?

Пишите в комментариях ваш вариант. Ответ будет у нас в канале.

#вопросы_с_собеседований
Ответ на "Чем stub отличается от mock?"

stub используется как заглушка сервисов, методов, классов и т.д. с заранее запрограммированным ответом на вызовы.

mock использует подмену результатов вызова, проверяет сам факт взаимодействия, протоколирует и контролирует его.

#вопросы_с_собеседований
⁉️ Хотите, чтобы ваши Java-приложения выдерживали любые нагрузки и были стабильны в любой ситуации?
Научитесь этому на бесплатном открытом уроке с использованием Resilience4j!

В мире высоких нагрузок и распределенных систем стабильность — это ключ к успеху.

🗓 На уроке 19 декабря в 20:00 мск мы разберем фреймворк Resilience4j и покажем, как повысить отказоустойчивость ваших приложений.

🦾 Уверенные навыки работы с Resilience4j сделают вас востребованным специалистом, который способен справляться с реальными вызовами. Добавьте этот мощный инструмент в свой профессиональный стек.

Спикер Сергей Петрелевич — опытный разработчик на Java и Kotlin.

🔗 Регистрируйтесь на вебинар

Все участники вебинара получат скидку на курс «Java Developer. Professional».

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли объявить метод абстрактным и статическим одновременно?

Пишите в комментариях ваш вариант. Ответ будет у нас в канале.

#вопросы_с_собеседований
Ответ на "Можно ли объявить метод абстрактным и статическим одновременно?"

Нет. В таком случае компилятор выдаст ошибку: "Illegal combination of modifiers: ‘abstract’ and ‘static’". Модификатор abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени класса.

#вопросы_с_собеседований
Шпаргалка. Все базовые, необходимые паттерны проектирования на Java в одном посте.

👩‍💻 Реализация паттернов проектирования на Java

🕯 Паттерн Decorator (Декоратор)

🕯 Паттерн Observer (Наблюдатель)

🕯 Паттерн Посетитель (Visitor)

🕯 Паттерн Factory Method (Фабричный метод)

🕯 Паттерн Proxy (Прокси)

🕯 Паттерн Command (Команда)

🔍 Что такое MVC?

👉 Java Rocks | #паттерны | пошарьте друзьям этот пост если считаете его полезным. 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
Начинаем работать. Скоро будет много новых постов. Предлагайте темы, которые стоит разобрать.
В чем разница между HashMap и WeakHashMap? Для чего используется WeakHashMap?

Пишите в комментариях ваш вариант. Ответ будет у нас в канале.

#вопросы_с_собеседований
Ответ на "В чем разница между HashMap и WeakHashMap? Для чего используется WeakHashMap?"

В Java существует 4 типа ссылок: сильные (strong reference), мягкие (SoftReference), слабые (WeakReference) и фантомные (PhantomReference). Особенности каждого типа ссылок связаны с работой Garbage Collector. Если объект можно достичь только с помощью цепочки WeakReference (то есть на него отсутствуют сильные и мягкие ссылки), то данный объект будет помечен на удаление.

WeakHashMap - это структура данных, реализующая интерфейс Map и основанная на использовании WeakReference для хранения ключей. Таким образом, пара «ключ-значение» будет удалена из WeakHashMap, если на объект-ключ более не имеется сильных ссылок.

В качестве примера использования такой структуры данных можно привести следующую ситуацию: допустим имеются объекты, которые необходимо расширить дополнительной информацией, при этом изменение класса этих объектов нежелательно либо невозможно. В этом случае добавляем каждый объект в WeakHashMap в качестве ключа, а в качестве значения - нужную информацию. Таким образом, пока на объект имеется сильная ссылка (либо мягкая), можно проверять хэш-таблицу и извлекать информацию. Как только объект будет удален, то WeakReference для этого ключа будет помещен в ReferenceQueue и затем соответствующая запись для этой слабой ссылки будет удалена из WeakHashMap.

#вопросы_с_собеседований
Почему Map не наследуется от Collection?

Пишите в комментариях ваш вариант. Ответ будет у нас в канале.

#вопросы_с_собеседований
Ответ на "Почему Map не наследуется от Collection?"

Это связано с тем, что Map представляет отображение ключ-значение, в то время как Collection представляет коллекцию объектов.

Коллекции работают с объектами на основе их позиции в коллекции, тогда как в Map объекты доступны по ключу. Поэтому операции, определенные в Collection, такие как добавление, получение по индексу и итерация, не имеют смысла для Map.

Вместо этого в Map определены операции для работы с парами ключ-значение, такие как put(), get(), containsKey() и другие. Наследование Map от Collection привело бы к наследованию неподходящих методов.

#вопросы_с_собеседований
Напишите, название книжек, которые вы ищете по Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
От чего зависит эффективность автотестов?

От их правильного написания и поддерживаемости!

В QA GURU мы учим приручать Java, чтобы ваши автотесты работали, как часы. Вот несколько лайфхаков, о которых мы расскажем на вводном занятии уже сегодня (20:00 Мск):

1. Используйте понятные и описательные названия тестов

Названия тестов должны четко отражать их цель. Это упрощает понимание кода всеми членами команды.

Например:

// Хорошо
public void verifyLoginWithValidCredentials() { ... }


// Плохо
public void test1() { ... }


Описательные названия помогают быстро понять, что проверяет тест, без необходимости изучения его внутренней логики.

2. Применяйте Page Object Model (POM)

Page Object Model позволяет отделить логику теста от структуры веб-страницы, что делает код более модульным и удобным для поддержки при изменениях интерфейса.

Пример использования:

// Класс

Page Object
public class LoginPage {
private By usernameField = By. id("username");
private By passwordField = By. id("password");
private By loginButton = By. id("loginBtn");

public void enterUsername(String username) {
driver.findElement(usernameField).sendKeys(username);
}

public void enterPassword(String password) {
driver.findElement(passwordField).sendKeys(password);
}

public void clickLoginButton() {
driver.findElement(loginButton).click();
}
}


// Тестовый сценарий

LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername("john.doe");
loginPage.enterPassword("password123");
loginPage.clickLoginButton();


POM способствует повторному использованию кода и улучшает читаемость тестов.

3. Используйте параметризацию и data-driven подход

Параметризованные тесты позволяют запускать один и тот же сценарий с различными входными данными, что увеличивает охват тестирования без дублирования кода.

@ ParameterizedTest
@ CsvSource({"john.doe, password123", "jane.smith, test@123"})
public void verifyLogin(String username, String password) {
LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername(username);
loginPage.enterPassword(password);
loginPage.clickLoginButton();
}


Этот подход делает тесты более гибкими и масштабируемыми.

4. Следуйте принципу AAA (Arrange, Act, Assert)

Структурируйте тесты в три этапа:

Arrange: подготовка данных и окружения.

Act: выполнение действия.

Assert: проверка результата.

Пример:

@ Test
public void testAddition() {
// Arrange
Calculator calculator = new Calculator();

// Act
int result = calculator.add(2, 3);

// Assert
assertEquals(5, result);
}


Этот подход делает тесты более организованными и легко читаемыми.

5. Логирование и отчетность

Добавляйте логирование в тесты для диагностики проблем:

log. info("Entering username: " + username);
log. info("Clicking on the login button");

Интеграция инструментов отчетности (например, Allure) помогает визуализировать результаты тестов и быстро выявлять ошибки.

6. Регулярные ревью кода

Проводите регулярные ревью автотестов для повышения качества кода. Это помогает выявить потенциальные проблемы, улучшить читаемость и обеспечить соблюдение стандартов кодирования.

7. Автоматизация и CI/CD

Используйте инструменты автоматизации (Maven, Gradle) для запуска тестов в рамках CI/CD пайплайнов. Это ускоряет процесс разработки и обеспечивает стабильность приложения на всех этапах.

Хотите узнать больше? Присоединяйтесь сегодня (20:00 Мск) к нашему бесплатному открытому уроку!

🔗 Зарегистрируйтесь на первый открытый урок по ссылке.
Javazavr. Обучение Java.
         for (int i = 2; i <= 100; i++) {
boolean isPrime = true;

for (int j = 2; j < i; j++) {
if (i % j == 0) {
isPrime = false;
break;
}
}

if (isPrime) {
System.out.println(i);
}
}
2025/04/05 04:00:58
Back to Top
HTML Embed Code: