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

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

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

struct list
{
    struct list* next;
    int my;
};

list* joint(list* a, list* b)
{
    list fst = { a }; list scd = { b }; list trd = {0};
    list* res = &trd;
    while (fst.next || scd.next) {
        int ref = 0;
        list* dst = 0;
        bool flg = 0;
        for (list* src = fst.next? &fst:&scd; src->next; src = src->next->next || flg? src->next : (flg = 1, &scd) ) {
            if (src->next->my > ref) {
                ref = src->next->my;
                dst = src;
            }
        }
        res->next =  dst->next; 
        dst->next = res->next->next;
        res = res->next; 
    }
    return trd.next;
}

Сразу скажу, что писать так нельзя (или можно для себя, какой-нибудь тест).

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

Правда, остаются вопросы.

Человек из Яндекса не может прочесть код с оператором “запятая”? В чем глубокий смысл требовать написать код в крайне неестественных условиях (без компилятора и в неиспользованном ранее редакторе)? Не предложив изначально оценить трудоемкость, не давая время на дизайн в минимальной форме? Я вот играю в блиц на класс ниже, чем в обычные шахматы — в Яндекс нужны скорострелы?

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

PS: 29.12 Не могу отвечать в комментах, в свое впемя был забанен (за программисткий разбор писания:), разбанили — статья в неделю, коммент в день(даже на свою статью). Не суть.
Откликаюсь под катом:
про код как надо
Разговор у многих выходит на требования, где додумываются дополнительные. Но фактически в таких оказиях требование одно — время. Я даже узнал здесь (и соглашусь), что не обязательно, что бы работало (но себе к сожалению при собеседовании ставил).
Да, практически трое спросили некий код «как надо». Тоже надо понимать, что правильных кодов не бывает, код зависит от требований. Интервьюер не ставил и не мог ставить цели читабельности с таким временем, с таким подходом и инструментарием. Форумская общественность ставит — я уже писал про запатченный bool-ем for, который интервюер не понял. Разлагаю его на два цикла + читаемые имена.
Не сильно тестированный вариант:
struct list
{
    struct list* next;
    int my_number; 
};

