job4j.ru - Практика. Ревью. Результат.
771 subscribers
75 photos
186 links
О жизни в IT:
- Языки: Go, Rust, Java, Kotlin
- Технологии: PostgreSQL, Kafka
- Инфраструктура: Docker, Kubernetes
- Soft Skills: общение, интервью, карьера
Download Telegram
Напоминаю о вебинаре в эту субботу «Проведение 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 так же.
✨ Сегодня, 17 ноября 2024 года, в 19:00 состоится вебинар на тему:
«Первые рабочие месяцы на новом месте»

💬 Приглашённый гость:
Антон Кунах — эксперт с более чем 6-летним опытом работы в IT. В его профессиональном портфолио: Тинькофф, Яндекс, СберТех и T1 Consulting.

💡 Что обсудим:
🔹 Подготовка к собеседованию, успешное прохождение этапов и работа с отказами.
🔹 Как распознать «красные флаги» компании, куда не стоит идти.

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

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

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

Не упустите шанс разобраться в ключевых аспектах первых рабочих месяцев! 🚀
👍4
💼 На золотом крыльце сидели: ПМ, аналитик и программист...
Почему важно правильно позиционировать себя на IT-рынке?

Недавно провел собеседование, где кандидат уверенно начинал как разработчик, а в середине вдруг заявил, что больше аналитик и ПМ. 🤔
В итоге это стало его ключевой ошибкой.

👉 Как не запутаться в ролях и не потерять фокус на карьере? Разбираю ошибки и делюсь советами.

🎥 Смотри видео на YouTube: https://youtu.be/eR6goNmx3ig

📚 Хочешь стать программистом? Начни с курса по Java: https://job4j.ru/

#Собеседование #Разработчик #Java #ITКарьера #Job4j
👍3
Когда ты полностью полагаешься на IDEA ))
import org.jvnet.hk2.annotations.Service;
import org.springframework.beans.factory.BeanNameAware;
import ru.job4j.content.Content;

@Service
public class BotCommandHandler implements BeanNameAware {
private String beanName;
😁4
✨ Друзья! ✨

Только что заметил, что забыл открыть доступ к разделу «Корутины», а также к проекту и контрольным вопросам по Kotlin.

🔥 Сейчас все добавлено! 🔥
👍4🔥2
💡 Как наладить полезные связи и ускорить карьерный рост? 💡

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

🚀 Уже в субботу, 23 ноября, в 19:00 мы проведем новый вебинар, где подробно разберем:
✅ Как завязывать полезные знакомства.
✅ Какие инструменты помогают в нетворкинге.
✅ Как превращать связи в новые карьерные возможности.

🎟 Вход свободный!
📌 Присоединяйтесь по ссылке: https://t.me/+m-R1k8jptX0yNzMy
🔥 История успеха: как я нашла путь в разработку

Все началось с полного выгорания на работе ручным тестировщиком. Я устала от бессмысленности своей работы и решилась на рискованный шаг — уволиться без нового места. Без поддержки моего молодого человека, в том числе финансовой, вряд ли бы что-то получилось.

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

⚡️ Что помогло:
- Знания с курса, дополнительные материалы и советы HR по резюме.
- Использование инструментов вроде ChatGPT и StackOverflow.
- Готовность брать на себя задачи, даже если казалось, что шансов мало.

💡 Результат:
Меня взяли программистом-тестировщиком, и я наконец начала заниматься тем, что действительно люблю. Сначала это были модульные тесты, а сейчас — полноценная разработка. Более того, меня впервые повысили внутри компании!

Теперь я горжусь своей работой и чувствую, что все усилия были не напрасны.

---

✨ Рекомендации на основе этой истории

1. Не бойтесь менять свою жизнь
Если работа вызывает выгорание, рассмотрите смену сферы деятельности.

2. Поддержка близких важна
Открыто говорите с родными о своих планах, их помощь — ваш ресурс.

3. Учитесь постоянно
Курсы, самообучение и практика дают необходимые навыки.

4. Работайте над резюме
Уберите пробелы, акцентируйте внимание на своих сильных сторонах.

5. Учитесь на ошибках
Провалы на собеседованиях — это опыт, который делает вас сильнее.

6. Практикуйте стрессовые ситуации
Тренируйте решение задач под давлением, чтобы не бояться лайвкодинга.

7. Используйте доступные инструменты
ChatGPT, StackOverflow и другие ресурсы помогают решать задачи быстрее.

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

9. Работайте над устойчивостью
Здоровая психика и уверенность в себе — ключ к успеху.

10. Не занижайте планку
Верьте в себя и помните, что трудности — временные.

---

💬 Поделитесь своей историей: как вы преодолевали трудности на пути к своей мечте?
🔥8👍6
### Вопрос на собеседовании 💼

Как правильно переопределить `equals` в следующей структуре?

class TreeNode {
private int value;
private TreeNode left;
private TreeNode right;

public TreeNode(int value) {
this.value = value;
}

public int getValue() {
return value;
}

public TreeNode setValue(int value) {
this.value = value;
return this;
}

public TreeNode getLeft() {
return left;
}

public TreeNode setLeft(TreeNode left) {
this.left = left;
return this;
}

public TreeNode getRight() {
return right;
}

public TreeNode setRight(TreeNode right) {
this.right = right;
return this;
}

@Override
public boolean equals(Object o) {
// TODO - implement this
return false;
}
}


### Ответ ✅

Переопределение equals должно учитывать:

1. Тип объекта, чтобы предотвратить ClassCastException.
2. Поля, которые нужно сравнивать, включая вложенные узлы.
3. Защиту от циклических ссылок.

Корректная реализация может выглядеть так:

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TreeNode treeNode = (TreeNode) o;
return value == treeNode.value &&
(left == null ? treeNode.left == null : left.equals(treeNode.left)) &&
(right == null ? treeNode.right == null : right.equals(treeNode.right));
}


Объяснение:
- Сравниваем текущий объект с переданным (this == o).
- Проверяем, что объект не null и принадлежит тому же классу (getClass()).
- Сравниваем value, а также рекурсивно проверяем левый и правый узлы, учитывая возможное их отсутствие (null).

---

Больше вопросов с собеседований на платформе: [Job4j](https://job4j.ru/profile/interview) 🚀
👍9
### 🧩 Тренды в программировании: от ООП к проектированию компонентов

Когда мы начинали изучать программирование, многие из нас уделяли огромное внимание объектно-ориентированному программированию (ООП). Это была основа: инкапсуляция, наследование, полиморфизм. 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