Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.87K photos
38 videos
42 files
2.65K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Конструктор по умолчанию

Конструктор по умолчанию предоставляется компилятором Java, если в классе не определен ни один другой конструктор. Конструктор по умолчанию инициализирует все поля класса значениями по умолчанию (например, 0 для числовых типов, false для типа boolean, null для ссылочных типов).

Если же в классе определен хотя бы один конструктор (с параметрами или без), компилятор не будет предоставлять конструктор по умолчанию, и его необходимо определить явно, если он нужен.

В этом примере мы определяем класс MyClass с двумя полями: x и y, а также определяем конструктор по умолчанию, который выводит сообщение при вызове. В методе main создаем экземпляр класса MyClass, используя конструктор по умолчанию, и выводим значения полей x и y, которые инициализированы значениями по умолчанию.
#код
Инкапсуляция

Инкапсуляция — это принцип ООП, который заключается в сокрытии внутреннего представления класса от внешнего мира. Для этого используются модификаторы доступа: private, protected, public.

Обычно поля класса делаются private или protected, а методы — public. Это позволяет скрыть реализацию класса и предоставить к ней контролируемый доступ через public методы.

При запуске этой программы на выходе мы получим:
John 0
#код
Могут ли нестатические методы перегрузить статические?

Да, нестатические методы могут перегружать статические. Причина в том, что статические и нестатические методы считаются независимыми сущностями.

Статические методы привязаны к классу, а нестатические — к объекту/экземпляру класса. Поэтому они имеют разную сигнатуру вызова.
Статический метод вызывается через имя класса, а нестатический — через объект класса.

Таким образом, в одном классе могут быть определены статический и нестатический методы с одинаковым именем и списком параметров.
#вопросы_с_собеседований
FileChannel

FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.

Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.

FileChannel эффективнее потокового ввода-вывода, т. к. избавляет от накладных расходов на создание объектов и буферизацию.
Используется в приложениях, где нужна высокая производительность работы с файлами.
#код
☁️🧩 ТОП-10 бессерверных фреймворков

Существует множество различных бессерверных фреймворков, каждый из которых предназначен для определенных задач. В этой статье рассмотрим 10 наиболее популярных из них.

Читать статью
Очередной #дайджест по Java:

✍️ Управление общей кодовой базой в микросервисной архитектуре
При большом количестве микросервисов в проекте приходится сталкиваться с тем, что в некоторых из них нужно дублировать один и тот же код, а обнаружив баг в одном месте, искать и исправлять его везде

✍️ C# делегаты изнутри. Можно ли расширить С++ стандарт для поддержки делегатов в стиле C#
Чисто техническая статья, рассматривается тема, которая заявлена в заголовке, плюс разные практические методы, которые в этом будут полезны.

✍️ Микросервисы на Java, Spring Boot и Cloud
Как построить микросервисное приложение с REST API, возвращающее список крутых автомобилей.

✍️ Не используйте в своем коде паттерн Singleton
Паттерн Singleton популярен среди новичков из-за простоты реализации и возможности глобальной обработки состояний. Но стоит ли его использовать?
Как часто вы ездите в офис? Сколько раз в неделю?
#интерактив
🤖 25 бесплатных AI-инструментов для разработчиков
ИИ-помощники способны заменить GitHub Copilot, проверить код и даже сделать UX/UI-дизайн. Мы сделали подборку.

🟣 Codeuim
Помогает писать код. Можно опробовать в браузере или установить в качестве расширения в популярные IDE. Поддерживает более 70 языков программирования.
🟣 Codiga
Проверит, проанализирует и отрефакторит ваш код.
🟣 GPT Pilot
Создатели инструмента утверждают, что он позволит ускорить процесс разработки в 20 раз. С помощью GPT Pilot можно пошагово разработать собственное приложение.
🟣 Open Interpreter
Альтернатива официальному плагину Code Interpreter от Open AI. Может управлять браузером Chrome для поиска в интернете.
🟣 GPT-Code-Clippy
А это опенсорсный аналог GitHub Copilot на базе GPT-3.

Ещё 20 инструментов можно найти здесь

О других классных новых инструментах мы писали тут
#дайджест
Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?

— Iterator предназначен только для итерации по коллекции, а не для модификации коллекции. Добавление элементов через итератор нарушило бы принцип единственной ответственности.

— Многие коллекции, например ArrayList, реализуются на основе массива. Добавление элемента в середину массива — дорогая операция, требующая создания нового массива и копирования всех элементов.

— Если позволить итератору изменять коллекцию, это может привести к непредсказуемому поведению и ошибкам, особенно при работе с многопоточностью.

— Collection уже предоставляет методы add() и remove() для модификации коллекции, поэтому нет необходимости дублировать эту функциональность в Iterator.
#вопросы_с_собеседований
👨‍💻 9 трендов в найме айтишников в 2023 году

Рассказываем, что интересного происходит в найме IT-специалистов.

По данным Хабр Карьеры, бэкендеры и фронтендеры испытывают трудности с поиском работы — спрос на них уменьшился на 4% и 15% соответственно.

Но сложнее всего сейчас мобильным разработчикам. А все потому, что рынок мобильной разработки рухнул на 24% по сравнению с показателями прошлого года. Но этот тренд в большей степени коснулся стажеров и джунов.

Читать статью
#вопросы_с_собеседования

Как не допустить сериализацию?

