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

Глоссарий

Термины используются исключительно в контексте данной статьи

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

  • CV - резюме

  • leetcode easy - задачи, которые должен уметь решать каждый программист

  • leetcode medium - задачки сложнее, без подготовки решить которые может быть сложно

  • leetcode hard - сложные задачи, требуют предварительной подготовки

  • простой system design - придумай архитектуру системы

  • классический system design - придумай архитектуру системы, но так, чтобы она работала под нагрузкой

  • follow-up - когда текущая задача изменяется в сторону усложнения

  • DP - динамическое программирование

О себе

Опыт 10+ лет в бэкенде, небольшой опыт управления, стек самый разнообразный: от ruby до clojure. Интересующие позиции: синьор+, строго бэкенд, строго не блокчейн и не node.js/php.

Почему собеседуюсь: проверить свой уровень, если будет что-то интересное, то готов перейти. Текущая компенсация устраивает, и переходить в другую компанию я готов только на бОльшую з/п.

Сам подал CV только в Сloudflare, но получил отказ. Очень надеюсь, что из-за миграционного статуса.

Компания по доставке еды

Известна тем, что платит сильно меньше рынка. Связались на прямую в linkedin, предложили менеджерскую позицию, но я отказался. Узнав финансовые ожидания, подумали и решили провести пару раундов.

Первый раунд был очень простым кодингом (leetcode easy).

Второй раунд был простым system design: придумать схему данных и какие эндпойнты использовать для решения конкретной задачи + обсудили пару подводных камней.

Третье интервью было с нанимающим менеджером, просто поговорили за жизнь. Задачи команды показались мне неинтересными.

Через неделю пришел отказ без объяснения причин. Через третьих лиц удалось узнать, что причиной стало "не соответствие опыта и запрашиваемой з/п". Один из собеседующих позже подтвердил, что технически все ок, значит дело было в менеджерском раунде или размере запрашиваемой з/п.

Выводы:

  • завалить можно не только техническую секцию

  • детального фидбека в случае отказа добиться очень тяжело

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

Компания по бизнес процессам

В linkedin со мной связался сторонний рекрутер. Данную компанию я знал, и мне было бы интересно поработать в ней.

Первое собеседование было чисто по ruby. Это мое первое собеседование на знание конкретного языка за последние 5 лет точно: proc vs lambda, prepend vs include и так далее (рубисты поймут). Далее были вопрос про oauth, ssl и одна интересная задачка, не связанная с кодингом, которую я решил. Ответил по ощущениям процентов на 80%, это собеседование было полезным, нашел пару пробелов в знаниях.

Второе собеседование было больше на поболтать с руководителем SRE отдела.

Третий раунд был с топ менеджером на поболтать + задача на LRU кеш (leetcode medium).

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

Рекрутер мне обещал оффер "вот-вот", но просил подождать (а я и не торопился). Через месяц пришел отказ без объяснения причин. Мне казалось, что все шло хорошо, и что я сделал так не знаю до сих пор.

Выводы:

  • отказ может придти, даже когда его не ждешь

Банк #1

Не смотря на мою нелюбовь к банкам, я рассматривал эту позицию, потому что там используется язык, который мне крайне интересен.

В первом раунде два человека спрашивали по всему от big-oh до многопоточного программирования:

  • что такое REST и unicode

  • как бы ты закодил X

  • что такое big-oh

  • процесс vs поток

Ответил на 90% вопросов.

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

В третьем раунде было исправление ошибок в виде парного программирования + новые фичи. Самым сложным из ошибок для меня были интеграционные тесты: никак не мог заставить работать руби с входными потоками ввода и вывода (гуглить было можно). Убил 20 минут, но все-таки сделал. Оказалось, что для follow-up задач моя архитектура совершенно не подходит, я наговнокодил (именно так) одну задачу, но ни я, ни собеседующие, не были в восторге от результата.

Как итог желаемую з/п мне предложить не смогли, поэтому разошлись.

Выводы:

  • ООП дизайн не мой конек

  • функциональщина one love

Stripe

В эту компанию я очень хотел попасть. Она известна своей крутой инжиниринговой культурой + отличная компенсация + офисы где хочешь. Компания написала в linkedin, созвонились и договорились на скрининг.

На скрининге была простая задача с двумя простыми follow-up-ами. Дальше был назначен онсайт в зуме. На почту пришло подробное описание всех раундов

Первая сессия была алгокодинг, с какой-то простой задачей (чуть слабее medium)

Вторая сессия была на реальный код: нужно было написать кусок кода, который делает http запросы, агрегирует данные и посылает их в третий эндпойнт. Было несложно, но допустил неприятную ошибку и не успел сделать последний этап (всего их было 5). Собеседующий отключил звук и камеру, что мне не понравилось.

Третья сессия была беседа с менеджером и запомнилось его интересным ответом - почему он сменил компанию из FAANG на эту.

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

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

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

