21 ноября в рамках митапа по С++ Константин Владимиров, Илья Шишков (@ishfb) и Елена Степанова — эксперты с многолетним «стажем» в собеседованиях — обсудят, как проводить технические интервью, говорить про алгоритмы без синтетических задач и оценить знания кандидата. Регистрируйтесь и присоединяйтесь к дискуссии в Москве или онлайн. 

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

Нужно ли тому, кто проводит собеседования, самому их проходить?

Константин Владимиров

Ведущий инженер в Syntacore. Проводит собеседования 13 лет и много преподает.

Я всегда любил ходить по интервью, это увлекательно и полезно — побывать по ту сторону стола. К сожалению, года два назад меня начали узнавать — я довольно популярный лектор на YouTube. Прихожу на интервью, а мне говорят: «Константин Игоревич, а мы учились по вашим курсам».

Последнее интервью, на котором мне задавали интересные вопросы, было в 2018 году. Тогда еще модно было ездить на интервью «погулять» — в моем случае это было собеседование в Amazon в Стамбуле. Компания оплатила билеты и гостиницу, а я приехал, прошел собеседование и еще пару дней осматривал город.

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

Илья Шишков

Экс-разработчик в Яндексе, автор курса «Алгоритмический фундамент программиста». Провел более 250 технических интервью.

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

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

Елена Степанова

Техлид в YADRO. Последние 8 лет проводит до нескольких собеседований в неделю.

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

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

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

Бывало ли такое, что ответ кандидата ставил вас в тупик?

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

Однако реакция кандидата меня поразила: он напрягся и предложил мне ответить на его вопрос. Я люблю такие игры, поэтому согласился. Он спросил, что произойдет, если вызвать функцию main рекурсивно из функции main. «Именно в С++ будет что угодно», — ответил я.

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

Илья Шишков: У меня был период, когда я помогал стартапу нанимать разработчиков — проводил алгоритмические секции. 

Однажды кандидат в самом начале интервью сказал, что не хочет тратить время на решение алгоритмических задач, так как не собирается работать в Яндексе. Мы закончили разговор через 3-4 минуты после этой реплики. Я был в ступоре и не знал, как себя вести. Я предоставляю услуги стартапу, а человек отказывается проходить собеседование. Сначала растерялся, а затем попытался убедить его, что есть ценность в решении задачек и работе в этом стартапе и что стоит продолжить собеседование. Но он был непреклонен и отказался. Алгоритмические задачи Яндекса ему не интересны —  на этом все и закончилось.

Елена Степанова: Бывает. Чаще всего —  когда кандидат абсолютно уверен в неправильном ответе. Порой приходилось судорожно искать цитату из стандарта C++, чтобы переубедить человека. Иногда специалист глубоко погружен в предметную область и начинает рассказывать про какие-то тонкости, где ты не можешь поддержать разговор. Остается только задумчиво кивать.

На каких задачах чаще всего проваливаются кандидаты?

Константин Владимиров: Заваливать на интервью — это совсем не мой метод. Считаю это неспортивным. По языку С++ я сам себя могу завалить за три вопроса: первый «пристрелочный», второй «глубинный», третий «похоронный». На третий никто не ответит, в том числе я. Нет ничего сложного в том, чтобы завалить вопросами по языку, у которого в стандарте более 1800 страниц. На интервью же надо понять, что человек знает, а не наоборот. Но если брать статистику, то заваливаются чаще на задачах вида «напиши код» — там все сразу видно.

Илья Шишков: В Яндексе была задача: удалить смайлики из текстовой строки. Суть в том, чтобы определить, какие символы являются смайликами. На первый взгляд, выглядит крайне просто, но со временем я понял, что многие кандидаты проваливаются. Чтобы ее решить, нужно быть уверенным в своих программистских навыках.

Елена Степанова: Обычно я даю очень простые задачи, на основании которых можно поговорить об общих принципах computer science. Собственно, на самом базовом computer science у кандидатов больше всего пробелов. Среди «болевых точек» — вопросы про представление данных в памяти и области памяти; про то, как работает выравнивание, приведение типов, кэширование. Оценка сложности алгоритмов, обоснование выбора структур данных и тому подобное также нередко ставят в тупик.

