Библиотека джависта | 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
加入频道
🐬 ТОП-10 самых часто используемых запросов MySQL

Из этой статьи вы узнаете о 10 наиболее часто используемых запросах в MySQL, которыми пользуются новички и эксперты в области управления базами данных.

🔗 Основной сайт
🔗 Зеркало
#вопросы_с_собеседований
Как исключить поля из сериализации?

Для управления сериализацией при определении полей можно использовать ключевое слово transient, таким образом исключив поля из общего процесса сериализации.
🗺️ Кем стать в IT: 9 ролей специалистов в IT-проекте

Если вы решили войти в АйТи, но еще не определились с направлением, наша пояснительная бригада спешит на помощь – разбираем роли каждого участника в жизненном цикле ИТ-проекта.

🔗 Основной сайт
🔗 Зеркало
👩‍💻В Java 11 появился экспериментальный сборщик мусора ZGC (Z Garbage Collector), который стал доступен для использования в продакшене начиная с Java 15. 😃

Предложенное сегодня видео расскажет вам про принципы работы ZGC и способы уменьшения задержки.

Приятного просмотра!
Please open Telegram to view this post
VIEW IN TELEGRAM
#вопросы_с_собеседований
Stack считается «устаревшим». Чем его рекомендуют заменять? Почему?

Stack был добавлен в Java 1.0 как реализация стека LIFO (last-in-first-out) и является расширением коллекции Vector, хотя это несколько нарушает понятие стека (например, класс Vector предоставляет возможность обращаться к любому элементу по индексу). Является частично синхронизированной коллекцией (кроме метода добавления push()) с вытекающими отсюда последствиями в виде негативного воздействия на производительность. После добавления в Java 1.6 интерфейса Deque, рекомендуется использовать реализации именно этого интерфейса, например, ArrayDeque.
Проверка на нечетность

Можно ли использовать этот код с примера 1 на картинке для точного определения нечетного числа?

Надеюсь, вы заметили хитрость. Если мы решим таким образом проверить отрицательное нечетное число (например, -5), остаток от деления не будет равен единице, поэтому воспользуйтесь более точным методом (пример 2).

Он не только решает проблему отрицательных чисел, но и работает более производительно, чем предыдущий метод. Арифметические и логические операции выполняются намного быстрее, чем умножение и деление.
LinkedHashMap - что в нем от LinkedList, а что от HashMap?

Реализация LinkedHashMap отличается от HashMap поддержкой двухсвязанного списка, определяющего порядок итерации по элементам структуры данных. По умолчанию элементы списка упорядочены согласно их порядку добавления в LinkedHashMap (insertion-order). Однако порядок итерации можно изменить, установив параметр конструктора accessOrder в значение true. В этом случае доступ осуществляется по порядку последнего обращения к элементу (access-order). Это означает, что при вызове методов get() или put() элемент, к которому обращаемся, перемещается в конец списка.

При добавлении элемента, который уже присутствует в LinkedHashMap (т.е. с одинаковым ключом), порядок итерации по элементам не изменяется.
#вопросы_с_собеседований
Как получить доступ к переопределенным методам родительского класса?

С помощью ключевого слова super мы можем обратиться к любому члену родительского класса - методу или полю, если они не определены с модификатором private.
#вопросы_с_собеседований
Что такое double checked locking Singleton?

double checked locking Singleton - это один из способов создания потокобезопасного класса, реализующего шаблон Одиночка. Данный метод пытается оптимизировать производительность, блокируясь только случае, когда экземпляр одиночки создаётся впервые.

Следует заметить, что требование volatile обязательно. Проблема Double Checked Lock заключается в модели памяти Java, точнее в порядке создания объектов, когда возможна ситуация, при которой другой поток может получить и начать использовать (на основании условия, что указатель не нулевой) не полностью сконструированный объект. Хотя эта проблема была частично решена в JDK 1.5, рекомендация использовать volatile для Double Cheсked Lock остаётся в силе.
Все о ключевых словах static и final

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

В таком случае можно воспользоваться ключевым словом static, то есть объявить членов класса статическими. В Java большинство членов служебного класса являются статическими. Вот несколько примеров.

• java.util.Objects содержит статические служебные операции для метода объекта.
• java.util.Collections состоит исключительно из статических методов, которые работают с коллекциями или возвращают их.

https://nuancesprog.ru/p/13968/
alibaba/fastjson

Библиотека для быстрого преобразования любых произвольных Java-объектов в JSON-представление и обратно. Поддерживает даже объекты со сложной структурой (глубокими иерархиями наследования и использованием универсальных типов).
FastJson улучшает производительность сервера и клиента и позволяет использовать для объектов любые пользовательские представления.

https://github.com/alibaba/fastjson
ReactiveX/RxJava

Библиотека RxJava, основанная на API ReactiveX. Она позволяет писать асинхронные событийно-управляемые программы для виртуальной Java машины, поддерживает последовательности событий и их комбинации. В основе работы лежит классический паттерн Наблюдатель, только вместо одного объекта используется целый поток данных.

