job4j.ru - Практика. Ревью. Результат.
771 subscribers
75 photos
186 links
О жизни в IT:
- Языки: Go, Rust, Java, Kotlin
- Технологии: PostgreSQL, Kafka
- Инфраструктура: Docker, Kubernetes
- Soft Skills: общение, интервью, карьера
Download Telegram
### 🧩 Тренды в программировании: от ООП к проектированию компонентов

Когда мы начинали изучать программирование, многие из нас уделяли огромное внимание объектно-ориентированному программированию (ООП). Это была основа: инкапсуляция, наследование, полиморфизм. 8 лет назад я посвятил большую часть своего курса именно этим темам, чтобы научить студентов создавать грамотный дизайн.

Но сегодня я замечаю важный тренд: роль ООП начинает отступать на второй план. Все больше разработчиков работают с готовыми решениями, такими как фреймворки и инструменты. Создание крупных систем теперь строится не вокруг отдельных классов, а вокруг взаимодействия крупных компонентов — микросервисов, API и облачных сервисов.

🤔 Почему так происходит?
1. Фреймворки решают многое за нас. Spring, Hibernate, Kubernetes и другие инструменты закрывают базовые задачи, что снижает необходимость проектировать сложные библиотеки с нуля.
2. Рост популярности микросервисов. Архитектура систем теперь основывается на взаимодействии автономных компонентов, а не на детальной проработке низкоуровневого дизайна.
3. Функциональное программирование. С появлением новых возможностей Java, Kotlin и других языков многие задачи решаются проще через функции, потоки и реактивные подходы.

⚠️ Но это не значит, что ООП больше не нужно.
- Принципы проектирования остаются важными для понимания основ работы фреймворков.
- Хороший код на уровне микросервиса или библиотеки без ООП просто не построить.
- Способность спроектировать грамотную архитектуру остается редким, но крайне ценным навыком.

🎯 Что важно сегодня:
Современный разработчик должен уметь не только писать код, но и:
- проектировать систему на уровне крупных компонентов;
- понимать, как связаны микросервисы и фреймворки;
- работать с CI/CD, DevOps и облачными решениями.

### 💡 А что вы думаете?
- Нужны ли сегодня глубокие знания ООП?
- Или лучше сразу фокусироваться на практических решениях и фреймворках?

Напишите свое мнение в комментариях👇

#программирование #тренды #ООП #архитектура #фреймворки #Java #Spring
👍4
🚀 Сегодня, 23 ноября, в 19:00 мы проведем новый вебинар, где подробно разберем:
✅ Как завязывать полезные знакомства.
✅ Какие инструменты помогают в нетворкинге.
✅ Как превращать связи в новые карьерные возможности.

🎟 Вход свободный!
📌 Присоединяйтесь по ссылке: https://t.me/+m-R1k8jptX0yNzMy
🎥 На золотом крыльце сидели: ПМ, аналитик и программист... | Ошибки в позиционировании на IT-рынке

Это тот же самый разбор, что и в предыдущем видео, только теперь на других платформах. Если вам удобнее смотреть на ВК или RuTube — ловите ссылки! 👇