Если хотите задать вопросы экспертам вживую или в чате онлайн-трансляции, регистрируйтесь на бесплатный митап по С++, который пройдет 21 ноября. На встрече будет еще больше контента по «плюсам»: о болях нового стандарта языка, lifetime extension и собеседованиях на С++. 

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


  1. Kelbon
    09.11.2023 09:20
    +8

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

    нет


    1. sabudilovskiy
      09.11.2023 09:20
      +9

      Рубрика тестируем знание спецификации юникода в режиме реши за O(n) без доппамяти за полчаса


      1. Tujh
        09.11.2023 09:20

        Это если смайлы у них юникодовые, а если такой (в задании не сказано какие) :) ?


        1. sabudilovskiy
          09.11.2023 09:20

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


          1. ishfb
            09.11.2023 09:20
            -1

            Автор появился =) Я не могу раскрывать всё детали задачи, потому что её всё ещё используют, насколько я знаю, но она довольна проста в постановке и не требует погружаться в Unicode. В постановке задачи описано, что смайлики состоят только из символов : - ( и ).


            1. Ryder95
              09.11.2023 09:20

              Я когда читал курсы давал такую задачку на самостоятельную работу в классе, правда в ней предполагалось использовать регулярные выражения: https://informatics.msk.ru/mod/statements/view.php?id=3163#1


          1. mostodont32
            09.11.2023 09:20

            Это именно смайлы вида :)) с произвольным количеством закрывающих скобочек


        1. sYB-Tyumen
          09.11.2023 09:20

          А ещё, если при удалении одного смайла из строки, предшествующие смайлу пара-тройка символов и следующий за удалённым смайлом символ образуют новый смайл...


          1. freeExec
            09.11.2023 09:20

            Но тогда результирующий текст будет содержать смайлы


            1. sYB-Tyumen
              09.11.2023 09:20

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


          1. speshuric
            09.11.2023 09:20

            (или наоборот - один смайл, но есть закрывающая скобка :-))


      1. domix32
        09.11.2023 09:20
        +1

        Так смайлики, а не эмоджи. всякие :D O: :O :) (: :( . А то и вовсе (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻

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


  1. fshp
    09.11.2023 09:20
    +4

    чем отличается указатель на массив от массива указателя

    Тоже затрудняюсь ответить, т.к. не знаю что такое массив указателя.


    1. vvviperrr
      09.11.2023 09:20

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


      1. freeExec
        09.11.2023 09:20
        +1

        А статический массив как-то по другому указывается, не на первый элемент?


        1. lllamnyp
          09.11.2023 09:20

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


          1. grmile
            09.11.2023 09:20
            +1

            А разве sizeof не выполняется ещё на этапе компиляции?


            1. lllamnyp
              09.11.2023 09:20

              Вы, возможно, правы. Размер массива должен быть известен при компиляции, наверное и sizeof можно статически заменить. Я недавно интересовался этой темой, но я не C-разработчик, так что стандарт не процитирую.


    1. nick0x01
      09.11.2023 09:20

      Наверно уже поправили:

      чем отличается указатель на массив от массива указателей


      1. fshp
        09.11.2023 09:20
        +2

        Наверное. Но кандидата это не вернёт)


    1. yadro_team Автор
      09.11.2023 09:20

      Спасибо, что заметили — это опечатка, на самом речь шла о массиве указателей.


      1. fshp
        09.11.2023 09:20
        +2

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

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


    1. orgus
      09.11.2023 09:20

      только начал переживать что не понимаю "простой вопрос", а оказывается не одинок :)


    1. domix32
      09.11.2023 09:20
      +1

      Количеством звёздочек в сигнатуре типа.

      int** asd = new int*[5];
      // |             └─ сигнатура для содержимого массива 
      // └─ сигнатура массива

      Ну, опечатался/оговорился человек. Бывает


      1. fshp
        09.11.2023 09:20

        У вас массив указателей. А вопрос изначально был про массив указателя.


  1. Anarchist
    09.11.2023 09:20
    +1

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

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


  1. ilyakovrov
    09.11.2023 09:20
    +2

    Спасибо за наводку на Константина Владимирова и его канал на ютубе с лекциями по C/C++