Подготовка к собеседованиям в IT-гиганты: как я преодолела проклятье алгоритмического собеседования


    Дисклеймер:


    Я не программирую с трёх лет, не знаю наизусть Кнута, не являюсь призёром олимпиад по информатике и чемпионатов по спортивному программированию, не училась в MIT. У меня за плечами образование по информатике и 6 лет опыта в коммерческой разработке. И до недавнего времени я не могла пройти дальше первого технического скрининга в IT-гиганты из FAANG (Facebook, Amazon, Apple, Netflix, Google и подобные), хотя предпринимала несколько попыток. 

    Но теперь всё изменилось, я получила несколько офферов и хочу поделиться опытом, как можно к этому прийти. Речь пойдёт о позиции Software Engineer в европейских офисах перечисленных компаний.

    Зачем мне этот FAANG? Мои субъективные плюсы:

    1. хорошие условия, зарплата выше рынка;
    2. простая релокация;
    3. отлаженные процессы;
    4. талантливые коллеги со всего света.

    И плюсы подготовки, даже если не получишь оффер:

    1. путешествия;
    2. повышение скорости написания кода;
    3. умение мысленно проверять программу на наличие ошибок (метод пристального взгляда);
    4. навык придумывать каверзные сценарии для тестов;
    5. умение находить узкие места;
    6. тренировка навыков проектирования систем в том числе и более масштабных, чем те, с которыми когда-либо сталкивался.

    Привлекаем внимание рекрутера


    В моём случае было достаточно LinkedIn. На протяжении нескольких лет я без какой-либо специальной цели поддерживала в своём профиле некоторый уровень активности: регулярно добавляла знакомых и подписывалась на страницы компаний. Довольно скоро начали стучаться первые рекрутеры и чем больше у меня было контактов, тем чаще они предлагали вакансии. Дошло до того, что на последней итерации за пару месяцев мне написали сразу из Google, Microsoft, Amazon и Facebook, это выглядело как картельный сговор.

    Минусы такого подхода: никогда не знаешь, когда тебе повезёт. Рекрутер может настигнуть в отпуске с новостью о горящем hiring event, на котором надо быть через неделю. Но в этом случае есть и свои плюсы: скорее всего, из-за срочности вам пойдут навстречу и пропустят один из этапов собеседования — например, в случае Amazon, онлайн с техническим специалистом.

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

    Есть другой часто упоминаемый подход — найти человека внутри компании, который вас порекомендует. Это позволит лучше спланировать стратегию подготовки. Но я не буду на нём останавливаться, так как сама не пробовала и могу лишь поделиться слухами, что рекомендация в Google добавляет очки при прохождении собеседования и повышает шансы на положительное решение hiring committee (финальный этап — собрание, где заочно обсуждаются результаты и кандидат утверждается или отклоняется).

    Схемы собеседований


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


    Схема собеседований в Google (здесь и далее схемы могут немного отличаться в зависимости от офиса и позиции)

    Некоторые этапы — телефонное или с командой — могут быть назначены повторно, если у какой-то из сторон есть сомнения. Их число ни на что не влияет, это просто дополнительный шанс, которым нужно пользоваться, предварительно оценив, сколько ещё времени требуется на подготовку (если собеседование техническое). Общий подход у Google и, например, Microsoft — разделение процесса для кандидатов с минимальным опытом работы (< 1 года) и опытных кандидатов. Для первых может дополнительно проводиться онлайн-тестирование (online assessment).


    Схема собеседования в Microsoft

    Поведенческие вопросы могут быть частью каждой сессии на очном этапе, как, например, это делает Microsoft и Amazon, а могут быть отдельной сессией. Мне, как кандидату, больше нравится второй подход: во-первых, отдельное поведенческое собеседование не крадёт время у решения задач, если интервьюер вдруг оказался разговорчивым, а во-вторых, здорово, когда его ставят после всех технических сессий — можно спокойно переключиться на разговоры о жизни.


    Схема собеседований в Amazon

    В Microsoft и Amazon поведенческое собеседование интегрировано в технические сессии, наверное, ещё и потому, что часто эти этапы проводят сотрудники из будущей команды. В тех компаниях, где подход отличается, общение с будущим коллегами вынесено в отдельный этап. Например, Google определяет команду уже после успешного прохождения очного этапа. Самый оригинальный процесс у Facebook — выбор команды происходит уже после найма. Новый сотрудник 6 недель проводит в bootcamp — это тестовые проекты в разных командах, а затем принимает решение.


    Схема собеседований в Facebook

    Нетехнический прескрининг


    Первый шаг — разговор с рекрутером. Обычно это короткий звонок для описания вакансии или команд, в которые предлагает собеседоваться рекрутер, и для выяснения вашей заинтересованности и мотивации. Конкретной вакансии может и не быть, всё зависит от процесса найма в данную компанию (см. «Схемы собеседований»). Кажется, что этап довольно простой, но и здесь расслабляться не следует. Могут спросить какой-нибудь короткий технический вопрос, например, оценить количество знаков в степени двойки (Google). А могут посчитать опыт недостаточно релевантным или что вы, как кандидат, не сильно заинтересованы (такое практикует Facebook). 

    Подготовка к алгоритмическому собеседованию


    Технический скрининг — этап, который для меня чаще всего становился последним до того, как я придумала всю эту схему подготовки.
    Конечно, мне высылали материалы для ознакомления и рекомендовали потренироваться на Hackerrank/Leetcode. Но никогда не говорили, что нужно решить минимум 100-200 задач, и это именно то число, которое наконец-то позволило мне дойти до успешного финала.
    Невооружённым глазом видно, что это от двух месяцев регулярного решения задач при наличии работы и другой жизни. Можно попробовать посвятить этому отпуск и справиться быстрее, но дальше будет подготовка к очному этапу и её всё-таки придётся подружить со своим обычным расписанием.

    Я готовилась с помощью Leetcode, и мой выбор был таким по нескольким причинам: 

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

    У Leetcode есть, конечно, и недостатки:

    • практически невозможно добавить свою задачу или тестовый пример — а потому информация начинает устаревать;
    • неточная оценка времени выполнения и памяти — может меняться от запуска к запуску;
    • недостаточно чёткие условия по сравнению с задачами спортивного программирования;
    • не всегда идиоматические интерфейсы функций.

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

    Для меня задачи идеально вписались в утро перед работой. После завтрака я ставила таймер и решала пару задач уровня Medium. Таймер важен, так как помогает создать боевые условия. Время по уровням сложности я отводила так: 20 минут на простые, 40 минут на средние, 60 минут на сложные. Выбирала в основном задачи среднего уровня, так как сложные спрашивают довольно редко. Если по истечении времени задача не была сделана, я изучала решение, вносила её в список и возвращалась к ней через некоторое время. Я старалась сначала изучить подход на словах и попытаться его закодить. Решение можно было смотреть на самом сайте — от авторов задачи или комментаторов, также помогали видео у Тушара Роя, он очень понятно объясняет на примерах. Разбор почти любой задачи можно найти и на GeeksForGeeks, но там довольно много ошибок.

    Самый универсальный подход — отсортировать все задачи по частотности и начать их решать в порядке убывания.
    Если знакомства с computer science до этого не было, стоит сначала пройти фундаментальный курс, но не увлекаться. Ни знание computer science, ни прочитанная книга «Cracking the Coding Interview» не дадут такого эффекта, хотя и довольно полезны для старта. У меня в начале пути был университетский курс, курс Седжвика (раз и два) и упомянутая книга Макдауэлл — всё это не помогло мне пройти даже телефонное собеседование. Во-первых, паттерны решения должны быть на кончиках пальцев, чтобы кандидат мог быстро их видеть и применять. Для этого разбор задачи нужно не просто прочитать, а сначала попытаться придумать (или вспомнить), а если не получилось, после разбора снова написать самому. Желательно делать это с ограничениями по времени и очень хорошим покрытием тестами, как на Leetcode, что ни курсами, ни книгами не обеспечивается. Во-вторых, курсы по computer science, как правило, не рассказывают про практические подходы к решениям вроде двух указателей или «зайца и черепахи»

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

    Tips and tricks


    Когда я готовилась к собеседованию в определённую компанию, я немного меняла тактику на Leetcode. C платной подпиской там можно просмотреть специальные подборки задач по популярным компаниям и они помогают быстро подготовиться. Многие компании дают одни и те же задачи и выбивается из них, пожалуй, только Google, который поощряет своих интервьюеров придумывать новые. Поэтому решённые 70-80% задач из такой подборки почти гарантируют успех.


    Подборка с Leetcode для отдельной компании — самые частотные задачи отмечены комментариями с указанием этапа собеседования

    Отдельно хочу отметить бесплатные подборки по онлайн-тестированию (например, для Amazon), которые заботливо собираются сообществом в обсуждениях. Там не так много задач, но они практически полностью совпадают с теми, что могут попасться на онлайн-тестировании. Я очень рекомендую их прорешать, если предстоит такой этап, потому как на нём может быть много подводных камней, которые съедят ваше время. Там не будет человека, с которым можно договориться о более удобном интерфейсе функции или на словах объяснить, что вы ещё хотели бы исправить, но не успели. Только таймер, не всегда привычная сигнатура метода (например, C-массивы для C++) и бескомпромиссные тесты. Для успешного прохождения, к слову, пару тестов можно завалить.

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

    Периодически можно прочитать советы «сообщать интервьюеру, если вы видели задачу, которую вам нужно решить». Я довольно скептично к ним отношусь по многим причинам. Во-первых, если вы задачу разобрали, а не выучили наизусть, то будет далеко не очевидно, что вы её уже видели. К тому же всегда можно придумать follow-up, который кандидат не разбирал. Во-вторых, компании в открытую советуют перед собеседованием тренироваться на Leetcode. Будет занимательно, если у интервьюера закончатся незнакомые вам задачи. В-третьих, некоторые решения очень сложно придумать с нуля даже с подсказками интервьюера. Надеюсь, что спрашивают их редко, но полагаться на удачу не следует. Ну и в-четвёртых, если компания правда так переживает из-за известных вам задач, то она мотивирует интервьюеров придумывать новые.

    Если я хотела понять, насколько я готова решать новые, не известные мне задачи, я участвовала в соревнованиях по спортивному программированию на Leetcode/Codeforces. Это сложнее, чем собственно собеседование, потому что не с кем обсудить решение и получить подсказку, если есть трудности. Зато нет соблазна запустить свой код на готовых тестах без мысленного прогона на примерах — рискуешь получить штраф. 

    Кажется, всё? Нет, есть небольшая деталь, буквально один вопрос, который может испортить всё собеседование. Временные сложности и сложности по памяти стандартных алгоритмов нужно знать наизусть, а остальные — уметь быстро выводить и тренироваться делать это на каждой решаемой задаче. Для определения сложности рекурсивных задач пригодится Master theorem.

    English, please


    Очевидный инструмент, который необходим для собеседования — это английский. Подход к его изучению не тема нашего разговора, хочу лишь немного остановиться на том, как на практике потренировать его в боевых условиях. Дело в том, что разбор задачи в одиночку не совсем точно воспроизводит собеседование. Потому что, помимо прочего, придётся объяснять свой ход мыслей по-английски и делать это параллельно написанию кода, а в некоторых случаях и вовсе без него. Поэтому идеально будет найти напарника. Это может быть знакомый, который так же готовится к собеседованию, может быть специальный митап (московский пример), а может — случайный собеседник на одной из площадок (раз, два). Ресурсами последнего типа я не пользовалась, но почитать, как это устроено, можно, например, в этой статье.

    Очный этап


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

    Whiteboard


    Помните, как я знакомилась с инструментами для онлайн редактирования кода для первого этапа? На очном собеседовании вместо них часто используется доска. Я купила её домой для подготовки к очному этапу. Эффект был сильнее, чем я ожидала. До этого я побаивалась доски как чистого листа и даже на работе предпочитала её избегать. Но теперь, когда я к ней привыкла, обнаружила, насколько это удобно для собеседований:

    • можно безболезненно исправить решение (по сравнению с бумагой);
    • легко набросать картинку;
    • удобно расписать пример;
    • быстрее и комфортнее, чем печатать на клавиатуре, к которой вы не привыкли (если в случае альтернативы предлагают закодить решение на предоставленном ноутбуке).

    System design


    Пожалуй, это тип собеседования, для которого нет «царской дороги». Надо заметить, что до этого у меня был нулевой опыт в проектировании распределённых систем. Информации по подготовке к system design собеседованию в разы меньше, чем к алгоритмическому. Всё усугубляется тем, что люди, которые публикуют разборы таких задач, часто сами не обладают релевантным опытом. Тем не менее, воодушевлённая паттернами для алгоритмического собеседования, я начала искать что-то похожее и нашла платный курс, который казался простым и эффективным… до первого собеседования, где я поняла, что он очень поверхностный. Там не обсуждалось ни reverse proxy, ни content delivery network, про которые хотели услышать мои интервьюеры. Хватило его только на «троечку». Это, с одной стороны, помогло — позволило получить оффер, при условии, что все остальные части были пройдены хорошо. А с другой — срезало уровень предлагаемой должности, так как этот этап важен для оценки «сениорности» кандидата. Ну и так как все сессии очного этапа суммируются, то лучше не терять здесь баллов — их может просто не хватить для положительного результата.

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

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

    Поведенческое собеседование


    Ещё один тип собеседований, который может быть как отдельной сессией, так и в дополнение к другим — поведенческое собеседование. Я решила готовиться к нему, потому что иногда сложно придумать подходящую ситуацию или ответ на вопрос, а заминку интервьюер может интерпретировать как попытку что-то скрыть. Моя тренировка заняла совсем мало времени и её должно хватить надолго. За образец взяла принципы Amazon как наиболее многочисленные и расписала на каждый принцип 2-3 ситуации из моего опыта. Зачем так много? Дело в том, что один и тот же вопрос могут задать разные интервьюеры в рамках одного очного этапа и будет не очень здорово, если всё будет сводиться к одному проекту. Или, наоборот, зададут несколько вопросов, на которые примером служит один и тот же кейс. Для простоты ответов я также выделяла для каждой ситуации ключевые элементы:

    • сложности;
    • что не получилось (и какие выводы я сделала);
    • что понравилось;
    • как я себя проявила;
    • конфликты.

    Часто бывает сложно быстро обрисовать ситуацию интервьюеру, не упустив важных деталей. Рассказать чётко и последовательно поможет разбиение повествования по методике STAR: situation — task — action — result. В этой части важно не злоупотреблять словом «мы», его должно быть минимальное количество. Рассказывайте о том, что сделали именно вы, не преуменьшая своего вклада.

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

    Когда очный этап не последний


    Как я уже упоминала, некоторые компании устраивают собеседование с командой отдельным этапом. Но и оно может быть не заключительным. На позиции в европейских офисах Google после него следует hiring committee — собрание экспертов, которые определяют соответствие кандидата выбранной позиции. Главную роль играет, конечно, обратная связь от интервьюеров. Но очный этап довольно редко удаётся пройти идеально, и здесь вступают в игру дополнительные детали. Идут в плюс рекомендации действующих сотрудников, а также рекрутер может попросить ссылки на профили Github и Topcoder/Codeforces/Leetcode. Hiring committee — это далеко не формальный этап, процент отказов здесь может быть сравнимым с очным этапом, в редких случаях могут назначить дополнительное собеседование.

    P.S.


    Однажды я проходила собеседование, к которому долго и упорно готовилась. Я щёлкала задачи как орехи, быстро писала код и чувствовала воодушевление. Техническая часть показалась очень лёгкой, и я завершила звонок в полной уверенности моего прохождения: «Если я уж сейчас не пройду, то не знаю, что им ещё нужно». Не было человека счастливее меня, пока я не прокрутила своё решение ещё раз и не нашла ошибку. Следующие 48 часов я ждала разоблачения, которого не наступило, и я действительно прошла. Так я поняла, что интервьюеры тоже ошибаются, а уверенность — помогает.

    Ссылки


    1. Наиболее распространённые паттерны решения задач: бесплатный обзор и платный курс
    2. Паттерны решения задач на динамическое программирование
    3. Видеоразборы задач от Тушара Роя
    4. Формула для вычисления сложности рекурсивных алгоритмов
    5. Peer-to-peer собеседования: раз и два 
    6. Ресурсы для подготовки к system design собеседованию: бесплатный и платный курс 
    7. Алгоритмический курс Седжвика на Coursera: https://www.coursera.org/learn/algorithms-part1 и https://www.coursera.org/learn/algorithms-part2
    8. Amazon Leadership principles
    9. Техника STAR
    10. Еще по теме: поиск работы в FAANG и успешная подготовка в Google
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 337

      0
      Спасибо за то, что поделились опытом, и за ссылки на материалы.
      Куда, если не секрет, получили оффер?
        +16
        Рада, что статья показалась полезной. Получила офферы в Amazon и Microsoft.
          0

          позиция какого уровня?

            +6
            60 в Microsoft, SDE I в Amazon (вот здесь их удобно сравнивать). Вообще, они занижают уровни по сравнению с нынешней позицией и опытом. А Amazon еще и сбавил уровень из-за прохождения system design части, о которой я упоминала в статье.
            • НЛО прилетело и опубликовало эту надпись здесь
                0
                Вы про зарплату или грейды? Было бы интересно узнать реальные данные, если можете поделиться.
                • НЛО прилетело и опубликовало эту надпись здесь
                    0
                    В США часто используют «Total Compensation» (TC) в подобных сравнениях. Что-то вроде «годовая зарплата + стоимость опций\кол-во лет + sign-up бонус\кол-во лет + ежегодный рефрешер». В случае с FAANG — это может быть довольно серьезными суммами. Плюс на многие позиции компании готовы на контр-офферы, кандидат с офферами от Facebook и Snap может выйти за «обычные» рамки при некоторых обстоятельствах
                    • НЛО прилетело и опубликовало эту надпись здесь
                      +1

                      PS — это про Амазон или вообще?

                        +1
                        Нет, не Амазон, но компанию раскрывать не буду во избежание разочарований.
                          +1

                          Тогда микрософт, судя по предыдущим комментариям в ветке? :)


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

                            0
                            Тогда микрософт, судя по предыдущим комментариям в ветке? :)


                            А, я не увидела, что это к комментарию. Подумала, что это к ошибке на собеседовании, о которой я в конце статьи упомянула.
              0
              А какой у них план работы в связи с повсеместными карантинами? Удаленно или как-то перевозить будут?
                0
                Проводят все собеседования онлайн, а потом ждут открытия границ и перевозят. Это если все пойдёт по плану. А если визовый процесс очень долгий (например, в США, в случае релокации из России) могут временно трудоустроить в местный офис, если он есть.
                  0
                  Т.е. оффер сейчас, а работа только после перевоза скорее всего?
                    0
                    Да, скорее всего так. Оффер делают не дожидаясь открытия границ. Удалённо из России без оформления в локальный офис работать не дают, кроме того, не всегда есть такая опция. Так что придётся ждать переезда.
          • НЛО прилетело и опубликовало эту надпись здесь
              0

              клыык лучше

              • НЛО прилетело и опубликовало эту надпись здесь
              0
              А в результате все это оказывается никому не нужным.
                +7
                Во-первых, хорошо, что перестали спрашивать про теннисные мячи в автобусе, это все-таки уже ближе к реальности. И тенденция идет в сторону менее «красивых» и более прикладных задач. Во-вторых, некоторым эти алгоритмы все же нужны (например, вот). А в-третьих, мне кажется, нужно к этому относиться как к экзамену, там ведь тоже часто спрашивают абстрактные вещи. Эти компании нанимают людей без привязки к языку и технологиям, при этом они пытаются оценить кандидата.
                  +2

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

                    0
                    Где и как давно спрашивали, если не секрет?
                      +1

                      Месяцев 7-8 назад в Google. Позиция связанная с Анализированием поисковых запросов. Локация Техас.

                        0
                        Эта позиция Data Scientist или Software Engineer?
                          +3

                          Bilingual QA engineer. Знание Java и фреймворков для автоматизации + CI/CD. Анализ выдачи поисковика для определенных стран. У меня 5 языков на которых я свободно говорю. Но эти вопросы, желание отбили. По деньгам тоже мало предлагали, торговались жёстко )) Сам живу во Флориде.

                  +7

                  В условных "ООО рога и копыта" верстальщику формочек — возможно это и не надо. А в FAANG такие алгоритмические задачи возникают в процессе работы. Вот, недавняя статья от яндекса приводит несколько примеров практически задач с собеседования, которые возникли в процессе нормальной обычной работы. Я сам в одной из FAANG компаний задаю на интервью именно ту задачу, которую решал во время работы. И там и про ассимптотику спросить можно и динамическое программирование написать в качестве хорошего решения.
                  Да, это происходит не каждый день, но когда оно происходит, то алгоритмические знания и умение решать алгоритмические задачи действительно нужны.


                  Добавьте к этому, что большим компаниям нужны стандартизованные, объективные критерии, как можно лучше коррелирующие с качеством нанимаемого программиста, которые можно оценить на интервью, и получится, что алгоритмические задачи — весьма неплохой вариант.
                  Какие есть альтернативы? Испытательный срок — дорого и не скейлится. Поговорить о жизни/что вы думаете по поводу технологии X — не формализуется и легко проходится теми у кого язык хорошо подвешан, даже если они писать код не могут вообще. Смотреть код с гитхаба — не у всех он есть, да и невозможно проверить, что этот код кандидат сможет воспроизвести. Тестовое задание — те же алгоритмические задачки, но тратит больше ресурсов и кандидата и компании, да и читерить на них могут запросто.


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

                    +2
                    Тестовое задание — те же алгоритмические задачки, но тратит больше ресурсов и кандидата и компании, да и читерить на них могут запросто.

                    Судя по этой статье, тестовое задание требует меньше ресурсов кандидата, чем алгоритмические задачи: на тестовое задание я могу убить неделю (вечерами после работы), если настроение будет, а решать leetcode по таймеру месяц я не буду.
                      +2

                      Тут нельзя так однобоко считать. Leetcode вы один раз в жизни порешали месяц и потом перед каждым интервью один день повторили, а тестовое задание вам при каждом интервью придется делать неделю. 4 интервью — и вы уже суммарно больше времени на тестовые потратили.


                      Потом, это от человека зависит. Если computer science курс какой-то был, то месяц вам не понадобится — пару недель максимум.

                        +1
                        тестовое задание вам при каждом интервью придется делать неделю

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

                        Переносимость действительно работает и сухой остаток от решения задач есть, но без повторения уровень понемногу снижается.
                          +10
                          Leetcode вы один раз в жизни порешали месяц и потом перед каждым интервью один день повторили
                          Один раз в жизни. Ну, ну)
                          Может вы сможете сдать практически без подготовки ГОСы и любой экзамен, который сдавали в прошлом? Еще и с той же скоростью.
                          Людям свойственно забывать то, чем они не пользуются. Если на работе сложные алгоритмические задачи приходится решать реже раза в месяц, то перед собеседованием на новую работу снова придется месяц решать задачи из Leetcode.

                          Что касается поиска работы, то в идеале перед каждым новым поиском работы надо месяц порешать алгоритмы, месяц повторить и зазубрить теорию (вроде тонкостей языка, которые в работе не используешь), месяц поизучать то, что актуально на рынке, но что в работе ты не используешь, месяц походить на собеседования для тренировки, чтобы прокачать навык прохождения собеседований. После этого можно рассчитывать устроиться на ту же должность или выше в другую компанию. Итого, 4 месяца получилось. В итоге на новой работе большинство из изученного/повторенного окажется не нужным и через n лет при смене работы снова все это учить/повторять. Но можно сократить раза в 2 длительность подготовки, отсеяв 90% компаний, где собеседующий требует написать алгоритм на листочке, или перечислить, какие методы есть у стандартного класса Object, или спрашивающий, что выдаст [] + {}.

                          Насчет алгоритмов, добавлю еще, что программист первокурсник уделает по скорости решения алгоритмических задач практически любого программиста последнего курса. А тот уделает в этом практически любого сеньора. Т.к. все зависит от того, как часто приходится писать алгоритмы. Студенты, особенно на первых курсах, этим занимаются чаще.
                            +2
                            В итоге на новой работе большинство из изученного/повторенного окажется не нужным и через n лет при смене работы снова все это учить/повторять.

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

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

                                  0

                                  Ну, вы почитайте саму статью, что привели и процитированные там комментарии с quora. Сам автор homebrew говорит, что его в твите не поняли, и наверно честно, что его не приняли в гугл. Там куча ответов вида, что чуваку надо было идти на PM, а не SWE.


                                  Создание хоть и популярного и очень полезного продукта не говорит, что чувак крутой программист. У гугла реально возникает потребность инвертировать деревья или что-то подобное. А homebrew — не то что бы слишком сложный продукт.

                                    +5
                                    Создание хоть и популярного и очень полезного продукта не говорит, что чувак крутой программист.

                                    А чем по вашему программисты занимаются? Пишут алгоритмы на доске по памяти?

                                    А homebrew — не то что бы слишком сложный продукт.


                                    Только сделали его не вы, а тот чувак, кто не умеет инвертировать деревья.
                                  +2

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

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

                                      Ну вот я вбил в гугл задачи в гугл (простите за каламбур). Первый же пример:


                                      Given an array of size n, find the majority element. The majority element is the element that appears more than floor(n/2) times. You may assume that the array is non-empty and the majority element always exist in the array.


                                      Естественно хорошее решение должно быть O(N) по времени и O(1) по памяти.


                                      Алгоритм задачи "найдите длину наибольшего отрезка из единиц в массиве заполненном нулями и единицами" очевиден, т.е. вся проверка в том, умеет ли кандидат писать примитивнейший код. Такая задача может и отсеет людей, которые не имеют отношения к программированию. Алгоритм задачи от гугла абсолютно не очевиден и в голову приходит только примитивное решение вида Map<Integer, Integer>, которое попросят улучшить. Правильное решение называется "Алгоритм большинства голосов Бойера — Мура" и если вы не Бойер и не Мур, то у вас, как мне кажется, мало шансов его изобрести в условиях интервью. Мне, например, даже после прочтения этого алгоритма до конца непонятно, почему он работает. А уж придумать — просто без шансов, хотя, конечно, всё примитивно донельзя.

                                        0
                                        Можно и по другому решить: делается quicksort, при этом каждый раз отбирается та половина, где больше элементов. До тех пор пока в меньшей половине не останется 0 элементов.В этом случае, решение — в большей половине. Аппроксимационная сложность = O(2N).
                                        Да, я не Бойер и не Мур.

                                        Справедливости ради, приведенное решение, конечно, не такое элегантное и работает только если исходный массив можно менять
                                          +3

                                          Что-то совсем не очевидно, что сложность O(N). Вы в первый проход сделаете N перестановок, во второй проход в худшем случае N/2 перестановок и т.д., по-моему это как бы в O(N^2) не вылилось (худший случай для быстрой сортировки).


                                          Но, да, если просто отсортировать каким-нибудь алгоритмом с гарантированной O(NlnN) сложностью и потом пройти и посмотреть, то задача решена. Но это O(NlnN) сложность и O(N) доп памяти (если предположить, что исходный массив менять нельзя).

                                            0
                                            Нам не нужно сортировать весь массив, а только ту часть, где самый распространённый элемент. То есть в первый проход мы сделаем N сравнений, во второй — условно N/2, в третий — N/4 и т.д.

                                            В условии не говорится, что массив нельзя менять
                                              0

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


                                              P.S.
                                              Ничего умнее map<int,int> я не придумаю, да и в целом не буду. На моей памяти ни мне, ни кому-то из тех кого я знаю не потребовалось решать задач, в которых бы понадобились эти знания.


                                              P.P.S.
                                              Я очень рад за тех людей, которые встречаются с такими задачами. Мне обычно приходится решать какие-то более приземленные задачи.

                                                0
                                                Majority всегда будет в самой большой части. wataru внизу прекрасно всё пояснил
                                              +2

                                              Будет понятнее, если переформулировать решение. Этот самый распространенный элемент обязательно будет и медианой. Потому что в отсортированном массиве он будет занимать отрезок длиннее половины массива. Как этот отрезок не располагай, он будет пересекать середину. А дальше применяется более менее известный QuickSelect для поиска медианы — модификация QuickSort, которая может за O(n) в среднем выдать k-ый элемент.


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

                                              0
                                              У Бойера-Мура конечно более изящное решение — не меняет входные данные и сложность стабильно O(N)
                                              +1
                                              Мне, например, даже после прочтения этого алгоритма до конца непонятно, почему он работает.

                                              О, я как раз про эту задачу писал хабрапост с подробным разбором алгоритма.
                                            0
                                            Ну так начинать то надо с чего либо?
                                            Да собственно даже на простых задачах люди заваливаются. Да и у простой задачи обычно можно придумать усложнение.
                                            0
                                            Ну, если сеньор не может за 25 минут написать решение для "найдите длину наибольшего отрезка из единиц в массиве заполненном нулями и единицами", даже с подсказками, то грош цена такому сеньору.

                                            Ну, я вот нашел эту задачу на leetcode, написал решение минуты за 3, работает за линейное время, тесты вроде проходит. Значит ли это, что я senior? Да ни разу, в Google меня, боюсь, не возьмут даже в качестве L3 (вообще, куда-то формошлепить под android меня, может быть, даже и взяли на позицию senior, но senior в такой конторке и senior в Google — это, как говорится, две большие разницы). Как минимум, потому что умения решать задачки уровня easy с leetcode для собеседования в Google недостаточно.

                                              0
                                              В математике есть понятия необходимости и достаточности.
                                              Умение решить простую задачку — необходимое, но не достаточное.
                                              +2

                                              Вопрос вам как интервьюверу.


                                              Мне тут на днях написал один знакомый товарищ, который решил стать джаваскриптером, и ему на собеседовании предложили задачу «распечатать 2000-ое число из упорядоченного естественным образом множества { 2i3j5k | i, j, k ∊ ℕ } с таким-то лимитом по временим». Я джаваскрипт не знаю, и как там это делать без упорядоченных структур данных, тоже не знаю. Но мне стало интересно, как бы я решал эту задачу на более других языках.


                                              На хаскеле из-за ленивости лобовое решение пишется за 5 минут вот прям почти по математическому определению:


                                              mergeUniq :: Ord a => [a] -> [a] -> [a]
                                              mergeUniq (x:xs) (y:ys) = case x `compare` y of
                                                                             EQ -> x : mergeUniq xs ys
                                                                             LT -> x : mergeUniq xs (y:ys)
                                                                             GT -> y : mergeUniq (x:xs) ys
                                              
                                              powers :: [Integer]
                                              powers = 1 : expand 2 `mergeUniq` expand 3 `mergeUniq` expand 5
                                                where
                                                  expand factor = (factor *) <$> powers

                                              Можно заметить, что в степень для сравнения возводить не обязательно, а можно сравнивать логарифмы чисел, выкинув таким образом медленный Integer (который gmp'шная длинная арифметика под капотом) и ещё минут за 10 улучшить до


                                              такого
                                              mergeUniq :: Ord a => [a] -> [a] -> [a]
                                              mergeUniq (x:xs) (y:ys) = case x `compare` y of
                                                                             EQ -> x : mergeUniq xs ys
                                                                             LT -> x : mergeUniq xs (y:ys)
                                                                             GT -> y : mergeUniq (x:xs) ys
                                              
                                              data Power = Power { k2 :: !Int, k3 :: !Int, k5 :: !Int } deriving (Eq, Show)
                                              
                                              instance Ord Power where
                                                compare = compare `on` \Power { .. } -> fromIntegral k2 + fromIntegral k3 * l2 + fromIntegral k5 * l5
                                                  where
                                                    l2 = logBase 2 3
                                                    l5 = logBase 2 5
                                              
                                              powers :: [Power]
                                              powers = Power 0 0 0 :
                                                fmap (\p -> p { k2 = k2 p + 1 }) powers `mergeUniq`
                                                fmap (\p -> p { k3 = k3 p + 1 }) powers `mergeUniq`
                                                fmap (\p -> p { k5 = k5 p + 1 }) powers

                                              Стомиллионное (а не двухтысячное) число оно считает секунд за 5 и жрёт 28 мегабайт оперативки (оценить сложность формально, э, сложно из-за той же ленивости).


                                              Короче, к чему я это. Ещё ни на одном интервью я не писал код на хаскеле. Как это переложить на плюсы, я сходу не знаю. Понятно, что надо держать срез из чисел от N/5 до (текущего) N, и там когда надо правильно его подчищать, но написать это в работающем виде у меня за полчаса не получится.


                                              Как с этим жить на интервью?

                                                0
                                                распечатать 2000-ое число из упорядоченного естественным образом множества { 2i3j5k | i, j, k ∊ ℕ } с таким-то лимитом по временим


                                                Перечитал несколько раз и всё равно нифига не понял задачу. :) 2i3j5k | i, j, k ∊ ℕ — это вот как понимать?
                                                  0

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


                                                  Например, первое число (если считать с единицы) — 1, потом 2, потом 3, потом 4, потом 5, 6, 8, 9, 10, 12, 15...

                                                    0
                                                    Понятно. То есть, вся штука в том, что ряд чисел стандартного ряда таким множеством непредставимы, а потому 2000-е число не будет 2000. Верно?
                                                      0

                                                      Нет. Возмите все натуральные числа. Выкиньте все, что делятся на что-то кроме 2, 3 или 5. Из отсавшихся возмите 2000-ое число. Число 2000 там останется, но до него будет выкинуто много чисел (7, например). Т.ч. 2000-ое число точно больше 2000.

                                                        +1
                                                        По-моему, это тоже самое, что я и написал. 7 непредставимо, 11, 13, 14 и так далее тоже непредставимы. В общем, смысл понятен.
                                                        А что если взять первое число — это 1, и дальше строить ряд, увеличивая на один степень 5 (как максимального числа) и добегая до неё степенями 3, а потом двойки, считая числа в порядке возрастания? Надо проверить, что получается.
                                                          0
                                                          Если определение верно, то что в этом ряду делает 1?
                                                            0

                                                            Видимо, ошибка в постановке задачи. Если там действительно i,j,k — натуральные числа, то ни 1, ни 2, ни 5 не содержатся в ответе, т.к. любое число должно делится хотя бы по разу и на 2, и на 3, и на 5. Очевидно, там имелось ввиду "неотрицательные целые числа".

                                                              0

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


                                                              А вот аргументов против нуля я могу придумать ровно, э, ноль.

                                                                0

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

                                                                  0
                                                                  Встречаются оба варианта. В России традиционно 0 не считается натуральным числом, но практически во всем остальном мире (включая стандарт ISO 80000-2) — считается. Если смотреть объективно то ни с чисто математической точки зрения ни даже с логической нет никаких поводов не включать ноль в натуральные числа. К примеру если рассматривать число как количество объектов (мощность множества) что является очень естественным подходом, то там никуда не деться от пустого множества. Короче счет от 1 — это еще одна «славная» советская традиция, ритуализированная но не имеющая особого смысла.
                                                                    0

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

                                                                      0
                                                                      Я когда писал комментарий специально поискал студенческие лекции в Интернете. Начинают с единицы, увы. РуВики дает ссылки например на такой учебник
                                                                        0

                                                                        Мы по терычу учились, и я не помню, чтобы у меня были проблемы с нулём. Хотя да, судя по тексту на с. 7, подразумевается, что ноль не лежит в натуральных числах. Плохо сделали.


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

                                                      –1

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


                                                      Первое решение такое:
                                                      Достаточно держать heap из потенциальных следующих элементов.


                                                      Изначально кладем туда 1 (видимо, в виде {0, 0, 0, log(2)*0+log(3)*0+log(5)*0}, чтобы bigint-ы не сравнивать и не считать).


                                                      Потом, пока не набралось n чисел, берем минимальное число из heap-а как следующее по порядку. Потом "умножем" его 2, 3, и 5 (на самом деле не умножем, а прибавляем 1 в нужное поле и нужный лог куда надо). Эти 3 числа, если они еще не были добавлены в heap туда суем. Тут можно использовать hash-set, чтобы несколько раз не добавлять число. Или можно добавлять число в любом случае, но тогда надо будет возможно одинаковые числа вытаскивать из начала хипа и там будет в 3 раза больше чисел.


                                                      Это решение за O(n log n) по времени и линейное по памяти (всего в хипе будет до 9*n чисел). При этом для экономии времени можно сказать "допустим у нас есть класс, который числа такого вида хранит и сравнивает быстро в виде тройки степеней и логрифма. Для не очень большого n точности double должно хаватать." Писать его не нужно, достаточно описать в каком виде он хранит и что делает. Для первого приближения можно вообще bigint использовать, но я обязательно подскажу, а нельзя ли тут как-то побыстрее сравнивать. Писать heap и hash set не надо! Можно знать про std::priority_queue и std::unordered_set или вообще сказать, что пусть у нас есть такие классы. Они точно есть в стандарте, но я точно не помню. Я за это "баллы" не снимаю (ведь на самой работе у вас будет интернет и ide).


                                                      Набросок кода
                                                      class Number; // Holds 2^a*3^b*5^c efficiently, can compare and multiply by 2,3, or 5.
                                                      
                                                      Number GetNthNumber(size_t n) {
                                                        std::priority_queue<Number> next;
                                                        next.push_back(Number(2));
                                                        next.push_back(Number(3));
                                                        next.push_back(Number(5));
                                                        size_t processed = 1;
                                                        Number current = Number(1);
                                                        while (processed < n) {
                                                           Number next = next.pop_back();
                                                           if (current == next) continue;
                                                           next.push_back(next * 2);
                                                           next.push_back(next * 3);
                                                           next.push_back(next * 5);
                                                           current = next;
                                                           ++processed;
                                                        }
                                                        return current;
                                                      }

                                                      Второе решение линейное и по времени и по памяти. Нужно заметить, что любое число нужного вида можно получить из какого-то ранее известного числа умножением на 2, 3, и 5. Если мы сгенерим все числа до k-ого, и умножим из все на 2, 3 и 5 и смерджим все три списка, то точно сгенерим k+1-ое число. Эту операцию можно делать лениво. Это что-то типа того как ленивый haskell будет работать. Заведем список всех сгенеренных чисел и будем смотреть, какое минимальное число при умножении на 2, 3, и 5 в нем еще не содержится. Это такие 3 указателя. Каждый раз двигаем вперед один из указателей и дописываем новое число к концу списка.


                                                      код
                                                      class Number;
                                                      
                                                      Number GetNthNumber(size_t n) {
                                                        std::vector<Number> numbers(n);
                                                      
                                                        n[0] = Number(1);
                                                        int next2=0, next3=0, next5=0;
                                                        Number next2Number = Number(2);
                                                        Number next3Number = Number(3);
                                                        Number next5Number = Number(5);
                                                      
                                                        for (size_t i = 1; i < n; ++i) {
                                                          if (next2Number < next3Number && next2Number < next5Number) {
                                                            numbers[i] = next2Number;
                                                            next2Number = numbers[++next2] * 2;
                                                          } else {
                                                            if (next3Number < next5Number) {
                                                              numbers[i] = next3Number;
                                                              next3Number = numbers[++next3] * 3;
                                                            } else {
                                                              numbers[i] = next5Number;
                                                              next5Number = numbers[++next5] * 5;
                                                            }
                                                          }
                                                        }
                                                        return numbers[n-1];
                                                      }

                                                      Edit: исправил пару опечаток в коде. На интервью, я намекаю кандидату, если выижу опечатку вроде "в этой строчке похоже опечатка". Баллы за опечатки вида 3 вместо 5 в названии переменной не снимаются.

                                                        0

                                                        Спасибо!


                                                        Достаточно держать heap из потенциальных следующих элементов.

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


                                                        Но если решение с такими сложностными характеристиками устраивает, то это, наверное, хорошо, да. Или если на том же JS можно предположить, что у вас есть хип.


                                                        всего в хипе будет до 9*n чисел

                                                        Эм, почему? Каждое число порождает 3 других (и ещё можно учесть пересечения, да).


                                                        Для не очень большого n точности double должно хаватать.

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


                                                        По крайней мере, на SO мне так и не ответили.


                                                        Второе решение линейное и по времени и по памяти. Нужно заметить, что любое число нужного вида можно получить из какого-то ранее известного числа умножением на 2, 3, и 5. Если мы сгенерим все числа до k-ого, и умножим из все на 2, 3 и 5 и смерджим все три списка, то точно сгенерим k+1-ое число. Эту операцию можно делать лениво. Это что-то типа того как ленивый haskell будет работать. Заведем список всех сгенеренных чисел и будем смотреть, какое минимальное число при умножении на 2, 3, и 5 в нем еще не содержится. Это такие 3 указателя. Каждый раз двигаем вперед один из указателей и дописываем новое число к концу списка.

                                                        Оно на самом деле по памяти сублинейное (по крайней мере, так кажется, я очень плохо оцениваю сложности), если заметить, что числа меньшие, чем N/5 для текущего N, хранить не нужно, потому что они уже ни на что не повлияют. Но фиг его знает сходу, как оценить число этих чисел.

                                                          0
                                                          Оно на самом деле по памяти сублинейное

                                                          4 N / 5 все равно O(n) — линейное.

                                                            0

                                                            Чисел из этого множества между N и ⅘N не факт что линейное число.


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

                                                              0

                                                              Да, вы абсолютно правы. Я как-то подумал, что надо младшие 4/5 чисел выбрасывать, а не числа со значениями меньше 4/5 текушего.

                                                              0

                                                              Таки погуглил немного. Например, на rosetta code пишут


                                                              Space complexity, with constant empirical estimation correction, is ~n^(2/3); but is further tweaked to ~n^(1/3) (following the idea from the entry below).

                                                              И в частности эта самая идея:


                                                              The DDJ blog post by Will Ness doesn't use the fact mentioned by the Wikipedia article that the error term in the estimation of the log of the resulting value for the nth Hamming number is directly proportional to this same log result. Using this fact, we are able to reduce the span of the "band" to only a constant fraction of the estimated log result for large n, and thus reduce memory space requirements to O(n^(1/3)) from O(n^(2/3)) for a considerable space saving for larger ranges.

                                                              Корень третьей степени из n — явно сублинейное время.

                                                          0
                                                          Эта задача, как оказывается, довольно широко известна в узких кругах. И решения для нее написаны на куче языков: Hamming numbers
                                                            0

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

                                                        +2
                                                        программист первокурсник уделает по скорости решения алгоритмических задач практически любого программиста последнего курса. А тот уделает в этом практически любого сеньора.

                                                        Курсы в ВУЗах в основном теоретические и те люди, о которых вы говорите, могут взяться только из кружков по спортивному программированию. А у сеньоров есть преимущество на собеседовании по system design.
                                                          +1
                                                          Ну, там хотя-бы немного лабораторных работ есть на первых курсах, где надо реализовать какие-то алгоритмы (работа с деревьями, алгоритмы поиска/сортировки, хэш-таблицы). Плюс программисты часто не только себе эти лабы делают, но и другим помогают.

                                                          А у сеньоров есть преимущество на собеседовании по system design
                                                          Если вопросы на собеседовании дойдут до system design.
                                                            +1
                                                            Ну, там хотя-бы немного лабораторных работ есть на первых курсах, где надо реализовать какие-то алгоритмы (работа с деревьями, алгоритмы поиска/сортировки, хэш-таблицы).

                                                            Да, только это надо сделать за 20 минут и еще успеть выбрать оптимальный подход к решению.
                                                            Если вопросы на собеседовании дойдут до system design.

                                                            Если пройти телефонное собеседование и system design предусмотрен, он обязательно будет.
                                                              0
                                                              Если пройти телефонное собеседование и system design предусмотрен, он обязательно будет.

                                                              Это зависит от компаний и тех, кто собеседует. Мы же сейчас говорим не про какие-то конкретные?
                                                              Некоторые могут собеседование прекратить после первых двух неудачных вопросов по «основам».
                                                                +1
                                                                Это зависит от компаний и тех, кто собеседует. Мы же сейчас говорим не про какие-то конкретные?

                                                                Как минимум те четыре компании, которые я рассматриваю в статье. На очном этапе у них стандартный процесс, и они не могут прекратить его раньше времени.
                                                                  0
                                                                  Кстати, мне стало интересно. Если в таких компаниях прошел какой-то этап, но завалил следующий, и через какой-то промежуток времени пытаешься пройти снова, то нужно снова проходить с первого этапа? Или же достижение сохранено?)
                                                                    +2
                                                                    Насколько я знаю, если завалил что-то на очном, то потом всё заново. Если со скрипом пройти телефонное с подсказками интервьюера — могут назначить повторное такое же. Но если однажды дойти до оффера, то появляется больше опций. Например, в Amazon оффер действует полгода, а после этого, если решишь снова собеседоваться, то попадёшь сразу на очный этап.
                                                                      +1
                                                                      Спасибо за ответ! Успехов на новой работе!
                                                        +6
                                                        Я года 3 назад решал leetcode ради одного интервью. Интевью прошёл — работу получил и сразу же всё забыл. Абсолютно ненужная мне инфа выветривается из головы примерно за год.
                                                          0
                                                          Ну тут как сказать. Я вот из комментариев узнал про «Алгоритм большинства голосов Бойера — Мура» и точно могу сказать, что если эта задача передо мною встанет, то, даже если я не помню алгоритм, я уже знаю о его существовании. И смогу быстро найти инфо. Так же и с задачками. Алгоритмы, которые ты узнаешь при их решении — знание о них останется с тобой.
                                                      +7
                                                      Собственно, олимпиадник детектед.
                                                      Да, это происходит не каждый день, но когда оно происходит, то алгоритмические знания и умение решать алгоритмические задачи действительно нужны.

                                                      Умение решать на доске маркером за 10 минут без интернета?

                                                      Смотреть код с гитхаба — не у всех он есть, да и невозможно проверить, что этот код кандидат сможет воспроизвести.

                                                      О да, и как же компании проверяют, когда дают тестовое задание на дом? Там ведь тоже кто угодно сделать может. Дайте подумать, может задают вопросы по коду?

                                                      P.S: Я не против олимпиадников, просто подзадолбал неуместный элитизм некоторых представителей, которые могут написать на доске merge sort на С++ и при этом в реальных проектах пишут неподдерживаемый говнокод.
                                                        –4
                                                        Умение решать на доске маркером за 10 минут без интернета?

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


                                                        О да, и как же компании проверяют, когда дают тестовое задание на дом? Там ведь тоже кто угодно сделать может. Дайте подумать, может задают вопросы по коду?

                                                        Согласитесь, есть вариант взять старшего товарища, который решит вам тестовое и все объяснит. Это на порядок проще, чем самому писать. Желающих получить хорошую зарплату и все плюшки(а дальше, может и так справлюсь) — довольно много. Реально попадались люди, которые fizz buzz написать не могут, а на интервью подают (ну а вдруг?!). Еще была байка про китайца, который на интервью отправил похожего на себя друга, который интервью за него прошел, а сам вообще ничего сделать не мог.


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


                                                        которые могут написать на доске merge sort на С++ и при этом в реальных проектах пишут неподдерживаемый говнокод.

                                                        На интервью даются подсказки и комментарии. Если условный олимпиадник пишет "олимпиадный", неподдерживаемый говнокод, ему это сразу же сообщается. Если кандидат так и не может написать читаемый код, даже если задача решена гениальным алгоритмом, в соответствующей графе записывается жирный минус. Если на всех 4-5 кодо-интервью будет говнокод, то вряд ли будет офер.

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

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

                                                          Реально попадались люди, которые fizz buzz написать не могут, а на интервью подают (ну а вдруг?!)

                                                          Это не новость для любого, кто проводил интервью в любой более-менее крупной конторе (далеко не уровня гугла).

                                                          Соответственно, будет далеко не нулевая доля кандидатов, которые могут решение понять и объяснить, но сами такой код написать не могут.

                                                          С чего вы взяли, что не могут? Если ты понимаешь решение, ты можешь его воспроизвести.

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

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


                                                            С чего вы взяли, что не могут? Если ты понимаешь решение, ты можешь его воспроизвести.

                                                            То же и с языком. Есть довольно широкий диапазон владения иностранным языком, когда читать и понимать можешь, а сказать — почти ни слова.


                                                            Тут то же самое.


                                                            Обычно все это просто от неумения проводить интервью.

                                                            Ну объясните тогда, как проводят интервью те, кто умеет?

                                                              0
                                                              Ну объясните тогда, как проводят интервью те, кто умеет?


                                                              Если нанимают мидл/сениор инженера, дают типичное задание. То есть если человеку надо разрабатывать API, дается тестовый проект и задание на минут 15-20, типа реализовать такой-то endpoint. Потом задаются вопросы и можно усложнять задание (посчитай еще вот это и верни в запросе). С сениорами еще поговорить про system design. Суть: посмотреть как кандидат справится с ежедневной работой.

                                                              То же и с языком. Есть довольно широкий диапазон владения иностранным языком, когда читать и понимать можешь, а сказать — почти ни слова.

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

                                                              Спросить не пробовали?
                                                            0
                                                            В гугле уже давно интервью проходят на ноутбуке.

                                                            Зависит от офиса, видимо.
                                                            Я в 2016 собеседовался в Цюрихе — были только доска и маркер.
                                                              0

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

                                                          +1
                                                          Вот, недавняя статья от яндекса приводит несколько примеров практически задач с собеседования


                                                          Но это антипример практически. В качестве хардкорного примера тру-алгоритмических задач идёт… вымученый случай применить reduce на массиве.
                                                        –6

                                                        Интересно, на что еще способны пойти люди, лишь бы стать гайкой

                                                          +11
                                                          Я ни на что особо не шла, мне нравилось решать задачи. Степень вклада в проект и свобода действий сильно зависит от будущей команды и компании. Например, даже в этих компаниях можно коммитить в опенсорс.
                                                          Гаечка
                                                            +2
                                                            Например, даже в этих компаниях можно коммитить в опенсорс.

                                                            В MS — да, насколько я слышал. Но не в гугле, не в apple и не в FB. Там совершенно адовый процесс согласования и отторжения вашего копирайта для всего этого.

                                                            +8

                                                            Гайка или нет — решает человек. Если для Вас это так — то старайтесь делать что-то иначе и добиваться своих результатов. Для кого-то, работа в таких компаниях — хорошая цель, в конце концов только усилиями многих людей делается что-то значимое, и IT гиганты только доказывают это своим существованием.

                                                              +4

                                                              Я ни в коем случае не отговариваю или осуждаю.


                                                              и IT гиганты только доказывают это своим существованием.

                                                              что доказывают? профит от торговли рекламой?

                                                                +10
                                                                Понятное дело, что это позор, что такие бабки вертятся в развлечениях, играх, торговле рекламой, и финансовых спекуляциях а не в, скажем, освоении дальнего космоса или хотя бы выведении всех людей на планете на приличный уровень жизни. Но это ж некоторые отвлеченные рассуждения. С точки зрения отдельного разраба, именно в FAANG проще всего познакомиться с мега-крутыми людьми и найти себе целую кучу комнат, в которых я буду самым тупым.
                                                                  +1
                                                                  > это позор
                                                                  Почему? Мне кажется это из той же оперы, что и «злиться на то, что ветер дует»? Мне кажется, что это результат довольно естественных решений социума, странно клеймить их позором. К слову, я с вами совершенно согласен — хочется уже воплотить мотивы Брэдберри, а не вот это вот все :)
                                                                    0
                                                                    То, что это закономерно и объективно и ничего с этим не поделать, не отменяет того, что это позор и живем мы с диком средневековье по сравнению с тем, как могли бы жить и как будем жить лет через 300.
                                                                      0
                                                                      по сравнению с тем, как могли бы жить и как будем жить лет через 300.

                                                                      Да вы оптимист, я смотрю. Если через 300 лет не самовыпилимся совсем, то будет или глубокая антиутопия типа 1984, или самый мрачный киберпанк, где 99% населения будут практически рабами и править всем будут мегакорпорации, или буквально средневековье, в зависимости от того как третья мировая пройдет.

                                                                        0
                                                                        Боюсь что весь киберпанк закончится при наличии банального магнетрона достаточной мощности. Про ЭМ-бомбу (она, кстати, не так сложна, как может показаться и ядерного заряда не требует вовсе) я и говорить не буду. :) Вопрос только в том, нужно ли это будет уничтожать хоть кому-либо. Все почему-то ждут 1984, а пока всё же реализуется схема из «О, дивный новый мир!».
                                                                          0
                                                                          То что самовыпилимся — это да, тоже возможно. И средневековье тоже. А вот в 1984 не сильно верю, социальный прогресс в другую сторону идет.
                                                                            0
                                                                            А вот в 1984 не сильно верю, социальный прогресс в другую сторону идет.

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


                                                                            Двоемыслие и переписывание прошлого уже практикуется политиками по всему миру (тот же Трамп, например, который может сегодня говорить полностью противоположное тому, что говорил вчера и отрицать, что он вообще вчера это говорил — и всем пофигу).


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

                                                                    0

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

                                                                  +16
                                                                  Таким гайкам потом открыт путь в любую страну мира и на должности зачастую намного выше, а также многие такие гайки заводят свои дела и тем более гораздо с большей вероятностью получат инвестиции на свой бизнес как «бывший ведущий разработчик Amazon», чем программист Вася из ООО Биба и Боба
                                                                    0
                                                                    Мне показалось, что довольно лайтово автор готовилась, мне бы не хватило. Я вот подумываю о том, чтобы нанять себе менеджера-тренера-надсмотрщика, чтобы соблюдать режим подготовки. Чтобы с джирой, ежедневными митингами, отчетами, графиками, отчетными мини-экзаменами, mock interview'шками и всем таким. Ну, это помимо всего стандартного набора обучающих групп, платных и бесплатных сервисов и общения с экспертами по алгоритмике и по архитектуре. Но я планирую это мероприятие на полгодика, два месяца из которых — в отпуске. Получится что-то в итоге или нет — по-любому будет весело.
                                                                      +1
                                                                      Будет интересно прочитать про ваш опыт. Я понимаю, что нет универсального количества времени на подготовку, например, там выше был комментарий, что я наоборот слишком долго готовилась.
                                                                        0
                                                                        Переусложняете, имхо. 2 недели leetcode, и попробуйте уже сходить на собеседование в ту из больших компаний, в которую будет меньше всего жалко провалить (Амазон, например). Дальше можете пол года ещё заниматься, но:
                                                                        1) у вас уже будет опыт прохождения подобных собеседований
                                                                        2) через пол года уже можно будет ещё раз пособеседоваться туда же

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

                                                                          Это если вас порекомендовали, иначе надо будет, чтобы о вас рекрутер вспомнил.
                                                                          0
                                                                          чтобы нанять себе менеджера-тренера-надсмотрщика

                                                                          А где такого можно найти? 0_о
                                                                            0
                                                                            Я видела репетиторов по спортивному программированию на сайте репетиторов, а ещё акселератор Outtalent, но последние хотят процент зарплаты после трудоустройства.
                                                                              +1
                                                                              Спасибо! 10% процентов зп за консультации — такое себе)
                                                                                +1
                                                                                Если это ваша первая-вторая работа, то отличная сделка, а если прыжок со 120килобаксов на двести — так себе затея.
                                                                              0
                                                                              Вот и я пока что думаю. По идее, подойдет любой толковый менеджер, а то и просто virtual assistant. Ему даже не очень обязательно быть из области программирования, просто понимать управление процессами.
                                                                          +3
                                                                          Спасибо за структурированную информацию и полезные ссылки. Желаю дальнейших успехов))
                                                                            +13
                                                                            А еще не придумали соревнования по спортивному собеседованию?
                                                                              0
                                                                              Нечто похожее делают компании, когда проводят контесты, а финалистов зовут сразу на очный этап. Видела такое у Google, Bolt и Yandex.
                                                                                0
                                                                                  0
                                                                                  Согласна, но кроме собственно решения нужно ещё разговаривать с интервьюером. У меня был случай, когда я без кода не смогла объяснить правильное решение.
                                                                                +1
                                                                                Меня всегда во всех статьях про собеседования интригует уверенность кандидата в успешном дальнейшем развитии событий. То есть, никого не беспокоит, справится он с работой или нет? Для меня, например, это сверхприоритетно — я всегда не уверен, что я смогу и что моего уровня хватит. Но я смотрю, что всех волнует только пройдёт он собеседование или нет. Почему так?
                                                                                  +2
                                                                                  Потому что на работе есть коллеги и инструкции, которые сильно помогают, плюс есть время на 'раскачку' чаще всего, никто сразу 100 процентов продуктивности не требует
                                                                                    +1
                                                                                    Если бы это так просто работало, собеседования вообще не имели бы смысла — коллеги и инструкции доведут любого до нужных требований. Ан нет, чтобы это сработало нужно самому быть на уровне. А на уровне мы или нет для данной работы мы не знаем — мы же только собеседование прошли и только о нём и думали фактически. О работе-то мы ещё даже не беспокоились — я об этом и говорю, собственно.
                                                                                      +2
                                                                                      Если бы это так просто работало, собеседования вообще не имели бы смысла

                                                                                      Это ещё почему? опыт не бинарное состояние есть/нет, и имеется огромная разница выход на 100% продуктивность через неделю две или года 2-3, вот на собеседовании и выбирают тех кто за минимальное время сможет выдать максимум продуктивности.
                                                                                      А на уровне мы или нет для данной работы мы не знаем

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

                                                                                      Ну если требуемые навыки есть, что о ней беспокоиться то? Не потянете уволят, в крайнем случае, если уж прямо сильно обманули (а вот чтоб этого не было и проводят собеседования и спрашивают дипломы)
                                                                                        0
                                                                                        Это ещё почему?


                                                                                        Потому, что если это не так, то есть и повод беспокоиться, ибо «Потому что на работе есть коллеги и инструкции, которые сильно помогают, плюс есть время на 'раскачку' чаще всего, никто сразу 100 процентов продуктивности не требует» не гарантируют успешного выполнения работы. А я об этом, собственно, и говорил. Но если вы согласны, что возможность не справиться есть, тогда процитированное особо не поможет в этой ситуации.

                                                                                        выход на 100% продуктивность через неделю две или года 2-3,

                                                                                        А как быть, если всё, что вы напишете годится только в мусор (нет, не из-за стиля, а из-за недостатка опыта в применении некой технологии или концепции)? А чтобы годилось не в мусор, потребуется от вас серьёзное обучение и большой опыт именно узкой направленности (скажем, попробуйте написать драйвер — там очень непросто всё сделать правильно). И вполне можно не справиться.

                                                                                        Обычно в вакансии круг требований указан


                                                                                        Тут недавно кто-то писал, что у них в компании меняют как перчатки эти требования. Да я и сам видел — пришли на С++, но команда решила перейти на питон. Упс.

                                                                                        Ну если требуемые навыки есть, что о ней беспокоиться то?


                                                                                        Нет, ну если один-в-один совпадает с тем, что вы умеете, тогда да. Но обычно-то ведь не так. Точного совпадения нет.
                                                                                          0

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

                                                                                        +1
                                                                                        Непонятно, почему вы так переживаете за работодателя. Собеседования — они для того и предназначены, чтобы на других посмотреть, да себя показать. Если уж вам сделали оффер — значит, готовы попробовать (и да, любой работодатель понимает, что найм — это риск). В самом худшем случае, если вы прям дико читанули на собеседовании и потом ещё долго отмазывались от работы — будете уволены с пометкой «обратно нанимать не хотели бы», но даже в этом случае компаний вокруг ещё много. Судя по вашим фразам, ничем подобным вы не страдаете, просто слишком строги к себе. Поэтому в вашем случае более реалистичен позитивный вариант: вы увидите, что и новые коллеги далеко не все гениальны, и сами подтянете свои скилы, заодно и уверенности в себе получите.
                                                                                          0
                                                                                          Непонятно, почему вы так переживаете за работодателя.


                                                                                          Я вас (и ещё двоих тут) не понимаю. При чём тут работодатель? Вы сами не боитесь не справиться и вылететь или угробить здоровье и силы, пытаясь соответствовать тому, чему вы на момент интервью не соответствуете? Работодатель-то найдёт другого, а вот вам придётся заново всё начинать.

                                                                                          вы увидите, что и новые коллеги далеко не все гениальны,


                                                                                          Это по-разному бывает.
                                                                                            0

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

                                                                                              0
                                                                                              Так и вы тоже имеете право уволиться, если вам станет некомфортно работать, это же не крепостное право. А собеседоваться — не страшно.
                                                                                        0
                                                                                        Сомнения, конечно, есть. Но во-первых, можно запросить больше времени до выхода на работу — будет время изучить новый язык и/или технологию. А во-вторых, компания, принимая решение о найме, разделяет эту ответственность с сотрудником.
                                                                                          0
                                                                                          будет время изучить новый язык и/или технологию.


                                                                                          Изучить? За небольшое время? Завидую. Я вот за 20 лет С++ изучить не смог до современного уровня — я этот Си++ в не legacy стиле банально не понимаю как концепцию (куда уж до понимания граблей!).
                                                                                            0
                                                                                            C++ — это особый случай. В Google, например, style guide ограничивает функционал C++. Плюс к этому (и не только в Google) код обкладывается проверками анализаторов и тестами, а коллеги проводят ревью.
                                                                                              0
                                                                                              Так особых случаев очень-очень много. Скажем, мало кто может заниматься физикой твёрдого тела даже с соответствующим образованием. Да и математикой тоже не каждый овладеет на должном уровне. Ну или электроник тоже весьма непростыми навыкам научиться должен.

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


                                                                                              Только всё это не обязательно поможет вам быстро научиться требуемой концепции применения.
                                                                                          0

                                                                                          Не особо. Научится работать легко. Если ты уже работаешь. Вся сложность всегда пройти собеседование.

                                                                                            0
                                                                                            Научится работать легко.


                                                                                            Видимо, мне такого уровня не достичь. :)
                                                                                            Тем не менее, это нивелирует весь смысл собеседования. :)
                                                                                              +1
                                                                                              Тем не менее, это нивелирует весь смысл собеседования. :)

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


                                                                                                Ну, если научится работать легко, то их не бывает. :)
                                                                                                  0

                                                                                                  Научиться работать легко /для тех, кто прошёл собеседование/ ;)

                                                                                                0
                                                                                                Такое ощущение, что вы никогда не проходили собеседования на разные работы, раз здесь в комментариях удивляетесь вполне себе обыденным вещам. Не думали никогда, что со стороны работодателя есть такая же мулька: «Справится/не справится, приживётся/не приживётся». Это всегда рулетка с обеих сторон.
                                                                                                  0
                                                                                                  что вы никогда не проходили собеседования на разные работы


                                                                                                  Нет, не проходил.

                                                                                                  Не думали никогда, что со стороны работодателя есть такая же мулька: «Справится/не справится, приживётся/не приживётся». Это всегда рулетка с обеих сторон.


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

                                                                                                  Ну у меня ни когда не было проблем с работой. А вот с собеседованиями были. Да.
                                                                                                  Самое забавное когда не берут на более "простую" позицию на меньшие деньги. Через неделю предлагают более сложную. На большие. Туда проходишь и нормально работаешь.

                                                                                                +1
                                                                                                То есть, никого не беспокоит, справится он с работой или нет?

                                                                                                Риск фейла отдельно взятых сотрудников в достаточно крупной компании должен не беспокоить, а быть подсчитан и учтён в бизнес-процессах. А результаты собеседования как раз являются исходными данными для этого подсчёта.
                                                                                                Если же процессы в компании построены так, что фейл одного разработчика приведёт к падению спутника в океан невосполнимым потерям, то это не разработчик должен быть вывезен в лес в багажнике директорского «мерина» плохой, а в консерватории что-то надо править. И работать в такой компании себе дороже обойдётся в конечном итоге.
                                                                                                Понятно, что есть задачи, где цена ошибки одного человека может быть очень высокой, а возможности риск-менеджмента весьма ограниченными. Но туда и людей не по собеседованиям ищут.
                                                                                                  0
                                                                                                  Так речь не о компании, а о разработчике. :)
                                                                                                  0
                                                                                                  В таких компания, обычно, есть onboarding — куча времени после выхода на работу для того, чтобы вьехать в тему (до 3х месяцев). За это время осла можно научить говорить. Кроме того, люди, прошедшие собес, не просто люди с улицы, а прошедшие тщательный отбор. Так что не нужно комплексовать. Если вы прошли собес — то и с работой справитесь (если захотите)
                                                                                                  +2

                                                                                                  А зачем беспокоиться, справлюсь я с работой или нет? Я честно постараюсь сделать всё, что от меня зависит, чтобы справиться. Ну если нет — так нет. Если уволят — буду искать другую работу. Если нет — значит, следующую задачу дадут более соответствующую моему уровню. Главное, чтобы перед собой не было стыдно.

                                                                                                    0
                                                                                                    А зачем беспокоиться, справлюсь я с работой или нет?


                                                                                                    Вот этого подхода я и не понимаю.
                                                                                                      0

                                                                                                      Я же в том же комментарии постарался объяснить...

                                                                                                        0
                                                                                                        Здесь фундаментальная разница в подходах. Я как-то не привык потратить уйму сил, чтобы пройти, а потом просто взять и уйти, потому что не справился. Мне этих сил как-то жалко. Я бы лучше их на что-то другое потратил. По этой же причине я бы не пошёл на работу, менее интересную, чем моя текущая. Собственно, я так собеседование проходил в чистую разработку ПО (с Qt), но отказывался от места с в 2 раза большей зарплатой именно потому, что я там не смогу заниматься ничем мне интересным, кроме этого самого Qt (на текущей работе, например, я могу инициировать разработку практически всего, чего мне потребуется (как аппаратную, так и программную части) в рамках проекта (к примеру, я инициировал разработку имитатора системы, потому что считаю его необходимым — и его я сделал (на PC), хотя аппаратную часть ещё пока не смог заставить начать проектировать — упираются.), могу легко выкроить время для своего собственного проекта, могу вообще заниматься тем, что только лишь может пригодиться в будущем (например, сейчас, играясь с платой ESP8266, мне пришла в голову мысль сделать списывание с вращающегося стенда через ESP8266 и WiFi вместо пучка проводов на вращающемся контакте — а пуркуа бы да не па? Скорости вроде как хватит. Я ещё подумаю над этой дивной мыслью. :) Прошлым летом я выкинул из процесса разработки ПО для отечественного аналога TMS320 глючный CodeComposer, требующий соединения с процессором в процессе работы и написал «запускатель» для запуска процесса компиляции всех файлов каталогов, который легко подключить к CodeBlocks, чем упростил всю процедуру сборки и разработки ПО для этого процессора. Так же летом просто играясь запустил (написал почти драйвер) в QNX6.3 плату CAN PCI7841 и заменил ей ISA-плату CAN527D на стендах (а то ISA-компьютеры дорогие нынче). ), могу подключиться к проектам в других группах; то есть, у меня очень широкая сейчас свобода в своих действиях — и я как бы это ценю и будет обидно такое променять на выполнение задач от и до по одной и той же тематике. Единственное но — работа нервная и плохоорганизованная — много воевать приходится с организаторами. Но я уже как бы привык.).
                                                                                                          0

                                                                                                          Понимаю. Вопрос в том, считать ли этот период времени (от подготовки к собесу до увольнения в случае неудачи на новой работе) потерянным. Вы получаете опыт, деньги за отработанное время, знакомства, расширяете кругозор.
                                                                                                          А насчёт интереса к работе — пожалуй, полностью согласен. У всех свои требования к тому, чем они хотят заниматься. Грустно сидеть на нелюбимом месте. Ну разве что очень деньги нужны и другого выбора просто нет.

                                                                                                    +1
                                                                                                    Мне кажется, вы взваливаете на себя обязанности работодателя. Задача выстроенной работодателем системы найма — отсеять подходящих кандидатов и распределить их по грейдам. Не отбирайте у людей хлеб, им лучше известно, сениор вы формошлеп или джуниор.
                                                                                                      +1
                                                                                                      Ну почему же не волнует. Думаю многих волнует справятся ли они. Но, почти все, наедятся что все будет ок, что со всем справятся, если где-то не хватает уровня или знаний, то подтянут. Раз уж вы прошли собеседование, без читов, то вы, в большинстве случаев, способны справиться с задачами, на которые вас берут. На моем примере, я считаю, что невыполнимых задач не бывает, бывает только недостаток времени. Я когда менял последнее место работы, шел вообще в неизвестный мне стэк технологий, и считаю что я хорошо справился с изучением и применением того что узнал на практике, и соответственно хорошо справляюсь с работой и выполняю все что требуется. Если каждый раз так сильно переживать, то так можно всю жизнь просидеть на одном месте. Начальство тоже это видит и может все соки выжимать из такого сотрудника, с мыслью — да куда он уйдет, да кто его возьмет. Поэтому чуть больше уверенности в своих силах и все будет отлично. Как говорится, ну умеешь — научим, не хочешь заставим :)
                                                                                                        0
                                                                                                        Есть подозрение, что в том случае, если вы найдете у себя существенную нехватку знаний или опыта, пройдет уже столько времени, что компании будет выгоднее вас доучить, чем искать замену в команду через собеседования, давать новичку время на вникание в workflow и заново сводить группу с новым человеком в аспекте психологической совместимости. Даже при условии, что на их крыльце очереди стоят. Вы-то уже есть здесь и сейчас, знакомы с процессами, инструкциями, традициями. Важно ваше желание оставаться работать, если оно есть. Кроме того, не FAANG ли промотируют себя как райское место, где можно менять команды и проекты внутри компании?
                                                                                                        +1
                                                                                                        Поздравляю вас! Это большое достижение.

                                                                                                        Сколько всего у вас заняла подготовка (к примеру, N месяцев по M часов в день)?
                                                                                                          +1
                                                                                                          Спасибо! Попробую примерно оценить: на момент получения первого оффера я решила около 100 задач — по 2 задачи в день — 50 дней где-то по часу. Плюс две недели на system design. Ещё сильно зависит от того, что было на входе. Мне, например, не нужно было подтягивать английский и computer science.
                                                                                                          +1
                                                                                                          Сколько проходила собеседований, везде спрашивают и про SOLID и про шаблоны проектирования. Но вот на практике увы — легаси код поддерживаешь в основном.
                                                                                                          После «приятного» собеседования в майле, когда меня собеседовал только HR, и когда отказ дали из-за выбора в пользу того, кто знает нужный фреймворк. Хотя об этом заранее говорилось. Т.е. собеседование проводилось тупо для галочки. Вот после этого мне не хочется ни в майл, ни в яндекс.
                                                                                                          Лучше работать в маленькой конторе, в которой проще провести изменения в сторону улучшения технологий. И вот там не будут просить решить логические задачи. Т.к. умение решать задачи — это ни о чем. Человека можно просто натаскать их решать, но вот в нужном месте он не сможет понять, что нужно сделать. Тут нужно не умение решать логические задачи, а опыт.
                                                                                                            +1
                                                                                                            Т.е. собеседование проводилось тупо для галочки. Вот после этого мне не хочется ни в майл, ни в яндекс.

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

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

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

                                                                                                              Вам об этом прямо на собеседовании сказали, или сами как-то узнали? Просто дико звучит.
                                                                                                                0
                                                                                                                На собеседовании не сказали, узнала уже потом, когда работала.
                                                                                                                  0
                                                                                                                  Боятся, что уйдёт, и пытаются удержать всеми правдами и неправдами :)
                                                                                                                0
                                                                                                                Т.е. собеседование проводилось тупо для галочки. Вот после этого мне не хочется ни в майл, ни в яндекс.

                                                                                                                В Яндексе по моему опыту прохождения собеседований делают упор на навыки программирования в общем и на system design. Отсутствие знаний по конкретному фреймворку еще не повод отказываться от кандидата, если конечно речь идет не о платформенных основах — типа понимания жизненного цикла Activity для Android разработчиков или многопоточности для Java-backend. А отсутствие знаний Spring или Dagger… Да фиг бы с ними, смотрите, он смог проверить строку на палиндром, надо брать!
                                                                                                                Зато там те самые нелюбимые вами алгоритмические задачи, которые надо писать на листочке, доске или в текстовом редакторе.
                                                                                                                P.S.: Мне проще задачки порешать, чем объяснять человеку, что в гробу я видел его вопросы про equals и hashcode.
                                                                                                                0
                                                                                                                А что насчет рассказывания крутых историй про опыт? С этим проблем не было или таких вопросов не встречается?
                                                                                                                  0
                                                                                                                  Такие вопросы, конечно, встречаются. Спрашивают, например, про самый сложный или самый интересный проект. Обычно это происходит на поведенческой части собеседования и там применимы методы, которые я упоминаю в этом разделе.
                                                                                                                    0
                                                                                                                    Этого полно на собесах — «расскажите мне о ситуации когда <случилось то-то и то-то>». К этому нужно готовиться, тк из головы это сложно связно рассказать и кандидатов, кто не готовился сразу видно. Да и просто это сложно и волнительно делать без подготовки.
                                                                                                                    0
                                                                                                                    Как относишься к такой особенности работы в гигантах типа FAANG, что своей работой ты лишь незначительно влияешь на продукт. Возможно, твоя работа и вовсе не заметна (не только в продукте, но и внутри компании). При этом бюрократия, грейды и внутренние интриги.
                                                                                                                    В стартапе же всё иначе: возможно, в будущем имя компании в CV ничего и не скажет, но ты непосредственно влияешь на продукт, который использует конечный пользователей, и этот продукт невероятно изменяется и эволюционирует у тебя на глазах. Ну, и «тот самый дух стартапа», и шанс, что он выстрелит (~ 10%).
                                                                                                                    Расскажи, проводила ли ты такие сравнения, делая выбор в пользу стабильности корпората, или никакого выбора не было, и ты всегда смотрела в сторону этих гигантов.
                                                                                                                      0
                                                                                                                      Я сравнивала и в данный момент смотрю больше в сторону корпораций. Во-первых, в стартапах сложнее найти позицию с релокацией, а во-вторых, мне кажется, стартапы чаще требуют опыт с определенным языком/технологиями, с которыми я в основном не пересекаюсь. И в-третьих, при желании, в некоторых больших компаниях можно найти подразделения с духом стартапа, например, DeepMind в Google. Для меня на самом деле важно влияние на продукт, и я пытаюсь выяснить это на этапе собеседования с командой.
                                                                                                                        0
                                                                                                                        Есть и крупные стартапы (типа Uber, Grab, Gojek, Revolut), где внутри уже настроены процессы, и есть релокация. Но там и от стартапов остается только то, что они всё ещё на инвестициях и работают в минус, хотя продукт и быстрее корпората развивается и больше шансов влиять на него. Зато для резюме уже жирная строчка.

                                                                                                                        В сторону Азии ты не смотрела?
                                                                                                                        Там тема IT стартапов бурлит!
                                                                                                                          0
                                                                                                                          Ничего не знаю про стартапы в Азии, почитаю, спасибо. Но пока Азию не рассматривала.
                                                                                                                        0
                                                                                                                        У гигантов есть и подразделения, работающие на проектах с их клиентами. Там каждый проект — все разное и от тебя очень многое зависит.
                                                                                                                        +1
                                                                                                                        Поздравляю с достижением цели!

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

                                                                                                                        Успехов!
                                                                                                                          +7

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

                                                                                                                            +2
                                                                                                                            Было бы очень интересно прочитать вашу историю.
                                                                                                                              +1
                                                                                                                              Чуть не считается! Как раз и были на гране своих возможностей.
                                                                                                                                +8
                                                                                                                                А вот между прочем про это было бы действительно интересно почитать. Огромное количество success story про то как «я два года готовился и получил оффер в гугл», но везде умалчивается а что было дальше.
                                                                                                                                  0
                                                                                                                                  Вот-вот, я об этом и спрашивал выше.
                                                                                                                                    +3
                                                                                                                                    Потому что все посты о компании сотрудник обязан согласовывать с гугловым комитетом по цензуре — это достаточно долгая задача, на которую решаются немногие. Даже если я придумаю и напишу пост, то я не уверен, что у меня хватит терпения согласовать его.

                                                                                                                                      0
                                                                                                                                      Это не камень в вашу сторону, но все же прекрасно понимают что этот комитет существует исключительно ради того чтобы люди, которые хотят что-то написать обязательно от своего имени, не могли написать то чего не хочет компания. :) Для всех остальных есть анонимные сайты или throwaway аккаунты, где они могут написать все кроме той информации, которая поможет их идентифицировать.
                                                                                                                                        +1

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

                                                                                                                                    +3
                                                                                                                                    Молю, напишите! Предвкушаю пост месяца!
                                                                                                                                    0xd34df00d, прости =(
                                                                                                                                      +1

                                                                                                                                      Да я бы сам с интересом почитал, что там как.

                                                                                                                                    +1
                                                                                                                                    Спасибо за информацию!
                                                                                                                                    В ближайшее время она точно мне не понадобится, но для общего понимания — годно!
                                                                                                                                      +1
                                                                                                                                      У меня вот такая мысль появилась. Что если алгоритмические собеседования — это просто Black Box-отсеивание? То бишь статистическая, корреляционная история, а не что-то с четким причинно-следственным обоснованием. Есть где-то метрика: среди тех, кто знает алгоритмы, про