Чтобы не допустить автоматическую сериализацию можно переопределить private методы для создания исключительной ситуации NotSerializableException.

private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException();
}

private void readObject(ObjectInputStream in) throws IOException {
throw new NotSerializableException();
}
🧪 🛣️ Дорожная карта тестировщика в 2023 году

Расскажем, что и в какой последовательности нужно изучить, чтобы стать тестировщиком и найти первую работу.

А еще у нас есть статья про то, как составить свою собственную дорожную карту и что это такое — прочитать можно тут

Читать статью

#туториал
🤔 Очередной #дайджест по Java

🟢 Книга Security in Computing, 6th Edition — искусство компьютерной и информационной безопасности: от приложений и сетей до облаков и криптовалют

🟢 Вещественные числа с плавающей двоичной точкой в .NET и .NET Framework — коллекция ситуаций с этими числами, которые возникают на платформах .NET и .NET Framework в Windows на процессорах семейства x86

🟢 Подкаст c Тимуром Мухитдиновым — разговор о стартапе на Джаве и архитектуре в Букинге

🟢 Насколько быстра Java 21 — автор сравнивает производительность 21 версии по сравнению с 17

🟢 JVM Language Summit 2023 — доклад про виртуальные потоки, про историю, челленджи и про то как ими пользоваться
This media is not supported in your browser
VIEW IN TELEGRAM
#memes

Тот самый разработчик на удаленке в час дня, когда ему говорят, что пора бы работать уже
✍️🦾 Компилирование «железного» бинарника Java-программы Google Closure Stylesheets с GraalVM

Closure Stylesheets — это компилятор CSS, написанный Гугл на Java в рамках набора инструментов Closure Tools для веб-разработки, который в свое время обладал внушительными функциями такими как экспансия браузерных префиксов (например, для трансформации display: flex; в display: -webkit-flex; display: -ms-flexbox), переменными и др. Прошло уже более 10 лет с момента зачатия этого проекта, многие инновации уже укоренились, и в прошлом году его архивировали, т.к. все, включая сотрудников Гугл, используют мейнстрим утилиты типа SASS / autoprefixer.

В статье речь пойдет про то, как автор обновил свой форк с Java 1.8 на JDK 11 и использовал утилиту Oracle native-image из пакета GraalVM для того, чтобы собрать native binary, то есть бинарник с машинным кодом, который позволяет запускать программу вообще без Java. Он расскажет о том, какие проблемы встретил во время апгрейда, в том числе связанных с рефлексией, и сравнит скорость запуска / работы / потребления памяти стандартного JAR и собранного bin.

Читать статью

#гайд
Вебинар на тему: Конкурентность при работе с базами данных — обработка тысяч одновременных записей и обеспечение согласованности данных

Данное событие состоится 6 ноября и продлится несколько часов.

Будут рассмотрены потенциальные проблемы при работе со связкой java->database. Покажут выполнение тысячи апдейтов над одними и теми же строками и наиболее распространенные подходы, для достижения согласованности и производительности.

Регистрация тут
📚✏️ Категоризированный список всех функций Java и JVM начиная с JDK 8 по 21

С момента выпуска версии 8 и вплоть до версии 21 Java формировалась с помощью 232 JDK Enhancement Proposals (JEPs) и множества других небольших обновлений, каждое из которых привносит некоторые улучшения в платформу.

Полный список JEP можно найти на веб-сайте OpenJDK в рамках проектов jdk и jdk9.

Новые языковые возможности

🔹 Pattern Matching для switch type и guarded patterns

String formatted = switch (o) {
case Integer i when i > 10 -> String.format(«a large Integer %d», i);
case Integer i -> String.format(«a small Integer %d», i);
case Long l -> String.format(«a Long %d», l);
default -> o.toString();
};


🔹 Record Patterns для switch и instanceof для деконструкции сложных вложенных структур

if (r instanceof ColoredPoint(Point2D(int x, int y), Color c)) {
// work with x, y, and c
}


🔹 Безымянные переменные

var _ = mySet.add(x); // ignore the return value

try {
// ...
} catch (Exception _) { // ignore the exception object
// ...
}

list.stream()
.map((_) -> /* ... */) // ignore the parameter
.toList();


В статье вас ждет больше примеров нововведений

#гайд
Книги The Garbage Collection Handbook: The Art of Automatic Memory Management

В книге рассматриваются новые проблемы сборки мусора, возникшие в результате последних достижений в области аппаратного и программного обеспечения. Исследуются последствия этих изменений для разработчиков и реализаторов высокопроизводительных сборщиков мусора. Наряду с простыми и традиционными алгоритмами в книге рассматриваются современные параллельные, инкрементные, сборки мусора в реальном времени. Алгоритмы и концепции часто описываются с помощью псевдокода и иллюстраций.

На нашем книжном канале вы можете найти уйму литературы, которая поможет решить любую встретившуюся задачу.
Отложенная инициализация

Отложенная инициализация — это паттерн проектирования, который позволяет отложить создание объекта до момента его реального использования. Он полезен, когда создание объекта требует значительных ресурсов или происходит в условиях, когда объект может не понадобиться.

В Java есть несколько способов реализации отложенной инициализации. Два наиболее распространенных подхода — это использование двойной проверки и использование внутреннего класса. На картинке мы рассмотрели использование двойной проверки (Double-Checked Locking).