Библиотека 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
Learn Java Basics

- Hello Spring Boot | Learn to code,java tutorial,rest API
- Spring Boot Wordle REST Service | Learn to code
- Spring MVC, Web UI with Thymeleaf | Learn to code
- Refactoring, IoC, DRY, Layered Arch & Spring Stereotypes
- Wordle Web App with Thymeleaf & Spring MVC | Spring Boot
- Understanding Spring Session Scope | Spring Boot
- Spring Boot JavaScript Introduction with Thymeleaf
- Spring Boot Single Page Application (SPA) | Learn Java
- Databases and Unit Tests | Learn Java, Java course
- User Id Cookie and Database | Java Spring Tutorial

источник

👉@BookJava
👍4
Разница между загрузкой и инициализацией классов в Java на любопытном примере

Привет, сегодняшняя статья будет о некоторых тонкостях загрузки и инициализации классов и немного о производительности (совсем чуть-чуть и в самом конце).

Поводом для написания статьи стал вопрос на StackOverflow. Откройте, но не торопитесь читать ответ ;)

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

👉@BookJava
👍2
Media is too big
VIEW IN TELEGRAM
Java. Многопоточность. Как устроить Deadlock

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

источник

👉@BookJava
👍4
Checkstyle

Это средство разработки, помогающее программистам писать Java-код, соответствующий стандартам программирования. По умолчанию он поддерживает Google Java Style Guide и Sun Code Conventions, но является очень настраиваемым. Он может быть вызван с помощью задачи ANT и программы командной строки

https://github.com/checkstyle/checkstyle

👉@BookJava
👍4
Media is too big
VIEW IN TELEGRAM
SOLID -- Это Просто! Принципы ООП (Объектно Ориентированного Программирования)

https://habr.com/ru/companies/productivity_inside/articles/505430/

источник

👉@BookJava
👍5
150 вопросов и ответов на собеседовании по Java

В следующих разделах мы рассмотрим вопросы Java-собеседования, касающиеся объектно-ориентированного программирования и его особенностей, общие вопросы по Java и ее функциональности, коллекций в Java, сборщиков мусора, обработки исключений, Java-апплетов, Swing, JDBC, Remote Method Invocation (RMI), сервлетов и JSP.

https://www.javacodegeeks.com/java-interview-questions.html

👉@BookJava
👍5🔥1
📌 Java Collections

👉@BookJava
👍10🥰1
Java Collections Framework. Вопросы для собеседования

https://github.com/enhorse/java-interview/blob/master/jcf.md

👉@BookJava
👍4🤮1
Что такое JDBC-драйвер? Какие бывают типы?

JDBC – Java DataBase Connectivity – соединение с базами данных на Java. Это стандарт взаимодействия с БД. Его интерфейс поставляется в стандартной JDK в виде пакета java.sql. Какой бы библиотекой для работы с базой данных вы ни пользовались, в ее основе почти всегда лежит низкоуровневый JDBC.

JDBC-драйвер – реализация JDBC для определенной базы данных. В приложении может быть зарегистрировано несколько разных драйверов. При соединении к базе, нужный выбирается исходя из URL соединения. Драйверы делятся на 4 типа:

Тип 1 – JDBC-ODBC мост. Делегирует работу с базой установленному в системе ODBC-драйверу. Платформозависимый. Не поддерживается с Java 8.

Тип 2 – Native API. Делегирует работу с базой библиотеке, установленной в системе. Платформозависимый. Библиотеки в отличие от ODBC специфичны для конкретной базы, поэтому такой драйвер обычно работает быстрее.

Тип 3 – драйвер сетевого протокола. Работает с промежуточным слоем (JavaEE сервером приложений), который транслирует запросы в сетевой протокол, с которым работает конкретная БД. Такой драйвер полностью реализован на Java.

Тип 4 – драйвер протокола БД/тонкий драйвер. Полная реализация протокола взаимодействия с базой данных. Отличается от типа 3 тем, что здесь логика протокола находится не на внешнем промежуточном слое, а прямо в самом драйвере.

👉@BookJava
6👍4
Как работает инъекция прототипа в синглтон?

Допустим ситуацию, когда в singleton-компонент внедряется зависимость со скоупом prototype – когда будет создан её объект?