📹 Смотрите видео:
👉 На платформе ВК: [vk.com](https://vk.com/video298358674_456239270)
👉 На платформе RuTube: [rutube.ru](https://rutube.ru/video/eedb5a6e40e211ce7f0958a26ab834fb/)

Как вам удобнее смотреть видео? Делитесь в комментариях! ⬇️
🔥7
🎥 Новое видео на канале!

🔥 Три темы, которые помогут вам взглянуть на развитие и программирование под новым углом:
1️⃣ Закаливание – как привычка к холоду помогает укрепить тело и дух.
2️⃣ ООП – почему объектно-ориентированный подход уходит на второй план.
3️⃣ Компонентный подход – новая эра проектирования: гибкость и масштабируемость на первом месте.

📺 Смотри видео здесь: [https://youtu.be/LQ39a_bvRws](https://youtu.be/LQ39a_bvRws)

💬 Делитесь своим мнением в комментариях: согласны ли вы, что компонентный подход вытесняет ООП? 👇

#Закаливание #Программирование #Компоненты #Проектирование
👍5🔥1
Скоро 1 декабря, а это значит, что приближается мой дедлайн по новому блоку CI/CD.

К сожалению, я не укладываюсь в сроки, но зато блок становится больше похожим на полноценный курс по DevOps, а не просто на тему CI/CD.

Что будет в блоке?
Я планирую показать весь процесс развертывания сервисов на Java с нуля. Мы разберем:
- выбор и настройку хостинга, включая работу через SSH;
- локальную установку и настройку Jenkins для сборки проектов;
- создание бекапов баз данных и использование Liquibase для управления миграциями;
- работу с Docker, настройку переменных окружения для микросервисов;
- основы Kubernetes.

Этот блок даст все необходимые знания, чтобы уверенно войти в DevOps в контексте Java-проектов.
🔥23👍5❤4
💼 Подготавливаемся к собеседованию!

📌 Вопрос: Как создать свою аннотацию в Java?
💡 *Аннотации помогают добавлять метаданные к коду, а в этом вопросе важно уметь не только создать свою аннотацию, но и обработать её с помощью рефлексии.*

🚀 Разберитесь с основами:
1. Объявление аннотации: используйте @interface, @Target и @Retention.
2. Обработка аннотации: примените API рефлексии для выполнения логики на основе аннотации.
3. Примеры: создайте аннотацию для логирования, проверок прав доступа или любой другой задачи.

🧑‍💻 Готовы проверить свои знания?
👉 Ответьте на этот вопрос и получите обратную связь:
[🔗 Перейти на платформу](https://job4j.ru/profile/interview/29/question/764)
👍3
🚀 Готовимся к собеседованию!

💡 Вопрос: Что такое JNDI и зачем его используют?

Если не знаешь или хочешь освежить знания — это важная тема для Java-разработчиков, особенно тех, кто работает с корпоративными приложениями. JNDI помогает находить и управлять ресурсами, такими как базы данных, очереди сообщений, и другие службы.

🔍 Проверь свои знания и узнай больше на платформе:
👉 [job4j.ru/profile/interview/30/question/785](https://job4j.ru/profile/interview/30/question/785)

📚 Подготовься к собеседованию вместе с нами!
👍5
Последний месяц года: время подвести итоги и закрыть долги

Декабрь – это не просто последний месяц года, но и уникальное время, которое многие из нас воспринимают по-особенному. Сегодня 4 декабря, и у нас впереди ровно месяц, чтобы сделать то, что, возможно, не удалось за предыдущие 11. Но почему для многих так важно закрыть все свои "долги" перед началом нового года? Давайте разберемся.

Почему декабрь так мотивирует?

Раньше я не понимал, почему люди стремятся в декабре завершить все дела, подвести итоги и освободиться от накопившихся обязательств. Я работал с задачами по мере их поступления, не привязываясь к календарным рамкам. Ведь задачи будут всегда, и их невозможно полностью исчерпать.

Однако в этом году моё восприятие изменилось. Я увидел, что декабрь – это не просто конец года, а время для переосмысления, концентрации и фокусировки. Он словно дает дополнительный заряд энергии и мотивации, чтобы завершить то, что откладывалось. Это касается не только личных дел, но и работы над проектами.

Технический долг: почему декабрь – идеальное время для его закрытия?

Первый раз я задумался о "долгах" в профессиональном плане, когда обратил внимание на раздел *issues* в проекте Job4j. За время существования проекта там накопилось множество нерешенных задач – так называемых "технических скелетов". Это те задачи, которые сложно реализовать или непонятно, как к ним подступиться. Чаще всего, если у задачи нет четких границ, она автоматически становится сложной и откладывается на потом.

Этот декабрь я решил посвятить именно таким "техническим долгам". Закрытие сложных, отложенных задач – это не просто работа, а способ очистить проект от накопившихся "хвостов". Иногда кажется, что эти задачи не принесут значительного эффекта, но на практике даже мелкие изменения могут дать ощутимую пользу для проекта.

Личный подход к работе с задачами

В процессе работы я вывел для себя несколько правил:

1. Фокус на одном разделе. Каждый день я посвящаю время работе с разделом *issues*. Это помогает сохранять фокус и не распыляться.
2. Оценка пользы задач. Я стараюсь оценивать, насколько выполнение той или иной задачи будет полезным. Но важно помнить, что такие оценки часто субъективны – мелкие изменения могут неожиданно стать драйверами роста.
3. Борьба с многозадачностью. Декабрь – отличный месяц, чтобы минимизировать параллельные задачи и сосредоточиться на одном направлении. Наша эффективность падает, когда мы пытаемся делать всё и сразу.

Вывод

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

А как вы планируете провести последний месяц года?
🔥10👍6❤1⚡1
🔥 Новые уроки по DevOps для Java-разработчиков уже доступны!

Добавлены первые уроки блока DevOps:
- Выделенный или облачный сервер
- Установка Debian в VirtualBox
- Настройка сети OpenServer | SSH
- Настройка Docker с Debian
- Установка Jenkins в Docker

Можете уже начинать их проходить! 🚀
🔥18
🔥 Обновление блока DevOps: новые уроки по Jenkins! 🔧

Мы добавили еще *три урока* тема "Jenkins | Архитектура | Pipeline":

1️⃣ Архитектура Jenkins Master-Slave [#505342]
Понимаем, как устроена работа Jenkins в распределенной системе.

2️⃣ Настройка агента | Постоянный агент через SSH [#505343]
Осваиваем настройку агентов через SSH для стабильной работы.

3️⃣ Сценарий Hello World [#505344]
Учимся создавать простой pipeline с использованием Groovy.

#Jenkins #DevOps #CI_CD #Job4j
👍5
🚀 Новые уроки по блоку DevOps для Java-разработчиков уже доступны! 🎉

- Элементы Pipeline [#505345]
- Trigger [#505346]
- Уведомления [#505347]

💥 Сейчас блок DevOps можно приобрести со скидкой! 💥
Общая стоимость: 7990 рублей.

В блок входят темы:
- CI/CD
- Gradle
- Docker
- Kubernetes
- Liquibase
- TestContainer

Не упустите шанс освоить самые актуальные технологии и улучшить свои навыки! 💻✨
👍1
📢 Новый блок "DevOps" в разработке!

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

💡 На данный момент содержание блока выглядит так:

0. Linux сервер - Debian
1. Jenkins: Архитектура, Pipeline
2. Gradle
3. Docker
4. Liquibase: Миграция баз данных
5. Testcontainers: Интеграционные тесты с Kafka
6. Kubernetes и Helm Charts
7. Версионирование, бэкапы, конфигурации, бинарные артефакты
8. GitOps с использованием Flux
9. Мониторинг и логирование: Prometheus, Grafana, ELK

🔧 Этот блок обещает быть действительно объемным и насыщенным. Пока я его дорабатываю, у вас есть возможность приобрести его по специальной цене — всего 7990 рублей.

💰 Как вы понимаете, это цена со скидкой, ведь материал охватывает действительно широкий спектр тем и знаний.

#DevOps #Обучение #Jenkins #Kubernetes #Docker
🔥12❤5🤝2
🔥 Добавлены новые уроки в блок DevOps! 🔥

1️⃣ Обзор Gradle [#505348]
2️⃣ Создание проекта на Gradle [#505349]
3️⃣ Работа с зависимостями в Gradle [#505350]
4️⃣ Жизненный цикл сборки Gradle [#505351]
5️⃣ Что такое плагины в Gradle? [#505352]
6️⃣ Скрипты и кастомизация в Gradle [#505353]
7️⃣ Оптимизация и профилирование Gradle [#505354]

💡 Если вы уже приобрели этот блок, просьба не откладывать выполнение новых заданий!
⚡️ Мне будет приятно сразу получать вашу обратную связь по материалу. Это поможет сделать курс ещё лучше!

Жду ваши отзывы и вопросы. Успехов в изучении! 🚀
👍13🔥4❤1
Channel name was changed to «О жизни в IT | Java | Kotlin | Карьера |»
🔥 Новые уроки в блоке DevOps для Java-программистов!

Теперь вы можете прокачать свои навыки работы с Docker и Jenkins с помощью новых уроков:

- Виртуальные машины | Контейнеры | Архитектура Docker [#505356]
- Образы | Контейнеры | Основные команды [#505357]
- Создание Docker-образа | Dockerfile [#505358]
- Многоэтапная сборка [#505359]
- Слои Docker | Оптимизация сборки [#505360]
- Создание образа Docker внутри Jenkins [#505361]

💥 Стоимость блока со скидкой: 7990 рублей
👨‍💻 Обучение на платформе 👉 [http://job4j.ru](http://job4j.ru)

Развивайтесь с нами и осваивайте современные инструменты DevOps! 🚀
#Java #DevOps #Docker #Jenkins
🔥6
Прокачай мозги: спортивные принципы для твоей учёбы 💪
Спорт развивает многие важные качества - настойчивость, умение добиваться целей и не сдаваться, несмотря на поражения. Почему бы не взять эти принципы на вооружение для твоей успешной учёбы?

🔹 Итак, качество номер один в спорте, без чего никакие достижения невозможны - это дисциплина.
Заставлять себя делать то, что нужно, изо дня в день, выдерживать долгое постоянное напряжение, маленькими шагами наращивать форму и приближаться к своей цели. Все это легче сделать, когда тренировки или учёба встроены в твою рутину. Определи время, когда ты будешь учиться, лучше всего с утра, и неуклонно придерживайся своего режима. Ты удивишься, как незаметно для себя, прикладывая небольшие, но регулярные усилия, ты пройдёшь значительный путь вперед.

🔹 Как в спорте нельзя сразу поднять большой вес, так и в учебе не нужно пытаться освоить все программирование за 3 дня.
Не получится взять вершину с наскока. Ты не должен стремиться нестись, как Феррари, двигайся как танк, медленно, но неукротимо 😎, проходя через любые препятствия.

🔹 А препятствия будут, жизнь не стоит на месте, и подкинет сложностей, будь к этому готов.
И в этом случае не отступай со словами "если я не смог сделать это с первой попытки, значит, не стоит делать этого вообще". Упал - вставай, и делай вторую попытку, третью, четвертую. Пока не одержишь победу. Включи свой азарт победителя, положи джаву на лопатки 👊.

🔹 Заложи в свое расписание качественный отдых.
Твоему мозгу, как и твоему телу, нужно перезагружаться. Отдыхать лучше с помощью той деятельности, которая противоположна тому, как ты работаешь. Подолгу учишься дома в четырёх стенах? Проведи день на природе, на свежем воздухе, разгрузи мозг, напряги тело. Кстати, ты знал, что физическая активность помогает твоему мозгу лучше работать? Мозг активнее снабжается кислородом и питательными веществами.

🔹 Лучше провести плохую тренировку, чем не прийти на неё вообще.
Позанимайся 15-20 минут, реши одну задачу, это лучше, чем не сделать совсем ничего.

🔹 Во время тренировок в тренажёрном зале применяется правило - последний подход нужно продолжать до тех пор, пока мышцы не пойдут в отказ.
Так мы можем добиться более быстрого роста мышц. Не жалей себя, ты можешь больше, чем тебе кажется. И ещё один раз 💪 Когда кажется, что больше не можешь, прочитай ещё одну страницу, реши ещё одну задачу.

🔹 Помни, что путь к мастерству лежит через постоянные тренировки.
Практикуйся. Пиши километры кода. Создавай прочные нейронные связи в своём мозгу.

🔹 И главное - не сдавайся.
Будь упорным, чтобы ничто не могло заставить тебя свернуть с твоего пути. Ты выбрал свою цель, значит, победа будет твоей 🏆.
🔥19👍4❤2
🎉 С Наступающим 2025 Годом! 🎉

Дорогие друзья!

Поздравляем с наступающим Новым годом и предлагаем начать 2025 год с выгодными покупками! В честь праздника — СКИДКА 25% на весь курс или отдельные уровни.

http://job4j.ru/

✨ Акция действует с 25 по 31 декабря 2024 года ✨
🔥13
Друзья!

👋 Напоминаю, кто приобрёл блок DevOps, большая просьба выполнять и выкладывать задания!
Несколько дней назад я завершил тему Docker и не вижу ваших решений.

---

А пока немного освежим в памяти основную концепцию для тех, кто проходит тему самостоятельно.

# Что такое слои в Docker?

Слои в Docker — это ключевая концепция, где каждый шаг в Dockerfile (например, FROM, RUN, COPY) создаёт отдельный слой.

🔑 Это позволяет:
- 🔄 Кэшировать неизменённые слои и ускорять сборку.
- ⏩ Избегать лишней работы: если изменился только один слой, пересобираются только он и последующие.

---

### Пример Dockerfile: сборка Java-приложения через Gradle

# Этап сборки приложения
FROM gradle:7.6.1-jdk11 as build
WORKDIR /app

# Сначала копируем только файлы Gradle для кэширования зависимостей
COPY build.gradle settings.gradle ./
RUN gradle dependencies --no-daemon

# Затем добавляем остальной код и выполняем сборку
COPY . .
RUN gradle build --no-daemon

# Этап формирования финального образа
FROM openjdk:11-jre-slim
COPY --from=build /app/build/libs/myapp.jar /myapp.jar
ENTRYPOINT ["java", "-jar", "/myapp.jar"]


---

### Оптимизация

✅ Использование кэша зависимостей
Команда RUN gradle dependencies позволяет загрузить все зависимости на основе build.gradle и settings.gradle до копирования кода приложения.

🟢 Преимущество: если код меняется, но зависимости остаются прежними, слой с зависимостями берётся из кэша. Это значительно ускоряет сборку.

---

### Нужна ли команда `clean`?

⚠️ В Docker-образе команда `clean` обычно не нужна.
Сборка выполняется в чистой среде, где нет артефактов от предыдущих сборок. Использование clean добавит лишний шаг и замедлит процесс.

Рекомендуем просто использовать:
gradle build


---

### Как ускорить сборку с помощью BuildKit?

BuildKit — это усовершенствованная система сборки Docker.

🔧 Как включить BuildKit:
DOCKER_BUILDKIT=1 docker build -t myapp .


✨ Преимущества BuildKit:
- Параллельное выполнение независимых шагов.
- Более эффективное кэширование слоёв.
- Возможность отслеживания времени выполнения шагов с флагом:

  --progress=plain


Пример команды:
export DOCKER_BUILDKIT=1 
docker build --progress=plain -t myapp .


---

🔥 Хотите стать экспертом в DevOps?
На курсе [DevOps от Job4j](http://job4j.ru/) вы изучите Docker, Kubernetes, CI/CD и другие ключевые технологии!
Практические задания и актуальные примеры помогут вам углубить знания и стать востребованным специалистом.

💼 Присоединяйтесь! 💡
🔥9✍2👍1
Откуда берутся задания для курса?

Часто меня спрашивают: откуда я беру задания для курса? Большинство задач в курсе — это адаптированные кейсы из реальных боевых проектов. Например, одна из задач родилась буквально из решений учеников.

В блоке Spring Core | AOP студенты работают над проектом «Телеграм-бот дневник настроения». Пользователи отмечают свое настроение каждый день, а бот может подбадривать их или награждать достижениями, если хорошее настроение держится долго.

На первый взгляд задача кажется простой — найти самую длинную последовательность положительных дней. Но есть нюансы:
- Пользователь может пропускать дни, не отмечая настроение.
- Или отмечать настроение несколько раз в день, что может исказить логику подсчета.

Эта задача усложняется необходимостью корректной обработки данных и применения алгоритма двух указателей.

Мы решили добавить её в раздел упражнений!
Попробуйте решить её сами. А если захотите, можете опубликовать своё решение на платформе — получите код-ревью и улучшите свои навыки.

👉 https://job4j.ru/profile/topics/206/task_code/565/new_task
*Не забудьте авторизоваться на платформе перед началом работы!*

Ваши решения — это новые идеи и вдохновение для дальнейших задач. Ждём ваши варианты! 🚀
🔥13
💻 Друзья!

Я продолжаю работу над блоком DevOps и с радостью делюсь обновлениями! 🚀
Теперь доступны новые уроки по теме миграции баз данных с использованием Liquibase:

1️⃣ Введение в миграцию баз данных | Liquibase
📌 [#505362]

2️⃣ Liquibase в Spring Boot
📌 [#505363]

💡 Готовьтесь к практическим заданиям и освоению мощного инструмента для управления изменениями в базе данных.

Жду ваших решений и вопросов! 🔥
🔥6❤1