C RxJava можно больше не беспокоиться о низкоуровневом распараллеливании, синхронизации, потокобезопасности и обработке ошибок.

https://github.com/ReactiveX/RxJava
👩‍💻 Списки Awesome на GitHub — это курируемые списки ресурсов и инструментов, относящихся к определенной теме или области. Они создаются и поддерживаются сообществом GitHub и часто служат всеобъемлющей и хорошо организованной коллекцией полезных ресурсов для разработчиков, специалистов по анализу данных, сисадминов и т. д. Списки Awesome охватывают широкий круг вопросов: от конкретных языков программирования и фреймворков до более широких тем, таких как машинное обучение, безопасность и QA. Они являются отличной отправной точкой для тех, кто хочет узнать больше о конкретной теме или найти лучшие инструменты и ресурсы для своей работы.

👩‍💻 JavaScript: awesome-javascript
👩‍💻 React: awesome-react
👩‍💻 Vue: awesome-vue
👩‍💻 Angular: awesome-angular
👩‍💻 Node.js: awesome-nodejs
👩‍💻 Typescript: awesome-typescript
👩‍💻 Java: awesome-java
👩‍💻 Go: awesome-go
👩‍💻 Ruby: awesome-ruby
👩‍💻 PHP: awesome-php
👩‍💻 Kotlin: awesome-kotlin
👩‍💻 Rust: awesome-rust
👩‍💻 Swift: awesome-swift
🍎 iOS-разработка: awesome-ios
👩‍💻 Android-разработка: awesome-android
👩‍💻 C: awesome-c
👩‍💻 C++: awesome-cpp
👩‍💻 C#: awesome-dotnet
👩‍💻 Unreal Engine: awesome-unreal
👩‍💻 Unity: awesome-unity3d
👩‍💻 Python: awesome-python
👩‍💻 Django: awesome-django
🔬Data Science: awesome-datascience
👩‍💻 TensorFlow: awesome-tensorflow
👩‍💻 Linux: Awesome-Linux-Software
👩‍💻 DevOps: awesome-devops
👩‍💻 SysAdmins: awesome-sysadmin
👩‍💻 Nginx: awesome-nginx
👩‍💻 Kubernetes: awesome-kubernetes
🐋 Docker: awesome-docker
👩‍💻 AWS: awesome-aws
👩‍💻 Google cloud: awesome-google-cloud
🕵️ Информационная безопасность: awesome-security
🧪 QA: awesome-testing
👩‍💻 Базы данных: awesome-database-learning

#избранное

Какие списки awesome достойны упоминания? Расскажите в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем привет 👋

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

Поделитесь, пожалуйста, ссылками и ресурсами — что вы сейчас смотрите, читаете, слушаете из профессиональных ресурсов? Это займёт меньше минуты.

👉 Опрос тут

Спасибо за уделенное время 🙏
#вопросы_с_собеседований
Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода?

HashMap реализован с использованием метода цепочек, т.е. каждой ячейке массива (корзине) соответствует свой связный список и при возникновении коллизии осуществляется добавление нового элемента в этот список.

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

Среди методов открытой реализации различают:
• линейное пробирование;
• квадратичное пробирование;
• двойное хэширование.

Недостатки структур с методом открытой адресации:
• Количество элементов в хэш-таблице не может превышать размера массива. По мере увеличения числа элементов и повышения коэффициента заполнения производительность структуры резко падает, поэтому необходимо проводить перехэширование.
• Сложно организовать удаление элемента.
• Первые два метода открытой адресации приводят к проблеме первичной и вторичной группировок.

Преимущества хэш-таблицы с открытой адресацией:
• отсутствие затрат на создание и хранение объектов списка;
• простота организации сериализации/десериализации
👩‍💻 Java. Dithering. Алгоритм генерации черно-белых изображений.

В этом видео автор рассказывает о генерации изображений, которые состоят только из двух цветов - черного и белого. Разбирает соответствующий алгоритм на языке программирования Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
Не самые очевидные советы по написанию DTO на Java

Сегодня приложения зачастую имеют распределенный характер. Для подключения к другим сервисам нужно писать больше кода — и при этом стараться сделать его простым.

Чтобы воспользоваться данными из внешней службы, мы обычно преобразуем полезную нагрузку JSON в объект передачи данных (Data Transfer Object, DTO). Код, обрабатывающий DTO, быстро усложняется, но с этим могут помочь несколько советов. Вполне возможно писать DTO, с которыми легче взаимодействовать и которые облегчают написание и чтение кода. Если объединить их вместе — можно упростить себе работу.

Читать статью
#вопросы_с_собеседований
Что такое «блокирующий метод»?

Блокирующий метод – метод, который блокируется, до тех пор, пока задание не выполнится, например метод accept() у ServerSocket блокируется в ожидании подключения клиента. Здесь блокирование означает, что контроль не вернётся к вызывающему методу до тех пор, пока не выполнится задание. Так же существуют асинхронные или неблокирующиеся методы, которые могут завершится до выполнения задачи.