Изучаем Java. По вопросам сотрудничества: @seniorvladislav
В чем отличия между TreeSet и HashSet?
Основное отличие между TreeSet
и HashSet
заключается в том, что TreeSet
хранит элементы в отсортированном порядке, в то время как порядок хранения элементов в HashSet
не определен. TreeSet
также обеспечивает быстрый поиск и извлечение элементов в отсортированном порядке.
#для_начинающих
#вопросы_с_собеседований
Что такое рефлексия в Java и в каких ситуациях она используется?
Ответ ⬇️
Рефлексия в Java — это механизм, который позволяет программе исследовать или изменять свою собственную структуру во время выполнения. С помощью рефлексии можно динамически создавать объекты, вызывать методы, получать информацию о классах, полях и методах, что особенно полезно при создании библиотек, фреймворков или инструментов для тестирования. Однако, из-за своей динамической природы, рефлексия может замедлить выполнение программы и нарушить безопасность, поэтому её использование должно быть обдуманным.
Пример использования ⚙️
import java.lang.reflect.Method;Читать полностью…
public class ReflectionExample {
public void sayHello() {
System.out.println("Hello, world!");
}
public static void main(String[] args) throws Exception {
// Получаем класс через рефлексию
Class<?> clazz = ReflectionExample.class;
// Создаем экземпляр класса
Object instance = clazz.getDeclaredConstructor().newInstance();
// Получаем метод sayHello
Method method = clazz.getMethod("sayHello");
// Вызываем метод через рефлексию
method.invoke(instance); // Вывод: Hello, world!
}
}
➡️ Использование библиотеки Takari для создания плагинов Maven
Takari — это библиотека, предназначенная для упрощения разработки Maven-плагинов. Она предоставляет удобные инструменты для создания высокопроизводительных плагинов с минимальным количеством кода.
➡️ Использование блока try-with-resources
для автоматического управления ресурсами в Java
Блок try-with-resources
обеспечивает автоматическое закрытие ресурсов, таких как файлы, потоки, сокеты и другие, которые требуют освобождения после использования. Это упрощает управление ресурсами и помогает избежать утечек.
🗣 Полезно для работы с любыми ресурсами, которые реализуют интерфейс AutoCloseable.
👩💻 Обучение для тех, кто хочет освоить Java на профессиональном уровне — JVM с профилированием и оптимизацией приложений в облаках.
Пройди тест по Java и проверь свои знания, готов ли ты к обучению на курсе.
Ответишь — пройдешь на продвинутый курс "Java Developer. Advanced" от OTUS по специальной цене.
👉 ПРОЙТИ ТЕСТ: https://otus.pw/xqoT/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⚡️ В сети начали массово сливать курсы и книги известных онлайн школ
Вот отсортированная база с тонной материала(постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(107 видео, 43 книги) — СисАналз
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — UI/UX
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — Ruby
Скачивать ничего не нужно — все выложили в Telegram
➡️ Использование библиотеки Agrona для высокопроизводительных структур данных в Java
Agrona — это библиотека, предоставляющая эффективные структуры данных и примитивы для высокопроизводительных приложений. Она включает очереди, кольцевые буферы, а также инструменты для работы с памятью и сетевыми операциями.•
Agrona оптимизирует использование памяти и ускоряет обработку данных.•
Идеальна для приложений с высокими требованиями к производительности.
🔗 Ссылочка на доку
Обработка изображений
Думаем, каждый согласится, что подавать информацию в виде изображения лучше всего для восприятия. Однако сначала нужно сгенерировать такое изображение, и на этот случай в Java есть множество инструментов.
К примеру, класс java.awt.BufferedImage который позволяет обрабатывать изображения каким угодно способом, хоть попиксельно.
Чтобы загрузить изображение из файла используют ImageIO::read, для записи — ImageIO::write.
#для_продвинутых
Интерфейс SortedMapSortedMap
— это интерфейс в Java, который представляет собой отсортированную коллекцию ключей и связанных с ними значений. Он расширяет интерфейс Map
и предоставляет методы для управления данными в упорядоченном виде.
Важно отметить, что SortedMap
не дублирует элементы и обеспечивает их упорядоченное хранение на основе натурального порядка ключей или с использованием заданного компаратора. Это означает, что элементы в SortedMap
автоматически упорядочиваются по ключам.
Методы, объявленные SortedMap
, можно посмотреть здесь.
#для_продвинутых
#вопросы_с_собеседований
Можете ли вы объяснить, как работает механизм 'Double Brace Initialization' в Java и в каких случаях его использование может быть неэффективным?
Механизм "Double Brace Initialization" в Java - это способ инициализации объектов, основанный на анонимных внутренних классах, где первые фигурные скобки создают анонимный подкласс, а вторые - блок инициализации. Этот подход может быть неэффективным из-за создания дополнительного класса для каждого использования, что увеличивает использование памяти и может затруднить чтение кода.
Конвертируем массив в списокArrays.asList()
— это статический метод класса Arrays
, который позволяет конвертировать обычный массив в список List
.
— Принимает массив в качестве аргумента и возвращает объект типа List
с элементами этого массива.
— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.
— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как "представление" массива. Метод работает для массивов примитивных и ссылочных типов.Arrays.asList
хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.
#это_база
👩💻 Пройди тест по Java
Spring от А до Я: как быстро доставлять продукт в продакшн и радовать пользователей? 👩💻
Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.
👉 ПРОЙТИ ТЕСТ: https://otus.pw/YZF3/
🎫 Начни обучение со скидкой, подробности у менеджеров.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
#вопросы_с_собеседований
Реализуйте в Java собственную реализацию синглтона (singleton). Напишите код и объясните, как работает ваша реализация, а также какие проблемы могут возникнуть при использовании синглтона и как вы можете их решить.
Объяснение:
Синглтон — это паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Реализация синглтона должна предотвращать создание нескольких экземпляров и предоставлять способ доступа к единственному экземпляру.
— Приватный конструктор: Конструктор класса сделан приватным, чтобы избежать создания экземпляров снаружи класса.
— Статический метод getInstance
: Метод getInstance
является статическим, чтобы можно было вызывать его без создания экземпляра класса. Внутри метода используется ленивая инициализация, то есть экземпляр создается только при первом вызове метода getInstance
.
— Синхронизация: В рассмотренной реализации используется ключевое слово synchronized
для обеспечения потокобезопасности при первом создании экземпляра. Однако это может сказаться на производительности. Существуют и другие подходы к обеспечению потокобезопасности, такие как использование volatile
или двойной проверки.
Проблемы синглтона и их решения:
— Ленивая инициализация: В данной реализации используется ленивая инициализация, что может вызвать проблемы в многопоточной среде.
Решение: использование volatile
или двойной проверки на null
для обеспечения безопасной ленивой инициализации.
— Сериализация: При сериализации и десериализации синглтона могут возникнуть проблемы, поскольку каждая десериализация создаст новый объект.
Решение: переопределить методы readResolve
и writeReplace
для управления процессом сериализации и десериализации.
— Тестирование: Трудно провести тестирование, так как синглтон предоставляет глобальную точку доступа.
Решение: использование dependency injection (внедрение зависимостей) для более гибкого тестирования.
Garbage Collection и JVM
JVM работает как хорошо отлаженный механизм, автоматически распределяя и освобождая память. Это и есть суть Garbage Collection. Это процесс, который автоматически находит и удаляет объекты, которые больше не используются вашим приложением. Благодаря этому, разработчики могут сосредоточиться на логике приложения, не беспокоясь о ручном управлении памятью.
Смотреть статью
➡️ Использование библиотеки JDBI3 для работы с базами данных
JDBI3 — это легковесная библиотека для удобного взаимодействия с базами данных. Она позволяет выполнять SQL-запросы и маппить результаты прямо на объекты Java.•
JDBI3 упрощает работу с базами данных благодаря поддержке fluent-интерфейса.
🔗 Ссылочка на доку
Приглашаем вас на открытый вебинар: «Реализация простого HTTP-сервера на Java Core»
⏰Дата: 16 января в 20:00 мск
Спикер: Александр Фисунов
🧩Программа урока:
- Введение в HTTP и его роль в веб-приложениях.
- Создание простого HTTP-сервера с использованием Java Core.
- Разбор ключевых компонентов стандартной Java библиотеки для работы с HTTP.
📚Урок будет полезен тем, кто хочет:
- Узнать, как работают Java веб-приложения изнутри.
- Разобраться в принципах работы HTTP-протокола.
- Получить практический опыт в реализации базового HTTP-сервера.
🔥В результате урока вы:
- Узнаете, как использовать базовые возможности Java для создания HTTP-сервера.
- Поймете, как работают application server'ы и контейнеры сервлетов.
- Сможете применить полученные знания для работы с Java веб-приложениями.
Участники всех открытых уроков получат скидку🎁 на большое обучение
👉Регистрируйтесь на открытый вебинар по ссылке: https://otus.pw/Ir1w/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📢Собеседование по Spring? Будьте на шаг впереди интервьюера!
Узнайте, как отвечать на самые хитрые вопросы по Spring Framework — от базовых до неожиданных. Всё, что нужно, чтобы уверенно пройти интервью.
📚Прокачайте свои знания, научитесь формулировать ответы, разберите типичные и нетипичные вопросы вместе с экспертом.
Регистрируйтесь на открытый вебинар 15 января в 20:00 мск! Участники получат скидку на большое обучение «Разработчик на Spring Framework».
🗓Регистрация открыта: https://otus.pw/ZK2H/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ Использование паттерна "Цепочка обязанностей" (Chain of Responsibility) для обработки запросов
Паттерн "Цепочка обязанностей" позволяет передавать запросы по цепочке обработчиков, где каждый обработчик решает, обработать запрос или передать его дальше по цепочке.
Это делает код более гибким и расширяемым, так как добавлять новые обработчики можно без изменения существующего кода.•
Паттерн помогает избежать жесткой привязки между отправителем и получателем запроса.•
Полезен для создания гибкой системы обработки событий или запросов.
➡️ Использование библиотеки Micronaut AOT для оптимизации приложений
Micronaut AOT — это библиотека для автоматической оптимизации приложений. Она улучшает производительность приложений за счет генерации кода на этапе компиляции, снижая время запуска и объем использования памяти.•
Оптимизирует запуск приложений.•
Поддерживает интеграцию с нативными образами.
🔗 Ссылочка на доку
➡️ Использование библиотеки Fastutil для оптимизации работы с коллекциями в Java
Fastutil — это библиотека, предоставляющая эффективные реализации коллекций для примитивных типов данных в Java. Она позволяет существенно сократить использование памяти и улучшить производительность по сравнению со стандартными коллекциями.•
Fastutil поддерживает списки, множества, карты и другие структуры для примитивов.•
Повышает эффективность работы с большими объемами данных.
🔗 Ссылочка на доку
В 2025 не трать время на бесполезные и неактуальные навыки ❌
Получить заветный оффер сможет только тот, кто владеет самыми востребованными инструментами и быстро адаптируется к требованиям рынка. Собрали для вас 10 мануалов, которые действительно прокачают ваши скиллы:
– Пошаговая road map по Java
– Redis - 5 улучшений для твоего пет-проекта
– Пошаговая RoadMap по Java
– Мануал по Docker. Основные команды и концепции
– Микросервисы. Вопросы с собеседований
– Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз
– Шпаргалка по Kafka
– Инструкция по работе с Git
– Подробный гайд, как найти работу в IT без опыта
– Подборка платформ с вакансиями для java-разработчиков
Ребята из FAANG School собрали бесплатную библиотеку Java Junior с материалами, которые помогут освоить сложные темы, упростить и ускорить работу, а также получить приглашение от IT-гигантов.
Свежее пополнение - то, без чего не обойтись ни одному джуну - шпаргалка по основным командам SQL!
Доступ открыт всего на сутки - успевай
System.arraycopySystem.arraycopy
используется для копирования элементов из одного массива в другой. Этот метод предоставляет эффективный способ копирования данных между массивами. Синтаксис System.arraycopy
:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Параметры метода включают:src
: Исходный массив, из которого вы хотите скопировать элементы.srcPos
: Начальная позиция в исходном массиве, с которой начнется копирование.dest
: Целевой массив, в который вы хотите скопировать элементы.destPos
: Начальная позиция в целевом массиве, куда будут скопированы элементы.length
: Количество элементов, которое вы хотите скопировать.
#для_продвинутых
Apache Commons CLI
Apache Commons CLI (Commons Command Line Interface) — это библиотека для обработки аргументов командной строки в Java. Она предоставляет удобный способ определения и обработки аргументов командной строки для ваших Java-приложений. Библиотека Apache Commons CLI упрощает работу с аргументами командной строки, включая разбор аргументов, создание справки и обработку различных опций командной строки.
#для_продвинутых
Аргументы командной строки
Аргументы командной строки передается методу main в виде массива строк (String[] args). Когда вы запускаете программу Java из командной строки, вы можете передать дополнительные параметры после имени класса. Эти параметры будут доступны в виде элементов массива args.
#для_продвинутых
Micronaut
Micronaut — это современный фреймворк для создания микросервисных приложений на языке Java, Kotlin и Groovy. Он разрабатывался с учетом требований эффективности, производительности и легковесности.
— Легковесность: Micronaut предлагает низкоресурсное потребление благодаря тому, что многие операции выполняются во время компиляции, а не во время выполнения. Это позволяет создавать быстрые и эффективные приложения.
— Инъекция зависимостей во время компиляции: В отличие от многих других фреймворков, которые используют внедрение зависимостей во время выполнения, Micronaut выполняет внедрение зависимостей во время компиляции, что повышает производительность.
— Встроенная поддержка для микросервисной архитектуры: Micronaut предоставляет инструменты и функциональность для создания микросервисов, включая обработку HTTP-запросов, масштабирование и управление конфигурацией.
— Поддержка различных протоколов: Micronaut поддерживает различные протоколы взаимодействия, такие как HTTP, WebSocket, gRPC, RMI и многие другие.
— Встроенная поддержка тестирования: Фреймворк обеспечивает инструменты для написания и запуска тестов, что упрощает разработку надежных приложений.
Для подробной информации о Micronaut и примеров использования рекомендуется обратиться к официальной документации Micronaut.
#для_продвинутых
Вложенные классы
Вложенные классы (nested classes) представляют собой классы, объявленные внутри других классов. Вложенные классы могут быть статическими или нестатическими, и они могут использоваться для логической организации кода, повышения инкапсуляции и улучшения читаемости.
Статические вложенные классы (Static Nested Classes):
— Статический вложенный класс объявляется с использованием ключевого слова static.
— Он имеет доступ только к статическим членам внешнего класса и не имеет доступа к нестатическим членам.
— Статические вложенные классы используются, когда внутренний класс не зависит от экземпляра внешнего класса.
Внутренние классы (Inner Classes):
— Внутренние классы не объявляются с использованием ключевого слова static.
— Они имеют доступ ко всем членам внешнего класса, включая нестатические поля и методы.
— Внутренние классы могут быть обычными (обычные вложенные классы), анонимными или локальными.
#для_начинающих
RecursiveTask<V> RecursiveTask<V>
является частью фреймворка Fork/Join
в Java, введенного в Java 7. Этот фреймворк предоставляет удобный способ распараллеливания выполнения задач.RecursiveTask<V>
является подклассом ForkJoinTask<V>
. Он предназначен для использования вместе с пулом Fork/Join
(ForkJoinPool
) и предоставляет специальные методы для разделения задачи на подзадачи и объединения результатов.
#для_продвинутых
Приглашаем вас на открытый вебинар: «Основы многопоточности в Java»
⏰Дата: 25 декабря в 20:00 мск
Спикер: Борис Кириллов
📚Программа урока:
- Введение в многопоточность: что это и зачем это нужно.
- Изучение базовых классов для работы с потоками.
- Разбор типовых проблем многопоточности и подходов к их решению.
🔥Урок будет полезен тем, кто хочет:
- Разобраться в основах многопоточности в Java.
- Понять, как писать многопоточные программы.
- Узнать, какие классы используются для работы с потоками в Java.
🚀В результате урока вы:
- Поймете подходы к многопоточности в Java.
- Изучите базовые классы и синтаксис многопоточной обработки.
- Сможете применять полученные знания для создания более эффективных Java-приложений.
Участники всех открытых уроков получат скидку🎁 на большое обучение
👉Регистрируйтесь на открытый вебинар по ссылке: https://otus.pw/KDb4/Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Хватит разворачивать приложения наугад! Docker — must-have инструмент для современных Java-разработчиков.
🔍 На открытом уроке разберем, как контейнеризация упрощает разработку и развертывание приложений. Узнаете всё: от создания Docker-контейнеров до профилирования.
👉 Запускайте Java-приложения в облаке, тестируйте их под нагрузкой, отлаживайте с точностью хирурга. Начните путь к новой профессиональной высоте!
🗓 Запишитесь на урок «Контейнеризация Java-приложений с Docker» 27 декабря в 20:00 уже сейчас! Участникам — скидки на курс «Java Developer. Advanced»: https://otus.pw/X9YU/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru