Лирическое отступление
Мне 32 года из которых около трех лет активно изучаю python. Я являюсь тем самым «в IT`шником», который решил что у него достаточно сил чтобы побороться со студентами за место на стажировку в Яндексе. Подготовка к Яндексу заняла более полу года. К тому времени у меня завершенная стажировка в стартапе, пара проектов на заказ, несколько прочитанных книг и несколько учебных проектов.
Получив фидбек об успешном прохождении второй алгоритмической секции я точно не ожидал, что впереди 8 месяцев отказов и практически отсутствие интереса ко мне среди команд.
Дисклеймер: вся информация является моим личным мнением, отнеситесь к ней соответственно.
Общая информация о финалах
Собеседования с командами проходят по следующей схеме:
-
Ты рассказываешь о себе, своем опыте
-
Интервьюер задает тебе интересующие его вопросы: по твоему опыту, техническим знаниям, могут дать задачи на подумать либо покодить, твоей готовности к работе, мотивации и тд
-
Представитель команды рассказывает о своем проекте и иногда условиям прохождения стажировки у них
-
Ты задаешь интересующие тебя вопросы интервьюеру
Чем больше у тебя отказов и хуже отзывы в начале, тем меньше команд хотят приглашать тебя на собеседование, даже если твои фидбеки в итоге становятся хорошими. Получив первые пять отказов я узнал что можно было отказываться от собеседований с командами, которые мне были не интересны. Резюмирую: не интересна команда — отказываемся от собеседования с ней. Экономим своё время, время команд, не собираем лишние отказы и лучше готовимся к собеседованиям
Собеседования
Всем новоприбывшим обычно предлагают сразу три команды. Я еще не знал что можно отказываться от собеседований, поэтому соглашался на всё. Здесь я допустил ошибку — поставил три собеседования один за другим, а когда получил сразу три фидбека то был неприятно удивлен результатами. Резюмирую: ставьте собеседования с интервалом минимум 2 дня, чтобы вы могли получить фидбек и проработать ошибки из него до следующего собеседования.
Первая команда
Я полный уверенности начинаю рассказ «о себе», но оказалось что информации не достаточно — я не помнил нюансов проекта прошедшей стажировки. Это вылилось в то, что начали задавать вопросы по проекту о котором я мало что помнил, а некоторые нюансы стажировки и вовсе было стыдно озвучивать. В итоге я пытался выкручиваться давая размытые ответы, а мой потенциальный ментор пытался выяснить что же было на самом деле. Получился своеобразный допрос, в котором я явно выводил из себя интервьюера. Далее спрашивали иерархию исключений, но так как в точности её не помнил, то рассказал в общих чертах. Интересовались как я вижу своё развитие, на что ответил: «мне интересен путь в сторону архитектуры, нежели управления людьми». От себя добавил, что не хотел бы работать с «высшей математикой» (подразумевал ML, DS и подобные), потому что у меня нет «глубокой математической базы». Я не против ковыряться в алгоритмах, но если мне придется выполнять половину работы (либо всю) как ML — из этого ничего хорошего не выйдет.
Фидбек
«Кандидат достаточно спорный. С одной стороны, очень уверен в себе и знает, чего хочет добиться. С другой — при своём небольшом опыте самоуверенность стреляет ему в ногу. Софты: были какие‑то странные ответы на вопросы, уходящие совсем в сторону. Послушал рассказ про задачи для стажёров, вопросы по ним задавал корректные, но ощущения достигнутого понимания не было — кандидат просто решил забить, кажется. Техника: не успели долго поболтать, но что‑то рассказывал про предыдущую стажировку (django и fastAPI) и телеграмного бота, а на вопросы по ходу дела отвечал сносно. При этом я бы посоветовал следующему интервьюеру тут углубиться — есть подозрение, что я просто не копал глубоко. Мотивация: хочет „архитектурить“, но вкладывает в это понятие явно не то, что я. Почему‑то очень настороженно относится к задачам, где нужно чуть поломать голову (алгоритмы, математика) — сразу уходит в защиту „я не специалист, я не могу“. Хочет попасть в большую компанию в России, т.к. в Беларуси, судя по рассказу, сложно найти айтишную работу и „кругом одни джависты, а я — питонист“, а за рубежом язык знать надо.»
Выводы
-
Быть проще
-
Лучше подготовить рассказ «о себе» и готовность ответить на все вопросы по прошлому опыту
-
Не говорить то, чего у тебя не спрашивают, в том числе что тебе не нравится / с чем не хотел бы работать
-
Повторить иерархию исключений
Вторая команда
Начало стандартное — представление «о себе». После этого я сказал что мне не интересно направление команд (я еще не знал что можно отказывать до собеседования), при этом я не представлял чем вообще занимается команда даже из описания. Далее своеобразный блиц опрос по многопоточности / многопроцессорности, как это работает; в чем отличие asyncio и многопоточности на глубоком уровне; как работает / устроен GIL в python и для чего он нужен. Спросили теорию графов, где используются — я ответил что‑то про социальные сети и какие‑то примеры из того что мог вспомнить, но хотели услышать что используются в импортах модулей и тп.
Фидбек
«В общении проблем не было, кандидат рассказал про свой опыт (писал tg бота (FastAPI) и бекенд на Django), поспрашивали про некотрые тонкости Python(тут в общем ок), параллельное и асинхронное программирование, БД, в ответах плавал, теоритеческой базы тут не хватает, есть практика, но почему именно так работает кандидат не знает. Год назад пробовал читать книги, но понял, что без практики толку мало, потому ушел в практику, а чтение книг забросил. Из наших комманд предпочтений не было и вообще сначала сказал, что ему не интересна инфраструктура и хочет продуктовой разработки, писать код, а вот деплой/алерты/сети ему не интересны. От стажировки ожидает, что попадет в штат и готов вложиться в нее по полной.»
Выводы
-
Лучше изучить асинхронность и параллельность «под капотом»
-
Если о чем‑то не спрашивают, не стоит это говорить
Третья команда
Как обычно начинаю с рассказа «о себе». После этого дали задачу на реализацию переноса большого количества данных из одной базы в другую. Я рассказал что можно использовать генераторы (пришло в голову т.к. это экономит память), пытался вспомнить про OFFSET в SQL, но забыл как называется функция и объяснил это своими словами. Данный вариант не особо устроил интервьюера и он задал уточняющий вопрос — «как я буду делать выборку данных из БД для прошлой задачи?». Тут я предложу вам подумать, как будете готовы читайте ответ.
Ответ
По UUID невозможно делать сортировку, поэтому необходимо отсортировать данные по времени создания и уже из получившегося результата пачками через LIMIT и OFFSET их забирать.
Как я понял потом, мне необходимо было знать что первичные ключи хранятся в виде UUID, я же предлагал решение в виде численных первичных ключей. Так же я должен был знать что данные в базе перезаписываются.
Вопросов по чистому SQL и работал ли я с ним не было.
Фидбек
«Спорный кандидат. Самоучка. В прошлом опыт был в виде телеграмм бота и стажировки в стартапе. С базами работал только через orm. По ощущениям, есть знания языка и алгоритмов, остальное выглядит поверхностно. От стажировки ждет, что попадет в штат. Хочет в Москву»
Выводы
-
Почитать про UUID
-
Повторить SQL
Получив сразу три фидбека я провел работу над ошибками в рассказе «о себе», а так же подтянул остальную теорию.
Четвертую команду мне искали около двух недель после получения фидбеков.
Четвертая команда
После краткого рассказа о своём опыте я спросил — «рассказывать, чем я занимался на проекте стажировки более подробно?», на что мне ответили — «не надо». Дальше был вопрос «что было самым сложным на стажировке», на что ответил — «в начале стажировки пришлось изменять структуру проекта, попутно разбираясь в нем». Были вопросы по SQL, точнее попросили в онлайн‑редакторе написать пару запросов на создание, объединение таблиц и выборку из них. Тут я неправильно выбрал столбец для подсчета и путал названия JOIN`ов. Интервьюер спрашивал об удаленке, так как у них есть данный вариант, но я сказал что рассматриваю только офис. В конце я задал вопросы про дежурства в данной команде и то, как в проекте взаимодействует бэкенд с фронтендом.
Фидбек
«Из интересного:
в чате на fastapi хотел отрефакторить код. недостатки: sql‑запросы прямо в ручках
было 2 репы с чатом и календарем Простой опросник по SQL inner join называет cross join В целом норм, не знает некоторые конструкции типа FILTER в COUNT Пообщались по проект. К задавал вопросы про удаленку, дежурства. Кажется, К пытался срезать углы (например, спрашивал, что бэк только предоставляет API, или может еще генерирует html‑страницы) К себе брать не готов. Интересного из К ничего вытащить не смог. На текущих проектах часто занимался непонятным рефакторингом. Нет понимания, как будет работать в команде и как общаться с заказчиками»
Выводы
-
Посмотреть конструкции FILTER в COUNT и перестать путать названия JOIN`ов
-
Доработать рассказ «о себе», чтобы в кратком изложении можно было донести максимум небходимой информацию
-
Не задавать вопросов по условиям работы в команде
Пятую команду мне искали неделю после получения фидбека от четвертой команды.
Пятая команда
«О себе» с последующим переходом к вопросам о том, что такое хэшсет, как работает / устроен, писал ли я тесты и работал ли с asyncio. Далее вопрос о том, чего я хочу от стажировки, на что ответил — просто хочу работать (сказывалось состояние усталости от постоянных отказов). На уточняющие вопросы по данной теме отвечал в таком же стиле. Вопросов по БД и SQL не было.
Фидбек
«На заказ разработал бота на python‑telegram‑bot для публикации сообщений в каналы, после стажировка в стартапе, проект — фриланс биржа занимался доработкой rest ручек монолита и чата в команде из 3 человек, синхронное апи чата — fast api, монолит django‑rest, сообщения — через веб‑сокеты — не изменял. есть базовое знание python асинхронное программирование в python — только теория не сталкивался с автоматическими тестами базы — знает select/join/group by, но в ответах не уверен. стажировку хочет проходит очно, с переездом в мск. на стажировке — работать работу, под присмотром ментора, с обратной связью для быстрого обучения. для меня — пограничный кандидат, харды для стажера ок, в целом в общении особых проблем нет, но стиль общения — размытые и краткие ответы на вопросы по предыдущим проектам, интересам, скилам, надо постоянно вести и вытаскивать вопросами информацию отталкивает. Пока к себе брать не готов»
Выводы
-
Изучить asyncio и pytest минимум на базовом уровне
-
Давать развернутые ответы на вопросы
-
Отвечать подготовленным ответами на вопросы «что хочешь от стажировки, почему мы и тд»
Академический отпуск
После получения пятого отказа мне сказали что желающих команд для меня сейчас нет и мне стоит лучше подготовиться, отправив на полу годовое самостоятельное «повышение квалификации». Я еще раз просмотрел все проблемы прошлых собеседований, сделал работу над ошибками и доработал рассказ «о себе». Так же на базовом уровне изучил и поработал с asyncio и pytest.
Спустя 2.5 месяца ко мне возвращается рекрутер и предлагает продолжить поиск команд, на что я соглашаюсь.
В течении следущих двух месяцев мне предлагают четыре команды, с одной из которых я соглашаюсь на собеседоване.
Немного про отказы командам. Я не ищу идеальную команду, но если мне не хватит недели подготовки чтобы соответствовать основным требованиям команды — я отказываю. Мне например сложно за неделю изучить с нуля C++ и ML на базовом уровне.
Шестая команда
В начале собеседования интервьюер говорит — «это будет легкое для меня собеседование». Дальше уже отточенный рассказ «о себе». Спросили про asyncio: как устроен, зачем нужен; когда стоит использовать asyncio, а когда многопоточность; про брокеры сообщений; типы БД и где какие использовать; про шардирование и репликацию (тут в голове всё перемешалось и временами путал термины). Спрашивали про многопроцессорность — «как можно работать с CPU задачами», на что ответил — «можно распараллеливать по процессам, использовать технологии вроде map reduce и брокеры сообщений». Возможно я не правильно понял вопрос. Из нюансов хотел отметить — я больше одного раза говорил что на прошлой стажировке была сложная задача, где приходилось самому разбираться и помочь с ней мне никто не мог (мол мне может понадобиться помощь). Так же после того как ответил что с брокерами не работал, интервьюер сказал — «обычно разработчики изучают смежные технологии» и продолжил свой рассказ, а я не успел отработать «возражение». В конце я спросил какой код предпочтителен в команде, «чистый», либо «быстрый».
Фидбек не пришел в первые два дня, поэтому я понял что ситуация нестандартная. Я попросил рекрутера поставить поиск команд на паузу пока не будет ответа от данной команды. Спустя 9 дней я получил фидбек и отказ.
Фидбек
Общее: • есть опыт коммерческой разработки (5 месяцев, в основном fastpai и django) • на одном из проектов писал телеграмм бота (бот-админ для публикации постов в каналы) • представляет как работает asyncio и есть опыт, про многопоточность и GIL в питоне тоже понимает, а вот с многопроцессорностью что-то не очень • слышал про брокеры сообщений, но без опыта (и прям совсем только слышал) • имеет хорошее представление, о том какие бд бывают и в каких задачах могут быть полезны (kv/document oriented/графовые/колоночные) • немного абстрактно пообщались про шардирование и репликацию, конечно не очень глубокие знания во всем этом, но где-то что-то слышал и общее представление местами имеется
Впечатление: Кандидат достаточно хороший, есть опыт в бэке. Но у меня сложилось впечатление, что слишком много уделяет времени «красоте кода» (я был бы и рад такому Кандидату, но у нас тяжело будет с таким подходом). Не сошлись по софтам скорее, есть ощущение, что тяжело погружается в новые области. К себе взять не готов, но другим командам советую посмотреть
Выводы
-
Почитать про шардирование и репликацию
-
Ознакомиться с брокерами сообщений
-
Не задавать вопросов, которые касаются условий работы в команде (в данном случае про чистоту кода)
-
Не давить на жалось, повторяя что тебе «надоело беспросветно тащить всё на себе без какой‑либо помощи». Достаточно спросить кто будет твоим ментором и как часто вы будете с ним созваниваться
-
Даже если ты попал в «шорт лист» команды, не стоит прекращать поиск / собеседования с другими командами. Принимать решение стоит тогда, когда у тебя есть фактический офер от команд(ы)
Через две недели мне находят еще одну команду, от которой я отказываюсь. Скоро будет месяц как я нахожусь в поиске команды
Подведем итоги
-
Не надейтесь на быстрый результат
-
Как бы ты не был хорош, любое слово произнесенное тобой может стать причиной для отказа
-
Вам могут отказать по независящим от вас причинам
-
Яндексу нужна дополнительная секция по софт скилам
Я пока не собираюсь сдаваться, хотя силы уже не те что в начале.
Общие выводы
-
Соглашайтесь на собеседование только с интересующей вас командой. Перед тем как дать свой ответ — поищите в интернете информацию о ней, если это необходимо. Есть сомнения — один раз можете согласиться на такую команду ради опыта, но больше не советую. Не тратьте своё и время команды зря, ну и не забывайте про отказы
-
Ставьте собеседования с командами с интервалом минимум два дня, чтобы вы могли получить фидбек от прошлой команды и проработать ошибки до следующего собеседования
-
Не стоит останавливать поиск других команд если вы попали в «шорт лист» какой‑либо команды (отсутствие фидбека в течении 3 дней после собеседования). Принимайте решение только после получения офера от команд(ы)
-
На собеседовании будьте «проще», общайтесь дружелюбно на «ты» (обычно интервьюеры делают это первыми в начале собеседования)
-
Не стоит шутить на собеседовании — у всех разное чувство юмора
-
Подготовьте краткий рассказ о себе, в котором будет максимум информации о вас и ваших проектах, которая может быть интересна интервьюеру. Будьте готовы ответить на все вопросы по вашим проектам, как будто вы это техническая документация
-
Вам необходимо знать на хорошем уровне всё, что находится в road map вашей специальности до уровня middle+, а всё что выше — по одной статье. Никогда не знаешь что могут спросить (я хочу чтобы это была просто шутка)
-
Никогда не говорите что чего‑то не знаете. Отвечаем на это развернуто по схеме: где и в каком объеме встречался с данной темой, почему не может ответить на этот вопрос сейчас. Пример: «читал когда‑то об этом на заборе, но не знал что это может мне пригодиться»
-
Отвечаем на вопросы развернуто
-
Не говорим того, чего не спрашивают — это потенциально может вас дискредитировать. Примеры: «я люблю кофе» — «будет целыми днями пить кофе и ничего не делать»; «я общительный и коммуникабельный» — «мало того что днями будет пить кофе и ничего не делать, так еще и других будет постоянно отвлекать своими разговорами»
-
Интересуемся о проекте в общих чертах (мы же соглашаемся только на интересные нам команды). Вы можете поискать информацию о данном проекте (либо схожих) в интернете и задать вопросы из технических требований. Примеры: какую нагрузку выдерживает, какой аптайм, какая скорость и тд
-
Не задавайте вопросы про условия работы в команде на собеседовании. Стандартные условия стажировки — фултайм офис с задачами, переработки и регулярные дежурства. Если у вас специфичные требования — просим рекрутера связаться с командой и узнать ответ на эти вопросы у команды. Команда может предоставить такие условия — соглашаемся на собеседование. Не тратим своё время и время команды зря
-
Заранее готовим ответы на вопросы: почему именно эта команда, что хотите от стажировки, чего хотите добиться, какие были сложности / неудачи в прошлых проектах и тд. Про сложности и проблемы отвечаем в духе «было сложно, но разобрался, сделал такие‑то выводы и стало проще / таких ошибок больше не допускаю»
-
Расскажите о том что изучаете либо изучали в последнее время. Если это будет «созвучно» с требованиями команды — супер. Если ничего не изучаете — пора начинать
ссылка на оригинал статьи https://habr.com/ru/articles/855296/
Добавить комментарий