Выводы:

  • не переоценивай себя, подготовь окружение с настоящим дебагом

Карточная компания #2

Как они на меня вышли восстановить в памяти не удалось, но точно это был сторонний рекрутер.

Первый этап был созвон с CTO, поболтали за жизнь.

Вторым этапом шло тестовое задание на node.js, которого я не знаю. После переговоров мне было разрешено делать на golang. Пришлось реализовывать не только само задание, но и болванку, так как оригинальная болванка была все на той же ноде. Кроме того, в требованиях было настроить прекоммит-хуки и малоизвестный лоад-тестер, оба эти требования мне показались странными.

После отправки тестового выяснилось, что я в конфиге лоадтестера в одном месте забыл поправить абсолютный путь на относительный (тест у меня не работал локально и я "игрался с настройками"), что стало результатом отказа с формулировкой "лоад тест не запускается". Мне было очень обидно: ни архитектуру, ни тот факт, что решение сделано полностью на другом языке, ни чего бы то ни было другого команда даже не посмотрела.

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

Выводы:

  • тестовые задания буду делать только в те компании, в которые я хочу попасть, свое время дороже

Интернет-магазин

Бомбардировали мой linkedin давно, но все время было не до них.

Первый этап были общие вопросы + кодинг. Первый раз за долгое время попалась задача, которую я сходу не знал как решить (очень похожа на 2-sum по идее, но не решению). Я упустил важный момент и закодил ее неверно. Позже, буквально за минуту до конца мне удалось ее поправить.

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

Третий этап был менеджерский, и тут с английским было все хорошо, менеджер пошел по моему резюме и сходу задал три релевантных вопроса, на которые я дал неправильный ответ. Интервью прервалось через 30 минут после начала. Я был в шоке, было ощущение, что я ничего не знаю и вообще пора в джуны. Один из вопросов был: является ли редис однопоточным и я ответил неверно, второй был про сборщик мусора в питоне, (я писал на питоне 3 спарк джобы и только поэтому его упомянул, этот вопрос был помимо упомянутых трех, и я не считаю его релевантным). Мне было стыдно, но провалы случаются, надо двигаться дальше. Все свои ошибки я учел.

Выводы:

  • никогда не поздно свершиться epic fail-у

  • если с чем-то ты работал вскользь - стоит об этом упомянуть или вообще не показывать в CV

Барахолка

Компания написала мне в linkedin, позиция звучала как "principal engineer". Мы созвонились с рекрутером в пятницу, он обещал мне выдать тестовое задание буквально через пару часов, и я должен был его сделать за выходные.

Тестовое задание не пришло (возможно я чем-то не понравился, дело явно было не в деньгах), и я забыл про эту компанию. Внезапно, через неделю, опять же в пятницу задание пришло! На эти выходные у меня были другие планы и я предложил сделать через неделю, на что был получен ОК. За следующую неделю задание я так и не сделал и даже не начал, о чем честно написал и предложил прекратить общение, но мне дали еще одну неделю, и время найти у меня получилось. Ничего сложного, консольное приложение с минимальной многопоточностью.

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

Вторая сессия была классическим system design, первая часть прошла хорошо, на второй мне дали задачу, которую я не мог понять минут 15. Когда до меня все-таки дошло, то времени на кодинг уже практически не оставалось, то что я сделал не устроило интервьювера, а в планах было еще разобрать эту задачу в рамках классического system design, но как это планировалось сделать за 30 минут для меня загадка. Интервьювер пытался подсказать, но ни одной подсказки я не понял.

Через пару дней пришел ожидаемый отказ.

Выводов из этой истории я не сделал

Банк #2

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

На первой сессии было две задачи: rain drop и на технику scan line. С первой я просидел почти час, почему-то она мне давалась с трудом, а вторую решил за 15 минут. Был получен позитивный фидбек.

На второй сессии два человека гоняли меня по всему - от флагов в chmod до оценки памяти в merge сорт. Было все: и как найти процесс по порту, и как решить задачу на анаграмму. Куча вопросов, на все я ответил только по алгоритмам, остальные с переменным успехом. Аналогичный раунд повторился еще 3 раза (решили проверить на мне весь банк вопросов видимо)! Вопросы были разные, правда по chmod повторился, и тут я уже был готов. Одна сессия была про дебаг упавшего приложения (не работает сервис, что делать?) мне понравилось, подобные секции отлично показывают твой опыт. Один из вопросов, на который я не ответил, звучал так: "система выдает ошибку "нет места", хотя место есть, как такое может быть?". Больше всего мне не понравился вопрос "чем отличается абстрактная фабрика от обычной". Почему-то подобные вопросы вгоняют меня в уныние. Я старался экономить время интервьюверов и на подобные вещи сразу отвечал "no idea". Вот некоторые вопросы, с которыми я столкнулся:

  • how ssl works?

  • could you explain /proc structure

  • heap sort vs normal sort

  • is it possible to have more than one A-record

  • what're json pitfalls

  • what's the difference between .net gc and python gc

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

