4. Принцип разделения интерфейсов (I — Interface Segregation Principle)
Этот принцип говорит, что интерфейсы должны быть маленькими и специализированными, а не большими и универсальными. Клиенты (классы, использующие интерфейс) не должны зависеть от методов, которые они не используют.
Почему важно: Большой интерфейс заставляет классы реализовывать ненужные методы, что приводит к "пустым" реализациям и усложняет код.
Подробное объяснение: Лучше несколько маленьких интерфейсов, чем один большой. Это делает систему модульной и легче для понимания.
Пример нарушения принципа:
Пример правильного применения:
Разделите на маленькие интерфейсы.
Совет: Интерфейс должен быть "толстым" для клиента, но "тонким" для реализатора — маленькие интерфейсы.
5. Принцип инверсии зависимостей (D — Dependency Inversion Principle)
Этот принцип утверждает, что высокоуровневые модули (бизнес-логика) не должны зависеть от низкоуровневых (детали реализации), а оба должны зависеть от абстракций (интерфейсов). Абстракции не зависят от деталей, детали зависят от абстракций.
Почему важно: Это уменьшает связь между частями системы, делая код легче для изменения и тестирования (например, замена базы данных без изменения бизнес-логики).
Подробное объяснение: Используйте интерфейсы или абстрактные классы как "прослойку". Высокий уровень зависит от интерфейса, низкий — реализует его.
Пример нарушения принципа:
Пример правильного применения:
Совет: Используйте dependency injection (внедрение зависимостей) для передачи абстракций.
Полезные советы для новичков
Применяйте SOLID постепенно: Начните с единственной ответственности, потом добавляйте другие.
Примеры в Java: Смотрите стандартную библиотеку — она следует SOLID.
Ресурсы: Книга "Clean Code" Роберта Мартина для глубокого понимания.
Практика: Возьмите свой код и проверьте на соответствие каждому принципу.
#Java #для_новичков #beginner #OOP #SOLID
Этот принцип говорит, что интерфейсы должны быть маленькими и специализированными, а не большими и универсальными. Клиенты (классы, использующие интерфейс) не должны зависеть от методов, которые они не используют.
Почему важно: Большой интерфейс заставляет классы реализовывать ненужные методы, что приводит к "пустым" реализациям и усложняет код.
Подробное объяснение: Лучше несколько маленьких интерфейсов, чем один большой. Это делает систему модульной и легче для понимания.
Пример нарушения принципа:
public interface Worker {
void work(); // Для всех
void eat(); // Только для людей
void charge(); // Только для роботов
}
Класс Human реализует charge() бесполезно, Robot — eat().
Пример правильного применения:
Разделите на маленькие интерфейсы.
public interface Workable {
void work();
}
public interface Eatable {
void eat();
}
public interface Chargeable {
void charge();
}
public class Human implements Workable, Eatable {
@Override
public void work() { /*...*/ }
@Override
public void eat() { /*...*/ }
}
public class Robot implements Workable, Chargeable {
@Override
public void work() { /*...*/ }
@Override
public void charge() { /*...*/ }
}
Теперь классы реализуют только нужное.
Совет: Интерфейс должен быть "толстым" для клиента, но "тонким" для реализатора — маленькие интерфейсы.
5. Принцип инверсии зависимостей (D — Dependency Inversion Principle)
Этот принцип утверждает, что высокоуровневые модули (бизнес-логика) не должны зависеть от низкоуровневых (детали реализации), а оба должны зависеть от абстракций (интерфейсов). Абстракции не зависят от деталей, детали зависят от абстракций.
Почему важно: Это уменьшает связь между частями системы, делая код легче для изменения и тестирования (например, замена базы данных без изменения бизнес-логики).
Подробное объяснение: Используйте интерфейсы или абстрактные классы как "прослойку". Высокий уровень зависит от интерфейса, низкий — реализует его.
Пример нарушения принципа:
public class ReportService {
private MySQLDatabase db = new MySQLDatabase(); // Зависит от конкретной реализации
public void generateReport() {
db.connect();
// ...
}
}
Смена базы данных требует изменения сервиса.
Пример правильного применения:
public interface Database {
void connect();
// ...
}
public class MySQLDatabase implements Database {
@Override
public void connect() { /*...*/ }
}
public class ReportService {
private Database db; // Зависит от абстракции
public ReportService(Database db) { // Инъекция зависимости
this.db = db;
}
public void generateReport() {
db.connect();
// ...
}
}
Теперь можно передать любую реализацию: new ReportService(new MySQLDatabase()) или new ReportService(new PostgreSQLDatabase()).
Совет: Используйте dependency injection (внедрение зависимостей) для передачи абстракций.
Полезные советы для новичков
Применяйте SOLID постепенно: Начните с единственной ответственности, потом добавляйте другие.
Примеры в Java: Смотрите стандартную библиотеку — она следует SOLID.
Ресурсы: Книга "Clean Code" Роберта Мартина для глубокого понимания.
Практика: Возьмите свой код и проверьте на соответствие каждому принципу.
#Java #для_новичков #beginner #OOP #SOLID
👍3🔥2 1
Что выведет код?
#Tasks
class Animal190925 {
public String speak() {
return "Some sound";
}
}
class Dog190925 extends Animal190925 {
public String speak() {
return "Woof";
}
public String fetch() {
return "Fetching stick";
}
}
public class Task190925 {
public static void main(String[] args) {
Animal190925 myAnimal = new Dog190925();
System.out.println(myAnimal.speak());
System.out.println(myAnimal.fetch());
}
}
#Tasks
👍4
Варианты ответа:
Anonymous Quiz
13%
"Some sound" и "Fetching stick"
47%
"Woof" и "Fetching stick"
33%
Ошибка компиляции
7%
Ошибка выполнения
😱1
Вопрос с собеседований
Что такое паттерн Chain of Responsibility?🤓
Ответ:
Chain of Responsibility — паттерн, где запрос передается по цепочке обработчиков.
Пример:
abstract class Handler {
protected Handler next;
abstract void handle(Request request);
}
class ConcreteHandler extends Handler {
void handle(Request request) { if (canHandle) process(); else next.handle(request); }
}
Используется в logging или обработке событий.
#собеседование
Что такое паттерн Chain of Responsibility?
Ответ:
Chain of Responsibility
Пример:
abstract class Handler {
protected Handler next;
abstract void handle(Request request);
}
class ConcreteHandler extends Handler {
void handle(Request request) { if (canHandle) process(); else next.handle(request); }
}
Используется в logging или обработке событий.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Анатолий Васильевич Мошинский (бел. Анатоль Васілевіч Машынскі; 20 сентября 1937 Мерефа, СССР — 15 марта 1996 Республика Беларусь) — советский/белорусский учёный в радиофизике и электронике; профессор БГУ информатики и радиоэлектроники, занимался математическим моделированием физических процессов и прикладной электротехникой, что близко к вычислительной и электронной технике.
Дороти Джин Джонсон Воган (20 сентября 1910 г. — 10 ноября 2008 г.) — американская "human computer" и программист в NACA/NASA; одна из первых чернокожих женщин-руководителей вычислительного отдела, обучала себя и сотрудников языку Fortran, участвовала в адаптации и автоматизации вычислительных методов.
Чандрасекаран Пандуранган (родился 20 сентября 1955 года) — индийский учёный в компьютерных науках, профессор; исследования в областях алгоритмов, теории графов, криптографии, параллельных и VLSI-алгоритмов.
1954 — скомпилирована и запущена первая программа, написанная на Фортране.
2000 — власти Тайваня арестовали 25-летнего Чэн Инь-Хао, создателя компьютерного вируса CIH («ЧИХ»), названного по инициалам автора. В народе вирус известен как «Чернобыль», так как одна из его версий активируется 26 апреля, в годовщину аварии на атомной электростанции.
#Biography #Birth_Date #Events #20Сентября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
С 13.09 по 19.09
Предыдущий пост(с 06.09 по 12.09)
Воскресный мотивационный пост:
не было
Выбранная голосованием тема:
не было
Запись встреч/видео:
не было.
Обучающие статьи:
Реактивное программирование
Реактивное программирование - вступление
Что такое потоки данных в реактивном мире?
Java:
static: поля, методы, блоки инициализации
Перечисления (enum)
Принципы проектирования и хорошего кода: SOLID
Полезные статьи и видео:
Про IT в 2025 году
Обратная совместимость в Java-мире
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Предыдущий пост(с 06.09 по 12.09)
Воскресный мотивационный пост:
не было
Выбранная голосованием тема:
не было
Запись встреч/видео:
не было.
Обучающие статьи:
Реактивное программирование
Реактивное программирование - вступление
Что такое потоки данных в реактивном мире?
Java:
static: поля, методы, блоки инициализации
Перечисления (enum)
Принципы проектирования и хорошего кода: SOLID
Полезные статьи и видео:
Про IT в 2025 году
Обратная совместимость в Java-мире
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
🔥2 1
Предлагаем темы для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢 Один человек - одна тема.
🟢 Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!
Жду Ваших предложений!👏
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Выбираем темы для рассмотрения в следующие выходные! 🤨
Anonymous Poll
17%
AOP
23%
Введение в Camunda
27%
Введение в gRPC
33%
Введение в GraphQL
👍1
А вы придете завтра на встречу по изучению Spring AI в 16:00 по МСК?
Anonymous Poll
41%
Да, обязательно!
47%
Хочу, но не могу...
12%
Не приду, фигню рассматриваете
👍1
Не нашел. Знаете - напишите)
2003 — завершение миссии космического аппарата Galileo, управляемое погружение в атмосферу Юпитера (чтобы избежать биологического загрязнения спутников).
#Biography #Birth_Date #Events #21Сентября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ты не старый. Ты опытный.
Ты выучил Java и готов к получению оффера.
Но по твоему, у тебя есть минус: тебе уже 37 лет и часть жизни позади.
Иные профессиональные навыки, иные профессиональные привычки (ведь ты же не лежал на печи 33 года?).
И ты понимаешь, что придется работать с молодыми, похожими на тех, которых ты последние лет 5 учил и посмеивался в бороду.
А теперь они будут учить тебя.
🔜 Как с этим справиться?
🔜 Как не послать 20-летнего зазнайку в пешее эротическое?
🔜 Как стерпеть свою некомпетентность и упреки от ровесников своих детей?
Давай разбираться.
Плюсы возраста
Ты умеешь работать
Практически неважно, где ты работал до этого. У тебя за плечами по-любому были проекты, авралы, кризисы. Ты не паникуешь при фразе "сроки горят" (привыкай к слову "дедлайн"😄 ), а начинаешь решать проблемы.
Если ты смог выучить Java - значит у тебя есть усидчивость и работает голова. А это 75% успеха.
Ты умеешь общаться
Ты так и так научился коммуницировать. И ты не "отбитый", такие уж точно не пойдут учить Java. А значит ты умеешь слушать и договариваться. Это очень ценный навык ("софт-скилл"😄 ).
Ты осознан
Крайне важное отличие тебя от молодых людей. Ты не пришёл в IT "по приколу", "попробовать", "временно".
У тебя есть цель, мотивация и понимание, зачем ты это делаешь.
У тебя есть дисциплина и понимание "старшинства"
Все, кто застал Советский Союз и 90-е, понимают что такое "Старший", "Начальник", "Руководитель". И если он адекватен, то для тебя в большинстве случаев не стоит вопрос о субординации. Тем более ты знаешь что значит это слово😄 .
И если ты осознано смог выучить Java в 35+ лет, ты не пойдешь бухать в рабочие дни и пропускать дейли, ведь ты пришел РАБОТАТЬ. Тебе не нужно прививать трудовую дисциплину.
Минусы возраста (давай честно)
Технологический разрыв.
Молодые схватывают новое быстрее. Тут ничего не поделать. Ты учишься вдумчиво и дольше, но надежнее.
Эйджизм
Да, он есть. Молодняк будет думать: Ну куда ему в 40 лет учить фреймворки? Ты должен заставить их удивиться.
Собственное эго
Тяжело принять, что тот, кто моложе твоей дочки, сегодня объясняет тебе, как работает Git. С этим надо внутренне бороться и побеждать.
Как не сломаться
Признай: ты джун
Опыт в другой сфере не делает тебя синьором в новой. Сними корону (если есть), и станет легче.
Используй свой возраст
Ты можешь быть посредником между хаосом молодёжи и бизнесом. Ты уже можешь объяснить заказчику то, что молодые пока не умеют формулировать.
Учись у молодых
Пусть 20-летний объяснит тебе что-то новое. Ты не потеряешь лицо — наоборот, приобретёшь союзника.
Мои советы(по традиции)
🔹 Пойми, возраст в IT - это не приговор. Соответствуй возрасту в воспитании, общении, покажи молодым, как нужно вести себя в коллективе, ведь он у тебя не первый.
🔹 Нас (кому за 35+) ценят. HR-ы напрямую об этом говорят, даже если политика компании указывает о наборе молодых. Почему? Перечитай плюсы и старайся соответствовать 😉
🔹 Если ты понимаешь, что у 20-и летнего парня и в самом деле компетенция выше твоей, постарайся забыть о его возрасте и воспринимай его как учителя. Но не позволяй грубить и потыкать возрастом.
Тем более, большинство руководителей наши ровесники и все обо всем понимают (их тоже задрали малолетки 🤣 )
Поэтому я уверен, нет никаких границ, кроме лично выстроенных у себя в голове, чтобы прийти в IT и в 45 ✌️
Главное оставаться человеком.
И быть подписанным на наш канал☺️ 😉
Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность🤝
😎
#motivation
Конечно эту фразу можно использовать в разных ситуациях...😉
Но сегодня мы поговорим об IT и входе в него при 35+ годах.
Ты выучил Java и готов к получению оффера.
Но по твоему, у тебя есть минус: тебе уже 37 лет и часть жизни позади.
Иные профессиональные навыки, иные профессиональные привычки (ведь ты же не лежал на печи 33 года?).
И ты понимаешь, что придется работать с молодыми, похожими на тех, которых ты последние лет 5 учил и посмеивался в бороду.
А теперь они будут учить тебя.
Давай разбираться.
Плюсы возраста
Ты умеешь работать
Практически неважно, где ты работал до этого. У тебя за плечами по-любому были проекты, авралы, кризисы. Ты не паникуешь при фразе "сроки горят" (привыкай к слову "дедлайн"
Если ты смог выучить Java - значит у тебя есть усидчивость и работает голова. А это 75% успеха.
Ты умеешь общаться
Ты так и так научился коммуницировать. И ты не "отбитый", такие уж точно не пойдут учить Java. А значит ты умеешь слушать и договариваться. Это очень ценный навык ("софт-скилл"
Ты осознан
Крайне важное отличие тебя от молодых людей. Ты не пришёл в IT "по приколу", "попробовать", "временно".
У тебя есть цель, мотивация и понимание, зачем ты это делаешь.
У тебя есть дисциплина и понимание "старшинства"
Все, кто застал Советский Союз и 90-е, понимают что такое "Старший", "Начальник", "Руководитель". И если он адекватен, то для тебя в большинстве случаев не стоит вопрос о субординации. Тем более ты знаешь что значит это слово
И если ты осознано смог выучить Java в 35+ лет, ты не пойдешь бухать в рабочие дни и пропускать дейли, ведь ты пришел РАБОТАТЬ. Тебе не нужно прививать трудовую дисциплину.
Минусы возраста (давай честно)
Технологический разрыв.
Молодые схватывают новое быстрее. Тут ничего не поделать. Ты учишься вдумчиво и дольше, но надежнее.
Эйджизм
Да, он есть. Молодняк будет думать: Ну куда ему в 40 лет учить фреймворки? Ты должен заставить их удивиться.
Собственное эго
Тяжело принять, что тот, кто моложе твоей дочки, сегодня объясняет тебе, как работает Git. С этим надо внутренне бороться и побеждать.
Как не сломаться
Признай: ты джун
Опыт в другой сфере не делает тебя синьором в новой. Сними корону (если есть), и станет легче.
Используй свой возраст
Ты можешь быть посредником между хаосом молодёжи и бизнесом. Ты уже можешь объяснить заказчику то, что молодые пока не умеют формулировать.
Учись у молодых
Пусть 20-летний объяснит тебе что-то новое. Ты не потеряешь лицо — наоборот, приобретёшь союзника.
Мои советы(по традиции)
В целом, мне приятно работать программистом, ведь это сообщество интеллектуально развитых людей.
Они, в большинстве случаев, соблюдают нормы приличия и общения, могут понять минусы и плюсы возраста.
Тут практически не услышишь мата, атмосфера общения всегда соответствует "frendly" (можете погуглить🤣 ).
И если Вы сможете влиться в этот процесс, перенять стиль и культуру общения, то возраст станет абсолютно не важным.
Главное оставаться человеком.
И быть подписанным на наш канал
Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒3👍2 1
@JFB_admin_bot
Бот активен и выдает ссылки)))
Залетайте✈️
Если что-то не работает, перезапустите бота)))
Бот активен и выдает ссылки)))
Залетайте
Если что-то не работает, перезапустите бота)))
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Spring AI
Настройка и запуск. Историчность и RAG
В видео мы рассмотрели новый модуль Spring - Spring AI.
🔵 Написали и запустили взаимодействие с Mistral AI (по аналогии можно запустить с любой удаленной или локальной LLM).
🔵 Дали LLM память - настроив сохранение сообщений в БД.
🔵 Модифицировали входящее сообщение в LLM, добавив свою логику.
🔵 Подключили RAG (Retrieval-Augmented Generation) - архитектуру искусственного интеллекта, которая сочетает в себе поиск информации и генерацию ответов.
🔵 Как всегда немного подебажили 😜
Ссылка на Youtube
Ссылка на Рутьюб
Ссылка на GitHub - ждёт ваших звезд☺️
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Настройка и запуск. Историчность и RAG
В видео мы рассмотрели новый модуль Spring - Spring AI.
Ссылка на Youtube
Ссылка на Рутьюб
Ссылка на GitHub - ждёт ваших звезд
Смотрите, ставьте лайки, подписывайтесь на каналы!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Михаил Львович Цетлин (1924—1966) — советский кибернетик, математик; его интересы включали теорию автоматов, теорию управления, информатику и разработку электронных приборов.
Сергей Валерьянович Медведев (22 сентября 1927, Калуга — 28 марта 2012, Москва) — советский и российский учёный-инженер, специалист по автоматике; участвовал в разработке и производстве систем автоматики, в том числе автоматизированных систем контроля.
Андре́й Андре́евич Ма́рков (9 [22] сентября 1903, Санкт-Петербург — 11 октября 1979, Москва) — советский математик, основатель школы конструктивной математики; руководил лабораторией математической логики и структур машин.
Джон Лерой Хеннесси (англ. John LeRoy Hennessy; р. 22 сентября 1952) — американский учёный-инженер; основатель MIPS Technologies, президент Стэнфорда, лауреат премии Тьюринга за развитие архитектуры RISC, используемой в огромном числе современных процессоров.
Ральф Энтони Брукер (22 сентября 1925 — 20 ноября 2019 года) — британский компьютерный учёный, разработал язык Mark 1 Autocode, одну из первых высокоуровневых языков программирования.
1982 — запуск спутника Космос-1409 (US-K типа) — часть советской системы предупреждения о ракетном нападении «Око».
2017 — запуск спутника Космос-2522, часть системы навигации ГЛОНАСС-М.
#Biography #Birth_Date #Events #22Сентября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1