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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
#вопросы_с_собеседований
Что такое 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 блокируется в ожидании подключения клиента. Здесь блокирование означает, что контроль не вернётся к вызывающему методу до тех пор, пока не выполнится задание. Так же существуют асинхронные или неблокирующиеся методы, которые могут завершится до выполнения задачи.
#вопросы_с_собеседований
Какие типы ключевых слов используются в обработке исключений Java?

☕️ try
☕️catch
☕️finally
☕️throw
☕️throws
Метод isEmpty()

isEmpty() – проверяет список на наличие элементов. Если список пустой, то возвращает true, в противном случае – false.
#вопросы_с_собеседований
Как работает HashMap при попытке сохранить в него два элемента по ключам с одинаковым hashCode(), но для которых equals() == false?

По значению hashCode() вычисляется индекс ячейки массива, в список которой этот элемент будет добавлен. Перед добавлением осуществляется проверка на наличие элементов в этой ячейке. Если элементы с таким hashCode() уже присутствует, но их equals() методы не равны, то элемент будет добавлен в конец списка.
Может ли объект получить доступ к члену класса, объявленному как private? Если да, то каким образом?

☕️ Внутри класса доступ к приватной переменной открыт без ограничений;
☕️ Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
☕️ Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
☕️ Через механизм рефлексии (Reflection API) (см картинку). Не рекомендуется использовать в проектах.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Бесплатный курс для всех, кто любит качественные IT-публикации и хочет научиться интересно писать о программировании либо улучшить навыки письма.

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

Курс будет интересен авторам, работающим в составе редакции, копирайтерам-одиночкам и просто программистам, которые хотят научиться интересно рассказывать о собственных проектах.

Материалы регулярно дополняются, обновляются и корректируется. Отвечаем на все учебные вопросы в комментариях курса.

Как стать автором «Библиотеки программиста» и получать гонорары за статьи?
➡️ Заполните анкету.
Если все ок, мы свяжемся с вами и обсудим дальнейшие шаги.
Please open Telegram to view this post
VIEW IN TELEGRAM
Вы когда-нибудь искали подробное введение в Maven, которое было бы веселым и интересным одновременно? Тогда вы его нашли.

В этом видео вы узнаете, как использовать Maven как профессионал: установка, использование Maven вместе с IDE, основы Maven и многое другое.
#вопросы_с_собеседований
Приведите примеры структурных шаблонов проектирования.

Адаптер (Adapter) — объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс.
Мост (Bridge) — структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
Компоновщик (Composite) — объект, который объединяет в себе объекты, подобные ему самому.
Декоратор (Decorator) — класс, расширяющий функциональность другого класса без использования наследования.
Фасад (Facade) — объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.
Приспособленец (Flyweight) — это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.
Заместитель (Proxy) — объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.