Последним раундом было собеседование в команду SRE, которое остановилось после моей фразы "я не SRE" (20 минут, рекорд).

Пришел отказ без фидбека, отличная встряска для мозгов, всегда можно найти то, что ты не знаешь.

Выводы:

  • хочешь экзамен по технологиям? Иди на собеседование в банк #2

ByteDance (tiktok)

Они и сейчас продолжают бомбардировать linkedin. Со мной связалась сторонний рекрутер.

Первый раунд был на все про все а-ля Банк #2, но ближе к моему CV. Я ответил на все вопросы, разве что ответ про circuit-breaker звучал недостаточно убедительно (или мне так показалось). Последовала простая задачка на двухмерное DP, чем-то она смутила интервьювера, но ошибку найти не удалось (потому что ее не было).

Вторая секция была на классический system design: url-shortener.

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

Через две недели мне пришел отказ: "у нас закончился хед-каунт" и предложение пройти собесы с нуля в другую команду.

Четвертая секция (назовем это так) была разговором с менеджером другой команды - общие вопросы и простая задача. Здесь был очень странный момент с вопросом про модель конкурентности в go (какая-то аббревиатура, но не CSP), на что я рассказал то, что знал: про n:m мэппинг горутинг в треды, паркинг горутин при I/O, CSP, но видимо это было не то, что ожидал рекрутер. Я очень негативно отношусь к подобным специфичным вопросам.

Через неделю пришел отказ без объяснения причин.

Выводы:

  • даже в случае успех во всех раундах тебя могут не взять, например могут найти другого кандидата дешевле, и это нормально

Indeed

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

  • frontend

  • OOP design

  • highload

  • linux internals

пятую не помню. Очевидно, что я выбрал две последних. Ничего интересного не было, стандартные thread vs process и дебаг упавшего приложения.

Был получен положительный фидбек и последовал онсайт. Перед онсайтом был созвон, где мне 45 минут советовали как правильно проходить собеседование, сообщали, что "мы ищем причины взять, а не отказать" и тому подобные вещи. Лично я крайне отрицательно отношусь к подобным сессиям, они не несут никакой пользы для кандидата.

Онсайт в данной компании проводится строго по средам, 5 этапов + вводный и заключительный от главы подразделения в данной стране. Первая неприятность случилась уже на вводном этапе - на зум колле было 4 кандидата, включая меня, и все кандидаты увидели друг друга, как по мне компания пренебрегает приватностью. Это не было озвучено заранее, иначе я бы не включал камеру и изменил бы имя. На заключительном этапе я дал на это фидбек (его просили), и лид офиса встретил мои комментарии полным непониманием. "В таком случае мне пришлось бы тратить час по 15 минут на каждого" утром и вечером. Что ж.

Первая секция была на валидацию программы по некоторым правилам. Особенность секции была в том, что запускать программу нельзя, нужно объяснить решение полностью словами, потом написать код, потом сделать трассировку и исправить ошибки. Если честно, мне больше нравится запускать и отлаживать, чем трассировать словами, но выбора не было, справился.

Вторая секция была на ревью онлайн PR. Была взята реальная функциональность с сайта компании и код, который ее реализует. Язык нужно было выбрать заранее, список такой: Python, Java, C++, Javascript, Go. Go добавили буквально месяц назад, так что считаю, что мне повезло, с остальными у меня нет опыта написания "веб-штук". Размер PR-а был небольшим, и тебе дается 30 минут, чтобы отметить все, что тебе не нравится. Я нашел два бага, пару неточностей, предложил как улучшить алгоритмическую сложность в паре мест и попросил добавить тесты. Тут скорее всего я не обратил внимание на очень важную вещь - сервис был не durable, то есть все данные хранились в памяти, и абсолютно точно нужно было об этом указать. Но я даже об этом не подумал, и осознание пришло уже вечером. Я не был готов к этому заданию, в следующий раз буду.

Секция system design была стандартной, но мы очень долго обсуждали как сделать пагинацию, и мне кажется интервьювер меня так и не понял. Я совершил ошибку, предложив сделать пагинацию не page/perPage, а after=timestamp, там всплыло пару подводных камней.

Вторая алго-секция начиналась с классической задачи на рейт-лимитинг. Кодинг занял очень мало времени, но вот с оценкой я напортачил, тут она O(1) amortized. Так как задачу я решил быстро, было решено обсудить аналогичную задачу только на плавающую медиану (leetcode hard). Я объяснил свое решение и оценку и закодил. Интервьювер остался доволен.

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

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

Компания из фаанг

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