Если просто добавить к определению бина аннотацию @Scope(SCOPE_PROTOTYPE), и использовать этот бин в синглтоне через аннотацию @Autowired – будет создан только один объект. Потому что синглтон создается только однажды, и обращение к прототипу случится тоже однажды при его создании (при внедрении зависимости).

Примитивный способ получать новый объект при каждом обращении – отказаться от @Autowired, и доставать его из контекста вручную. Для этого нужно вызывать context.getBean(MyPrototype.class).

Воспользоваться автоматическим внедрением зависимостей можно через внедрение метода (паттерн «Команда»). Автовайрится не сам объект, а производящий его метод.

Более красивый декларативный способ – правильно настроить определение бина. В аннотации @Scope кроме самого scopeName доступен второй параметр – proxyMode. По умолчанию его значение NO – прокси не создается. Но если указать INTERFACES или TARGET_CLASS, то под @Autowired будет внедряться не сам объект, а сгенерированный фреймворком прокси. И когда проксируемый бин имеет скоуп prototype, то объект внутри прокси будет пересоздаваться при каждом обращении.

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

👉@BookJava
👍61
Под каким типом хранить период времени?

В стандартной библиотеке современных версий Java для этих целей есть два класса:

Period – календарный период. Количество дней, месяцев и лет. Одним днем здесь считается день в терминах ZonedDateTime.

Duration – длительность времени. Количество наносекунд, секунд, минут, часов, и тоже дней. Здесь один день – ровно 24 часа.

Оба класса реализуют общий интерфейс TemporalAmount – период времени вообще. Оба иммутабельны, и как следствие, потокобезопасны. Любая модифицирующая операция вроде plusX() возвращает новый экземпляр с измененным значением.

Экземпляры обоих классов могут быть созданы из значений отдельных компонентов, из двух моментов времени методом between, или из строки. Строковое представление Duration: "P2DT3H4M", Period: "P1Y2M3D".

До Java 8 основным способом хранения периода были числовые примитивы. В этом подходе есть много недостатков, среди которых в первую очередь неограниченность значений и ненаглядность. Чтобы в Java 8+ получить период числом, используется метод between() нужного элемента енама ChronoUnit.

👉@BookJava
👍61
Опишите синтаксис javadoc-комментария

Javadoc-комментарии к классам и их членам заключаются между /** и */. С точки зрения синтаксиса Java это обычные многострочные комментарии, но вторая * позволяет различным инструментам воспринимать их как документацию API. Изначально для этого использовалась стандартная утилита javadoc, которая генерировала HTML-документацию, сейчас джавадок активно используется прямо в IDE.

До Java 1.4 каждая строка комментария обязана была начинаться со *. Сейчас это требование необязательное, но следовать ему всё ещё принято.

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

В javadoc разрешено использовать HTML-теги. Фрагменты кода рекомендуется обрамлять тегом <code>, для списка с буллетами применяется <ul>, параграфы отделяются <p>. В документации библиотеки Reactor активно используются <img> с диаграммами.
Комментарий состоит из двух частей: описание и блок тегов. Первый блок содержит всю информацию в свободной форме. Во втором находятся теги. Каждый тег начинается с новой строки, через пробел за ним следует значение.

Один тег можно использовать в блоке описания – @link. Он не обязан быть на новой строке, обрамляется фигурными скобками, и при рендеринге превращается в <a> со ссылкой на другую страницу документации.

Среди всех тегов обязательными считаются только @param для каждого параметра метода, и @return для не-void методов. Они применимы только для методов. А теги @author и @version наоборот, используются только в документации классов. Остальные блочные теги можно использовать везде:

@deprecated
@exception (то же что @throws)
@see
@since
@serial (то же что @serialField или @serialData)

Теги @author, @param, @throws и @see могут входить в один комментарий в нескольких экземплярах.

👉@BookJava
👍3
Прожарка java.lang.String

Давайте абьюзить баг в java.lang.String, который позволит делать очень странные строки. Мы сделаем "Hello World", который не начинается с "Hello" и покажем, что не все пустые строки равны между собой. Научимся прожаривать строки в чужих классах.

Rus https://habr.com/ru/companies/bar/articles/747528/

Eng https://wouter.coekaerts.be/2023/breaking-string

👉@BookJava
👍3