Ответ на "Как одним вызовом из List получить List со всеми элементами, кроме первых и последних 3-х?"
List<Integer> subList = list.subList(3, list.size() - 3);
#вопросы_с_собеседованийЧто такое «fail-fast поведение»?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Что такое «fail-fast поведение»?"
В Java Collections API некоторые итераторы ведут себя как 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
На открытом уроке 16 декабря в 20:00 мск мы изучим, эффекты в Scala.
📗На уроке:
- узнаем, что такое эффекты и какие они бывают;
- познакомимся с понятием функционального эффекта;
- разберемся, какие задачи они могут решать.
📘В результате:
Реализуем свой функциональный эффект, применив полученные навыки.
Спикер Алексей Воронец — руководитель разработки департамента проектных решений и поисковых систем в компании Naumen, 14+ лет разработки на Scala, Java, JavaScript и PHP.
👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://otus.pw/WhNw/
📙 Все участники открытого урока получат скидку на курс "Scala-разработчик"
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Чем stub отличается от mock?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Чем stub отличается от mock?"
#вопросы_с_собеседований
stub
используется как заглушка сервисов, методов, классов и т.д. с заранее запрограммированным ответом на вызовы.mock
использует подмену результатов вызова, проверяет сам факт взаимодействия, протоколирует и контролирует его.#вопросы_с_собеседований
Научитесь этому на бесплатном открытом уроке с использованием Resilience4j!
В мире высоких нагрузок и распределенных систем стабильность — это ключ к успеху.
🗓 На уроке 19 декабря в 20:00 мск мы разберем фреймворк 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 привело бы к наследованию неподходящих методов.
#вопросы_с_собеседований
Это связано с тем, что Map представляет отображение ключ-значение, в то время как Collection представляет коллекцию объектов.
Коллекции работают с объектами на основе их позиции в коллекции, тогда как в Map объекты доступны по ключу. Поэтому операции, определенные в Collection, такие как добавление, получение по индексу и итерация, не имеют смысла для Map.
Вместо этого в Map определены операции для работы с парами ключ-значение, такие как put(), get(), containsKey() и другие. Наследование Map от Collection привело бы к наследованию неподходящих методов.
#вопросы_с_собеседований
Чем отличается static-метод класса от обычного метода класса?
Anonymous Quiz
6%
Static-метод класса можно вызывать только внутри класса, а обычный - в любой части кода
16%
Обычный метод класса можно переопределить, а static-метод нельзя
71%
Обычный метод класса работает от объекта класса, а static-метод от всего класса
1%
Все варианты неверные
6%
Узнать ответ
От чего зависит эффективность автотестов?
От их правильного написания и поддерживаемости!
В QA GURU мы учим приручать Java, чтобы ваши автотесты работали, как часы. Вот несколько лайфхаков, о которых мы расскажем на вводном занятии уже сегодня (20:00 Мск):
1. Используйте понятные и описательные названия тестов
Названия тестов должны четко отражать их цель. Это упрощает понимание кода всеми членами команды.
Например:
// Хорошо
// Плохо
Описательные названия помогают быстро понять, что проверяет тест, без необходимости изучения его внутренней логики.
2. Применяйте Page Object Model (POM)
Page Object Model позволяет отделить логику теста от структуры веб-страницы, что делает код более модульным и удобным для поддержки при изменениях интерфейса.
Пример использования:
// Класс
// Тестовый сценарий
POM способствует повторному использованию кода и улучшает читаемость тестов.
3. Используйте параметризацию и data-driven подход
Параметризованные тесты позволяют запускать один и тот же сценарий с различными входными данными, что увеличивает охват тестирования без дублирования кода.
Этот подход делает тесты более гибкими и масштабируемыми.
4. Следуйте принципу AAA (Arrange, Act, Assert)
Структурируйте тесты в три этапа:
Arrange: подготовка данных и окружения.
Act: выполнение действия.
Assert: проверка результата.
Пример:
Этот подход делает тесты более организованными и легко читаемыми.
5. Логирование и отчетность
Добавляйте логирование в тесты для диагностики проблем:
Интеграция инструментов отчетности (например, Allure) помогает визуализировать результаты тестов и быстро выявлять ошибки.
6. Регулярные ревью кода
Проводите регулярные ревью автотестов для повышения качества кода. Это помогает выявить потенциальные проблемы, улучшить читаемость и обеспечить соблюдение стандартов кодирования.
7. Автоматизация и CI/CD
Используйте инструменты автоматизации (Maven, Gradle) для запуска тестов в рамках CI/CD пайплайнов. Это ускоряет процесс разработки и обеспечивает стабильность приложения на всех этапах.
Хотите узнать больше? Присоединяйтесь сегодня (20:00 Мск) к нашему бесплатному открытому уроку!
🔗 Зарегистрируйтесь на первый открытый урок по ссылке.
От их правильного написания и поддерживаемости!
В 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);
}
}