Первый раунд был с нанимающим менеджером. Была простенькая задачка на поиск по категориям и вопросы по tcp/ip.

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

Компания запомнилась рекрутером, который пожелал мне удачи на интервью, которое прошло два дня назад.

Тут не пришел даже отказ, вспомнился этот анекдот:

Второй год пошел, как не звонят после собеседования..

Начинаю подозревать, что они взяли кого-то другого...

Электронный банк

Со мной связался сторонний рекрутер в linkedin.

Первым этапом были две простые задачи на hackerrank-е (или codility, не помню). Я получил 100 из 100.

Вторым было техническое интервью все обо всем а-ля банк #2, но с нацелом на требуемые технологии и мое CV. Был очень неформальный и взаимоуважительный разговор. Вопросы:

  • что такое докер?

  • как бы ты сделал авторизацию для веб приложения

  • как избегать проблем с at least once delivery

Была задачка на Go, решенная на 70%. Второй раунд был с менеджером, который спросил про SOLID и дал задачку на бинарный поиск. Закончили за 30 минут. Через 2 недели был фидбек "выбрали другого кандидата". Именно тут, как мне кажется, сыграл вопрос денег и тот факт, что у меня уже был оффер от другой компании, который я должен был подписать за два дня.

Еще было примерно 5-10 компаний, которые прекращали общения после озвучивания ожиданий от з/п, ни одна не написала "слишком много для нас".

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

Из всех перечисленных компаний, еще раз я бы хотел попробовать попасть только в Stripe.

Выводы и мысли вслух

Я считаю собеседование на знание языка программирования в большинстве своем бесполезными. В своей карьере я скакал примерно так: ruby -> clojure -> golang -> C# и проблем это не вызывало, фидбеки от руководства и коллег я имел положительные. Синьорность - это в первую очередь софт скиллы и опыт некоторого говна, знания по языку подтягиваются очень быстро.

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

Крупные компании используют разные секции и это отлично, 5 раундов кодинга, как по мне, не имеют большого смысла.

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

linkedin обязателен если планируешь работать вне России.

Glassdoor дает хорошее представление о том, какие вопросы и задачи вас ожидают на собеседовании.

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

