Вложенные классы
Вложенные классы (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 попросту не найти. Но насколько он хорош? Сможет ли он, к примеру, сравниться просто с нативными вызовами?
Читать статью
Очередной #дайджест по Java:
☕ Модельно-Ориентированная Java, или Навстречу Дизайну ПО
Модельно-ориентированный метод (MDE) широко применяется во многих сферах современной инженерии; в программировании он позволяет разделить деятельность, направленную на создание универсального описания продукта, от деятельности по написанию кода, который бы эту модель воплощал в реальность.
☕ Методы по умолчанию для Java-интерфейсов
В приложении, где интерфейс имеет одну или несколько реализаций, если мы добавим метод к интерфейсу, все его реализации будут вынуждены реализовать его.
☕ «Я определенно не потратил 3 часа на этот вопрос..😢 #BinaryTreeAdventures» Решение двоичного дерева, вид справа
Решение сложной задачи с литкода.
☕ Распространенные ошибки младших Java-разработчиков при работе с Hibernate
Hibernate — это мощная платформа объектно-реляционного сопоставления (ORM) для Java, которая упрощает взаимодействие с базой данных.
☕ Модельно-Ориентированная Java, или Навстречу Дизайну ПО
Модельно-ориентированный метод (MDE) широко применяется во многих сферах современной инженерии; в программировании он позволяет разделить деятельность, направленную на создание универсального описания продукта, от деятельности по написанию кода, который бы эту модель воплощал в реальность.
☕ Методы по умолчанию для Java-интерфейсов
В приложении, где интерфейс имеет одну или несколько реализаций, если мы добавим метод к интерфейсу, все его реализации будут вынуждены реализовать его.
☕ «Я определенно не потратил 3 часа на этот вопрос..😢 #BinaryTreeAdventures» Решение двоичного дерева, вид справа
Решение сложной задачи с литкода.
☕ Распространенные ошибки младших Java-разработчиков при работе с Hibernate
Hibernate — это мощная платформа объектно-реляционного сопоставления (ORM) для Java, которая упрощает взаимодействие с базой данных.
Какой фреймворк для работы изучали последний раз?
#интерактив
#интерактив
Пост для Java-разработчиков, которые ищут работу или собираются увольняться с текущего места.
👉 Подписывайтесь на наш канал — в нем каждый день выходят лучшие вакансии на рынке с нормальными зарплатными вилками и хорошими условиями.
Публикуем предложения для джунов, мидлов и сеньоров, на удаленке и в офисах — оффер мечты точно найдется 👨💻
🔸Подписаться🔸
👉 Подписывайтесь на наш канал — в нем каждый день выходят лучшие вакансии на рынке с нормальными зарплатными вилками и хорошими условиями.
Публикуем предложения для джунов, мидлов и сеньоров, на удаленке и в офисах — оффер мечты точно найдется 👨💻
🔸Подписаться🔸
Интерфейс Comparable
Интерфейс Comparable используется для поддержки сортировки элементов коллекции.
Он содержит единственный метод compareTo, который сравнивает текущий объект с переданным объектом. Метод возвращает значение меньше нуля, если текущий объект меньше переданного, больше нуля если текущий объект больше, и ноль если объекты равны.
Чтобы ваш класс стал сравниваемым, он должен реализовывать интерфейс Comparable и переопределить метод compareTo.
Реализация Comparable позволяет сортировать экземпляры класса с помощью методов Collections.sort и Arrays.sort. Также она используется в TreeSet и TreeMap для корректного упорядочивания элементов.
В примере реализован метод compareTo, который сравнивает средний балл текущего и переданного студента.
После создания списка студентов мы отсортировали его методом Collections.sort. Благодаря Comparable студенты расположились в порядке возрастания среднего балла.
#код
Интерфейс Comparable используется для поддержки сортировки элементов коллекции.
Он содержит единственный метод compareTo, который сравнивает текущий объект с переданным объектом. Метод возвращает значение меньше нуля, если текущий объект меньше переданного, больше нуля если текущий объект больше, и ноль если объекты равны.
Чтобы ваш класс стал сравниваемым, он должен реализовывать интерфейс Comparable и переопределить метод compareTo.
Реализация Comparable позволяет сортировать экземпляры класса с помощью методов Collections.sort и Arrays.sort. Также она используется в TreeSet и TreeMap для корректного упорядочивания элементов.
В примере реализован метод compareTo, который сравнивает средний балл текущего и переданного студента.
После создания списка студентов мы отсортировали его методом Collections.sort. Благодаря Comparable студенты расположились в порядке возрастания среднего балла.
#код