Библиотека Java разработчика
10.8K subscribers
1.14K photos
563 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
Вышла Java 20

Вышла общедоступная версия Java 20. В этот релиз попало около 1500 закрытых задач и 7 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.

Ссылки на скачивание:
Oracle JDK
OpenJDK

👉@BookJava
👍3
Fastjson - это библиотека Java, которую можно использовать для преобразования Java-объектов в их JSON-представление. Она также может быть использована для преобразования строки JSON в эквивалентный объект Java. Fastjson может работать с произвольными Java-объектами, включая уже существующие объекты, исходный код которых у вас отсутствует.

https://github.com/alibaba/fastjson

👉@BookJava
👍9👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Java spring exception handling | обработка исключений за 5 минут

В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.

00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus

Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling

источник

👉@BookJava
👍4🔥3
Что такое литералы?

Литералы — это явно заданные значения в коде программы — константы определенного типа, которые находятся в коде в момент запуска.

class Test {
int a = 0b1101010110;
public static void main(String[] args) {
System.out.println("Hello world!");
}
}


В этом классе “Hello world!” — литерал.

Переменная a - тоже литерал.

Литералы бывают разных типов, которые определяются их назначением и способом написания.

👉@BookJava
👍3🥴2👏1
Java Challenges: 100+ Proven Tasks that Will Prepare You for Anything
Автор: Michael Inden (2021)

Автор Майкл Инден описывает альтернативные решения и анализирует возможные подводные камни и типичные ошибки при проектировании систем. Примеры рассматриваются с использованием JShell, JUnit 5 для модульного тестирования и проверки решений. Также, подробно описывается O-нотация для оценки производительности алгоритмов.

Скачать

👉 @java_360
👍4🔥2
Полезные и неизвестные библиотеки Java

https://piotrminkowski.com/2023/01/30/useful-unknown-java-libraries/

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

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

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

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

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

Преимущества хэш-таблицы с открытой адресацией:
• отсутствие затрат на создание и хранение объектов списка;
• простота организации сериализации/десериализации

👉@BookJava
👍4
Инкапсуляции в Java

Инкапсуляция - это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет разработчикам создавать классы, скрывающие свои внутренние детали и защищающие их состояние и поведение от доступа или изменения извне класса.

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

Прежде чем прочитать эту стаью, вы можете прочитать наше руководство "Как работать с классами и объектами в Java", если у вас нет твердого понимания концепций объектно-ориентированного программирования или вам необходимо освежить знания.

https://www.developer.com/java/java-encapsulation/

👉@BookJava
👍3
Не самые очевидные советы по написанию DTO на Java

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

https://medium.com/javarevisited/not-so-obvious-tips-to-write-better-dtos-in-java-c6116895b180

👉@BookJava
👍2
Media is too big
VIEW IN TELEGRAM
JAVA SPRING TRANSACTIONAL: ОСНОВЫ ТРАНЗАКЦИЙ ЗА 7 МИНУТ

00:00 - Определение транзакции, схематичный пример
00:46 - Свойство транзакции
00:59 - Знакомство с кодовой базой
02:05 - Пример, где нужна аннотация Transactional
03:10 - Вызов в пределах одного класса
04:04 - Обработка не всех исключений
04:47 - Область видимости метода
05:10 - Транзакция занимает соединение с БД
06:25 - Повторяем

Код примера: https://github.com/dispikerton/transactional

источник

👉@BookJava
👍52
51 Java -Spring Boot- Лучшие практики для разработчиков приложений

1.Использовать внешний сервер конфигурации
2. Используйте правильные зависимости
3. Сохраняйте модульность приложения
4. Используйте кэширование с умом
5. Контролируйте и протоколируйте свое приложение
6. Используйте последовательный стиль кода
7. Пишите модульные и интеграционные тесты
8. Используйте балансировщик нагрузки
9. Используйте последовательный формат протоколирования
10. Используйте инструмент мониторинга
11. Используйте инструмент сборки
12. Используйте инструмент версионирования кода
13. Использовать IDE
14. Использовать форматтер кода
15. Используйте линкер кода
16. Используйте клиентскую библиотеку HTTP
17. Использовать библиотеку JSON
18. Использовать пул соединений с базой данных
19. Использовать библиотеку безопасности
20. Использовать библиотеку тестирования
21. Использовать фреймворк для инъекции зависимостей
22. Используйте клиентскую библиотеку REST
23. Используйте брокер сообщений
24. Используйте профилировщик
25. Используйте инструмент обзора кода
26. Используйте инструмент статического анализа
27. Используйте инструмент покрытия кода
28. Используйте инструмент непрерывной интеграции
29. Используйте инструмент развертывания
30. Используйте инструмент управления конфигурацией
31. Использовать инструмент контейнеризации
32. Использовать облачную платформу
33. Использовать инструмент миграции баз данных
34. Использовать веб-сервер
35. Использовать инструмент CI/CD
36. Использовать обратный прокси-сервер HTTP
37. Используйте профилировщик JVM
38. Используйте профилировщик базы данных
39. Используйте инструмент нагрузочного тестирования
40. Используйте инструмент непрерывной доставки
41. Используйте API-шлюз
42. Используйте очередь сообщений
43. Используйте сетку сервисов
44. Используйте инструмент управления конфигурацией
45. Используйте конвейер развертывания
46. Использование Swagger для документации Api
47. Использование актуатора
48. Использование AOP
49. Использование рулевых диаграмм
50. Использование распределенной трассировки
51. Использование Lombok