Комментарии (73)


  1. Fen1kz
    10.10.2021 08:43
    +1

    Мне понравился стиль, иронично, но беззлобно.


    Собеседования были в течение всего года или в рамках одного поиска нового места?


    1. kronos Автор
      10.10.2021 08:50
      +1

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


      1. Fen1kz
        10.10.2021 09:11
        +1

        А не трудно поддерживать специфические "знания для собеседований" на должном уровне?


        1. kronos Автор
          10.10.2021 09:17
          +13

          Сложно по темам, с которыми ты не работаешь каждый день, у меня они такие:

          • ssl

          • tcp/ip и сокеты на низком уровне

          • ООП паттерны

          • весь низкоуровневый линукс.

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


          1. zynaps76
            10.10.2021 16:03
            +8

            все вылетает из головы через пару недель

            Угу. Львиная доля водителей с многолетним безаварийным опытом заваливает внезапный экзамен по ПДД. Большинство собеседований напоминают эту ситуацию. Давно отношусь к этому спокойно: если вам нужна вот прямо ходячая википедия, а не "обычный" разработчик - нам и вправду не по пути. :-)

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


          1. JordanoBruno
            10.10.2021 19:40
            +5

            все вылетает из головы через пару недель

            Так в этом и суть, если не было применено на практике - то вылетит из головы и не заметишь. Через 5 лет вылетит даже то, что было применено на практике, а через 10 - что было с болью применено. Так работает человеческий мозг - либо Вы работаете с этим и поддерживаете, либо оно начинает забываться.


  1. dimskiy
    10.10.2021 08:48
    +37

    В вашем тексте реально не хватает названий. Не очень понятно зачем делать тайну - вы все равно не выкладываете тестовые задания и конкретные вопросы. С конкретикой было бы кратно полезнее


    1. tommyangelo27
      10.10.2021 09:25
      +5

      Поддержу. «Карточная компания» — намёк есть, но непонятен абсолютно. Тогда проще уж писать Компания 1, Компания 2.

      П.С. сама статья — огонь.


    1. kronos Автор
      10.10.2021 13:05
      -17

      В принципе, почему бы и нет, если коллеги за. За каждые 10 плюсов вашему комментарию я готов открыть одну компанию (в порядке узнаваемости на мой субъективный взгляд). Кроме фаанговской, ее я хочу оставить в секрете на всякий случай.


      1. dimskiy
        10.10.2021 16:09
        +19

        Хоспади какой бред...


  1. Politura
    10.10.2021 09:03

    А какая страна, если не секрет?


    1. kronos Автор
      10.10.2021 09:04

      Сингапур


  1. GeorgeII
    10.10.2021 10:16

    Уж не знаю почему, но всегда с интересом читаю подобные статьи. Спасибо, что поделились!

    Немного вопросов:

    1) Алгозадачки обычно ставят в какой форме? Устно проговаривают или текстом дают? Мне кажется, когда ее произносят - значительно сложнее, чем когда условие открыто перед тобой и ты всегда можешь глазами пробежаться по нему.

    2) "heap sort vs normal sort"

    Вот зачем им это нужно спрашивать? :) Серьезно, какая логика в голове при этом? "Кандидат не знает преимущества хип сорта, поэтому..." поэтому что? О чем им скажет этот факт? Этих сортировок десятки существует и если ты не лектор по предмету "Алгоритмы сортировок", то эта информация в голове надолго не задержится. Извините, словил флэшбэк - пишу, как давненько пострадавший от вопроса "хип сорт vs квик сорт. Преимущества и недостатки" :)


    1. kronos Автор
      10.10.2021 10:24

      1. Аналог этой дали устно, обычно текстом с примером. И всегда онлайн редактор с подсветкой синтаксиса.

      2. У меня нет мнения на этот счет


      1. shushu
        10.10.2021 11:17
        +1

        Хм, а как решили подобную задачку?
        Ведь прийдется весь массив двигать.

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


        1. mrchoo
          10.10.2021 11:36

          Пробежаться от конца к началу, удаляя встречающиеся нули и добавляя в конец новые (в python - pop и append).


          1. shushu
            10.10.2021 12:14

            эммм, pop же первый елемент удаляет (сдвигает) ну и внутри оно же наверняка сдвигает все данные..


          1. Danik-ik
            10.10.2021 12:56

            Очень дорого из-за множества реорганизаций массива. Всё можно сделать на месте.

            Делаем два индекса, для чтения и для записи («курсоры»). На первой фазе пропускаем все ненулевые значения. На второй курсор чтения пропускает все нулевые значения, читает текущее ненулевое, записывает ноль. Прочитанное значение записываем по позиции курсора записи. Повторяем, пока чтение не упрётся в край. Всё. O(N), по памяти — на три переменные. Как костяшки на счётах из произвольных позиций к краю отщёлкать по одной.


            1. navferty
              10.10.2021 16:04

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


    1. Gorthauer87
      10.10.2021 10:57

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


      1. GeorgeII
        10.10.2021 12:28
        +5

        почему на практике иногда лучше взять алгоритм с худшей ассимптотикой

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

        "у какого алгоритма лучше константа"
        Бенчмарки.

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

        Бенчмарки.

        Но самое смешное, что эти бенчмарки проводятся создателями СУБД, языков программирования, платформ и т.д. Это огромные труды, которые тянут на научные работы. Спрашивать с ходу такие вещи на собеседовании - как минимум нерезультативно в плане оценивания кандидата.

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

        Итого: в вопросе зачем-то используется алгоритм heapsort, заранее зная, что он непопулярен. Что мешает узнать про константы на более знакомых алгоритмах? Да хотя бы тех же quicksort vs merge sort (две самых популярных сортировки).


        P.S. как же здесь больно оформлять цитаты на комментарии


        1. Gorthauer87
          10.10.2021 15:50
          +1

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

          Сортировок много, и это весьма простые алгоритмы по своей сути.


          1. GeorgeII
            10.10.2021 17:25

            Интересующие позиции: синьор+, строго бэкенд, строго не блокчейн и не node.js/php.

            Это на кого рассматривался автор. Боюсь, с алготрейдингом и геймдевом мимо. kv-бд еще можно как-то подтянуть. Но даже в этом случае намного логичнее спрашивать про хэши и про отличия B-tree от B+ tree от LSM. Да даже просто heap (без сортировки) и priority queue было бы больше толку обсуждать, ибо они реально на практике применяются.

            Сортировок много, и это весьма простые алгоритмы по своей сути.

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


        1. Politura
          10.10.2021 21:16
          +1

          > почему на практике иногда лучше взять алгоритм с худшей ассимптотикой

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

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

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

          Бенчмарки.

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

          Так что не только для бенчмарков это важно.

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


          1. GeorgeII
            10.10.2021 22:04
            +1

            Так что не только для бенчмарков это важно.

            Вы не так поняли. Имел в виду, что едиственный способ узнать, какой алгоритм эффективнее на практике - проводить бенчмарки. Другого варианта не существует. Это, собственно, и есть ответ на "почему quicksort используется чаще heapsort, хотя последний лучше асимптотически". Потому что замеры на реальных данных в пользу первого.


  1. travelerspb
    10.10.2021 10:19
    +2

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

    Я сам так профукал интервью в Гитхаб, думал ну с менеджерами сейчас поговорю за жизнь. Было ударом получить отказ в самом последнем раунде.

    К след интервью я готовился несколько дней, удалось пройти в атлассиан, гитлаб и еще одну того же уровня.

    Хотя про гитхаб до сих под обидно, аж скулы сводит.


    1. Andrew0610
      10.10.2021 10:56
      +12

      А может оно и не нужно? Зачем рисовать себя и подстраиваться под ценности компании, если они твоим не соответствуют?


      1. travelerspb
        10.10.2021 11:01
        +1

        А зачем решать задачи на литкоде? Может ну его раз решение не знаете?

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


        1. iroln
          10.10.2021 14:41
          +9

          Если что-то происходит повсеместно — это не значит, что это правильно.


          Заваливать кандидатов задачками с leetcode, оторванными от жизни и индустрии — это глупость, которой многие слепо следуют, потому что придумать что-то более эффективное и работающее сложно или лень.


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


          И всё это стало "нормальным" и "стандартами в индустрии", и люди почему-то принимают такие правила игры, а кто-то даже горячо приветствует и поддерживает.


        1. zynaps76
          10.10.2021 16:29
          +16

          чтобы понять ценности компании

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

          зы Даже не знаю какой смайл поставить...


      1. DarkTiger
        10.10.2021 11:26
        +2

        Увы, этот простой и важный факт понимаешь только с возрастом. До этого - "высокая зарплата", "стек технологий", "интересные задачи" и все такое.


        1. Andrew0610
          12.10.2021 19:24

          Честно говоря, я это понял не так и поздно, лет в 25. Просто я поработал в банке, где вся эта ложь с ценностями, лицемерие и высушивание работника до остатка, под песни о ценностях, очень ярко просачиваются.) Но многие да, не сразу к этому приходят. Мне просто "повезло"


    1. M03G
      10.10.2021 11:45
      +1

      А можете чуть больше конкретики? Пару примеров ответов-вопросов? И как именно вы готовились?


      1. travelerspb
        10.10.2021 12:45
        +2

        Лучше погуглите «behavioral interview prep», много как информации так и примеров. Star метод ответа обязательно, иначе вас просто не поймут или вы просто потратите впустую драгоценное время.

        Кривить душой конечно не стоит но в ответах обязательно акценты делать в зависимости от компании. Благо нынче все что требуется написано в job description. А у меня гитлаба так вообще про это война и мир написана в хэндбуке


  1. Naglec
    10.10.2021 12:56

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


  1. TiberiusASP
    10.10.2021 13:52
    +1

    Наверное это придет с опытом. Но выполнять тестовые задание - требущие 2-ух твоих выходных это крайне непродуктивное и неэффективное занятие.

    Как минимум только потому, что - работодатель, дающий такие задания не уважает время и силы другого человека, исключения - только FAANG

    Как максимум - вы вкладываете большие силы и время. При получении отказа это очень сильно бьет по мотивации и псих. ресурсам. Я крайне Вам не рекомендую так делать


    1. kronos Автор
      10.10.2021 14:25
      +5

      Фаанги, насколько мне известно, домашек как раз не требуют


      1. snuk182
        10.10.2021 19:36
        +3

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


        1. 0xd34df00d
          11.10.2021 03:27
          +1

          Их прорешивать совершенно не обязательно.


          1. snuk182
            11.10.2021 10:39

            Так и получать оффер от фаанг тоже не обязательно. Пришел, лицом поторговал, получил отказ, ушел.


            1. 0xd34df00d
              11.10.2021 18:39
              +1

              Я писал о том, что прорешивать сотни задач с литкода для получения оффера из фаанга совершенно не обязательно.


              1. snuk182
                11.10.2021 19:13

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


                1. 0xd34df00d
                  11.10.2021 19:48
                  -1

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


                  1. snuk182
                    11.10.2021 22:04
                    +2

                    Конкретно я прикручиваю разные библиотеки к рабочему проекту, чтоб это все не выглядело говном, не падало под нагрузкой, было стабильным хотя бы в течение десятка циклов релиза. Также приходят разные запросы от клиентов - нам надо апи такое-то, делает то-то, спеки такие-то (чисто механическая работа имхо). Бывают нужны навыки разных стандартных фреймворков. Образование у меня "обработка сигналов и изображений", что тоже на практике довольно далеко от жевания алгоритмов и структур.


                    1. 0xd34df00d
                      11.10.2021 23:18
                      +1

                      Тут есть два варианта:


                      1. Фаангу нужны прикручиватели разных библиотек к рабочим проектам. Тогда они совершенно неправильно выстраивают процесс своего интервью, и надо вместо всего вот этого вот давать задачи на прикручивание библиотек или хотя бы совместный просмотр пуллреквестов и нахождение там ошибок и проблем.
                      2. Фаангу нужны вертатели деревьев и динамические программисты. Тогда вы, забатывая литкод, немножко обманываете фаангу, по крайней мере, в моём мире.

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

                      Да я тоже не могу сказать, что я прям как-то специально все эти алгоритмы и структуры изучал. Просто это, не знаю, как-то само приходит, что ли.


                      1. snuk182
                        11.10.2021 23:36

                        Что нужно фаангу, знает лишь фаанг. Я всего лишь читаю довольно много отзывов вида "я победитель олимпиад, силой мысли преобразую sparse array в red-black tree, прошел все круги собеседований, теперь перемещаю кнопочку по форме".

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


                      1. tommyangelo27
                        12.10.2021 11:07
                        +4

                        Фаангу нужны вертатели деревьев и динамические программисты. Тогда вы, забатывая литкод, немножко обманываете фаангу, по крайней мере, в моём мире.
                        А в чём обман? Почему забатывать подобные задачи в студенческие годы — окей, а в 35 лет — «это другое»?


                      1. 0xd34df00d
                        12.10.2021 17:28
                        +1

                        А в студенческие годы их забатывают? Мы, по крайней мере, не прорешивали сотни литкодоподобных задач.


                      1. tommyangelo27
                        12.10.2021 17:44

                        Ну вы же не родились с данным умением, а научились их решать, и весьма вероятно, что в процессе обучения использовали примеры и задачи.


                      1. 0xd34df00d
                        12.10.2021 17:55
                        +1

                        Я не учился их решать специально. Более того, в школе (когда пытался в олимпиады по программированию), да и в вузе (но там не приходилось с ними сталкиваться) я этот вид задач просто ненавидел. Просто, ну, с решением задач на работе пришла возможность решать эти задачи.


                      1. tommyangelo27
                        12.10.2021 17:58
                        +3

                        Ну вот, а тут будет наоборот, с решением задач на Leetcode придёт возможность (или способность) решать эти задачи на работе.


    1. botyaslonim
      13.10.2021 10:13

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


  1. Lounge1k
    10.10.2021 15:54
    +2

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

    А статья отличная, читается легко и интересно


    1. JediPhilosopher
      10.10.2021 22:49
      +1

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

      Так что истина где-то посередине, все важно. Особенно если требуется не джун, а готовый специалист чтобы грести сразу, а не через полгода.


    1. botyaslonim
      13.10.2021 10:15

      Софтскиллы трудно оценить сразу. Самый главный софтскилл - хорош человек как работник или нет - вообще выявляется только в процессе


  1. Alexandroppolus
    10.10.2021 16:15

    Задачка про мержинг k упорядоченных списков, насколько я понимаю, решается с помощью приоритетной очереди, на вершине которой всегда список с минимальным элементом.


  1. JordanoBruno
    10.10.2021 19:54

    Синьорность - это в первую очередь софт скиллы и опыт некоторого говна, знания по языку подтягиваются очень быстро.

    Язык, допустим, Вы подтянете, если он не очень сложный(как Java). А вот подтянуть шаблоны проектирования, архитектуры сложнее hello world, знания актуальных фреймворков и библиотек - на это нужны годы.

    Я ни в коем случае не ставлю под сомнения Ваши интеллектуальные способности, просто это физически крайне трудновыполнимо из-за большого объема информации. Поэтому при смене языка/платформы будучи сеньором Ваш уровень в другом языке начинается с джуна. Вот как быстро он будет прогрессировать - зависит исключительно от Вас, предыдущие знания в чем-то могут помочь, если новый язык использует похожие подходы и практики(например - C#-Java, C-Go, Perl-PHP..).


    1. nex-54
      10.10.2021 20:18
      +3

      Во всяких ФААНГах все равно исопльзуется все свое, поэтому знания библиотек\фреймворков не ктритичны, все на месте подтягивается. Проседает конечно, но уж точно не до джуна, если нет каких-то специфических требований к языку.

      Последние 3 работы я менял язык, проработал на каждой че-то около года, я бы сказал, что сменить язык по сложности где-то на втором плане.


      1. uroot
        13.10.2021 07:43

        А что на первом?


    1. hello_my_name_is_dany
      11.10.2021 11:58

      шаблоны проектирования, архитектуры сложнее hello world,

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

      знания актуальных фреймворков и библиотек

      Большинство фреймворков похожи друг друга, так как оперируют одними и теми же терминами, шаблонами и паттернами. По поводу библиотек - библиотека для работы с RabbitMQ для C# на вряд ли будет сильно отличаться от той же библиотеки для JavaScript. А если брать какие-то супер специфичные библиотеки, так их знания проверять довольно странная затея, так как людей, работающих с ней, явное меньшинство.

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


      1. JordanoBruno
        11.10.2021 12:16

        Это как к языку относится?

        Разные возможности у языков. Например - реализация ООП у Java и PHP весьма отличается, причем даже по версиям языка. Соответственно, архитектура ПО тоже будет отличаться. Где-то поддерживается множественное наследование. Dependency Injection по-разному реализована и где-то это принято использовать, а где-то не очень.

        По поводу библиотек - библиотека для работы с RabbitMQ для C# на вряд ли будет сильно отличаться от той же библиотеки для JavaScript. А если брать какие-то супер специфичные библиотеки, так их знания проверять довольно странная затея, так как людей, работающих с ней, явное меньшинство.

        В Java часто требуется Spring, в Ruby - ROR, в Python - Django, в PHP - Laravel/Symphony/Yii. Чтобы знать их на сеньорском уровне - нужно потратить месяцы, если не годы и сделать несколько проектов.


        1. nex-54
          11.10.2021 12:45
          +1

          Я к тому, что обычно компании, требующие знания конкретных фреймворков, платят так себе. Проще потратить силы на тот же литкод и пойти в условный ФААНГ, где все равно все самописное, вместо того, чтобы тратить время на конкретные библиотеки.

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

          В последней раз я на пару месяцев перешел с php(ну ладно, не совсем пхп, а Hack) на rust - и затащил очень полезную фичу. На изучение самого раста я потратил...м...день наверное, чтобы прочитать основы. Наверно моя продуктивность была не на высоте, но в итоге фичу зарелизили, а если бы я ждал, когда освободится кто-то с глубокими знаниями rust, то ее все еще не было бы.


  1. ToSHiC
    11.10.2021 02:37

    Если не секрет, ваше понимание "синьор+" - это какой примерно какой левел? Можно в терминах любого из FAANG, присутствующих на levels.fyi .


    1. kronos Автор
      11.10.2021 03:30
      +1

      Хотелось бы думать, что L5, но если оценивать по компенсации, то все-таки чуть выше середины L4.


  1. muturgan
    11.10.2021 04:44

    Весьма интересно, спасибо.


  1. muturgan
    11.10.2021 04:46

    Хотелось бы узнать вашу мотивацию, почему строго не блокчейн?


  1. hyrurg
    12.10.2021 16:15
    -1

    Ну вот не пойму я это и все. Не пойму в плане ходить на собеседования ради узнать свои пробелы в знаниях. Зачем?! Это как научится экзамены проходить. Абстрактно - я хороший боксер, иду на бот без правил, мне указывают, что я плохой борец. В итоге я на следующий раз подтягиваю немножко так борьбу.. Зачем?! Я по прежнему плохой борец. Если меня спросили про столбы ООП, я не ответил, подтянул и в следующем собеседовании ответ дал, но это же по верхам все. Глубоких знаний не появилось.


    1. tommyangelo27
      12.10.2021 16:56

      Вопрос целеполагания. Если цель — устроиться на работу в корпо, то важно именно пройти собеседование. Есть немалая вероятность, что после прохождения фильтра на входе вам условные leetcode medium никогда не придётся решать (ну или придётся, но под рукой будет гугл и стековерфлоу). Глубокие знания появятся по ходу дела.
      Если вы не хотите работать в таких компаниях, или текущее место работы всем прекрасно — не ходите, никто ж не заставляет.


    1. Jammarra
      12.10.2021 17:34
      +1

      Ради денег. Ответ не популярный, но банальный.

      Работа у всех одна и та же. А вот сумма за которую себя продаешь разная.


      1. hyrurg
        12.10.2021 17:42
        -2

        Как однажды сказала мне моя мама - в таком случае можно на голубом жениться. Ну ради денег есть где больше дадут. Так что нет, не деньги стимул. Надеюсь. Верю


        1. nex-54
          12.10.2021 20:42

          В США есть варианты, да.

          В Европе\Канаде с этим намнооого хуже. Найти компанию, которая будет платить выше ФААНГа и при этом без литкода... проще литкод натаскать, чем таких искать. Бвает финтех попадается, бывает еще что-то, но это редко. При том топ финтех, типа джейн стрит, идет по пути фаанга со всеми этими литкодами и еще сверху наваливает на собесах.

          Поэтому фраза, что "есть где больше дадут" вроде как верная, но таких вариантов очень мало и не понятен стимул их искать.

          Было бы отлично привести пару примеров таких компаний, которые: 1) платят выше фаанга 2) без литкода(или других "нерелевантных" вещей) на собесах 3) в которых хочется работать. Мне лично пока что такие не попадались во время моей жизни в Канаде\Англии(про рф не говорю, поскольку фаанг выехал из РФ еще до меня)


        1. Jammarra
          13.10.2021 19:33
          +2

          Как однажды сказала моя мама "спасибо за деньги на операцию"

          Работа это продажа своего времени за деньги. И лучше его продавать дорого чем дёшево. И потратить их например на семью.

          Вот когда я смогу придти в магазин и мне там подарят теслу например просто так или гугл перестанет требовать подписку на Ютубе и врачи перестанут просить деньги. Тогда и начну работать за идею.


  1. hyrurg
    12.10.2021 17:00

    Просьба удалить. Не туда вписал.