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

Вопрос: "Как использовать Docker Compose для запуска микросервисов, если каждый из них находится в отдельном репозитории? Какие подходы и стратегии можно применить для управления их конфигурацией и автоматизацией деплоя?"

Проверьте свой ответ и узнайте правильное решение здесь:
🔗 [Проверь ответ](https://job4j.ru/profile/interview/13/question/354)

#CI_CD #Docker #DevOps #Собеседование #job4j
👍1
Про развитие

🧩 5 лет назад я записал видео о том, как развиваться программисту. Тогда я считал, что главный показатель роста — это доход. Чем он выше, тем лучше. Но сейчас, с опытом, я понимаю, что это лишь часть пути. В этой статье поделюсь своим следующим шагом к мастерству.

💼 Вчера я проводил собеседования на позицию мидл программиста для проекта в медицинской сфере. Классическая микросервисная архитектура: куча сервисов, Kafka, Docker, интеграции через SOAP, REST и gRPC. Средняя зарплата — 250-300 тыс. руб. в месяц на полный рабочий день, возможна частичная занятость.

🤖 В прошлые разы я настаивал на том, чтобы HR отбирали резюме только с наличием GitHub профиля. К сожалению, таких кандидатов оказалось крайне мало. Основной аргумент тех, кто не делится своим кодом, — время. У них якобы нет времени на свои проекты, ответы на Stack Overflow или ведение блога. Но действительно ли они такие загруженные?

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

💡 Как же перейти на этот уровень? Делитесь своим опытом! Самый простой способ — это пет-проекты. Раньше термин «пет-проект» вызывал у меня негативные эмоции — казалось, что это что-то незначительное и стыдное. Но со временем я изменил мнение. Пет-проект — это способ выразить свой опыт. Если вы не умеете пользоваться инструментами или настраивать pipeline, это будет видно в вашем проекте.

🚀 Я по-прежнему прошу кандидатов показывать их GitHub профиль, хотя в 99% случаев слышу, что там «ничего интересного, только старые проекты». Но по мне, это показатель отношения. Пусть проект будет маленьким, но в нем должна быть система сборки, статические инструменты, интегрированный CI/CD и описание, как его собрать. Это знак, что программист действительно хочет развиваться, а не просто клацать по клавиатуре и жаловаться на коллег.

🔍 В заключение. Я настоятельно рекомендую вести свои пет-проекты. Пусть они будут маленькими, но уютными: локальные утилиты, однофункциональные сервисы, Telegram-боты. Опишите, что делает ваш проект. Покажите высокий профессионализм в ведении публичного репозитория. Во-первых, это просто интересно. Во-вторых, это может стать решающим фактором на собеседовании.

📝 Что вы думаете? Стоит ли тратить время на пет-проекты или лучше глубже изучать технологии и читать книги? Делитесь своими мыслями и ссылками на ваши проекты в комментариях! 👇

#развитие #петпроекты #ITсообщество #программисты #GitHub #карьера
🔥8👍4
Добавили новую функцию "Изучить" в разделе Собеседования! Теперь ты можешь готовиться к интервью прямо на платформе:

1. Изучай вопросы и понимай ключевые моменты.
2. Пробуй отвечать на вопросы и оценивай свои результаты.
3. Следи за прогрессом в статистике и улучшай свои навыки!

Попробуй уже сейчас: [job4j.ru/profile/interview](https://job4j.ru/profile/interview)
🔥18❤4
Приглашаю на вебинар по проведению технических собеседований!

Хочу поделиться своим опытом проведения технических собеседований и показать, как проходит процесс интервью от начала до конца. Собеседование будет состоять из 5 частей:

1. Алгоритмическая задача
2. SQL
3. Проектирование системы
4. Код-ревью
5. Опыт работы с CI/CD и процессы разработки

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

Оплата договорная.

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

1. Что такое реактивное программирование, и каковы его основные принципы?

2. Какие существуют библиотеки для реактивного программирования на Java, и в чем их особенности?

3. В чем заключается разница между `Mono` и `Flux` в Project Reactor?

4. Какие ключевые методы `Mono` и `Flux` ты знаешь?

5. Что такое *schedulers* в реактивном программировании?

6. Какие типы *schedulers* ты знаешь, и когда целесообразно их использовать?

7. Как работают шедулеры `immediate()`, `single()`, `boundedElastic()`, `parallel()`, и как они влияют на производительность?

8. В чем заключается разница между *hot* и *cold publishers*, и какие примеры их применения можно привести?

9. Как работает реактивный доступ к SQL базам данных?

10. Как работает реактивный доступ к NoSQL базам данных?

11. Что такое *event loop* и как он используется в реактивных приложениях?

12. В чем суть *Reactive Manifesto*, и как его основные принципы помогают строить реактивные системы?

13. Что такое реактивный стриминг, и как он реализован в Project Reactor?

14. Каковы основные плюсы и минусы реактивного программирования?

15. В каких ситуациях реактивный подход может быть неэффективен или сложен для реализации?

16. Какие основные отличия существуют между реактивной моделью и традиционным многопоточным программированием?

17. Какие паттерны проектирования наиболее полезны при создании реактивных приложений?

18. Что такое *backpressure* и как его можно контролировать в реактивных потоках?

19. Какие методы *backpressure* предоставляет библиотека Project Reactor, и когда их стоит использовать?

20. Какие преимущества имеет реактивное программирование при создании высоконагруженных систем?

21. Можешь описать типичный процесс от подписки до завершения для цепочки реактивных операций?

22. Как осуществлять тестирование реактивного приложения?

---

Изучить теорию к вопросам можно тут:

https://job4j.ru/profile/interview/28
🔥2👍1
🎙 Вебинар 6: Адаптация на новом месте работы в IT 🚀

Приглашенный гость: Кунах Антон. Опыт работы 6+ лет.

Как быстро освоиться на новом месте, справиться с ожиданиями и реальностью, а также успешно войти в новую команду? Приглашаем вас на вебинар с опытным гостем, который прошел путь от инженера до тех-лида, работая в таких компаниях, как Тинькофф, Яндекс, Сбербанк-Технологии и T1 Consulting!

🌐 Основные темы вебинара:
- ✅ Адаптация в новом коллективе — как привыкнуть к команде и сразу быть полезным?
- ✅ От ожиданий к реальности — что делать, если проект не оправдал надежд?
- ✅ Этапы успешного онбординга — от знакомства с процессами до быстрого перехода к работе.
- ✅ Технологический стек — как быстро освоить новые инструменты и версии Java, Spring, Kafka, Docker и многое другое.
- ✅ Роль тим-лида в адаптации — как поддерживать и развивать команду в условиях изменений?

👥 Для кого: для тех, кто готовится к переходу на новую работу, меняет сферу или хочет улучшить навыки адаптации в IT.

💰 Стоимость участия: 500 рублей. Писать в личные сообщения [@parsentev](https://t.me/parsentev) для регистрации.

🕑 Когда: Уточняется
📍 Где: Телеграм

Присоединяйтесь, будет интересно! Получите полезные инсайты от профессионала и узнайте, как сделать адаптацию максимально эффективной. 👩‍💻👨‍💻

#вебинар #адаптация #онбординг #IT #карьера #тимлид #технологии
### План вебинара 6: Адаптация на новом месте работы в IT

Продолжительность: 1.5 часа

---

#### 1. Вступительное слово (5 мин)
- Приветствие участников.
- Краткое представление гостя и его профессионального опыта.

---

#### 2. Профессиональный путь и адаптация (20 мин)

Вопросы:
1. Рассказать о карьерном пути: как гость пришел в IT, ключевые проекты и их влияние на профессиональный рост (10 мин).
2. Основные трудности на первых этапах работы в новых командах (10 мин).

---

#### 3. Практические аспекты адаптации (25 мин)

Вопросы:
3. Как удавалось быстро входить в новые проекты, несмотря на разнообразный стек технологий? (10 мин)
4. Подготовка к первому дню на новой работе, привычки и ритуалы, помогающие адаптироваться (5 мин).
5. Методы налаживания командного взаимодействия, как находить общий язык с новыми коллегами (10 мин).

---

#### 4. Ожидания и реальность (15 мин)

Вопросы:
6. Опыт работы, где ожидания не совпали с реальностью: когда стоит оставаться, а когда – уходить? (10 мин).
7. Как справляться с корпоративной культурой, к которой сложно адаптироваться? (5 мин).

---

#### 5. Лидерство и адаптация других (20 мин)

Вопросы:
8. Помощь новичкам в адаптации и улучшение процесса онбординга (10 мин).
9. Сложности при адаптации сотрудников как тимлид, подходы к решению проблем (10 мин).

---

#### 6. Технологии и профессиональный рост (15 мин)

Вопросы:
10. Адаптация к новым технологиям и поддержание актуальности знаний (10 мин).
11. Подход к проектам с новыми технологиями, обучение с нуля (5 мин).

---

#### 7. Заключительные советы и Q&A-сессия (15 мин)

Заключительные вопросы:
12. Главный совет тем, кто впервые выходит на новое место (5 мин).

Q&A с аудиторией: Ответы на вопросы участников, обсуждения (10 мин).

---

Итоги: Подведение итогов, благодарность гостю и участникам.
❤1
Напоминаю о вебинарах, которые помогут улучшить ваши навыки в IT и подготовиться к собеседованию!

🌐 Вебинар 5: Разбор собеседования
🔖 Два гостя: Идрисов Азат (опыт 3+ года) и Nikita Nesterenko (опыт 3+ года).
⏰ Дата: 09.11.2024 в 19:00 по Мск.
📅 Разбор процесса собеседования от начала до конца. Детальные этапы интервью.

🌐 Вебинар 6: Адаптация на новом месте работы в IT 🚀
🔖 Приглашенный гость: Кунах Антон (опыт 6+ лет).
⏰ Время: 16.11.2024 в 19:00 по Мск.
📅 Особенности входа в новую команду и адаптации на рабочем месте. Опыт от эксперта, работавшего в таких компаниях, как Тинькофф, Яндекс, Сбербанк-Технологии, T1 Consulting.

🔗 Для участия пишите @parsentev.
💲 Стоимость: 500 руб.
Скуфикация. Пошаговый план для программиста. Сарказм.

Что такое скуфикация?

Скуфикация — это процесс, при котором человек теряет интерес и мотивацию к своей работе, превращаясь в скучного и пассивного специалиста, выполняющего задачи механически, без энтузиазма и стремления к развитию. Причины скуфикации могут включать:

Монотонность и отсутствие вызовов в работе.

Недостаток новых знаний и профессионального развития.

Перегорание из-за чрезмерных нагрузок.

Отсутствие личной вовлеченности в проекты.

Изоляция от профессионального сообщества и коллег.
👍3❤1👎1
## 💭 Скуфикация. Пошаговый план для программиста. Сарказм.

### 🙄 Что такое скуфикация?
Скуфикация — это процесс, при котором человек теряет интерес и мотивацию к своей работе, превращаясь в скучного и пассивного специалиста, выполняющего задачи механически, без энтузиазма и стремления к развитию. Причины скуфикации могут включать:

- 🔁 Монотонность и отсутствие вызовов в работе.
- 📚 Недостаток новых знаний и профессионального развития.
- 🔥 Перегорание из-за чрезмерных нагрузок.
- 💷 Отсутствие личной вовлеченности в проекты.
- 🚶‍♂️ Изоляция от профессионального сообщества и коллег.

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

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

- 📰 Подписывайтесь на новостные ресурсы и блоги в IT-сфере (и делайте вид, что понимаете, о чём они).
- 🚀 Участвуйте в хакатонах и конференциях (не забудьте взять с собой кофе и запасной мозг).
- 📚 Пробуйте себя в новых языках программирования и технологиях (ведь зачем учить один язык хорошо, когда можно знать десять плохо?).

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

### 🏠 2. Баланс между работой и личной жизнью
Перегорание — одна из главных причин, по которой программисты теряют интерес к своей работе. Чтобы этого избежать:

- ⏳ Установите четкие границы между работой и отдыхом (и игнорируйте сообщения босса после 23:00).
- 💃 Занимайтесь хобби вне программирования: спортом, искусством, путешествиями (чтобы потом всем рассказывать, как у вас нет на это времени).
- 🍔 Поддерживайте здоровый режим сна и питания (да, пицца считается здоровой, если добавить салат).

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

### 🌟 3. Работайте над проектами, которые вам интересны
Интересные и значимые проекты — залог мотивации и желания развиваться. Если ваша работа превращается в рутину:

- 📊 Обсудите с руководством возможность участвовать в новых задачах или проектах (желательно, таких, которые ещё не обсуждались на десятке совещаний).
- 😼 Найдите способы внести свою креативность в текущие задачи (например, замените все комментарии на шутки про котиков).
- 🎡 Пробуйте работать над собственными проектами в свободное время (потому что ваше свободное время явно не для отдыха).

### 🚗 4. Не бойтесь менять рабочее окружение
Если вам кажется, что ваше место работы не способствует вашему развитию или делает вас скуфом:

- 🔍 Изучите рынок труда, чтобы понять, какие возможности есть за пределами текущей компании (и обнаружьте, что везде пишут одно и то же).
- 💸 Рассмотрите возможность фриланса или перехода в другую компанию, которая больше соответствует вашим интересам (а может, и вашей мечте о работе в пижаме).
- 💬 Поговорите с коллегами и ментором, чтобы понять, что можно изменить в текущей работе (и узнайте, что всё и так идеально).

### 👥 5. Общайтесь с сообществом
Изоляция — один из факторов, способствующих тому, что программист становится скуфом. Общение с коллегами и участие в профессиональных сообществах помогает поддерживать мотивацию и получать новый взгляд на вещи:

- 🗨 Участвуйте в обсуждениях на профессиональных форумах и в чатах (и не забывайте оставлять комментарии “+1”).
- 🌐 Ищите сообщества по интересам, будь то open-source проекты или группы, обсуждающие последние тренды (где все притворяются, что это невероятно интересно).
- 💡 Делитесь своими знаниями, обучая других и выступая с докладами (даже если на ваши доклады приходит только кот).
👍5👎1
### 📚 Заключение
Стать скуфом легко, если упустить из виду баланс между профессиональной жизнью и личными потребностями. Постоянное развитие, поддержка баланса и участие в значимых проектах — это ключевые шаги, чтобы оставаться мотивированным и продолжать свой путь как успешный программист. Следуйте этим рекомендациям (или хотя бы делайте вид, что следуете), и ваша карьера будет не только успешной, но и наполненной смыслом и удовольствием (или хотя бы мемами).

📸 А как вы проводите свои выходные? Делитесь фото и историями в комментариях! ☀️

#программирование #мотивация #балансжизни #выходные #ITюмор
👍3👎1
Статический анализ кода в Kotlin | Detekt

⚡️ Как подключить и настроить Detekt в вашем Kotlin-проекте с использованием Kotlin DSL

✅ Detekt — это статический анализатор кода, который помогает находить ошибки, стилистические проблемы и потенциальные анти-паттерны в ваших проектах на Kotlin.

Шаги по подключению:
1. Добавьте плагин в build.gradle.kts:
   plugins {
kotlin("jvm") version "1.8.0"
id("io.gitlab.arturbosch.detekt") version "1.23.0"
}


2. Создайте конфиг: Выполните ./gradlew detektGenerateConfig для создания detekt.yml.

3. Настройте Detekt в `build.gradle.kts`:
   detekt {
toolVersion = "1.23.0"
config = files("$projectDir/detekt.yml")
buildUponDefaultConfig = true
}


4. Запуск Detekt: Анализ проводится командой:
   ./gradlew detekt


Полезно:
- Настройте detekt.yml для своих стилевых преференций.
- Включите Detekt в CI/CD, чтобы поддерживать качество кода.

Больше информации о Kotlin в нашем курсе на платформе job4j.ru!
Напоминаю о вебинаре в эту субботу «Проведение IT-собеседований: взгляд изнутри», который состоится 9 ноября 2024 года в 19:00 по московскому времени.

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

Формат вебинара – перекрёстные вопросы, что позволит каждому спикеру задать вопросы друг другу и поделиться своим уникальным подходом. Присоединяйтесь, чтобы узнать, как проходит отбор кандидатов изнутри и что важно для успешного прохождения IT-собеседования.
❤5
Приглашаю на вебинар по теме: Эффективный нетворкинг для IT-специалистов

Время проведения: 23 ноября 2024 в 19:00

Участие бесплатное. Чтобы принять участие, пишите мне в Telegram @parsentev

Приглашенный гость: Stanislav Kondratev

---

1. Введение в тему и цели вебинара (5-10 минут)

- Обзор, что такое нетворкинг и почему он важен для IT.
- Цели вебинара: показать, как построить полезные профессиональные связи, создать персональный бренд, найти возможности для сотрудничества и повышения квалификации.

2. Основы нетворкинга в IT: где искать связи? (10 минут)

- Платформы и мероприятия для нетворкинга:
- Профессиональные соцсети (LinkedIn, Twitter).
- Конференции и митапы.
- Вебинары, хакатоны, DevOps-чаты, технические форумы.
- Советы по выбору мероприятий и каналов для эффективного общения.

3. Создание профессионального образа (15 минут)

- Как создать профиль, который привлекает внимание (LinkedIn, GitHub).
- Оптимизация профиля: ключевые навыки, проекты, репутация.
- Советы по поддержке активного портфолио проектов на GitHub и личного блога.

4. Как начать общение и завязать контакт (10 минут)

- Стратегии для первого обращения:
- Персонализированные сообщения и общение на профессиональном языке.
- Вопросы, которые помогают завязать конструктивное общение.
- Примеры успешных первых контактов.

5. Поддержка и развитие контактов (10 минут)

- Как поддерживать связь с новыми знакомыми:
- Рекомендации по частоте взаимодействий.
- Общение без навязывания: поддержка на LinkedIn, обмен полезными материалами, поздравления.
- Создание взаимовыгодных связей, обмен опытом, участие в проектах и комьюнити.

6. Практический блок: примеры успешного нетворкинга (10-15 минут)

- Истории успешных IT-специалистов, которые нашли работу, партнёрства или менторов через нетворкинг.
- Разбор кейсов: как они нашли подход к своим контактам, какие шаги предпринимали.

7. Ответы на вопросы участников и общая дискуссия (10-15 минут)

- Вопросы участников о том, как применять принципы нетворкинга на практике.
- Общая дискуссия, обмен личным опытом и рекомендациями.

8. Заключение и ресурсы для дальнейшего изучения (5 минут)

- Основные выводы и практические советы.
- Полезные ресурсы для развития нетворкинга: книги, статьи, онлайн-курсы.
- Поддержка участников после вебинара (группы в соцсетях, рассылки, материалы для скачивания).
🥰1
Код-ревью
    @Override
public Optional<Ticket> create(IsSeatTakenDto isSeatTakenDto,
Ticket ticket, HttpSession session) {
if (isSeatTaken(isSeatTakenDto)) {
return Optional.empty();
}
try (var connection = sql2o.open()) {
var sql = "INSERT INTO " +
"tickets(session_id, row_number, place_number, user_id)" +
" VALUES (:sessionId, :rowNumber, :placeNumber, :userId)";
var query = connection.createQuery(sql, true)
.addParameter("sessionId", ticket.getSessionId())
.addParameter("rowNumber", ticket.getRowNumber())
.addParameter("placeNumber", ticket.getPlaceNumber())
.addParameter("userId", session.getAttribute("id"));
int generatedId = query.executeUpdate().getKey(Integer.class);
ticket.setId(generatedId);
}
return Optional.of(ticket);
}

Что думаете? Пиши ответы в комментарии.
Продолжаем тренироваться. Перепишите код через Stream API.

    @Override
public List<UserDTO> getPostsByUserId(List<Integer> userIds) {
Map<Integer, UserDTO> userMap = new HashMap<>();

postRepository.findByUserIdIn(userIds).forEach(post -> {
int userId = post.getUser().getId();
userMap.computeIfAbsent(userId, id ->
new UserDTO(userId, post.getUser().getFullName(), new ArrayList<>()
)).getPosts().add(post);
});

return new ArrayList<>(userMap.values());
}
Добавили статистику по прогрессу в разделе вопросы на интервью.

👍Пробуйте https://job4j.ru/profile/interview/16
🔔 Уже сегодня в 19:00 обсуждаем стратегию и тактику поведения на собеседовании!
💼 Разберём топ-100 вопросов и ответов.
Присоединяйтесь, чтобы подготовиться и уверенно пройти интервью!
🔥8
Потренируемся?
Метод падает с OutOfMemoryError
    fun notifyByTaskUpdate(task: Task) {
scope.launch {
val template = """
Обновлено описание урока ${task.name} [#${task.number}]
https://job4j.ru/profile/exercise/${task.topicId}/task-view/${task.id}"
""".trimIndent()
userRepository
.findAllByActiveAndPayments()
.filter { messengerRepository.isUserNotificationOn(it.id) }
.forEach {
bot?.send(it.id, template)
}
}
}

Что вызывает ошибку? Как поправить?
Обновление платформы
Добавили сложность вопросов к собеседованиям.
5 уровней: Entry, Junior, Middle, Senior, Expert.
👍 Тренируй вопросы в соответствии со своим уровнем!
➡️ https://job4j.ru/profile/interview/28
🔥7👍4
Ребята, вебинар на сегодня переноситься на завтра. В 19 00 так же.