Alekseev Code IT
20 subscribers
10 photos
1 link
Download Telegram
В постах #вопрос_на_собес буду рассказывать про вопросы, которые задаю на собеседованиях. Часто бывает, что кандидаты не понимают, почему у них спрашивают то, что кажется никак не связанным с их стеком технологий. Постараюсь раскрыть эту тему хотя бы на тех вопросах, которые сам задаю
Задача курьера

Постановка задачи
Предположим, что вы работаете backend разработчиком и продуктовый менеджер приносит вам следующую задачу.
У нас есть курьер, которому нужно развезти заказы по определённым адресам оптимальным способом. Оптимизируем мы какой-то показатель стоимости перемещения: например, расходы на бензин или время.
Как будете реализовывать такую фичу?

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

Что ожидаю услышать?
Отлично: это похоже на известную задачу коммивояжёра, которая NP-полная. И есть библиотеки, которые решают её достаточно хорошо. Но! В нашем случае скорее всего не так много адресов, поэтому можно решить полным перебором, а там N! вариантов маршрутов.
Хорошо: это задача с графами, можно что-то придумать. Например, всегда ходить в ближайшую точку или поискать подходящий алгоритм
Удовлетворительно: а в чём проблема? просто переберём все возможные маршруты
Неуд: не знаю, как такое решать


#вопрос_на_собес
👍2
Программирование на бумаге

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

Стремительное развитие IDE привело к тому, что программисты стали хуже программировать. То, что редактор может много чего умного сделать, очень сильно расслабляет: перестаёшь держать контекст в голове, забываешь где и какие переменные / функции определил. Структура кода становится хуже, потому что... а зачем она нужна, если IDE всё подсвечивает и перекинет в нужный участок кода, если понадобится. Страдает читаемость кода, потому что его читает не разработчик, а IDE. Привыкнув полагаться на умный редактор, возникает ситуация, что перестаёшь глубоко понимать код.

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

Умение писать код на бумаге - это не просто причуды олдов. Это важная часть вашего профессионального развития. Это то, что выгодно отличает вас от других разработчиков. Поэтому не надо бояться выходить из зоны комфорта - больше практики и это окупится!
👍3💯1
Работающий код - это только начало

Любой программист может заставить код работать именно сейчас. Однако совершенно другое дело - создать приложение, которое можно будет легко изменить. Это качество и является показателем мастерства программирования.
Сэнди Метц, Ruby, объектно-ориентированное проектирование


Написать код, который решает задачу, может любой программист. Накидал 100500 строк в кучу в один файл, запустил - работает. И так сойдет!

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

Представьте, что вы разрабатываете сервис, который будет жить не месяц, а несколько лет. За это время много чего поменяется: технологии, нагрузки, требования, а команда разработчиков сменится несколько раз! Если ваш код будет гибким и поддерживаемым, он сможет адаптироваться к этим изменениям. Если нет, то станет техническим долгом, который проще удалить.

Мастерство программирования - это не столько умение решать задачи, сколько способность предвидеть будущее. Писать код, который работает сейчас, — это важно, но писать код, который будет легко изменить завтра, — вот цель, к которой мы должны стремиться.
👏1🤔1
Вопрос на собес: тормозит SQL-запрос

Постановка задачи
У вас есть SQL-запрос на чтение из базы данных и время его выполнения стало неоправданно большим. Что будете делать для его ускорения?

Почему спрашиваю?
Хочу понять, какой у кандидата опыт работы с БД, насколько хорошо он понимает устройство баз данных, способы профилирования, оптимизации и масштабирования.

Что ожидаю услышать?
Первым делом, смотрим план выполнения запроса (explain). В нём, например, будет видно, где база делает full scan.

Далее
⁃ Анализируем структуру запроса. Возможно есть подзапросы, которые не нужны. Или выполняются группировки и агрегации, результат которых не используется в бизнес логике. Или запрашиваются все данные, а используются первые N записей
⁃ Проверяем индексы. Довольно часто проблема решается добавлением правильного индекса
⁃ Смотрим на профиль нагрузки: чего больше - чтения или записи? Возможно добавлением индекса только ухудшим ситуацию

Если простые способы не помогли, то можно подумать:
⁃ о разделении запроса на несколько простых
⁃ денормализации данных
⁃ материальном представлении
⁃ масштабировании через шардирование или партиционирование


Случай из практики
Работал с одним легаси проектом на PHP. Одна из страниц веб сервиса жёстко тормозила. Выяснилось, что запрос в базу вытаскивал все данные (все, Карл!), сохранял в массив, а дальше циклом пробегался по нему и выбирал нужный кусок в соответствии с пейджингом

#вопрос_на_собес
👍2🤯1
Совет на собес: не говорите "нет"

На любом этапе собеса не стоит говорить "нет”. Часто вижу, как кандидаты сами себе роют яму, отвечая "нет" на простые вопросы.

Основное правило: избегайте категоричного "нет". Всегда найдется способ ответить положительно и конструктивно, избежать негативной окраски.

У вас есть опыт работы с технологией X?
Напрямую с X не работал, но использовал похожие технологии Y и Z. Изучал X в пет-проектах. Учитывая мой опыт с аналогичными инструментами, уверен, что быстро освою X в боевых проектах.

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

Готовы работать с legacy-кодом?
Конечно. Legacy есть в любом живом проекте, включая те, над которыми я работал. Это нормальная часть эволюции программного обеспечения. Главное – уметь грамотно его развивать и постепенно улучшать. Плох тот программист, который не хочет переписать свой код спустя некоторое время.