https://connect2grp.medium.com/51-java-spring-boot-best-practices-for-application-developers-cafff2766896

👉@BookJava
👍12👎3🤔3
Побитовые операции

~ : Побитовый унарный оператор NOT;
& : Побитовый AND;
&= : Побитовый AND с присваиванием;
| : Побитовый OR;
|= : Побитовый OR с присваиванием;
^: Побитовый исключающее XOR;
^= : Побитовый исключающее XOR с присваиванием;
>> : Сдвиг вправо (деление на 2 в степени сдвига);
>>= : Сдвиг вправо с присваиванием;
>>> : Сдвиг вправо без учёта знака;
>>>= : Сдвиг вправо без учёта знака с присваиванием;
<< : Сдвиг влево (умножение на 2 в степени сдвига);
<<= : Сдвиг влево с присваиванием.

👉@BookJava
👍5👎1
Media is too big
VIEW IN TELEGRAM
Maven Tutorial - Crash Course

00:00 Intro
00:30 Cloning The Sample Project
01:09 Installing Maven - Package Manager
01:34 Installing Maven - Manual
02:57 Maven Wrapper
04:31 mvn validate
05:21 IntelliJ - Importing Maven Projects
06:12 Pom.xml - Basics
07:07 Pom.xml - Properties
07:38 Pom.xml - Build Section
08:06 Pom.xml - Dependencies
09:40 Pom.xml - Dependency Scopes
11:41 search.maven.org - Dependency Search
12:27 IntelliJ - Maven Reload Trick
13:11 IntelliJ - Dependency Search
15:04 Maven Directory Structure
15:25 mvn clean
15:37 mvn compile
16:00 mvn test
17:45 mvn package
18:36 mvn install
19:18 Local Maven Repository
20:25 Central Maven Repository
22:28 Multi Module Projects

источник

👉@BookJava
👍5
Java Чистый код: Как его писать? Лучшие практики от экспертов

Разработка программного обеспечения - сложное ремесло.

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

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

В этой статье мы сосредоточимся на написании чистого кода на Java. Почему так важно писать легко читаемый код? Каковы лучшие практики разработки кода на Java? Продолжайте читать, чтобы узнать!

https://stratoflow.com/java-clean-code/

👉@BookJava
👍4❤‍🔥1
Media is too big
VIEW IN TELEGRAM
JAVA SPRING JDBC: CRUD БЕЗ ORM

Не во всех случаях стоит использовать ORM. Если вам нужен полный контроль или вы используете простые сущности, то возможно вам стоит присмотреться к Spring Jdbc.

Подготовил в этом видео материал с минимальным количеством кода и всяких настроек, которыми кишат остальные видеоуроки.
Раскрываю, почему лучше использовать NamedParameterJdbcTemplate, а не JdbcTemplate.

https://github.com/dispikerton/jdbc

источник

👉@BookJava
👍3🔥1
Приведите примеры структурных шаблонов проектирования.

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

👉@BookJava
👍7🔥1
Компилирование и исполнение Java-кода в Runtime

Сегодня я хотел бы поговорить про динамическое компилирование и исполнение Java-кода, подобно скриптовым языкам программирования. В этой статье вы найдете пошаговое руководство как скомпилировать Java в Bytecode и загрузить новые классы в ClassLoader на лету.

https://habr.com/ru/articles/688462/

👉@BookJava
Шифрование и расшифровка файла с помощью Java

В области криптографии шифрование - это процесс превращения открытого текста или информации в шифротекст, или текст, который может быть расшифрован только предполагаемым получателем.

https://bookflow.ru/shifrovanie-i-rasshifrovka-fajla-s-pomoshhyu-java/

👉@BookJava
👍1