list* joint(list* a, list* b)
{
    list pseudo_headers[] = { {0}, {a}, {b} }; // trick: first element of array is [pseudo]header of result list
    list* res_ptr = &pseudo_headers[0];
    while (pseudo_headers[1].next || pseudo_headers[2].next) {
        list* ahead_max;
        int cur_max_data = 0;
        for (int i = 1; i < sizeof(pseudo_headers)/sizeof(pseudo_headers[0]); i++) {
            for (list* ahead = &pseudo_headers[i]; ahead->next; ahead = ahead->next) {
                if (ahead->next->my_number >= cur_max_data) {
                    cur_max_data = ahead->next->my_number;
                    ahead_max = ahead;
                }
            }
        }
        res_ptr->next =  ahead_max->next; 
        ahead_max->next = res_ptr->next->next;
        res_ptr = res_ptr->next; 
    }
    return pseudo_headers[0].next;
}

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


  1. Kelbon
    28.12.2022 21:40
    +7

    Что за задача-то была... На каком языке писали...


    1. DarthVictor
      29.12.2022 00:28
      +24

      Скопипастить с литкода mergesort для связных списков.


    1. Ioanna
      29.12.2022 15:00

      На Си, судя по коду.


  1. Mirzapch
    28.12.2022 21:43
    +54

    Да как вы посмели. Любой программист С++ должен в мелочах знать STL, Boost и QT.

    А также, уметь писать код из головы(интервьюера/начальника). Причём, обязательно на С++23, иначе код не будет засчитан.


    1. Kelbon
      28.12.2022 22:01
      +14

      а что, вы хотели бы чтобы человек написавший список вот так как он написан в посте работал над чем-то важным и сложным?


      1. KoCMoHaBT61
        28.12.2022 22:12
        +9

        Чем плох его список?


        1. Kelbon
          28.12.2022 22:14
          -23

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

          Какой то инт непойми почему там


          1. F0iL
            28.12.2022 22:20
            +22

            Связанный список как раз состоит из нод, чтобы работать со списком достаточно иметь на руках его первую ноду. Если вы откроете любую книгу по структурам данных, то односвязный список там будет определен как раз именно так, как это сделал автор. Int поле - это payload ноды. Да, у автора не ООП подход, а процедурный - список (ноды) отдельно, операции отдельно. Но реализовать операции над списком (кроме явно требуемого слияния с сортировкой) в условия задачи и не входило.


            1. Kelbon
              28.12.2022 22:23
              -22

              1. над этим "списком" невозможно работать

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


              1. F0iL
                28.12.2022 22:30
                +33

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

                2. Операций ему нужно всего несколько - взять payload, взять указатель на следущий элемент, заменить указатель на следущий элемент. Каждое из этих действий атомарное и выполняется одним из трёх базовых операторов языка (присваивание "=", доступ к полю ".", доступ по указателю "->"). Можно вынести их в однострочные inline-функции, но это не улучшит читаемость и понимаемость программы, это будет код ради кода, как у индийских аутсорсеров.

                3. Мобильный редактор Хабра не даёт удалять пункты нумерованного списка, так что придется третьему пункту быть таким.


                1. Kelbon
                  28.12.2022 22:36
                  -21

                  По такой логике и переменные в языке не нужны. Ассемблер тьюринг полный!

                  Кому нужна эта понятность кода, глупые понятные интерфейсы!


                  1. F0iL
                    28.12.2022 22:39
                    +16

                    Так это код на Си, а не на ассемблере.

                    Или вы фанат Enterprise FizzBuzz - куча кода ради кода, даже там где оно совершенно не нужно и только затрудняет понимание?


                    1. Kelbon
                      28.12.2022 22:45
                      -15

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

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


                      1. F0iL
                        28.12.2022 22:50
                        +2

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


                      1. Kelbon
                        28.12.2022 22:53
                        -7

                        одно присваивание - вставка, другое присваивание - удаление, третье присваивание - раздление списка на два списка

                        Ну в целом я понял, не завидую тем кто читает ваш код


                      1. F0iL
                        28.12.2022 23:08
                        +16

                        В этом алгоритме не требуется удаление и разделение на два списка :)

                        Мертвый код тоже ухудшает читаемость программы, кстати.


                      1. DrunkSkipper
                        29.12.2022 11:20
                        +11

                        А вот и интервьюер из Яндекса подтянулся!


                      1. Ioanna
                        29.12.2022 15:03
                        +1

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


                  1. AnonimYYYs
                    31.12.2022 10:49
                    +1

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


                    1. Kelbon
                      31.12.2022 11:11
                      -3

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


              1. PkXwmpgN
                28.12.2022 23:18
                +10

                А с ним не нужно "работать", его нужно просто отсортировать (ну присоединить один к другому, а потом отсортировать), продемонстрировав знание элементарных алгоритмов, сложности, декомпозиции и т.д. и, например, решить задачу за O(n*log(n)), а не за O(n^2), порассуждать. Полноценная абстракция односвязного списка с шаблонами, аллокаторами, операциями, ни как не поможет в решение задачи, если человек не знает как отсортировать список, возможность вызвать метод insert вместо "ручного" присваивания одного указателя, не приблизит его к решению. Ну т.е. в чем смысл писать метод insert для задачи сортировки списка, если ты не знаешь как сортировать список... Напротив, это только покажет, что человек просто не понимает смысла задачи и самое главное зачем он ее решает. Все нужные операции, обобщения, оптимизации, баги ) можно добавить следующими итерациями, отталкиваясь от исходного решения, алгоритма.


                1. monah_tuk
                  29.12.2022 01:52
                  +1

                  Я так давно не делал руками сортировку, тем более односвязных списков, что сходу и не напишу. qsort, std::sort. Не будет хватать: профайлер, измерения, изучение.


                  1. F0iL
                    29.12.2022 02:07
                    +2

                    std::sort не сработает с односвязным списком, ему требуется random access iterator на вход.


                    1. monah_tuk
                      29.12.2022 03:56
                      +3

                      Я в общем, но пусть будет и forward_list::sort. Это уже часть - изучение, если не будет хватать.


                      1. F0iL
                        29.12.2022 18:24
                        +6

                        Причем в большинстве случаев std::forward_list::sort() реализован как раз через merge sort, что и требуется в этой задаче. И если бы я был интервьювером, то с моей точки зрения решение из двух строчек с std::forward_list::splice_after() и std::forward_list::sort() было бы самым правильным - мы же разработчика ищем, а не прикладного велосипедостроителя :)


                      1. PkXwmpgN
                        29.12.2022 21:53
                        +1

                        И если бы я был интервьювером, то с моей точки зрения решение из двух строчек с std::forward_list::splice_after() и std::forward_list::sort() было бы самым правильным

                        Возможно, у того человека который проводил интервью у автора, это тоже было бы самым правильным. Проблема скорее всего в том, что автор не знаком со стандартной библиотекой в достаточной степени, чтобы ее применить в такой ситуации. Я думаю интервьюер был бы не против если бы автор предложил ему несколько решений с использованием стандартной библиотеки, просто чтобы выразить суть алгоритмов (например forward_list::sort + forward_list::sort + forward_list::merge или forward_list::splice_after + forward_list::sort), объяснил как это работает, что быстрее, какие ограничения накладывает односвязный список и попытался часть из этого реализовать. Начать можно было просто с сортировки пузырьком, а дальше предложить развитие, ни где же не требуется сложность изначально. Но, возможно, я ошибаюсь на счет интервьюера )


                      1. imbalance
                        29.12.2022 23:00
                        +2

                        Вы — интервьюер моей мечты!

                        Хотя я только к таким как Вы на собеседования и попадаю, очень везёт, видимо =)


                      1. xFFFF
                        30.12.2022 12:05
                        +1

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


                      1. DMGarikk
                        30.12.2022 15:08

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

                        я потому что сталкивался с людьми которые отлично знают библиотеки, а вот чуть поправить штатный функционал или переделать какуюто ф-цию без подсказок — 'а как? напиши подробное ТЗ на 10 листах'


          1. playermet
            30.12.2022 12:24

            это не список вовсе, а нода списка какая-то

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


        1. myxo
          28.12.2022 22:41
          +18

          Чем плох его список?

          Тем что
          1. в bool присваивается 0?
          2. ну ладно, допустим это не с++, но тогда в указатель присваивается 0?
          3. какие-то сокращения вместо имен. Зачем? Место экономим?
          4. в одну строчку запиханы цикл, два тернарника и инкрементация с какой-то нетривиальной логикой. Опять же, зачем? Долго нужно думать над таким кодом

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


          1. F0iL
            28.12.2022 22:45
            +16

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

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


            1. Boilerplate
              28.12.2022 23:07
              +15

              Ну со спеху написать вот это: list* src = fst.next? &fst:&scd; src->next; src = src->next->next || flg? src->next : (flg = 1, &scd) , все равно кажется странным. Да и сокращения тоже очень сомнительные, лучше бы уж l1 l2, а не такие стремные. Не защищаю интервьюера, но код несколько стремно выглядит.


            1. Didimus
              29.12.2022 10:57

              Может у ревьюера там обед уже стыл, а KPI по собеседованиям уже был выполнен...


          1. rus084
            28.12.2022 23:36
            -4

            можно еще раз ревью?

            ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
                    bool f;
                    ListNode* t;
                    return (ListNode*)
                        ( 
                            (!list1 * (unsigned long long)list2) + 
                            (!list2 * (unsigned long long)list1) +
                            ((!!list1 && !!list2 && 
                                (
                                    ((f = (list1 -> val <= list2 -> val)) && (t = list1, list1->next = mergeTwoLists(list1 -> next, list2)))||
                                    ((!f) && (t = list2, list2->next = mergeTwoLists(list1, list2->next)))
                                )
                            ) * (unsigned long long)t)
                        ); 
                }
            


            1. Cheater
              29.12.2022 03:21
              +9

              Адовое оперирование условиями через целочисленную арифметику. Если у вас за спиной стоит мужик с пистолетом, который выстрелит если вы используете if, дайте знак.

              Зачем кастовать все указатели к ull?

              Приведена функция, сливающая 2 уже отсортированных списка. Это не всё решение, а только его часть.


              1. rus084
                29.12.2022 09:36
                +2

                На каком нибудь эльбрусе этот код может работать быстрее за счёт более простой конверизации компилятором и меньшего числа ветвлений (части выражения можно вычислить паралельно)
                Кастовать требуется так как указатель нельзя умножать на bool
                Из условия не следует что изначальные списки не отсортированы.


                1. Cheater
                  29.12.2022 14:38

                  Кастовать требуется так как указатель нельзя умножать на bool

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

                  Из условия не следует что изначальные списки не отсортированы.

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


          1. monah_tuk
            29.12.2022 01:54
            +1

            3. какие-то сокращения вместо имен. Зачем? Место экономим?

            Редактор неудобный, как пишет автор, плюс собес с машины, с которой много не печатает (хотя нафиг?)


            1. Trabant_Vishnya
              30.12.2022 13:48

              Может не ожидал лайвкодинг с колес?


        1. AnimeSlave
          29.12.2022 01:15

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


          1. mentin
            29.12.2022 03:34
            +1

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


        1. fk0
          29.12.2022 03:01
          +4

          Код трудно понимаемый и запутанный. При нормальном программировании наверное стоило бы написать шаблонную функцию сортирующую слиянием что-то, что имеет компаратор, input iterator и back inserter. Причём списывать с leetcode или ещё откуда-то -- нечего и незачем. Алгоритм самоочевидный если его реализовывать на нормальном ЯВУ, а не в C-стиле: делим список пополам, рекурсивно сортируем каждую половину (пока не дойдём до пустого списка), сливаем отсортированные половины (здесь нужен компаратор).

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

          Собственно что примерно должно было получитья:
          https://coliru.stacked-crooked.com/a/359a6331cb720b34
          (прошу не пинать за отсутствие концептов, передачу по-значению и инвалидирующиеся итераторы -- покажите как сделать нормально).

          На листке (в редакторе без компилятора) тяжело написать программу на C++ без ошибок. Мелких ошибок компиляции, не помнишь какого-то нюанса библиотечной фунцкии или шаблона. За что я люблю C++, так это то, что после их исправления -- сразу начинает работать. А программа на C со звёздочками, void'ами и C-кастами -- требует отладки. Но без компилятора эти ошибки не исправить и приходится скатываться на голый C (такая же ситуация в спортивном программировании где #include запрещают, даже utility и type_traits). Где, повторюсь, из-за недостаточной выразительности языка программирования всё скатывается в жонглирование полутора десятками переменных в запутанной функции.


          1. kirillgrachoff
            29.12.2022 14:28

            На ICPC, IOI и Всероссе можно использовать всё, что поставляется с компилятором. Кроме stdlib можно ещё gnu pbds использовать.


          1. IvaYan
            30.12.2022 19:35

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

            У вас односвязный список, вы не знаете, где у него середина. Даже если бы был двусвязный, середину от этого искать станет не проще. Чтобы работала ваша идея вам нужна возможность доступа к произвольному элементу, а в C++ std::list произвольный доступ не дает, если нужен произвольный доступ то это уже std::vector.


            1. BugM
              30.12.2022 19:40

              А почему нельзя один раз посчитать число элементов и после этого всегда знать где середина и потом ходить только до нее? Это даже не изменит сложность алгоритма сортировки.

              Собственно эти собеседования и отбирают людей для которых такие решения очевидны и не требуют раздумий.


              1. IvaYan
                30.12.2022 19:44

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


                1. BugM
                  30.12.2022 19:45

                  Конечно, а в чем проблема?


                  1. slonopotamus
                    30.12.2022 22:12
                    +1

                    В big-O.


                    1. F0iL
                      30.12.2022 22:30

                      У поэлементного обхода сложность O(n), так что big-O всего алгоритма оно не испортит.


                      1. slonopotamus
                        31.12.2022 12:20

                        Одну середину вы найдете за O(n), да. Но потом вам надо еще найти O(log n) середин частей списка в процессе рекурсии.


                      1. F0iL
                        31.12.2022 19:35
                        +1

                        Ну да. Вот только даже если бы вам не надо было искать середины, у вас все равно была бы сложность не менее O(n*log n), потому что merge sort - рекурсивный алгоритм. Да и если бы у вас были не списки, а std::vector, как сказал комментатор выше, и вы бы решили их отсортировать обычным квиксортом, то получили бы ту же самую O(n*log n).

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


      1. Mirzapch
        28.12.2022 22:19
        +6

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

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


      1. panzerfaust
        29.12.2022 06:38
        +3

        а что, вы хотели бы чтобы человек написавший список вот так как он написан в посте работал над чем-то важным и сложным?

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


    1. V1tol
      28.12.2022 22:13
      +18

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


      1. Didimus
        29.12.2022 10:58
        +1

        Курс по выбору "Собеседования в Яндекс" - в качестве зачета пройти собеседование


    1. PuerteMuerte
      28.12.2022 22:13
      +10

      ...а мы на втором курсе такие лабораторки на С++ решали, ещё и без этих ваших интернетов.


      1. RedPandaHere
        30.12.2022 11:41

        Я такие на первом решал... а судя по егэ мои дети это в школе делали...


    1. fk0
      29.12.2022 00:57
      +3

      Причём потом выяснится, что у них в 23 году всё ещё C++03. Но C23 надо знать на зубок.


      1. Nialpe
        29.12.2022 08:38
        +2

        У меня аналогичная история с java была, но в другой компании. Терзали меня про новые версии на собеседовании, устроился, открыл репозиторий - 1.7. Нет, не 17, а именно 1.7(!). Зато усвоил ответ на классический вопрос с java-собеседований "что нового в java 8?". Потому, что это то, чем я пользоваться не мог. Но платили, тем не менее, хорошо за легаси.


        1. IRS
          30.12.2022 01:01
          +1

          Я думаю буллшитбинго собеседований на жависта опубликовать.

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

          Сам прошел за декабрь несколько собеседования, и термин жава-макака обрел новые краски.


          1. nordligeulv
            30.12.2022 09:44
            +1

            Можете описать новые краски термина жава-макака?


  1. Racheengel
    28.12.2022 22:01
    +22

    Правильное собеседование должно выглядеть так:

    • Добрый день, хочу к вам работать.

    • Здравствуйте , напишите тестовое.

    • Спасибо, вы мне не подходите, до свидания.


    1. PuerteMuerte
      29.12.2022 00:55
      +5

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


      1. monah_tuk
        29.12.2022 02:12
        +19

        А всё равно, они даже твое резюме не читают. И для всех: напишите связный список... да йопт! Я драйвер и uvc устройство реализовал в OS-less окружении в event-loop на microblaze за 2 недели. Драйвер для эксперементалоного IP, с microblaze на тот момент тоже не работал. IP для usb 3.2 gen2, раскачались на 10gbit. Или недавно: рабочий прототип face auth камеры из г-на и палок с созданием эрзац IR сенсора из обычного RGB. И сделано быстро, хотя тема была - terra incognita, больше матчасть изучал, чем код писал...

        Или просто пишу: удалёнка. А мне сходу: готовы к релокации... я таких сразу в спам отправляю.

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

        ЗЫ выговорился.


        1. vitaly_il1
          29.12.2022 06:11
          +1

          ИМХО: с вашим опытом не стоит подавать в Яндекс, поскольку он для них по-видимому нерелевантен.


          1. monah_tuk
            29.12.2022 09:27
            +2

            Иногда просто нужна работа :)


            1. vitaly_il1
              29.12.2022 10:59
              +2

              Тогда выхода нет - надо готовиться к задачам для начинающих :-(


        1. Fenzales
          29.12.2022 10:31

          Или просто пишу: удалёнка. А мне сходу: готовы к релокации... я таких сразу в спам отправляю

          Ну вообще одно другому не мешает. Например, если удалёнка в пределах определенной страны (или нескольких стран).


          1. AnonimYYYs
            31.12.2022 10:58

            Это как так не мешает?

            Типа, тебя релоцируют в квартиру в другой стране и оттуда тф будешь сидеть и работать удаленно а офис будет в пяти кварталах от тебя? Типа такого? 0о


        1. RH215
          29.12.2022 15:18

          С подобным опытом вообще не принято проходить собеседования :)


        1. WraithOW
          30.12.2022 12:27
          +3

          А всё равно, они даже твое резюме не читают.

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


          1. DMGarikk
            30.12.2022 15:10
            +2

            Когда «синьор» не может физзбазз на собеседовании накидать за полчаса — это смешно только первые 15 раз.

            1) только обычно в задачах не физзбазз, а чтото с литкода… причем не easy уровня
            2) писать надо на бумажке
            3) хорошо… на ДОСКЕ
            4) ладно… в блокноте, интернетом пользоваться нельзя!

            и в итоге задача превращается в тест навыков компилятора и памяти


            1. marsermd
              30.12.2022 15:24

              Всем плевать, компилируется ли программа. Интересует, понимает ли кандидат что вообще писать надо.


              1. F0iL
                30.12.2022 15:52
                +4

                Да ладно заливать. Помнится, в Яндексе мне как-то раз на «алгоритмическом собеседовании» попался один наглухо упоротый интервьювер, требовавший при написании кода на доске «чтобы вообще вот без ошибок было». Причем под ошибками понимались и «я точно знаю, что есть функция стандартной библиотеки с таким-то функционалом, с таким-то названием, я только не помню точно порядок аргументов в сигнатуре вызова, давайте посмотрим в доках, ну или я напишу примерно как я себе это представляю, суть от этого особо не поменяется», так и синтаксические ошибки, типа точки с запятой и скобочек. Причем он ещё опоздал на 20 минут на собес, а потом в момент решения задачи объявил что время вышло, и «что-то вы мало успели»


                1. splav_asv
                  30.12.2022 16:12

                  Ну, упоротые есть везде, к сожалению...


                1. marsermd
                  30.12.2022 16:34

                  Я вам про процесс, вы мне про очевидно неадекватного интервьюера.


                  1. F0iL
                    30.12.2022 18:05

                    Я вам про то, что в разных местах процессы разные.


                    1. marsermd
                      30.12.2022 18:33

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


                      1. brotchen
                        30.12.2022 22:05
                        +1

                        Зависит от интервьювера. Один прямо сказал в начале: "Код должен компилироваться".


            1. WraithOW
              30.12.2022 18:14

              Your mileage may vary. У меня за всю жизнь только один был чисто на алгоритмы собес, и то там был Codesignal с медиумам с литкода (3sum + еще какие-то две). В остальных случаях что-то легкое типа смерджить два сортированных массива + просили по шагам пройтись и проверить, как работает.


      1. Sanchous98
        29.12.2022 11:19
        +1

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


        1. Ksoo
          29.12.2022 11:58

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


        1. Player2
          30.12.2022 13:42

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


    1. MyraJKee
      29.12.2022 20:31

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


    1. Flux
      30.12.2022 16:43

      Всё правильно, за исключением того что автору дали не тестовое а провели классический 45-минутный раунд интервью, прям как в этих ваших FAANG-ах. Единственное отличие в том что Яндекс может провести на 1-2 раунда больше, (5-6 против 4), остальное прям 1 в 1.

      Кстати, по моему скромному опыту, интервьюеры Яндекса давали более интересные задачи чем оные из FAANG-ов.


  1. BugM
    28.12.2022 22:10
    +32

    Вы даже в статье написали какой-то ужас вместо примерно 5 простых и понятных строк кода. Собеседующий прав.


  1. F0iL
    28.12.2022 22:11
    +5

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

    Надо было сказать "Что конкретно вам тут не понятно? Давайте я вам построчно объясню, как это работает".

    Мало ли, может C или C++ для вашего интервьюера был вообще незнакомым языком, а он вообще питонист, которого попросили помочь с интервью.


  1. Apathetic
    28.12.2022 22:20
    +34

    Сразу скажу, что писать так нельзя

    Тогда почему ты так написал?

    И вообще, статья-то о чём?


    1. Andrey_Solomatin
      29.12.2022 00:25
      +10

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

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

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


      1. Wan-Derer
        30.12.2022 23:37
        +1

        узнать про тип интервью

        В Яндексе всегда алгоритмические задачи "на доске". Хотя, не знаю как там собесят синьоров, но у прочих - всегда. Даже на неалгоритмических раундах, задачи с каким-никаким алгоритмом, типа "напиши свою реализацию LinkedList".

        И ещё, у меня было... с ними пара раундов, так вооооот, говорю шёпотом чтобы не спугнуть.... в одном случае мне разрешили использовать IDE! Того и гляди, технологическая компания №1 освоит парное программирование в IDEA, и тогда заживём! :)


  1. Valle
    28.12.2022 22:46
    +28

    Joint - это косяк, что в принципе правильно описывает содержимое функции


  1. KudryashovDA
    28.12.2022 23:07
    +10

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


    1. Andrey_Solomatin
      29.12.2022 00:17
      +3

      Решалось за О(N).

      Побуду немного педантом, но раз списка два то O(N+M) будет более правильным. Перед тем как упростить до O(N), нужно получить согласие от интервьюера, что длинны списков изменяются в одних предалах. Или просто сказать, что сложность линейная.

      Это в общем не критично, но на собеседовании себя надо красиво продать и показать, что вы знаете больше.

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


      1. BogdanPetrov
        29.12.2022 12:46

        О(N+M) и O(N) не одно и то же? Я особо в этом не разбираюсь, но если это не так, то хотелось бы понять, почему.


        1. cadovvl
          29.12.2022 13:34
          +1

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

          Тогда у тебя длины списков N и M, но M=N*K (для каждого элемента первого списка K суффиксов во втором), и сложность алгоритма линейна относительно второго списка, но нелинейна относительно первого.

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

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

          Задача о рюкзаке NP-полная, но имеет сложность решения O(N * W), и если ты это упомянешь, и даже сможешь объяснить, то это немного выделит тебя среди остальных кандидатов: не просто решаешь задачи, но еще и знаешь матчасть.



      1. invasy
        29.12.2022 12:59
        +1

        Разве не O(N) всё-таки? Где N — длина меньшего списка. Если списки отсортированы, то остаток списка с бо́льшей длиной перебирать не нужно.


        1. Alexandroppolus
          29.12.2022 14:49
          +1

          При слиянии двух отсортированных списков запросто может быть, что придется перебрать наиболее длинный. Например, [1, 5] и [1, 2, 3, 4]. Так что надо брать именно наибольший список, то есть O(N+M)


          1. invasy
            29.12.2022 15:17
            +1

            Действительно, верно, всё так. Зашёл даже на LeetCode за своим решением этой задачи:

            ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
                  if (!list1) return list2;
                  if (!list2) return list1;
            
                  ListNode *i = list1, *j = list2;
                  if (i->val > j->val) swap(i, j);
                  ListNode *merged = i;
            
                  while (i->next && j) {
                      if (i->next->val > j->val) {
                          swap(i->next, j->next);
                          swap(i->next, j);
                      } else i = i->next;
                  }
                  if (j) i->next = j;
            
                  return merged;
            }

            Как легко всё-таки простые задачи с собеседований обсуждение провоцируют.


  1. rakot
    28.12.2022 23:09
    +34

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


    1. Nialpe
      29.12.2022 08:41

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


  1. iboltaev
    28.12.2022 23:18
    +1

    я боюсь, вас забрили из-за сложности алгоритма. У вас O(N^2), тогда как односвязные списки сортируются merge sort-ом за O(N*log(N))


    1. K-00
      29.12.2022 11:19
      +2

      merge sort на двух списках за O(N*log(N)) по времени звучит как очень непростая задача для 20-30 минут на интервью. надеюсь, автор всё-таки чего-то не понял или не уточнил в условии.


      1. iboltaev
        29.12.2022 13:21
        +1

        я думаю, что никто бы не стал требовать полностью все реализовывать, достаточно было бы сказать "сортировать будем мерж сортом", накидать топовую рекурсивную функцию, заголовки split и merge, а дальше что успеется


      1. cadovvl
        29.12.2022 13:39

        Но тут требуется не merge sort (который,кстати, не настолько уж сложен), тут просили маленький кусок, одну простую операцию из алгоритма: merge.

        И сделать его *вот таким* способом, да еще и накосячить в его сложности - это сильно.


        1. F0iL
          29.12.2022 14:58

          Тут просили маленький кусок, одну простую операцию из алгоритма: merge.

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


          1. cadovvl
            29.12.2022 15:24
            +1

            Либо он этого не уточнил ¯\_(ツ)_/¯


          1. Flux
            30.12.2022 16:57
            +1

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


            1. BugM
              30.12.2022 17:01

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


  1. firegurafiku
    28.12.2022 23:32
    +11

    На что получаю ответ, что он, опытный мастер, наблюдая за моими руками, никакой осмысленности в моем черновом коде не видит. [...] Человек из Яндекса не может прочесть код с оператором “запятая”?

    Я не опытный мастер из "Яндекса", но, кажется, догадываюсь, в чём дело. Человек не "не может" прочитать код, он не хочет его читать, потому что он выглядит как нагромождение строк и не воспринимается взглядом, его нужно декодировать. Этого достаточно для отказа.

    Предположу, что собеседующий хотел увидеть декомпозированное на несколько функций решение, как-то так:

    ListNode* mergeAndSortInplace(ListNode* a, ListNode* b) {
        a = sortInplace(a);
        b = sortInplace(b);
        return mergeSortedInplace(a, b);
    }
    
    ListNode* mergeSortedInplace(ListNode* a, ListNode* b) {
        // Тут делаем в один проход слияние двух отсортированных
        // списков и возвращаем голову результата.
    }
    
    ListNode* sortInplace(ListNode* list) {
        // Тут делаем сортировку (быструю или, если не хватает
        // времени, пузырьковую) и возращаем голову результата.
    }


    1. petrov_engineer
      29.12.2022 02:16
      -8

      У вас задача неправильно решена, нужно сначала смержить 2 списка, а только потом отсортировать, иначе условно для [1,2,3] и [1,2,3] у вас получится [1,2,3,1,2,3] вместо [1,1,2,2,3,3]

      P.S. Не понял причину минусов, если в вашем понимании слияние не конкатенация, то почему тогда за один проход не решить  ¯\_(ツ)_/¯


      1. Politura
        29.12.2022 03:36
        +6

        Обычно слияние сортированных списков подразумевает, что результат тоже будет сортированным и делается это как раз за один проход. Это основа сортировки merge sort.


      1. BugM
        29.12.2022 03:43
        +6

        Минусы за незнание основ merge sort.


    1. catBasilio
      29.12.2022 11:24
      +1

      Так нельзя.
      фишка merge sort это именно сортировка 2-х списков. и она дает O(n* log N)
      этапы там такие

      1. слияние 2-x списков длины 1 с их одновременной сортировкой

      2. разбиение на списки длины 2

      3. повторение с шага 1 для длины *2 пока разбиваться уже не будет


    1. RH215
      29.12.2022 15:15
      +2

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

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


  1. distrik
    28.12.2022 23:39
    +13

    Странный выбор темы для рекавери мода, и тем более подача.

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

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


    1. fronda Автор
      28.12.2022 23:55
      -4

      Что такое рекавери мода? Ну, и вы наверно правы в целом, за 20 минут, что мной было потрачено где-то на половину этого кода, надо был сделать оценку(estimation) и какой-никакой дизайн в виде комментариев будущих блоков. Но намека на это в задании не было(было - написать функцию)


      1. Politura
        29.12.2022 03:45
        +3

        Кодинг этап интервью стал стандартом уже много лет назад как, ну, как минимум, в США, на счет России не уверен, на этом этапе приходится решать алгоритмические задачки в онлайн редакторах. Если вы планируете успешно проходить эти этапы, вам придётся потренироваться их решать на leetcode.com, или аналогах.


        1. fronda Автор
          31.12.2022 01:58

          Не вводите общественность насчет штатов+, там никому не будут платить, чтобы тот следил за руками кандидатов - только автоматические веб-сервисы. И без компилятора - ни одного не видел. Часто сначала предлагается тестовый пример, чтобы научиться веб сервисом пользоваться. Обычно дается лимитированный временной слот. Но бывают задачи просто на время, часов на 10, например. Еще в отличии от яндекс-практики, там обычно нет дефектов в требованиях (видимо прошло через значительное число соискателей, которые там еще имеют привычку оставлять фeeдбак на условие задачи)

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


  1. Andrey_Solomatin
    29.12.2022 00:07
    +4

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

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

    Возможно вы пропустили или не спросили что-то важное, например не остортированны ли списка которые вы сливаете.


    1. fk0
      29.12.2022 03:22
      +2

      Важный этап такого собеседования, что интервьювер постоянно молотит языком и заставляет тебя что-то отвечать, и в такой ситуации думать над кодом -- невозможно. В спортивном программировании тебя хоть на какое-то время оставляют в тишине, даже если и с голым C. Может я плонетянин, но у меня в мозгах только один "думатель" через который всё прокручивается, и исходник на C++, и внутрений диалог, и прокрутка программ в голове и вся прочая болтовня языком. И если я буду постоянно болтать языком, то я могу только выполнять тупейшую работу. Это конкретно про яндекс.

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

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


      1. cadovvl
        29.12.2022 13:42
        +4

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


        1. Ioanna
          29.12.2022 15:41

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


          1. splav_asv
            30.12.2022 09:22
            +5

            Вообще не совсем так. Общая схема секции с кодом примерно такая (на каждую задачу):

            1. Условие задачи - можно и нужно уточнять если что-то не очевидно/не понятно.

            2. Придумывание задачи (можно вслух, можно молча).

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

            4. Пишется код(опять же можно говорить при этом, можно молча).

            5. Когда кандидат говорит, что всё готово, идёт проверка. Всё ок - отлично.

            6. Если есть ошибки - говорят.

            7. Не нашел - просят придумать тесты и прогнать их (если еще не делалось самим кандидатом).

            8. Не помогло - показывают тест где будет ошибка.

            9. Если совсем не помогло - намекают где именно (но это уже совсем плохой случай).

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

            По идее всё это говорится собеседующим в начале (если он адекватен). Как минимум в немного в сокращённом виде пункты 1-5.


            1. Ioanna
              30.12.2022 10:54

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


  1. funca
    29.12.2022 01:33
    +5

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


    1. monah_tuk
      29.12.2022 02:17
      +1

      О, дельный коммент. Хочу тоже со стороны посмотреть)


      1. fronda Автор
        30.12.2022 01:23
        -1

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


  1. AlexXYZ
    29.12.2022 01:59
    +11

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

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

    Не будьте кожаным мешком!


    1. Maksvelis
      29.12.2022 09:32
      +1

      Согласен полностью, не понимаю позицию автора.


    1. Urvin
      29.12.2022 11:46
      +6

      К технической стороне собеседования, конечно, надо готовиться

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

      Рекрутёры ценят усилия, которые вы можете предпринять и видно, когда человек старается.

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


      1. tommyangelo27
        29.12.2022 12:05
        +1

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


        1. F0iL
          29.12.2022 12:14
          +1

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

          И заставить их перекладывать CRUD'ом джейсоны между бэкендом и фронтендом.


          1. tommyangelo27
            29.12.2022 14:30
            +1

            Красиво жить не запретишь ????


          1. Infthi
            30.12.2022 21:55

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


      1. Alexandroppolus
        29.12.2022 14:59

        Но зачем?

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


      1. RH215
        29.12.2022 15:21
        +1

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

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


        1. DMGarikk
          29.12.2022 15:30

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

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


          1. RH215
            29.12.2022 15:33

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


        1. Urvin
          29.12.2022 16:22
          +2

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


          И дальше, что мы ожидаем получить от человека, прошедшего этот фильтр, при возникновении трудностей?
          Ему нужно будет заранее дать материал для подготовки к неожиданным трудностям?
          Как именно он будет "стараться"?

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


    1. Ilusha
      29.12.2022 12:39
      +1

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

      И что? Какой вывод из этого? А еще в Африке дети голодают.

      Если такие мучения с компаний на этапе первого контакта: собесов, то зачем это вот всё?

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

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


  1. alexxisr
    29.12.2022 07:36

    не очень понятно условие «без всякого копирования» — нельзя копировать данные, но можно создавать новые ноды с указателями на те же данные? или можно только менять связи в данных списках чтобы из них получился новый отсортированный?


    1. Never00
      31.12.2022 17:03

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


  1. terraplane
    29.12.2022 07:41
    +13

    Зачем вообще туда устраиваться, Яндекс тащемта это же кал например.


    1. fk0
      29.12.2022 13:13

      А можно с этого момента поподробнее...


      1. SerafimArts
        29.12.2022 20:14
        +4

        Хм… А то что случилось с деливери не показатель? Я, например, как человек, который раньше им пользовался очень "рад" его покупкой яндексом.


        Получилась неюзабельная помойка: категорий больше нет, сортировки по времени доставки/рейтингу и проч. нету, чата нет, все промокоды из истории исчезли, да и история тоже, дизайн переделали под ужасный формат Я.Еды, позиций (ресторанов/магазинов) стало на порядки меньше, доставка стала в полтора-два раза дольше. И самое замечательное — убрали чат, оставив только почту и телефон. И если заказ задерживается на час (ну т.е. вместо указанных 20 минут проходит полтора часа), то позвонив по телефону можно услышать замечательное "извините, слишком много обращений, не можем обработать", после чего трубка просто кладётся.


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


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


        Так что расписывать более детально весь треш и хаос в Я.Еде (+Деливери) и Я.Такси (это из того что знаю) даже не хочется. Это на километр текста ещё выйдет.


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


      1. Hivemaster
        30.12.2022 09:11
        +1

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


        1. fk0
          30.12.2022 15:59
          +3

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


          1. BugM
            30.12.2022 16:58
            +1

            А код надо уметь писать? Хотя бы самый простой, как в статье?


          1. Nialpe
            30.12.2022 17:48

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


          1. Hivemaster
            31.12.2022 09:30

            Кто сказал, что они умные? Если собака берёт призы на выставках - это ещё не значит, что она сможет загнать лося. Более того, это обычно значит, что как раз не сможет.


  1. nronnie
    29.12.2022 07:59

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


  1. nomilkinmyhome
    29.12.2022 08:32
    +8

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


  1. Georrg
    29.12.2022 10:43
    +3

    Да у меня примерно такая же фигня)) прошел две секции, вроде все хорошо, ребята почти хлопают по плечу, говорят скоро увидимся, потом на третьей секции я не решаю полностью задачу (я не обработал крайние участки, хоть и пытался чего-то изобразить), как итог про меня забывают на две недели, потом сбривают. Но ребята, я и не такие алгоритмы могу решить и куда качественнее, но не в 6:30 вечера и не за пол часа)) я всё-таки андроид разработчик. На мой взгляд лучше в шахматы поиграть (показать умение логически мыслить) или по деревьям полазить (показать упорство), чем проходить это)) Яндекс лишь сбривать хороших девелоперов,и оставляет тех кому повезло. В заклад бьюсь, что проверь вы своих андроид разработчиков как меня 30% из них задачку не решит в аналогичных. условиях, а в спокойной обстановке за чашкой чая ее решат все


    1. Alexandroppolus
      29.12.2022 15:01
      +3

      или по деревьям полазить

      по красно-черным..


    1. Ioanna
      29.12.2022 15:45
      -1

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


  1. nickeVg
    29.12.2022 11:04
    +2

    Не очень понятно из задания:

    1) исходные списки уже отсортированы или нет?

    2) Значения в исходных списках пересекаются или нет (то есть есть ли одинаковые значения в списках) ?

    3) в каком направлении отсортированы списки по возрастанию или убыванию

    если списки не отсортированы то ваш алгоритм не рабочий ,

    если отсортированы в порядке возрастания и пересекающихся значений нет то ваш алгоритм потерял последнюю ноду в списке (list *a) функции joint,

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

    если сортировка в списках по убыванию алгоритм тоже не рабочий


    1. tommyangelo27
      29.12.2022 12:07
      +2

      Возможно, интервьюер как раз ждал от кандидата подобных вопросов. И не дождался ????


  1. dshelem
    29.12.2022 11:05
    +1

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


  1. opv88
    29.12.2022 11:05
    +1

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


  1. Syos
    29.12.2022 11:06

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


    1. Flux
      30.12.2022 17:11

      Такое ощущение, что это более современная версия подхода "кода на листочке"

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


      1. p07a1330
        30.12.2022 18:14

        Hidden text

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


        1. Flux
          30.12.2022 21:40
          +1

          Если у меня в редакторе будет такого типа шпаргалка - ход моих мыслей будет виден хуже?

          Это вообще иррелевантно - может даже отвлечет от сути задания, потому что они обычно на алгоритмы а не на знание стдлибы.
          Поверьте, нормальному интервьюеру абсолютно наплевать напишете ли вы .length() или .size() если вы знаете что есть метод делающий то что вам нужно.

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


  1. Uzverger
    29.12.2022 11:06

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

    А потом, ну давай проверим твой алгоритм, и в соответствии с алгоритмом рисуешь ходьбу по лабиринту и проверяешь работоспособность :)


    1. opv88
      29.12.2022 11:46

      Странно, меня они в hackerrank вроде звали на live coding, правда там не субконтрактором было, а в штат.


  1. eXcNightRider
    29.12.2022 11:12
    -1

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

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

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

    Отвечая на вопрос представителя работодателя, кандидат с ходу задаёт вопрос по тем компетенциям, где он прогрет и силён, а представитель работодателя начинает сыпаться - злиться и вести себя непрофессионально. В итоге он завершает собеседование с гарантированным отказом для кандидата. Проверено на практике :-)

    Разумеется, случаи бывают разные, но общая ситуация повторяется почти каждый раз.
    Грустно и точка.


    1. IRS
      30.12.2022 01:13

      ну у меня отказ из киви был такой пару недель назад. чувак распрашивал про асинхроные операции, а потом оказалось что сам не знает про poll, epoll и подобные вещи в операционных системах. в его мирке ввод/вывод это безусловно блокирующаяся выполнение операция =)


  1. ehots
    29.12.2022 11:56
    +2

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


  1. panzerfaust
    29.12.2022 12:01
    +13

    В общем раз это теперь тред баек про Яндекс, то добавлю свою. У меня ситуация была с другого угла зрения. Осенью один за другим к нам на собес приходили один джун+ и один сеньор оттуда. Мы тоже даем задачку под конец, она она вообще изи левел. В общем эти двое стандартную задачку раскололи за какие-то секунды и потребовали посложнее. Дали посложнее - тоже влёт. Берём?

    Нет, не берём. Реальность такова, что мы занимаемся энтерпрайз-разработкой. Задачки на кодинг - это так, на сладкое. А в первую очередь мы хотим видеть, что для человека нет "магии" в том, что он делает каждый день. Поэтому мы задаем вопросы не "что такое Х", а типа "почему в этой ситуации ты используешь именно Х и есть ли альтернативы". Еще мы проверяем умение читать код и видеть антипаттерны в код-ревью. В итоге поплыли оба. Потому что по гамбургскому счету нам параллельно, что человек пишет 4 вида сортировки по памяти, если он не может объяснить, а за счет чего именно ускоряется поиск в БД с использованием индекса и какие индексы когда стоит применять. Или если не видит явные косямбы конкурентного доступа в предложенном коде. Код-то читать каждый день придется, в отличие от "вращения деревьев".

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


    1. cadovvl
      29.12.2022 15:19
      +5

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

      Рутине мы научимся: все джейсоны лопатой ворочают, на сотый раз даже обезьяна сообразит.
      А вот разок у нас поломалось фигня, и тяжелое расследование выявило баг в компиляторе gcc. "Повезло", что у нас был чувак, который хорошо знал ассемблер и как транслируется код: в коде бы мы долго искали.
      У нас в серсвисе (с миллионами запросов в час) внезапно все начало тормозить. Анализ показал, что тормозит почему-то в парсинге json в библиотеке. Но поскольку у нас не json общего вида, а вполне конеретный, мы написали свой сверхбыстрый парсинг json-а на двух стеках, и все заработало отлично. "Повезло", что у нас был чел, который умел это писать, причем за 40 минут вместе с тестами, что позволило снизить Time To Recover до смешных двух часов.
      У нас сервис сегфолтился раз в сутки на каждой машине. Иногда это создавало проблемы. Поставили чувака разбираться, он в мешанине макросов 10-летнего легаси нашел проблемы в кастомном алгоритме сжатия, и поправил (+0.01% размер файла на диске, минус краши). "Повезло", что был чувак, хорошо разбирающийся в алгоритмах сжатия.
      Или не "повезло", а таких и искали.

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


  1. Evleaps
    29.12.2022 14:11
    +5

    Если прочесть cracking coding interview и how Google works, то станет понятно чего ждут на собеседовании:

    • Убедился что точно и верно понял задание и необходимую сложность решения

    • Сам подумал над разными решениями до кодинга

    • Сам выяснил недостающие в задании нюансы

    • Сам написал что то типо тестов, что бы проверить себя потом, что алгоритм все пройдет (если инпут Х то ответ У)

    • Написал код

    • Обязательно проверил свой же код до сдачи

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

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

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

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


    1. F0iL
      29.12.2022 15:00

      то станет понятно чего ждут на собеседовании

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


      1. Evleaps
        30.12.2022 00:49
        +1

        Все шаги которые я написал как правило проходятся быстро, если ты натренирован. Поэтому они сами советуют решать leetcode до интервью, как и FAANG и около них.
        Например facebook дает 40 минут на 2 задачи, уровня easy первая и medium/hard вторая. (Проходил собес, но не получилось)

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


  1. Ioanna
    29.12.2022 14:59

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


    1. cadovvl
      29.12.2022 15:32

      Полагаю, что зарегистрировавшихся на контест X, а набравших баллы X/20. И заставлять hr-ов смотреть в 20 раз больше резюме... Их время тоже денег стоит, а конест условно бесплатный. Резюме не прошедших можно потом смотреть по остаточному принципу. Что-то, наверное, рассматривают, но врядли есть физическая возможность посмотреть всех до контеста.


      1. Ioanna
        29.12.2022 15:48
        +1

        Все так, но посмотреть резюме - задача на 1-2 минуты, а решить контест - 5 часов.


        1. cadovvl
          29.12.2022 15:57

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


          1. Ioanna
            29.12.2022 16:00
            +1

            Конечно! Я бы тогда потратила эти 5 часов на что-нибудь более важное.


            1. middle
              30.12.2022 00:46

              что-нибудь более важное.

              В смысле?


              1. kenoma
                30.12.2022 10:41
                +1

                На велосипеде покаталась бы, в смысле.


              1. Ioanna
                30.12.2022 10:55
                +1

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


                1. middle
                  30.12.2022 11:03

                  Это была ирония.


  1. nobody_rzn
    29.12.2022 18:07
    -2

    Да все уже забили на эти стремные трудоустройства в крутые компании у них штат и так забит, 200К они пишут для пафоса, типа, мол, мы крутая компания и платим, мол, людям такие ЗП, ИМХО проще свой стартап сорганизовать, если руки из правильного места растут, пусть денег и поменьше на начальном этапе, зато как только отладите автоматику, будет все тип-топ.
    Никто не станет Вам 200 к платить. Менеджменту есть просто тупо будет нечего.
    С уважением, Дмитрий.


    1. F0iL
      29.12.2022 18:16
      +6

      Никто не станет Вам 200 к платить. 

      Вы что, издеваетесь? Платят и 200к, и 300к. Это не сказки, это вполне обычная зарплата senior-программиста в наши дни в приличных компаниях в столицах (насколько долго такое продлится, учитывая уход кучи работодателей с российского рынка и стагнацию экономики - вопрос открытый, но на сегодняшний день это факт). И для этого не надо быть редчайшим экспертом или рок-звездой разработки, достаточно просто быть опытным разработчиком и нормально делать своё дело.


      1. Evleaps
        30.12.2022 00:59
        +3

        да и 400 и 500 NET вполне реальные суммы.
        Работодатели ушли, но и специалистов много уехало.
        Но интересно посмотреть как через год изменится статистика.


    1. DMGarikk
      29.12.2022 18:45
      +3

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


    1. Ioanna
      29.12.2022 18:53

      Про забитый штат - не похоже, судя по количеству висящих вакансий Яндекса на hh.


    1. WLMike
      29.12.2022 19:56
      +2

      Я человек без опыта 40+ лет - прошел подобное интервью и предложили существенно больше 200к


    1. panzerfaust
      30.12.2022 12:03

      проще свой стартап сорганизовать

      Есть основания полагать, что данный коммент попал к нам их параллельной вселенной. Это объясняет и загадочный момент с 200к. Потому что в моей наблюдаемой вселенной фраза "да просто намути стартап" звучит примерно как

      • да просто получи гражданство Японии - сможешь по всему миру ездить

      • проще вертолет свой купить и в пробках не стоять

      • проще свой гугл написать, чем на булшит из топа выдачи смотреть


  1. vkflare
    29.12.2022 18:11
    +4

    Очень трудно находить общий язык с представителями секты Свидетелей Олимпиадного Программирования На Собеседовании. А еще труднее - нанимать адекватных людей по такой схеме. Видел это счастье с обеих сторон - и собеседующего, и собеседуемого - но так и не нашел ничего более оторванного от реальности для отбора SRE, коим и являюсь.


  1. ArtyomPozharov
    29.12.2022 22:40
    -6

    Согласен, что собеседование странное. Расеянские ИТ-компании принадлежат олигархам, работают там лимитированные смузихлëбы, которые чужака не подпустят. Гои же работают в Яндекс.Доставке и Такси. Задачка совершенно не объясняет как работают высоконагруженные сервисы с ИИ в этом Вашем Яндексе. Жду пинков от охранителей.


  1. dymmasja
    30.12.2022 12:53

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

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

    А по задачам - на собеседованиях Яндекса (и не только) задачи с leetcode берутся, это не секрет, даже наоборот, HR говорят: в рамках подготовки к собеседованию порешайте задачи на leetcode, уровня - в зависимости от того, на джуна, миддла или сениора собеседуешься.


  1. Tim7456
    30.12.2022 13:38
    +4

    Ндаа, опять какая то священная война в коментариях. Я вом напишу как это выглядит с другой стороны барикад. Большая контора хочет нанимать инженеров. Почти всегда есть куча вакансий, поэтому найм идет постоянно и потоком.
    Теперь требования:
    1) Надо не тратить слишком много ресурсов на сам найм. Прособеседовать одного кандидата это 7-8 часов работы инженеров и 1.5-3 часа менеджедов.
    2) Процесс должен быть одинаковый для всех. Иначе от исков о дискриминации компания не отобьется. Т.е. список вопросов более-менее стандартен и одинаковой сложности, все интервьюеры проходят тренинг и сертификацию.
    3) Статистика говорит, что на 10-20 очных интервью - 1 найм. Сколько отсеивается на предварительном телефонном интервью я не знаю, но там цифры еще больше.
    4) Не взять годного кандидата не так страшно, как нанять негодного. Стоимость увольнения человека измеряется сотнями тысяч долларов.
    5) Системы у больших компаний большие, сложные и уникальные. Языков много и они меняются. Поэтому важно не владение конкретным стеком, а способность учить новое.
    6) Компании ищут не специалиста который будет контрибутить здесь и сейчас, а того кто дорастет по Senior Engineer'а в перспективе 3 лет. Если человек уже Senior, то смотрят чтоб он мог взять на себя проект через годик-другой.

    Вот и получается, что нужно максимально быстро отсеять негодных кандидатов. Конечно процесс не идеален. И некоторое количество нормальных кандидатов отсеятся тоже. Спрашивать надо стандартизованным критериям. На каком языке человек писал до этого не важно. Любой мейнстримный сойдет для собеседования (С, С++, C#, Java, JavaScript). Причем интервьюер этого языка может и не знать.
    Поэтому собеседование по индивидуальному плану в этот процесс не вписываются. Нужно не искать уникальные самородки, а просеивать тонны руды.
    Каждый раунд собеседования 30 минут + 10 мин на представиться и ответить на вопросы.
    Оценка кандидата идет по чек-листу.
    ( ) Уточнил задание перед тем как начать код писать.
    ( ) Уточнил граничные условия.
    ( ) Расказал алгоритм.
    ( ) Посчитал алгоритмическую сложность.
    ( ) указал на компромис память vs время.
    ( ) Указал как будет тестировать и привел тест кейсы.
    ( ) Успел модифицировать задачу под усложненные условия.
    ( ) Внятно озвучил процесс принятия решений и возможные варианты.
    ( ) Упомянул другие возможные алгоритмы и подходы. Их плюсы и минусы.
    И так далее.

    Смотрите на этот процесс с точки зрения инженера. Этот процесс - результат решения задачи оптимизации по многим параметрам.


    1. Ioanna
      30.12.2022 18:23

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


      1. BugM
        30.12.2022 18:26

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


        1. Ioanna
          30.12.2022 18:29

          А как на "Лидерах России" этот вопрос решают? Устраивают очную перепроверку для тех, кто пройдет многоступенчатый онлайн-отбор. Там-то кандидатов куда больше, чем на вакансии "Яндекса".


          1. BugM
            30.12.2022 18:38

            Не надо ставить в пример всякие гос убожества. Там решают просто. Берут только своих на все доходные места. Как отобрать своих это другая задача. Яндекс и другие технологические корпорации пытаются отобрать профессионалов в отличии от этих.


            1. Ioanna
              30.12.2022 18:45

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


              1. BugM
                30.12.2022 18:52

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

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

                Большая контора умрет от такого отбора очень быстро. Когда нет безлимитных денег приходится профессионалов нанимать. Чтобы деньги зарабатывать.


                1. Ioanna
                  30.12.2022 18:56

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


                  1. BugM
                    30.12.2022 19:06

                    Ну так вы можете так же пройти все этапы на leetcode. Результат будет примерно такой же. Все автоматизировано, все удобно, но на работу не возьмут.


      1. Tim7456
        30.12.2022 22:58

        Потому что не то важно, решил кандидат задачу или не решил. А важно, как он за нее брался и сам процесс решения. Поэтому онлайн-контесты заменяют только первичное телефонное интервью. И это используется. По крайней мере Майкрософт их использует параллельно с остальными способами.
        Мало того, и в Гугле, и в ФБ вы получите доп очки за честность, если скажете, что решали точно такую задачу несколько дней назад и просто помните все рассуждения. В этом случае интервьюер может задачу поменять. Это от того, что процесс достижения результата важнее чем сам результат. Поэтому все споры на тему: "я все правильно решил, а меня не взяли" - это ни о чем.


        1. BugM
          31.12.2022 02:31

          Подтверждаю. Честно сказать что это знаю буквально вчера писал дает плюс. Не сказать и быть раскрытым дает no hire сразу. И вам не скажут почему no hire. Вы будете думать «я же все идеально написал». Может повезет, а может и нет.


  1. iosuslov
    30.12.2022 13:42

    tl;dr Позвали на собес, сказали решить задачку в непонятном редакторе, решение интервьюеру не понравилось

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


    1. CrashLogger
      30.12.2022 15:04
      +1

      Там скорее не единороги, а другие существа, тоже рогатые


  1. Quei
    30.12.2022 18:54
    +2

    Если говорить о собеседованиях, то Яндекс определенно компания для студентов-олимпиадников. Вообще на тему яндекса написано много статей, и даже есть несколько на хабре. Ключевых моментов я вижу два: Яндекс собеседует всех подряд в потоке, видимо, для составления своей базы. При этом подходящей открытой вакансии может и не быть вовсе. И основная сфера Яндекса всё же давно не IT, а услуги. Более того, на сколько я понял, все интересные для разработчиков-инженеров проекты в яндексе после дробления пошли своим путем, вне яндекса(?). Тем не менее компания остаётся весьма хайповой.
    Как бывший клиент яндекса добавлю, что за всё время пользования сервисами сталкивался только с негативом: яндекс убил сервис народ, которым я пользовался, яндекс 2 раза слил мои персональные данные, яндекс слил мой аккаунт яндекс.деньги сбербанку без моего согласия, яндекс заблокировали мой почтовый аккаунт и вымогал паспортные данные с биометрией (фото лица) для разблокировки. И договорится так и не получилось, тех. поддержке было просто пофиг. В яндекс.такси часто сумма списания не соответствовала сумме у водителя. А еще под разными аккаунтам цена поездки отличалась. Почему? Никто не считает нужным объяснить. Я плачу деньги и получаю нулевую прозрачность, и это во вроде бы прогрессивной компании?


    1. F0iL
      30.12.2022 22:33
      +2

      В яндекс.такси часто сумма списания не соответствовала сумме у водителя.

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


      1. Quei
        31.12.2022 15:41

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


  1. p0st
    31.12.2022 13:03

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


  1. comdivuz
    31.12.2022 15:20

    Согласен с теми кто считает что проблема именно в том что автор с лёгкостью пишет какойто сжатый обфусцированный код. Ему и дали неряшливый начальный какой-то пример и блокнот чтобы он показал просто спокойные навыки организации кода. А не чудеса c++ выражений в одну строчку. А если бы ещё и сходу алгоритм распевали то совсем хорошо. Мы не Яндекс но когда разрабов смотрим тоже больше смотрим на знание методики а не хардкора. И раз человек метит в такие компании как Яндекс, лучше урок из своего провала извлечь, а не жаловаться на собеседующего.