Помните, что собеседование - это не экзамен и допрос, а диалог. Ваша основная задача - понравиться, показать потенциал и готовность развиваться.
👍2✍1🔥1👌1
Как развивать айтишников: практический подход

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

1. Совместное изучение материалов
- Организуйте регулярные встречи для разбора курсов Стэнфорда, MIT или других топовых вузов (благо такого материала в свободном доступе достаточно)
- Создайте книжный клуб: выбирайте актуальные технические книги, статьи и обсуждайте по главам
Важно: не просто смотреть/читать, а именно разбирать и обсуждать, применять знания к текущим проектам.

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

3. Внутренние выступления
- Регулярные технические митапы, где разработчики делятся опытом
- Короткие рассказы на 5-10 минут о новых технологиях или найденных решениях (можно в рамках дейликов или других командных мероприятий)
- Разбор сложных багов или интересных кейсов
Важно: поощрять выступления джунов, это отличный способ прокачать soft skills. От синьоров просить рассказы о сложном простым языком.

Развитие команды - это марафон, а не спринт. Не стоит пытаться внедрить всё и сразу. Начните с малого, получите обратную связь, скорректируйте подход.

А какие мероприятия помогают развиваться вам или вашим коллегам? Поделитесь в комментариях
🔥3👍2👏1
Вопрос на собес: максимальное значение int

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

Почему спрашиваю?
Этот вопрос помогает выявить несколько важных аспектов:
- Понимание внутреннего устройства типов данных
- Знание ограничений языка программирования
- Умение выполнять простые математические расчёты
- Способность объяснить технические детали

Что ожидаю услышать?
Хороший ответ должен включать следующие моменты:
- Указание на то, что в разных языках это реализовано по-разному
- Для языков с фиксированным размером (C++, Java): максимальное значение для 4 байт = 2^31 - 1 ≈ 2.147 млрд
- Есть языки без ограничений (Ruby, Python)
- Объяснение, почему именно такое число: 4 байта = 32 бита, один бит под знак, остальные под значение

Вопрос со звездочкой
Как программно получить количество цифр в числе?

👍 если ответил на вопрос
👍2
Для именования спринтов мы используем интересный подход. Придумал его предыдущий лид команды бекенда.

В названии загадывается элемент таблицы Менделеева. Придумывает команда бека (так сложилось). А на старте спринта кросс-платформенная команда пытается его угадать.

Например, у нас были спринты "Абанутобани" (Сера) и "Друг Геннадия" (Ванадий)

Текущий спринт мы назвали "Роща остролиста". Как думаете, какой химический элемент мы загадали?
🤣2👍1🔥1🤔1
Новый спринт назвали: Berghain.
Как думаете, какой химический элемент загадан?

Berghain - это известный техно-клуб в Берлине. А загадали мы Технеций
🤔2
В этот раз проще, новый спринт назвали: Бобр курва

Это полоний, радиоактивный химический элемент, открытый супругами Кюри. И названный в честь родины Марии Кюри - Польши. Мем бобр курва пришел к нам как раз оттуда
👍3🔥1😱1🤣1
Новый спринт, новая загадка: Пекловод

Это Плутоний. Назван в честь планеты Плутон. В римской мифологии Плутон (он же Аид в греческой мифологии) - бог смерти и подземного царства мертвых
😁1
У Deepseek не получилось ответить на загадку с Пекловодом, но он смог объяснить правильный ответ
🔥1😁1
Виновата скамейка

Есть такой известный тест для детей. Ребенку показывают две картинки, на обеих изображены мальчик и скамейка. На первой мальчик бежит, на второй - спотыкается о скамейку и падает. На вопрос: "кто виноват?" дети в три года отвечают, что скамейка, так как она помешала мальчику. Дети постарше говорят, что виноват мальчик, так как не посмотрел, куда бежит.

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

Но есть разработчики, у которых до сих пор виновата скамейка. И их много. Они везде, возможно даже это вы. А может и я 🙈
😁3🔥1🤔1💯1
Очередной спринт назвали: Кофе у обочины
Какой химический элемент загадали на этот раз? ⚗️

Цирконий
🤔1
Цикорий часто используют как замену кофе. Дикорастущий цикорий встречается на лесных опушках, на лугах, пустырях, по кромке полей и вдоль просёлочных дорог, около населённых пунктов.

Поэтому кофе у обочины - цикорий, который созвучен с цирконием
Сможете ответить на вопрос: куда впадает Волга?

Под спойлером ответ, ставьте 👍 если правильно ответили и 👎 если прогуливали географию в школе

Куда впадает река Волга? Из молодых людей, в возрасте от 18 до 24 лет, только 18 процентов знает, что Волга впадает в Каспийское море. Среди старшего поколения, закончившего еще советскую школу, правильный ответ тоже знают не все, но все же это 60-70 процентов
👍4
Хотите с утра задачку по математике за 4 класс общеобразовательной программы?

У Ани 35 монет по 2 руб. и 5 руб., причем сумма денег в 2-рублевых монетах равна сумме денег в 5-рублевых монетах. Сколько у Ани 5-рублевых монет?

Через систему уравнений мы взрослые дядьки решим быстро. Но дети это ещё не проходили. Сможете придумать "детское" решение?
🤔2👍1🔥1
Загадка на этот спринт: Тень солнца под землёй

Золото
👍1
В журнале Квантик попалась интересная задача. Сначала подумал, что за фигня? При чем тут математика и логика?

Сначала не понял, а потом как понял)