Java с нуля до middle
153 subscribers
56 photos
14 links
Download Telegram
DAO (Data Access Object)

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

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

DAO обычно реализуется как отдельный слой в архитектуре приложения, который служит для управления данными и обеспечивает разделение слоев в приложении.
Задача на циклы

Дано целое число N и последовательность из N целых чисел. Найти второй по минимальности элемент.

Решение в комментах
Что такое EntityManager?
Главный API для работы с JPA

Основные операции над Entity:

persist - добавление Entity под управление JPA
merge - метод для слияния существующей, если сущность не существует в контексте сущностей, то она будет добавлена
remove - удаление
refresh - обновление данных
detach - удаление из управление JPA
Зачем создали JPQL (Java Persistence Query Language) и почему не использовать SQL всегда?

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

jpql использует имена классов, sql имена таблиц и столбцов.

По факту jpql имеет ограничения по группировке и агрегированию по сравнению с sql.
Но у EntityManager есть много удобным методов и часто, если в проекте не spring data,
то используют jpql.

На картинке пример простого селекта.

В этом примере Person - это имя класса-сущности, а p - это псевдоним, который используется в запросе вместо имени класса. Запрос выбирает все объекты класса Person, у которых свойство age больше или равно 18, и возвращает их в списке adults.

Этот запрос может быть выполнен с помощью метода createQuery EntityManager и передачи ему строки JPQL. Затем можно дабавить результаты в List помощью метода getResultList.
Почему инкапсуляция заставляет нас использовать приватные модификаторы доступа у полей?

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

Делайте поля private и если можно то final, и будет все окей!
Что такое полиморфизм?

Я всегда говорю : " Один интерфейс множество реализаций"

На практике это:
- Создаем интерфейс Movable
- Создаем класс Animal и реализовываем интерфейс
- Создаем два класса Cat и Bird и наследуемся от класса Animal, переопределяем в них метод move
- В main создаем обьекты классов Cat и Bird, но ссылку указываем на наш интерфейс. Эту возможность нам предоставляет полиморфизм.
- Далее вызываем полиморфный метод move у интерфейса , который связан через наследование с нашими классами.
👍2
Records in java

В java 16 добавили records.
Records представляют классы, которые предназначены для создания неизменяемых классов данных.

На картинке создал record BirdOne, автоматически создается поле name (final), конструктор, геттер и переопределены методы equals(), hashCode() и toString().

lombok теперь можно не использовать!
Зачем нужен Optional?

Optional контейнер для того, что бы избежать NullPointerException - это исключение, которое возникает в Java, когда программа пытается выполнить операцию с null ссылкой в качестве объекта.

Заварачиваем List c помощью статического метода ofNullable(), который принимает значение в качестве аргумента и возвращает Optional, содержащий это значение, если оно не равно null, или же пустой Optional, если значение равно null.

Затем мы можем использовать метод isEmpty для проверки, содержит ли Optional null. Если isEmpty() возвращает false, то мы можем вызвать метод get() для получения содержимого Optional.

Короче, если есть риск того, что будет npe, заварачивайте обьект в optional
Задача с leetcode

Дана строка s, состоящая из слов и пробелов. Вернуть длину последнего слова в строке.

Решение в комментах
Можно ли переопределить статический метод?
Anonymous Quiz
40%
Можно
46%
Нет
Заполнить пустое место в методе action() так,
чтобы был корректно вызван метод
Anonymous Quiz
58%
super
14%
this
8%
One
20%
new One()
Задача реализовать интерфейс

Используйте мапу
https://codeshare.io/MN1x1Q

Я напишу свою завтра
Кто нибудь попробывал реализовать интерфейс?
Anonymous Poll
22%
Да
36%
Нет
53%
Новый год завтра!
Вот реализация
https://codeshare.io/eVRnWJ

Пишите, тесты, я свои напишу позже
https://codeshare.io/WdqD9E

Написал пару тестов, остальные сами пишите, если не выйдет пишите в коменты помогу.

Это совершенно типичное задание для джуна на работе, реализация интерфейса, тесты.
С Новым годом!!! 🎄
Желаю вам в новом году доучить джаву и найти работу.
Всем мир! ✌️
👍154
Функциональный интерфейс

Появился в java 8, содержит один единственный абстрактный метод.

Дан интерфейс, дана лямбда.
Задание переписать лямбду в анонимный класс, решение в комментах.
Predicate

Интерфейс который предоставляет boolean метод test(). В основном используется для фильтрации данных из потока. Можно еще всякие проверки писать, типа есть соединения с бд, отправляет ли в кафку. Ну и запускать шедулер когда тру.

На картинке написал предикат, который проверяет содержится ли в стринге буква "c". Метод тест возвращает true, если элемент есть.

Задание:
Дан массив стрингов написать цепочку предикатов на поиск элементов содержащих "a", "c".
Решение в комментах
👍2
Function

Интерфейс принимает объект одного типа и возвращает другого.

На картинке мы считаем количество символов в стринг.
apply() как раз тот метод куда мы пихаем стринг и ожидаем что он нам выведет Integer, т.к в function мы определили s.length()

Задание:
Посчитать количество символов у массива стрингов, через stream.
Решение в комментах