— Что вы скажете, если я попрошу вас разработать сервис, который обрабатывает тысячи запросов в секунду с минимальной задержкой?
— Хм… Я скажу, что у вас в компании возникла такая проблема. Но у вас нет идей и вы обсуждаете её на собеседованиях с кандидатами :)
Именно так я ответил, когда мне впервые задали вопрос по архитектуре. Мы хорошо посмеялись. Но потом интервьюер всё-таки заставил меня спроектировать сервис.
С тех пор минуло десять лет и бесчисленное количество собеседований с обеих сторон стола. Я работал в Microsoft, Google, Stripe и получал предложения от многих других компаний. Когда я сам проводил собеседования, то понял одну вещь: стандартные советы по интервью крайне недостаточны.
Зачем неделями практиковаться в решении задач, если на собеседовании голова совершенно пустая от волнения? Все говорят, что нужно остерегаться рекрутеров, но что, если это не так? Как вы можете показать себя с лучшей стороны, если вы слишком боитесь?
Я несколько раз проверял ответы на эти вопросы (иногда случайно). Как показала практика, народная мудрость даёт средние результаты. Но можно прокачать свой навык собеседований.
По какой-то причине никто не говорит о некоторых специфических аспектах собеседования, которые мне неоднократно помогали:
- Использовать рекрутеров в своих интересах
- Проходить реальные собеседования для тренировки
- Не упускать возможности обучения во время собеседований
- Поддерживать навык даже тогда, когда вы не ищете работу
Совет №1. Использовать рекрутеров в своих интересах
По телефону они такие дружелюбные и услужливые: «С нетерпением вас ждём!» Ясно, что всё это притворство, думал я раньше. Я был уверен, что после разговора они втайне обсуждают мои качества у меня за спиной. Мол, подходит он компании или не подходит.
И они действительно обсуждают. Но не так, как вы думаете.
Рекрутеры не оценивают ваши профессиональные качества, во всяком случае, не после телефонного разговора. Их решение о вашем профессионализме было принято задолго до этого звонка. Если вам предлагают интервью: поздравляю, вы уже преодолели эту планку.
Теперь рекрутер хочет работать с вами. Его задача заключается в том, чтобы вас приняли. Они знают, что у среднего кандидата плохие навыки подготовки к собеседованию, и с радостью помогут исправить этот недостаток. Зачем отбрасывать сильных кандидатов, которые не могут хорошо пройти собеседование? Они хотят помочь каждому показать себя с лучшей стороны.
Как вы можете этим воспользоваться?
Задавайте им вопросы! Например, такие:
- «Что мне делать, чтобы подготовиться к собеседованию?»
- «О каких ценностях компании было бы хорошо поговорить во время интервью?»
И будьте откровенны о любых проблемах, с которыми столкнётесь.
- Если вы заболели за день до собеседования, позвоните рекрутеру и попросите перенести собеседование. Он же хочет назначить собеседование, когда вы в лучшей форме!
- Запарка на работе не оставила времени на подготовку? Всё ещё можно назначить другую дату. В худшем случае они скажут: «Извините, мы не можем этого сделать». Это не ухудшит ваши шансы.
Ваши безумные технические навыки больше не имеют для них значения. В любом случае, смирение и открытость к обучению покажут вас в лучшем свете.
Совет №2. Проходить реальные собеседования для тренировки
Нужно прокачивать навыки прохождения собеседований. Программирование — это здорово, но его и близко недостаточно в реальных собеседованиях. Старайтесь как можно чаще проходить реальные собеседования. И не ограничивайте себя теми компаниями, которые вам интересны.
Научитесь справляться с давлением.
Когда вы пришли на настоящую встречу, мир меняется: вы заперты в клетке со львом. Сердце барабанит в груди. Психика взрывается, когда тело переходит в режим «ударить или сбежать». Липкие руки изо всех сил пытаются написать на доске полуразборчивый код. За каждой тенью видится угроза. Даже безобидное «Не хотите чего-нибудь выпить?» кажется гнусной проверкой, что ты выберешь: кока-колу или кофе…
Такой опыт можно получить только на настоящем собеседовании. И только там вы научитесь, как с этим бороться. На первом же собеседовании вам надерут задницу. И на втором. Но как только пройдёте несколько штук, вы привыкнете к приливу адреналина. Может, вам даже понравится. Вы станете тореадором, который уверенно противостоит атакующему быку. Вот как преодолевать страх.
Вам может показаться, что эти собеседования для тренировки намного проще, чем настоящие! Когда ставки низки, лев выглядит не таким свирепым. Я обнаружил, что лучше всего справляюсь с задачей, когда меня не волнует результат. Я становлюсь гораздо спокойнее и непринуждённее. Быстрее думаю, мозг рассматривает больше возможностей. Теперь даже в важных интервью я стараюсь убедить себя, что мне всё равно, словно это собеседование для тренировки.
Научитесь отвечать на двусмысленные вопросы.
После каждого собеседования записывайте все вопросы, которые вам задавали. В тот же вечер просмотрите их, пока они ещё свежи в памяти. Сосредоточьтесь особенно на поведенческих и архитектурных, у которых нет конкретного правильного ответа. Подумайте, как на них ответить лучше. Есть ли истории из вашей жизни, на которые можно сослаться? Подождите несколько дней и посмотрите снова на эти вопросы. И тогда вы найдёте ответ получше.
Каждый ответ, который вы готовите — один штрих на картине вашей подготовки. Велика вероятность, что вы опять столкнётесь с подобными вопросами. Со временем вы сможете смешать палитру заготовленных набросков — и нарисовать потрясающую картину того, насколько ваши способности делают вас ценным активом для компании.
Соображайте быстро.
Во время тренировочных собеседований вы можете обнаружить, что компания на самом деле интересная. Рекрутеры рассчитывают на такой вариант. Они предлагают попробовать пройти собеседование даже если вы говорите, что компания не интересная. И у меня такое случалось неоднократно.
Совет №3. Не упускать возможности обучения во время собеседований
Я узнал об этом случайно, но это реально окупается.
Как-то на ярмарке вакансий в колледже я ходил и осматривался вокруг. Мой взгляд упал на кучу кубиков Рубика, которые раздавала компания, о которой я никогда не слышал. Мне очень хотелось заполучить такой! Конечно, я не мог просто подойти и попросить его прямо, поэтому пошёл и поболтал с парнем, который работал на стенде. Его звали Винс. Через несколько минут я ушёл с драгоценным кубиком Рубика в руке. В тот же вечер мне позвонил Винс и предложил пройти настоящее собеседование в кампусе. У меня уже было предложение о работе от компании, которая мне нравилась, но я подумал: «Конечно, почему нет? Опыт не лишний».
Я не собирался у них работать, это был какой-то скучный финансовый бизнес. Терять было нечего. Поэтому во время интервью я мог свободно задавать любые вопросы. Когда мне казалось, что я неправильно ответил, я спрашивал: «Кажется, тут я дал маху. А как правильно?» (я хотел узнать ответ для будущих собеседований!) Когда мне задавали сложный вопрос, я с улыбкой наслаждался решением проблемы, а не беспокоился, насколько плохо это отразится на мне (помните мой остроумный вопрос в начале статьи? так выглядело то собеседование).
Оказывается, компаниям нравится подобное поведение: на следующий день мне предложили другую работу. На значительно более высокую зарплату, чем первая. Да, и они хотели через две недели отправить меня в Нью-Йорк, чтобы познакомиться с компанией. Я всё ещё не хотел к ним идти, но бесплатная поездка в Нью-Йорк… Ладно, записывайте! Название компании: Bloomberg.
У Bloomberg были опытные рекрутеры. Они по полной программе использовали два дня, чтобы кандидат остался в восторге от компании (я был очень близок к тому, чтобы принять их предложение). Во время той поездки Винс сказал, что я произвёл большое впечатление, когда бесстрашно задавал вопросы, даже будучи в полном тупике.
С тех пор я без колебаний задаю любые вопросы на собеседовании. Ничем не ограничивайте любопытство! И как интервьюер подтверждаю: искренний интерес — это всегда хороший знак.
Совет №4. Поддерживать навык даже тогда, когда вы не ищете работу
Джеймс Уиттакер рекомендует проходить тренировочное собеседование каждый год, просто для подтверждения, что вы можете его пройти.
Это окрыляющее чувство — знать, что если потеряешь работу, то сможешь быстро найти другую. Снимает огромный груз с плеч.
Я и сам время от времени принимаю приглашение от рекрутера (для этого полезно завести аккаунт на LinkedIn). Я не утруждаю себя подготовкой, по крайней мере, на первом этапе. Эти собеседования позволяют понять, в каких областях нужно освежить знания, а где меняется отраслевая практика.
Например, на техническом собеседовании прошлым летом я сразу не понял, что они хотят увидеть реальный рабочий код. Вместо обычного псевдокода в Google Docs интервьюер попросил выбрать нужный язык в онлайн-IDE. А у меня нет особых предпочтений по языку. На работе я использую много инструментов и меняю языки примерно каждые пять месяцев. Поэтому даже такие простые вещи, как «создание массива», обычно приходится гуглить. Поэтому что выбрать? Ну, я выбрал C#.
Но не подумал, что очень многословный синтаксис Visual Studio прекрасно автоматизирует, а эта онлайн-IDE — нет. Даже для такой простой задачи, как создание массива, пришлось потратить драгоценные минуты на поиск нужного пакета для импорта и точного синтаксиса. Излишне говорить, что у меня не хватило времени. Так что я погорел… но это открыло мне глаза, как меняются собеседования и к чему готовиться в будущем.
Через четыре месяца ко мне обратилась компания под названием Stripe. Они также ожидали рабочий код и даже разрешили использовать свою IDE. На этот раз я был готов. И теперь там работаю.
Эти четыре стратегии помогали мне снова и снова: использовать рекрутеров, тренироваться на реальных собеседованиях, получать там новые знания и поддерживать навык.
Что общего у всех этих тактик? Они убирают страх. Страх, который мешает вам максимально проявить себя. Тренируйтесь почаще, и комнаты для допросов превратятся для вас в игровую площадку.
«Никогда не показывай, что тебе трудно», — говорил мне Винс. Но когда ставки смешные и вы развлекаетесь, какие проблемы?
Fen1kz
Помню пару лет назад позвонила знакомая рекрутер, предложила интервью. А я начитался всех этих ваших рассказов, о том как круто периодически ходить по собеседования — пошел по приколу, чисто проверить чего я стою вообще без подготовки.
Ох там меня в такие щи размазали, что до сих пор не совсем отошел. Два часа мордой возили по теоретическому полю, начиная от утечек памяти и заканчивая логарифмами.
Так что если решите профилактически, на расслабоне пойти — все же стоит освежить сколько там типов в вашем языке, какой алгоритм у квиксорта и прочие нужные вопросы
Kwisatz
Не стоит, это замечательный индикатор компаний, в которые идти не нужно
imia_i_familia
Если вы не знаете о том на какую конкретно должность идет поиск — я бы не стал делать таких грандиозных выводов.
Если речь идет о джуно-стажере — то его больше и спрашивать-то еще не о чем.
Kwisatz
сомневаюсь что это джуно-стажер.
А не важно, ниже коллега достаточно подробно объяснил.
Barbaresk
Ну а если он внезапно собеседовался на какого-нибудь программиста-алгоритмиста, у которого вся работа в том, чтобы улучшать какой-нибудь высоконагруженный сервис, ускоряя его на 0.2% и уменьшая объем потребляемой памяти на 0.3%?
Kwisatz
То он почти наверняка пойдет РСУБД мучать…
А так да, не моуг правда представить в современном мире но верю еще пока)
Barbaresk
Ну в любом случае это не отменяет того, что наверняка существуют такие специальности, где нужно хорошо знать алгоритмику. Для написания каких-нибудь std либ для языка, например. Другое дело, что в большинстве случаев, спрашивают алгоритмы и логарифмы, а на дели CRUDы лепить и странички верстать придётся.
imia_i_familia
Таких не бывает.
В высоконагруженных проектах затык или в сети или в СУБД или в дисках.
0xd34df00d
Ну ладно, значит, я занимался несуществующими проектами. Или непонятно, почему люди платили мне за то, что я оптимизировал на какие-то десятки и единицы наносекунд высокочастотно торгующий код (дураки, наверное, деньги считать не умеют), или почему платили за то, что я оптимизировал машиннообучательные числодробилки (тоже дураки, наверное).
imia_i_familia
Разумеется, в предположении, что исходный код не полное говно.
Ибо полное говно может оптимизировать практически любой зрелый программист.
В торгующем коде это была не сеть?
0xd34df00d
Да. Но если код не полное говно, а оптимизировать надо, то приходится искать тех, кто это может сделать.
Сеть уже оптимизирована, всё, там особо не выиграешь. Торгующие машины стоят рядом с сервером биржи, длина кабелей проверена и одинакова для всех, сетевые карточки плюс-минус одинаковые у всех, оптимальные настройки дров для них тоже известны и плюс-минус одинаковые у всех. Приходится опережать других людей за счёт вычислительной части.
Barbaresk
А СУБД откуда взялось? Боги принесли и подарили? Это хорошо, что можно вызвать стандартный sort для вашего ЯП и select для вашей БД. Вот только есть разработчики этих самых sort для стандартных либ, и разработчики этих самых БД. И это тоже живые люди, для которых тоже есть вакансии. И там будет нужно знать и про алгоритмы, и про утечки памяти, и, даже отличать О(N) от О(NlogN).
vanxant
Да, только, например, диски СУБД кладёт какой-то временный костыль, сделанный пару лет назад для а/б теста давно неактуальной фичи, который генерит миллион апдейтов базы в секунду.
Data-Q7
Заказчик не платит программисту за то, что он может встать на табуретку и рассказать про квиксорт или ответить на хитрый вопрос. Заказчик платит за готовый продукт, который он сможет использовать для своих задач. Может я в начале своего "пути" и знал наизусть все сортировки/поиски на 10 языках, то теперь я вполне открыто говорю, что во время работы я полезу в гугл и буду смотреть там вариант решения. А большую часть вычислений выполню на богомерзком калькуляторе. Наверное вам стоило в ответ задать пару вопросов и посмотреть как бы они повели себя не по своему "сценарию". И вы знаете, без работы с "таким отношением" не сидел ни дня.
P.S.История ваша напомнила одну контору где на любой вопрос любят говорить "это секретная информация" и "о, денюжка на обеды пришла, пойду поем в нашей столовой"
AllexIn
Джун должен знать все алгоритмы.
Мидл должен знать о существовании всех алгоритмов.
Сеньор должен знать все алгоритмы.
*всех — условное обозначение, а не буквально всех.
braineater
Сеньор должен знать где сидит джун. (:
sumanai
В каком чате джун.
*Сеньор-ковид-эдишн*
AnthonyMikh
А не наоборот?
gorgona45
И уметь крикнуть «Эй, молодой, сюда иди!» :)
tommyangelo27
Плюс уметь нагрузить джуна так, чтобы тот чувствовал свою важность и считал сеньора своим ментором :)
Malduan
Вы сами не ощущаете некую внутреннюю несогласованность ваших тезисов? Мидл вроде как промежуточное состояние между джуном и сеньором, а тут хз что.
Да и сеньор, которые знает все алгоритмы — это сеньор преподаватель CS в универе, а не разработчик, я боюсь.
AllexIn
Это по большей части шуточный коммент. Делать утверждение трехстрочное объединяя огромную индстрию — ну такое. Есть много специфики в разных областях, которые диктуют требования к специалистам.
anprs
Data-Q7
Например, как знание этой темы должно мне помочь выполнять должностные обязанности и слышали ли они когда-нибудь про уровни абстракции.
KnightForce
На мой взгляд творческая жилка ценнее знаний деталей. Их догнать куда легче. И когда не берут если ты не знаешь то что и так гуглится — то проблема в компании.
gorgona45
Или в рынке, где есть избыток тех, кто гуглу конкурент, потому как платить по счетам НАДО.
0xd34df00d
Пардон, но ведь квиксорт проще пузырька (особенно почти-квиксорт без требования сортировки без лишней памяти), а как без типов жить, вообще непонятно.
Fen1kz
Давайте без гугла все примитивные типы в хаскеле?
0xd34df00d
О, какой шикарный вопрос!
Примитивные в смысле «не определяемые пользователем без адовых костылей» — Int, Integer, Double, Float, Char, вроде как ghc'шное расширение Word{8,16,32,64}. Если добавить полиморфные типы, то это ST, IO и тип функций (->), требующие поддержки компилятора и потому тоже примитивные. Если добавить то, что можно написать руками на чистом хаскеле, то ещё получим списки, туплы, всякие там Maybe, Either и прочее, но я, опять же, не уверен, что их стоит считать примитивными, несмотря на то, что они есть в стандарте языка. Если брать ghc'шные расширения (ибо нет компилятора, кроме ghc, и Саймон-Пейтон Джонс пророк его), то стоит упомянуть примитивные unboxed-типы вроде unboxed-целых, даблов, флоатов, символов, туплов и так далее — их руками реализовать нельзя, они тоже требуют поддержку компилятора.
Дальше можно начать говорить о том, например, как разные типы представляются в памяти, какие оптимизации может делать компилятор, как писать эффективный код с учётом этих представлений, и так далее. А можно начать говорить о теории, о том, что все эти типы не нужны, Church encoding даёт нам всё что нужно для вычислений, и увести разговор в сторону обсуждений систем типов, смотря что вам ближе. Говорю ж, хороший вопрос, продуктивный.
Fen1kz
Вы забыли Boolean и List, мы вам перезвоним.
0xd34df00d
Так они не примитивные, ибо спокойно пишутся руками (и я даже про это написал выше).
oleg_gavrilov
Зачем вы спорите? Вы всегда такой конфликтный? Нам кажется, что вы не сработаетесь с нашей командой, мы вам перезвоним!
sergeyns
А у рекрутера в методичке написано что примитивные
Mes
Вот кстати )
cerrenesi
Если вопрос по лографимам выходил за рамки определния логарифма, то надо было вежливо сказать что вы пришли собеседоваться на программиста, а не на препода по математике.
Вас же там не насильно держали, можно было просто уйти.
Malduan
Наверное речь шла про big-О, иначе что можно спрашивать про логарифм? То же что и про воснесение в степень, что ли лол?
Fen1kz
Спросили сколько будет если положить $100 под 5% годовой на пять лет
Kwisatz
«Откройте любой онлайн калькулятор и посчитайте»
mrbald
What type of compounding?
iboltaev
ну ведь и круто же, увидели, где и чего вам можно подтянуть.