Java с нуля до middle
153 subscribers
56 photos
14 links
Download Telegram
Красно-чёрное дерево в чем смысл?

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

При этом:
Узел может быть либо красным, либо чёрным и имеет двух потомков;
Корень — как правило чёрный.
Все листья, не содержащие данных — чёрные.
Оба потомка каждого красного узла — чёрные.
Любой простой путь от узла-предка до листового узла-потомка содержит одинаковое число чёрных узлов

Благодаря этому достигается балансировка и быстрая скорость O(log n)
Путь от корня до самого дальнего листа не более чем вдвое длиннее, чем до самого ближнего.

В java это коллекции TreeMap и TreeSet
Код в комментах
Людей стало чуть больше, в связи с этим вопрос, что вы еще не поняли?
Anonymous Poll
16%
Java Core
16%
Коллекции
35%
Многопоточка
5%
Исключения
62%
Spring
35%
Не хватает задач, теория есть на youtube
Задача с leetcode

Дан массив чисел и какое-то число, если оно есть в этом массиве удалить и посчитать количество чисел массива.
Не выделять память под новый массив.

Решение в комментах

Задание
:
Решите задачу выделяя память под новый массив и пришлите мне, я сделаю ревью
Как создавать бины в спринг и доставать их из контекста?

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

Задание: (присылайте мне, я сделаю ревью)
Создать класс Comp, Mouse, Screen.
Создать их бины.
Заинжектить Mouse, Screen в Comp.
Mouse - умеет кликать
Screen - имеет поле разрешение и его можно включать и выключать
Comp - имеет метод включить и отображает подключенные устройства
https://www.youtube.com/watch?v=2OklKn94CIA
https://github.com/IvanKorni/springDemo

Сори за щелчки мышкой, исправлюсь 🫠
2
Разбираем SOLID по одному.
Про solid всегда спрашивают на собесах.
Когда ты пишешь код в энтерпрайсе, нужно всегда держать в уме эти принципы.

Про S

Single Responsibility Principle (Принцип единственной ответственности)

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

Конечно в реальных проектах, очень часто классы жирные, но никогда в одном классе не собирают логику какой то части приложения, всегда разделяют.
🙏1
Задача с leetcode

Дан linked list, поменять каждые два соседних узла местами и вернуть заголовок.

Решение в комментах
😱2
SOLID про O
Open Closed Principle (Принцип открытости/закрытости)

Классы должны быть открыты к расширению, но закрыты для изменения.

Что это значит на практике?
Добавляя какую-то новую функциональность к классу, в лучшем случае мы должны создать новый класс, переопределить у него методы и добавить функциональность туда.
Исходя из этого изначально наши классы должны быть спроектированы так, что бы их можно было расширять.
👍2
SOLID про L
Liskov’s Substitution Principle (Принцип подстановки Барбары Лисков)

Расширяя класс, разработчик должен сохранять его функциональность.

Что это означает на практике?
Переопределяя методы родительского класса мы должны сохранять поведение класса, неверно переопределять метод и писать туда совершенно другую логику.
👍2🔥2
Что такое REST(REpresentational State Transfer) API?

Это архитектура которая описывается следующими ограничениями:

Единый интерфейс между клиентом и сервером
Сервер передает информацию в стандартном формате
Например мы получаем json, с которым можем как то взаимодействовать, если есть доступ к форматированию.

Отсутствие состояния
Все запросы изолированы друг от друга, необходимое состояние содержится в самом запросе.

Кеширование
Некоторые ответы кэшируются для ускорения работы сервиса.

Многоуровневая система
Подключение клиентов и серверов может происходить через посредников - это используется например для масштабирования.
👍1
SOLID про I
Interface Segregation Principle (Принцип разделения интерфейса).

Мы не должен реализовывать интерфейс, методы в котором нам не нужны.

Что это значит на практике?
Берем нужный нам интерфейс, но половина методов в нем нам не нужна, очень часто в коде просто пишут заглушки и забивают на это. Заглушки это просто возврат null или вообще ничего, если нет return.

Правильно взять этот интерфейс и разделить его, чтобы использовать только те методы, которые нам нужны в реализации.
Channel name was changed to «Java с нуля до middle»
Наследование vs композиции

В чем разница?
Когда мы наследуем мы используем все поля и методы другого класса и если нужно их переопределяем.

Когда мы используем композицию мы берем ту часть класса которая нам нужна.
Пример композиции на картинке, в классе Person нам нужно использовать из класса Job, только set и get.

Так же можно заметить, что класс Person не может быть наследником Job по контексту, т.к это две разные смысловые сущности.
👎1
Можно ли перегрузить static метод?
Anonymous Poll
61%
Да
29%
Нет
10%
Что такое перегрузить?
Перегрузить статик методы можно, выглядит это так.
Какие модификаторы доступа можно применить к только что созданному классу?
Anonymous Poll
38%
private
76%
public
36%
protected
67%
default
При создании класса, ему можно объявлять следующие модификаторы доступа: public и default
Задача по sql

Найдите производителей, которые производили бы как ПК
со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц.
Вывести: Maker

Решение в комментах
Sql от chatgpt

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

Если расшифровал что делает селект, пиши в комменты.

Следующий уровень: сделайте explain analyse и найдите в нем не оптимальные места и как его можно улучшить
Фабрика бинов

Для создания фабрики 🏭бинов в Spring можно использовать конфигурационный класс с аннотацией @Configuration. В нем необходимо определить методы, которые будут создавать бины с помощью аннотации @Bean.

В данном случае конфигурационный класс BeanFactory содержит два метода-определения бинов: exampleService и dependency. Каждый из них создает экземпляр соответствующего класса и возвращает его.

После этого можно использовать бины в приложении с помощью аннотации @Autowired или через конструктор, что предпочтительнее внедряя 💉их через конструктор!