Красно-чёрное дерево в чем смысл?
Двоичное дерево поиска, в котором каждый узел имеет атрибут цвета.
При этом:
Узел может быть либо красным, либо чёрным и имеет двух потомков;
Корень — как правило чёрный.
Все листья, не содержащие данных — чёрные.
Оба потомка каждого красного узла — чёрные.
Любой простой путь от узла-предка до листового узла-потомка содержит одинаковое число чёрных узлов
Благодаря этому достигается балансировка и быстрая скорость O(log n)
Путь от корня до самого дальнего листа не более чем вдвое длиннее, чем до самого ближнего.
В java это коллекции TreeMap и TreeSet
Код в комментах
Двоичное дерево поиска, в котором каждый узел имеет атрибут цвета.
При этом:
Узел может быть либо красным, либо чёрным и имеет двух потомков;
Корень — как правило чёрный.
Все листья, не содержащие данных — чёрные.
Оба потомка каждого красного узла — чёрные.
Любой простой путь от узла-предка до листового узла-потомка содержит одинаковое число чёрных узлов
Благодаря этому достигается балансировка и быстрая скорость 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
Сори за щелчки мышкой, исправлюсь 🫠
Сделал короткое видео:
развернул в проекте спринг, создал два бина, один заинжектил в другой.
Достал из контекста бины, вызвал у них методы, вывел в консоль.
Задание: (присылайте мне, я сделаю ревью)
Создать класс Comp, Mouse, Screen.
Создать их бины.
Заинжектить Mouse, Screen в Comp.
Mouse - умеет кликать
Screen - имеет поле разрешение и его можно включать и выключать
Comp - имеет метод включить и отображает подключенные устройства
https://www.youtube.com/watch?v=2OklKn94CIA
https://github.com/IvanKorni/springDemo
Сори за щелчки мышкой, исправлюсь 🫠
YouTube
Java для новичков: cоздаем бины в Spring
❤2
Разбираем SOLID по одному.
Про solid всегда спрашивают на собесах.
Когда ты пишешь код в энтерпрайсе, нужно всегда держать в уме эти принципы.
Про S
Single Responsibility Principle (Принцип единственной ответственности)
Не должно быть больше одной причины изменить класс.
Что это значит на практике? Весь класс целиком должен быть направлен на обеспечение одной логики. Если в классе в разных методах мы исполняем разную логику, класс нужно разделять и в именах новых классов прописывать, что он делает.
Конечно в реальных проектах, очень часто классы жирные, но никогда в одном классе не собирают логику какой то части приложения, всегда разделяют.
Про solid всегда спрашивают на собесах.
Когда ты пишешь код в энтерпрайсе, нужно всегда держать в уме эти принципы.
Про S
Single Responsibility Principle (Принцип единственной ответственности)
Не должно быть больше одной причины изменить класс.
Что это значит на практике? Весь класс целиком должен быть направлен на обеспечение одной логики. Если в классе в разных методах мы исполняем разную логику, класс нужно разделять и в именах новых классов прописывать, что он делает.
Конечно в реальных проектах, очень часто классы жирные, но никогда в одном классе не собирают логику какой то части приложения, всегда разделяют.
🙏1
https://vc.ru/hr/537368-a-nuzhno-li-vam-byt-programmistom
Написал мотивационную статью! Главное не сдаваться и по немногу закрывать пробелы в знаниях)
Написал мотивационную статью! Главное не сдаваться и по немногу закрывать пробелы в знаниях)
vc.ru
А нужно ли вам быть программистом? — Карьера на vc.ru
Все мы знаем что программистам хорошо платят, даже джунам, что можно выучится за 1-2 года. А через два года работы зарплата будет в два раза больше изначальной.
SOLID про O
Open Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты к расширению, но закрыты для изменения.
Что это значит на практике?
Добавляя какую-то новую функциональность к классу, в лучшем случае мы должны создать новый класс, переопределить у него методы и добавить функциональность туда.
Исходя из этого изначально наши классы должны быть спроектированы так, что бы их можно было расширять.
Open Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты к расширению, но закрыты для изменения.
Что это значит на практике?
Добавляя какую-то новую функциональность к классу, в лучшем случае мы должны создать новый класс, переопределить у него методы и добавить функциональность туда.
Исходя из этого изначально наши классы должны быть спроектированы так, что бы их можно было расширять.
👍2
SOLID про L
Liskov’s Substitution Principle (Принцип подстановки Барбары Лисков)
Расширяя класс, разработчик должен сохранять его функциональность.
Что это означает на практике?
Переопределяя методы родительского класса мы должны сохранять поведение класса, неверно переопределять метод и писать туда совершенно другую логику.
Liskov’s Substitution Principle (Принцип подстановки Барбары Лисков)
Расширяя класс, разработчик должен сохранять его функциональность.
Что это означает на практике?
Переопределяя методы родительского класса мы должны сохранять поведение класса, неверно переопределять метод и писать туда совершенно другую логику.
👍2🔥2
Что такое REST(REpresentational State Transfer) API?
Это архитектура которая описывается следующими ограничениями:
Единый интерфейс между клиентом и сервером
Сервер передает информацию в стандартном формате
Например мы получаем json, с которым можем как то взаимодействовать, если есть доступ к форматированию.
Отсутствие состояния
Все запросы изолированы друг от друга, необходимое состояние содержится в самом запросе.
Кеширование
Некоторые ответы кэшируются для ускорения работы сервиса.
Многоуровневая система
Подключение клиентов и серверов может происходить через посредников - это используется например для масштабирования.
Это архитектура которая описывается следующими ограничениями:
Единый интерфейс между клиентом и сервером
Сервер передает информацию в стандартном формате
Например мы получаем json, с которым можем как то взаимодействовать, если есть доступ к форматированию.
Отсутствие состояния
Все запросы изолированы друг от друга, необходимое состояние содержится в самом запросе.
Кеширование
Некоторые ответы кэшируются для ускорения работы сервиса.
Многоуровневая система
Подключение клиентов и серверов может происходить через посредников - это используется например для масштабирования.
👍1
SOLID про I
Interface Segregation Principle (Принцип разделения интерфейса).
Мы не должен реализовывать интерфейс, методы в котором нам не нужны.
Что это значит на практике?
Берем нужный нам интерфейс, но половина методов в нем нам не нужна, очень часто в коде просто пишут заглушки и забивают на это. Заглушки это просто возврат null или вообще ничего, если нет return.
Правильно взять этот интерфейс и разделить его, чтобы использовать только те методы, которые нам нужны в реализации.
Interface Segregation Principle (Принцип разделения интерфейса).
Мы не должен реализовывать интерфейс, методы в котором нам не нужны.
Что это значит на практике?
Берем нужный нам интерфейс, но половина методов в нем нам не нужна, очень часто в коде просто пишут заглушки и забивают на это. Заглушки это просто возврат null или вообще ничего, если нет return.
Правильно взять этот интерфейс и разделить его, чтобы использовать только те методы, которые нам нужны в реализации.
https://habr.com/ru/post/682720/
Сегодня буду по этому гайду писать микросервис, кто хочет присоединяйтесь. Если будут затыки, буду в комментах писать
Сегодня буду по этому гайду писать микросервис, кто хочет присоединяйтесь. Если будут затыки, буду в комментах писать
Хабр
Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana
Туториалы делятся на две больших категории: либо "как нарисовать сову", либо подробно расписанные тысячи шагов в формате "напиши туториал для дурака - и только дурак захочет его читать". К какой из...
👍2
Наследование vs композиции
В чем разница?
Когда мы наследуем мы используем все поля и методы другого класса и если нужно их переопределяем.
Когда мы используем композицию мы берем ту часть класса которая нам нужна.
Пример композиции на картинке, в классе Person нам нужно использовать из класса Job, только set и get.
Так же можно заметить, что класс Person не может быть наследником Job по контексту, т.к это две разные смысловые сущности.
В чем разница?
Когда мы наследуем мы используем все поля и методы другого класса и если нужно их переопределяем.
Когда мы используем композицию мы берем ту часть класса которая нам нужна.
Пример композиции на картинке, в классе Person нам нужно использовать из класса Job, только set и get.
Так же можно заметить, что класс Person не может быть наследником Job по контексту, т.к это две разные смысловые сущности.
👎1
Какие модификаторы доступа можно применить к только что созданному классу?
Anonymous Poll
38%
private
76%
public
36%
protected
67%
default