⚙️ Math.random()
В Java метод Math.random()
генерирует случайное число с плавающей точкой от 0.0 (включительно) до 1.0 (исключительно). Это базовый способ генерации случайных чисел.
👩💻 Задача по Java: Подсчёт частоты слов в строке
Напишите метод, который принимает строку и возвращает Map
, где ключи — это слова из строки, а значения — количество их вхождений. Игнорируйте регистр и удаляйте знаки препинания.
Пример:
public class Main {
public static void main(String[] args) {
String text = "Hello, world! Hello Java.";
Map<String, Integer> result = countWordFrequency(text);
System.out.println(result);
// Ожидаемый результат:
// {hello=2, world=1, java=1}
}
}
⚙️ String.replaceAll()
В Java метод String.replaceAll()
заменяет все вхождения текста, соответствующего регулярному выражению, на заданную строку. Это мощный инструмент для обработки строк.
⚙️ StringBuilder.reverse()
В Java метод StringBuilder.reverse()
используется для разворота строки. Это удобный способ изменить порядок символов в строке без создания промежуточных объектов.
Согласованность в распределённой сети — вызов, который мы готовы принять!
На открытом уроке «Распределённые транзакции» разберём, как добиться согласованности данных в микросервисной и распределённой архитектуре. Изучим шаблон Saga, методы обработки ошибок и практики отката данных.
Представьте систему, которая работает без сбоев, несмотря на распределённость данных. Архитектура, которая поддерживает масштабируемость и надёжность, даже при высоких нагрузках.
🔥 Спикер Олег Мифле — бэкенд-разработчик в одной из крупнейших отечественных соцсетей с 15-летним опытом в IT.
🔴 Присоединяйтесь к вебинару 16 декабря в 20:00 мск! Урок пройдёт перед стартом курса «Highload Architect». Участники вебинара получат 🌲новогоднюю скидку на обучение: https://otus.pw/UtA7/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⚙️ Collectors.toMap()
В Java метод Collectors.toMap()
собирает элементы потока в карту (Map), где вы можете указать функции для ключей и значений. Это удобно для преобразования коллекций в структуру ключ-значение.
Вы опытный Java-разработчик, но хотите большего?
📚 Углубитесь в устройство JVM, научитесь профилировать приложения, оптимизировать их для облаков и развертывать в Kubernetes. Это повышение квалификации для тех, кто готов выйти на новый уровень.
👉 Вы освоите реактивный подход, работу с метриками и логированием, научитесь анализировать дампы памяти и создавать REST API с OpenAPI и Protobuf.
🎁 Присоединяйтесь к курсу «Java Developer. Advanced» и получите скидку! Ваша карьера в IT ждет апгрейда: https://otus.pw/Tsfk/Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👩💻 Задача по Java: Binary Addition
Реализуйте функцию, которая принимает два числа, складывает их и возвращает результат в двоичном формате. Результат должен быть строкой.
Пример:
1, 1 --> "10" (1 + 1 = 2 in decimal or 10 in binary)
5, 9 --> "1110" (5 + 9 = 14 in decimal or 1110 in binary)
Эффективная разработка на Spring Boot без ограничений.
Пока зарубежные компании отзывают лицензии у пользователей РФ, Amplicode продолжает помогать максимально удобно работать со Spring Boot, JPA, Docker, Kafka, Liquibase, MapStruct и т.д.
Amplicode можно установить как плагин в IntelliJ IDEA Community и Ultimate, а также в Giga IDE.
Что умеет Amplicode?
⚡ Легкая навигация по проекту
⚡ Создание объектов сразу в терминах фреймворка: контроллеры, репозитории, сервисы, сущности, события, DTO, мапперы и т.д.
⚡ Палитра и инспектор, позволяющие видеть опции, доступные разработчику в текущем контексте
⚡ Умные инжекции, подсказки и исправление ошибок
⚡ и многое другое!
А самое главное, Amplicode доступен бесплатно и без региональных ограничений!
Познакомьтесь со всеми возможностями Amplicode
Читайте наш гайд: «Как превратить IntelliJ IDEA Community Edition в Ultimate за 3 простых шага»
⁉️ Хотите, чтобы ваши Java-приложения выдерживали любые нагрузки и были стабильны в любой ситуации?
Научитесь этому на бесплатном открытом уроке с использованием Resilience4j!
В мире высоких нагрузок и распределенных систем стабильность — это ключ к успеху.
🗓 На уроке 19 декабря в 20:00 мск мы разберем фреймворк Resilience4j и покажем, как повысить отказоустойчивость ваших приложений.
🦾 Уверенные навыки работы с Resilience4j сделают вас востребованным специалистом, который способен справляться с реальными вызовами. Добавьте этот мощный инструмент в свой профессиональный стек.
Спикер Сергей Петрелевич — опытный разработчик на Java и Kotlin.
🔗 Регистрируйтесь на вебинар: https://otus.pw/CB1B/
Все участники вебинара получат скидку на курс «Java Developer. Professional».Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
#вопросы_с_собеседований
Что такое метод finalize()
в Java, как он работает и почему его использование не рекомендуется?
Ответ ⬇️
Метод finalize() вызывается перед тем, как объект удаляется сборщиком мусора (garbage collector). Он используется для освобождения ресурсов, таких как файловые дескрипторы или сетевые соединения. Однако его использование не рекомендуется из-за непредсказуемости вызова (точное время выполнения сборки мусора неизвестно) и потенциальных проблем с производительностью. Вместо этого рекомендуется использовать try-with-resources или явно закрывать ресурсы.
Пример использования ⚙️
class Resource {Читать полностью…
@Override
protected void finalize() throws Throwable {
System.out.println("Ресурс освобожден!");
}
}
public class Main {
public static void main(String[] args) {
new Resource(); // Создаем объект без сохранения ссылки
System.gc(); // Явный вызов сборщика мусора (не гарантирует немедленного выполнения)
System.out.println("Завершение программы");
}
}
⚙️ String.contains()
В Java метод String.contains()
проверяет, содержится ли указанная подстрока в строке. Это удобный способ проверки наличия текста в строке.
#вопросы_с_собеседований
Расскажите про приведение типов. Что такое понижение и повышение типа?
Приведение типов — это преобразование переменной одного типа в другой.
Существует два вида приведения типов:
— Повышение типа (widening): автоматическое преобразование типа в другой, более широкий тип. Например, int в long. При этом не теряется точность, так как широкий тип может представить все значения узкого типа.
— Понижение типа (narrowing): явное приведение к более узкому типу, например double в int. Здесь возможна потеря точности, поэтому требуется явное приведение в коде.
Повышение типа безопасно, компилятор делает его автоматически.
Понижение опасно потерей данных, поэтому разработчик должен явно указать такое приведение в коде, чтобы показать, что он контролирует возможную потерю точности.
👩💻 Задача по Java: Проверка строки на наличие всех букв алфавита
Напишите функцию, которая проверяет, содержит ли строка все буквы английского алфавита (a-z). Игнорируйте регистр букв и символы, не являющиеся буквами.
Пример:
System.out.println(isPangram("The quick brown fox jumps over the lazy dog"));
// Ожидаемый результат: true
System.out.println(isPangram("Hello, World!"));
// Ожидаемый результат: false
Semaphore
Semaphore — это класс, который позволяет ограничивать количество потоков, одновременно работающих с каким-либо ресурсом.
Поток должен получить разрешение, чтобы войти в критическую секцию.Semaphore
управляет набором разрешений (permits), а конструктор принимает количество разрешений.
Если разрешений нет, поток ставится в очередь до освобождения.
Метод acquire()
получает разрешение, release()
— освобождает.
⚡️Хотите стать экспертом в разработке на Spring Framework?
Обучение «Разработчик на Spring Framework» от OTUS — это практический подход к освоению самого востребованного фреймворка для Java-разработчиков. Узнайте, как создавать веб-приложения на микросервисной архитектуре, автоматизировать задачи с Spring Boot и реализовывать высокоуровневые решения!
В конце курса у вас будет портфолио из готовых приложений и глубокое понимание работы со Spring. Пройдите вебинар-собеседование, чтобы быть готовым к реальным интервью.
👉Запишитесь на курс сейчас и перейдите на новый профессиональный уровень с дипломом, признанным крупными компаниями: https://otus.pw/aynT/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Забирай пошаговую roadmap по JAVA
FAANG School в течение 24 часов отдают бесплатно свою библиотеку знаний. Вы можете получить доступ:
– Redis - 5 улучшений для твоего пет-проекта
– Пошаговая RoadMap по Java
– Мануал по Docker. Основные команды и концепции
– Микросервисы. Вопросы с собеседований
– Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз
– Desk setup. Подборка аксессуаров для комфортной работы
– Шпаргалка по Kafka
– Инструкция по работе с Git
– Подробный гайд, как найти работу в IT без опыта
– Подборка платформ с вакансиями для java-разработчиков
Последнее пополнение - Шпаргалка по Spring, в которой подробно разобрали, что такое паттерн Наблюдатель, и как его реализовать в Java. А также познакомитесь с событиями и научитесь работать с ними в Spring Boot!
Библиотека знаний обновляется постоянно, но бесплатный доступ длится всего сутки. Чтобы получить полезные материалы, переходи по ссылке и жми на оранжевую кнопку.
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля.
📆 Когда: 21-22 декабря в 14:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Познакомиться с синтаксисом и основными конструкциями языка Java.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️ Создать консольное приложение на Java с интеграцией API Яндекс.Карт для построения маршрутов и поиска информации.
✔️ Узнать ответы на интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участников интенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика и доступ в закрытое сообщество «Старт в Java» от Хекслета!
Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid:LjN8KZbcA
⚙️ PriorityQueue
В Java класс PriorityQueue
предоставляет структуру данных с приоритетной очередью, где элементы извлекаются в порядке их приоритета. По умолчанию элементы сортируются по возрастанию, но можно задать собственный компаратор.
Приглашаем на митап Мир Plat.Form «Платежные технологии: биометрия и быстрые кешбэки»
🌐 Онлайн
📆 20 декабря в 17:00 (МСК, GMT+3)
В программе — два доклада:
🗣 Идентификация и оплата: как работает платформа биометрических сервисов (ПБС) — Сергей Лысенко, Алексей Бобруцков
Определим место НСПК в биоэквайринге. Поговорим об архитектуре и механизмах ПБС. Выясним, как совершается оплата с точки зрения клиента, с кем в разных процессах взаимодействует команда и как технологию применяют в нефинансовых сервисах.
🗣 Быстрые кешбэки для быстрых платежей: как работает платформа лояльности СБП — Константин Гузаров
Разберем, что скрывается под капотом программы лояльности «Привет!» в части СБП. Обсудим механику акций, потоки данных внутри системы лояльности, требования к сервису и историю его развития.
Вы сможете задать вопросы спикерам в чате митапа. За лучшие вопросы Мир Plat.Form подарит призы.
Регистрируйтесь на сайте митапа.
Реклама. АО "НСПК". ИНН 7706812159
⚙️ Optional.flatMap()
В Java метод Optional.flatMap()
позволяет преобразовать значение внутри Optional, возвращая другой Optional. Это особенно полезно для работы с вложенными Optional.
👩💻 Задача по Java: Удаление дубликатов из списка с сохранением порядка
Напишите метод, который принимает список строк и возвращает новый список, содержащий только уникальные строки, сохраняя их порядок появления.
Пример:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> input = List.of("apple", "banana", "apple", "orange", "banana");
List<String> result = removeDuplicates(input);
System.out.println(result);
// Ожидаемый результат: [apple, banana, orange]
}
}
#вопросы_с_собеседований
Что такое ForkJoinPool в Java, как он работает, и как его использовать для параллельной обработки задач?
Ответ ⬇️
ForkJoinPool — это специализированный пул потоков, который рекурсивно делит задачи на подзадачи (fork) и объединяет их результаты (join). Он оптимизирован для задач, которые можно разделить на независимые части, например, вычисление суммы элементов массива. Основными классами являются RecursiveTask для задач с результатом и RecursiveAction для задач без результата.
Пример использования ⚙️
import java.util.concurrent.RecursiveTask;Читать полностью…
import java.util.concurrent.ForkJoinPool;
class SumTask extends RecursiveTask<Integer> {
private final int[] array;
private final int start, end;
public SumTask(int[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
if (end - start <= 5) {
int sum = 0;
for (int i = start; i < end; i++) sum += array[i];
return sum;
} else {
int mid = (start + end) / 2;
SumTask left = new SumTask(array, start, mid);
SumTask right = new SumTask(array, mid, end);
left.fork();
return right.compute() + left.join();
}
}
}
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ForkJoinPool pool = new ForkJoinPool();
int result = pool.invoke(new SumTask(array, 0, array.length));
System.out.println("Сумма: " + result); // Сумма: 55
}
}
⚙️ List.subList()
В Java метод subList()
позволяет создать представление части списка. Это удобно для работы с подмножествами коллекций без необходимости копирования элементов.
⚙️ Math.round()
В Java метод Math.round()
округляет число до ближайшего целого значения. Это полезно для обработки чисел с плавающей запятой, если требуется округление до ближайшего целого.
⚙️ String.replace()
В Java метод String.replace()
заменяет все вхождения указанного символа или подстроки в строке на новое значение. Это удобно для модификации строк без необходимости создания сложных шаблонов.
⚙️ String.startsWith() и String.endsWith()
В Java методы String.startsWith()
и String.endsWith()
проверяют, начинается или заканчивается строка на указанную подстроку. Это удобно для работы с текстами и валидации.
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
Метод divide вызывает исключение ArithmeticException, так как деление на ноль недопустимо. Исключение перехватывается в блоке catch, где его сообщение выводится. После этого выполняется блок finally, который всегда исполняется независимо от того, было исключение или нет.Читать полностью…
⚙️HashMap.getOrDefault()
В Java метод HashMap.getOrDefault()
возвращает значение для заданного ключа, если он существует, или значение по умолчанию, если ключ отсутствует. Это удобный способ избежать проверки на наличие ключа.
❓ Вопрос на собеседовании
Как работает CompletableFuture
в Java, чем он отличается от Future, и как использовать метод thenCombine()
для выполнения параллельных задач?
Ответ ⬇️
CompletableFuture — это расширение Future, позволяющее выполнять асинхронные задачи и комбинировать их без необходимости вручную управлять потоками. В отличие от Future, он предоставляет богатый API для обработки результатов, включая цепочку методов и возможность комбинирования нескольких задач. Метод thenCombine() используется для объединения результатов двух асинхронных задач, выполняемых параллельно, в одну итоговую операцию.
Пример использования ⚙️
import java.util.concurrent.CompletableFuture;Читать полностью…
public class Main {
public static void main(String[] args) {
// Первая асинхронная задача
CompletableFuture<Integer> task1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000); // Эмуляция задержки
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
});
// Вторая асинхронная задача
CompletableFuture<Integer> task2 = CompletableFuture.supplyAsync(() -> 20);
// Комбинируем результаты двух задач
CompletableFuture<Integer> combined = task1.thenCombine(task2, Integer::sum);
// Получаем и выводим результат
combined.thenAccept(result -> System.out.println("Сумма: " + result));
// Ждем завершения всех задач (только для примера)
combined.join();
}
}
// Результат выполнения:
// Сумма: 30