В чем разница между Iterator и Enumeration?
— Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.
— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.
— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.
— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
#вопросы_с_собеседований
— Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.
— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.
— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.
— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
#вопросы_с_собеседований
Double.compare()
Метод Double.compare() используется для сравнения двух значений типа double.
Он принимает два значения double и возвращает:
— отрицательное число, если первое значение меньше второго.
— ноль, если значения равны.
— положительное число, если первое значение больше второго.
В этом примере мы передаем Double.compare() как компаратор в метод sort() из класса Arrays.
Это позволяет корректно отсортировать массив с плавающей точкой по возрастанию.
#код
Метод Double.compare() используется для сравнения двух значений типа double.
Он принимает два значения double и возвращает:
— отрицательное число, если первое значение меньше второго.
— ноль, если значения равны.
— положительное число, если первое значение больше второго.
В этом примере мы передаем Double.compare() как компаратор в метод sort() из класса Arrays.
Это позволяет корректно отсортировать массив с плавающей точкой по возрастанию.
#код
Перестаём бояться генерировать байт-код
Многие, возможно, думают, что работа с байт-кодом Java (будь то чтение или, тем более, генерация) — это какая-то особенная магия, доступная только продвинутым разработчикам с особенно крутым опытом. Но JVM устроена гораздо проще, чем CPU; она оперирует такими высокоуровневыми понятиями как классы, интерфейсы, методы, а не просто лопатит байты в памяти.
Читать статью
Многие, возможно, думают, что работа с байт-кодом Java (будь то чтение или, тем более, генерация) — это какая-то особенная магия, доступная только продвинутым разработчикам с особенно крутым опытом. Но JVM устроена гораздо проще, чем CPU; она оперирует такими высокоуровневыми понятиями как классы, интерфейсы, методы, а не просто лопатит байты в памяти.
Читать статью
Вложенные классы
Вложенные классы (nested classes) — это классы, определенные внутри другого класса. В Java есть два типа вложенных классов:
— Статические вложенные классы (static nested classes) — объявляются с модификатором static. Представляют собой обычные статические члены внешнего класса.
— Внутренние классы (inner classes) — объявляются без модификатора static. Связаны с экземпляром внешнего класса и имеют доступ к его членам.
Вложенные классы удобны для логической группировки классов и обеспечения инкапсуляции.
Как видно из примера, статический вложенный класс создается так же, как и обычный статический класс. А для создания экземпляра внутреннего класса сначала нужно создать экземпляр внешнего класса.
#код
Вложенные классы (nested classes) — это классы, определенные внутри другого класса. В Java есть два типа вложенных классов:
— Статические вложенные классы (static nested classes) — объявляются с модификатором static. Представляют собой обычные статические члены внешнего класса.
— Внутренние классы (inner classes) — объявляются без модификатора static. Связаны с экземпляром внешнего класса и имеют доступ к его членам.
Вложенные классы удобны для логической группировки классов и обеспечения инкапсуляции.
Как видно из примера, статический вложенный класс создается так же, как и обычный статический класс. А для создания экземпляра внутреннего класса сначала нужно создать экземпляр внешнего класса.
#код
Очередной #дайджест по Java:
☕ FizzBuzz и искусство фильтрации: Stream API и предикаты
Проблема FizzBuzz — это классическая задача, которая часто встречается на собеседованиях для программистов.
☕ Используем Neovim в качестве IDE для Java
Если вдруг захотите попробовать что-то кроме IntelliJ.
☕Пишем plugin для IDEA, используя External System API, на примере простой build системы
Статья о технических деталях реализации плагина.
☕ Создание и тестирование процессоров аннотаций (с кодогенерацией) для Kotlin
В разработке с использованием Kotlin (или Java) для создания классов по верхнеуровневому описанию часто используется маркировка аннотациями (например, для моделей таблиц баз данных, сетевых запросов или инъекции зависимостей) и подключение процессоров аннотаций, которые также могут генерировать код, доступный из основного проекта.
☕ FizzBuzz и искусство фильтрации: Stream API и предикаты
Проблема FizzBuzz — это классическая задача, которая часто встречается на собеседованиях для программистов.
☕ Используем Neovim в качестве IDE для Java
Если вдруг захотите попробовать что-то кроме IntelliJ.
☕Пишем plugin для IDEA, используя External System API, на примере простой build системы
Статья о технических деталях реализации плагина.
☕ Создание и тестирование процессоров аннотаций (с кодогенерацией) для Kotlin
В разработке с использованием Kotlin (или Java) для создания классов по верхнеуровневому описанию часто используется маркировка аннотациями (например, для моделей таблиц баз данных, сетевых запросов или инъекции зависимостей) и подключение процессоров аннотаций, которые также могут генерировать код, доступный из основного проекта.
Сколько лет опыта по вашему должен иметь мидл?
#интерактив
#интерактив
Класс FileReader
FileReader — это класс, который позволяет считывать символьные данные из файла. Читает файл посимвольно в виде кодов UTF-16, а для работы принимает объект File или путь к файлу в конструктор.
Использует потоковый доступ для чтения данных.
Должен использоваться в try-with-resources блоке, чтобы корректно закрывать поток. Часто используется совместно с BufferedReader для удобства чтения по строкам.
Здесь мы открываем поток FileReader для чтения файла data.txt.
В цикле посимвольно считываем данные методом read() пока не достигнут конец файла.
#код
FileReader — это класс, который позволяет считывать символьные данные из файла. Читает файл посимвольно в виде кодов UTF-16, а для работы принимает объект File или путь к файлу в конструктор.
Использует потоковый доступ для чтения данных.
Должен использоваться в try-with-resources блоке, чтобы корректно закрывать поток. Часто используется совместно с BufferedReader для удобства чтения по строкам.
Здесь мы открываем поток FileReader для чтения файла data.txt.
В цикле посимвольно считываем данные методом read() пока не достигнут конец файла.
#код
Имеет ли смысл объявлять метод private final?
Объявление метода с модификаторами private и final имеет смысл, когда вы хотите:
— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.
#вопросы_с_собеседований
Объявление метода с модификаторами private и final имеет смысл, когда вы хотите:
— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.
#вопросы_с_собеседований
Casting
Casting используется для преобразования переменной одного типа данных в другой. Существуют два типа преобразования: расширяющее (Widening Casting) и сужающее
(Narrowing Casting).
Расширяющее преобразование (Widening Casting): Процесс преобразования данных меньшего типа в больший тип называется расширяющим преобразованием. Это преобразование выполняется автоматически. (изображение 1)
Сужающее преобразование (Narrowing Casting): Преобразование данных большего типа в меньший тип называется сужающим преобразованием. Это преобразование должно выполняться вручную. (изображение 2)
Casting используется для преобразования переменной одного типа данных в другой. Существуют два типа преобразования: расширяющее (Widening Casting) и сужающее
(Narrowing Casting).
Расширяющее преобразование (Widening Casting): Процесс преобразования данных меньшего типа в больший тип называется расширяющим преобразованием. Это преобразование выполняется автоматически. (изображение 1)
Сужающее преобразование (Narrowing Casting): Преобразование данных большего типа в меньший тип называется сужающим преобразованием. Это преобразование должно выполняться вручную. (изображение 2)
Разница между Data Race и Race Condition
В статье рассматривается разница между популярными ошибками при работе с многопоточностью, такими как Data Race и Race Condition, а также способами борьбы с ними.
Читать статью
В статье рассматривается разница между популярными ошибками при работе с многопоточностью, такими как Data Race и Race Condition, а также способами борьбы с ними.
Читать статью
Сколько лет опыта по вашему должен иметь синьор?
#интерактив
#интерактив
NavigableSet
NavigableSet — это интерфейс, который расширяет интерфейс SortedSet и добавляет навигационные методы для поиска элементов в отсортированном множестве.
NavigableSet поддерживает следующие дополнительные операции:
— Поиск ближайшего элемента к заданному.
— Поиск элементов в заданном диапазоне.
— Получение подмножества элементов сначала или конца набора.
Основное применение NavigableSet — это реализация структур данных, где важен упорядоченный доступ к элементам, таких как:
— Деревья (Red-Black, AVL и др.).
— Приоритетные очереди.
— Сортированные словари.
Основные реализации в Java — TreeSet и ConcurrentSkipListSet.
#код
NavigableSet — это интерфейс, который расширяет интерфейс SortedSet и добавляет навигационные методы для поиска элементов в отсортированном множестве.
NavigableSet поддерживает следующие дополнительные операции:
— Поиск ближайшего элемента к заданному.
— Поиск элементов в заданном диапазоне.
— Получение подмножества элементов сначала или конца набора.
Основное применение NavigableSet — это реализация структур данных, где важен упорядоченный доступ к элементам, таких как:
— Деревья (Red-Black, AVL и др.).
— Приоритетные очереди.
— Сортированные словари.
Основные реализации в Java — TreeSet и ConcurrentSkipListSet.
#код
Очередной #дайджест по Java:
☕ Как внедрить Prototype в Singleton в Spring с помощью параметра ProxyMode
Если просто добавить к определению бина аннотацию @Scope(SCOPE_PROTOTYPE) и использовать этот бин в синглтоне через аннотацию @Autowired – будет создан только один объект.
☕ Делаем свою простейшую систему сборки для Java
Как работает компиляция и как устроен Gradle.
☕ Микросмартфон за 100 рублей: Покупаем смартфон 11-летней давности и… пишем под него приложения
Уже тогда мобильные приложения писали на Java.
☕ Ad-hoc мониторинг: сбор, хранение и визуализация данных
Делаем гибридную систему мониторинга.
☕ Как внедрить Prototype в Singleton в Spring с помощью параметра ProxyMode
Если просто добавить к определению бина аннотацию @Scope(SCOPE_PROTOTYPE) и использовать этот бин в синглтоне через аннотацию @Autowired – будет создан только один объект.
☕ Делаем свою простейшую систему сборки для Java
Как работает компиляция и как устроен Gradle.
☕ Микросмартфон за 100 рублей: Покупаем смартфон 11-летней давности и… пишем под него приложения
Уже тогда мобильные приложения писали на Java.
☕ Ad-hoc мониторинг: сбор, хранение и визуализация данных
Делаем гибридную систему мониторинга.
BeanFactory
BeanFactory — это интерфейс, который предоставляет механизм для управления объектами bean в контейнере Inversion of Control (IoC).
BeanFactory является основой фреймворка Spring, где используется для создания приложений по принципу IoC и Dependency Injection. Он позволяет создавать гибкие, легко тестируемые приложения с инверсией управления и внедрением зависимостей.
#код
BeanFactory — это интерфейс, который предоставляет механизм для управления объектами bean в контейнере Inversion of Control (IoC).
BeanFactory является основой фреймворка Spring, где используется для создания приложений по принципу IoC и Dependency Injection. Он позволяет создавать гибкие, легко тестируемые приложения с инверсией управления и внедрением зависимостей.
#код
Создаем нативное Kotlin приложение на Spring Boot Native, Gradle и GraalVM без докера под MacOS и Windows
В этой статье автор рассказывает о практическом опыте нативной компиляции production приложения, написанного на Kotlin со Spring Boot, Gradle с использованием GraalVM.
Читать статью
В этой статье автор рассказывает о практическом опыте нативной компиляции production приложения, написанного на Kotlin со Spring Boot, Gradle с использованием GraalVM.
Читать статью
☕🛣️ Дорожная карта Java-разработчика в 2023 году
В данной статье мы расскажем, в каком порядке изучать Java, чтобы начать свой путь в разработке и стать востребованным специалистом в 2023 году.
Читать статью
В данной статье мы расскажем, в каком порядке изучать Java, чтобы начать свой путь в разработке и стать востребованным специалистом в 2023 году.
Читать статью
Что такое сериализация?
Сериализация — это процесс преобразования объекта в поток байтов для сохранения состояния объекта в файле или передачи по сети. Она выполняется потоками ObjectOutputStream и ObjectInputStream.
Сериализованный объект сохраняется в универсальном бинарном формате, независимом от платформы.
Сериализация позволяет сохранить состояние объекта между запусками программы и передавать объект через сеть.
Для сериализации класс должен имплементировать интерфейс Serializable. А если добавить полям класса модификатор transient, то такие поля не будут сериализованы.
#вопросы_с_собеседований
Сериализация — это процесс преобразования объекта в поток байтов для сохранения состояния объекта в файле или передачи по сети. Она выполняется потоками ObjectOutputStream и ObjectInputStream.
Сериализованный объект сохраняется в универсальном бинарном формате, независимом от платформы.
Сериализация позволяет сохранить состояние объекта между запусками программы и передавать объект через сеть.
Для сериализации класс должен имплементировать интерфейс Serializable. А если добавить полям класса модификатор transient, то такие поля не будут сериализованы.
#вопросы_с_собеседований
ForkJoinPool
Это класс, введенный в JDK 7, который представляет собой специализированный пул потоков, предназначенный для параллельного выполнения рекурсивных задач.
ForkJoinPool автоматически управляет созданием и использованием потоков для выполнения подзадач и обеспечивает эффективное распределение работы между ними.
Принцип работы основан на делении большой задачи на более мелкие подзадачи и их последующем объединении для получения результата. Каждая подзадача может быть выполнена независимо друг от друга, что позволяет эффективно использовать доступные ресурсы процессора.
#код
Это класс, введенный в JDK 7, который представляет собой специализированный пул потоков, предназначенный для параллельного выполнения рекурсивных задач.
ForkJoinPool автоматически управляет созданием и использованием потоков для выполнения подзадач и обеспечивает эффективное распределение работы между ними.
Принцип работы основан на делении большой задачи на более мелкие подзадачи и их последующем объединении для получения результата. Каждая подзадача может быть выполнена независимо друг от друга, что позволяет эффективно использовать доступные ресурсы процессора.
#код
Protobuf vs Reflection
Вы когда-нибудь задумывались, насколько grpc быстрый? Если вы гоняете маленькие сообщения, которые надо быстро доставить, то лучше grpc попросту не найти. Но насколько он хорош? Сможет ли он, к примеру, сравниться просто с нативными вызовами?
Читать статью
Вы когда-нибудь задумывались, насколько grpc быстрый? Если вы гоняете маленькие сообщения, которые надо быстро доставить, то лучше grpc попросту не найти. Но насколько он хорош? Сможет ли он, к примеру, сравниться просто с нативными вызовами?
Читать статью