пятница, 2 июня 2017 г.

Как я не попал в Яндекс.

Сейчас я расскажу, как я не попал в Яндекс.

Update 15.06.2017
Я действительно не ожидал такого количества просмотров/лайков/ретвитов и т.д. Спасибо вам всем, но большого смысла в этом не было.
13 июня 2017 года мне позвонили из Яндекса ещё раз. Со мной разговаривал очень вежливый молодой человек, по имени Андрей, сотрудник отдела HR (точную должность я забыл). Он сказал, что хочет пролить свет на некоторые проблемы, которые возникли в процессе моего собеседования, и рассказать какие изменения в процессе найма произошли в Яндексе с тех пор, как я у них был. Ему за это искреннее спасибо, т.к. я вообще удивлён, что достоин того, чтобы мне позвонили и что-то объясняли. Изменения, которые они делают не связаны с моим постом, они начали их делать до публикации, так что я тут не причём. Итак, если коротко. Теперь все, кто собеседуют в Яндексе проходят специальное обучение. Собеседуемые могут оперативно оставить фидбэк о том, как собеседование прошло. Листики и напитки больше не пропадают из переговорных. И собеседующие теперь ознакамливаются с предысторией соискателя.
Конкретно по моему случаю проблема была в том, что HR написала в Яндекс, что я готов не только на Java перейти, но ещё и на C++. И по результатам скайп-интервью они решили, что я больше пригожусь в Хранилище, Почте и т.д., чем в разработке под Android. Собственно из-за этого и начались все проблемы.
Спасибо, что Андрей мне позвонил и всё объяснил.
Эта статья чистая субъективщина. Всё, что описано здесь, сугубо моё видение ситуации.
В принципе, можно было и не писать эту статью, а дать вот эту ссылку: https://habrahabr.ru/post/322602/. В самой статье и в комментариях к ней описаны все проблемы, с которыми я столкнулся в попытках попасть в Яндекс.
Кому-то может показаться что я в этом посте ною, но увы это не так. Меня отговаривали идти в Яндекс люди, которые там работали и даже если бы я получил положительный ответ, я бы очень долго думал идти мне туда или нет. И да, я понимаю, что HR просто делали свою работу, чтобы заработать премию за привод кандидата. Но пускай они тогда свою работу делают несколько честнее.

Призрачная угроза

В июле 2016 мне на почту пришло письмо вот такого содержания:
Дмитрий, добрый день! Меня зовут *****, я работаю с командой Яндекс.Поиска. Вас рекомендовали как очень сильного разработчика и успешного участника ACM. Наши инженеры-разработчики работают с высоконагруженными и отказоустойчивыми системами, выдерживающими сотни миллиардов ссылок и десятки петабайт данных, разрабатывают алгоритмы для оптимизации производительности и получают уникальный опыт в области машинного обучения. Языки реализации зависят от проекта - С++/Python/Java. В нашей команде очень ценятся глубокие знания алгоритмов и хорошая математическая подготовка, которыми Вы обладаете в полной мере. В связи с этим я хотела бы обсудить с Вами возможность сотрудничества и рассказать вам более подробно о тех проектах и продуктах, которыми мы активно занимаемся. Так как проектов достаточно много и у каждого из них свой стек технологий, то прежде чем рассказывать о них, я хотела бы уточнить, что сейчас вам может быть интересно и чем хотелось бы заниматься?Могли бы мы поговорить более детально и обсудить, чем можем быть друг другу интересны?В любом случае буду очень благодарна за ответ.
Это письмо меня несколько рассмешило, т.к. вряд ли меня кто-то мог бы им порекомендовать как сильного разработчика (расскажите это моим коллегам, пусть тоже посмеются) и уж тем более как успешного участника ACM. В ACM (вообще оно называется ACM/ICPC) я ни разу не участвовал. Мой максимум - это областные студенческие и олимпиада в КРОК для студентов МГТУ им. Н.Э. Баумана. Даже на Codeforces я только пару раз побывал в первом дивизионе.
На это очень лестное письмо я ответил, как есть: рассказал, что успехов в ACM у меня нет и приложил ссылку на CodeForces. Рассказал, что моё знакомство с C++/Python и Java ограничилось парой утилит и курсовыми/лабораторными. Сказал, что предпочитаю всё-таки C# и если появится что-то для шарпистов, то рассмотрю их предложения.
В ответ на это я получил письмо с вакансией https://yandex.ru/jobs/vacancies/dev/bs_back_dev/ и предложением подумать о работе. Тут мне пришлось в ответном письме изъясняться уже более прямо, и я написал дословно следующее:
Здравствуйте, ******. Буду вынужден отказать в предложении, т.к. не считаю свои знания Python, Perl и алгоритмов хорошими и достаточными для работы в Яндекс.
На этом письма от Яндекса не некоторое время прекратились.

Заманивание

В самом начале сентября 2016 на мой почтовый ящик упало письмо от уже знакомого адреса job@yandex-team.ru. Начало письма было следующим:
Дмитрий, добрый день!
Меня зовут ****, компания Яндекс.
В июле вы уже общались с моей коллегой *****, но на тот момент не нашлось подходящих для вас вакансий.
Хотела уточнить, открыты ли вы сейчас для наших предложений?
Наша команда работает над приложением, которое называется просто Яндекс, — визитной карточкой компании на мобильных устройствах.
Ваша экспертиза в С# очень интересна для нас. Я понимаю, что для вас, наверно, неожиданно получить такое предложение, но на данный момент мы хотели бы привлечь в команду мобильной разработки специалиста с сильной базой без требований к опыту мобильной разработки. В нашей команде работают эксперты, которые готовы делиться своим опытом. Насколько вам могли бы быть интересны мобильные приложения как область применения своих талантов?
Чувствуя, что они опять ошиблись в выборе меня, я ответил на это письмо несколькими довольно очевидными уточняющими вопросами: "Можно подробнее узнать про вакансию? Какие языки программирования надо знать (в письме есть упоминание C#, но не говорится что разработка будет на нём)? Что понимается под сильной базой? И т.д." Также я ещё раз отправил ссылку на свой профиль на CodeForces, чтобы они ещё раз убедились, что в алгоритмах я не гений.
В ответ на это HR предложила созвониться и пообещала подробно ответить на все мои вопросы по телефону. Этот вариант мне очень понравился. Из разговора с HR выяснилось, что Яндекс запускает (сейчас уже запустил и без меня 😭) мобильное приложение "Яндекс", которое будет агрегировать в себе все сервисы Яндекса, будет точкой входа в них и т.д. Приложение будет разрабатываться под Android на Java и на Swift под iOS. HR сказала, что Яндекс в курсе, что я знаю достаточно хорошо C# и очень поверхностно Java и Swift. Но фирма готова потратить 3 месяца на моё переобучение на ту платформу, которую я выберу. Я выбрал Java, т.к. имхо он ближе к C#. По деньгам HR сказала, что зп на той должности, на которую меня хочет нанять Яндекс, стартует от 150 тыс. руб. на руки (если бы я тогда согласился на эти деньги, то с учётом съёмной квартиры в Москве, метро и т.д. - потерял бы в деньгах). HR также объяснила, что собеседование в Яндекс проходит в два этапа: собеседование по скайпу, где проверяется умение писать алгоритмы и очное собеседование в офисе, проезд до которого мне оплатит Яндекс. Всё выглядело довольно хорошо, к тому же мне было интересно пройти собеседование в такую крутую фирму, и я решил попробовать. Мне дали возможность самому выбрать период времени и дни, в которые Яндекс назначит скайп-собеседование.

Скайп-интервью

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

class Tree {
    Tree left;
    Tree right;
    int data;
}
class ZTree {
    ZTree left;
    ZTree right;
    int data;
}
Нужно реализовать функцию ZTree copyTree(Tree src), которая создаёт ZTree полную копию дерева src типа Tree. Интервьюер разрешил мне писать код в студии и отправлять ему его в скайп в чистом виде. Язык программирования его не сильно интересовал. Через 3 минуты я отправил вот такой код в ответ:
static ZTree copyTree(Tree src) {
    if (src == null)
        return null;
    ZTree result = new ZTree();
    result.data = src.data;
    result.left = copyTree(src.left);
    result.right = copyTree(src.right);
    return result;
}
        На том конце скайпа этим ответом были довольны и предложили другую задачу.
class Tree {
    Tree left;
    Tree right;
    Tree ref;
    int data;
}
class ZTree {
    ZTree left;
    ZTree right;
    ZTree ref;
    int data;
}
Тут добавилось у классов третье поле ref, это поле может ссылаться на любой объект соответствующего типа.
Через восемь минут я отправил в качестве ответа вот это:
static ZTree copyTree(Tree src) {
    Dictionary<Tree, ZTree> dict1 = new Dictionary<Tree, ZTree>();
    Dictionary<ZTree, Tree> dict2 = new Dictionary<ZTree, Tree>();
    copyTreeCore(src, dict1, dict2);
    foreach (KeyValuePair<ZTree, Tree> pair in dict2) {
        pair.Key.other = dict1[pair.Value];
    }
}

static ZTree copyTreeCore(Tree src, Dictionary<Tree, ZTree> dict1, Dictionary<ZTree, Tree> dict2) {
    if (src == null)
return null;
    ZTree result = new ZTree();
    result.data = src.data;
    result.left = copyTreeCore(src.left, dict1, dict2);
    result.right = copyTreeCore(src.right, dict1, dict2);
    dict1.Add(src, result);
    dict2.Add(result, src.other);
    return result;
}
После этого собеседующий начал объяснять следующую задачу: "Вот сейчас, когда вводишь слово в строку поиска, появляются подсказки автодополнения. Как бы ты реализовал это автодополнение?". Я ответил, что напишу префиксное дерево. Он попросил код и минуты через 4 я выдал это:
class Node {
    public char Value { get; private set; }
    public Node[] Children { get; private set; }
    public Node(char value) {
        Children = new Node[26];
        Value = value;
    }
}
static void Insert(Node root, string s) {
    Node next = root;
    foreach (char c in s) {
        int childIndex = c - 'a';
        if (next.Children[childIndex] == null) {
            next.Children[childIndex] = new Node(c);
        }
        next = root.Children[childIndex];
    }
}
Следующее задание и последнее было действительно сложным. Работник Яндекса попросил меня разработать алгоритм, который применялся бы при билдёждке для разрешения зависимостей. Надо добиться того, чтобы перед билдёжкой очередного проекта уже были сбилжены все, от которых он зависит. Входными данными являются список зависимостей. Гарантируется, что нет циклов. Алгоритм желательно сделать таким, чтобы он по максимуму использовал процессор, т.е. билдить в несколько потоков, если есть что билдить.
Я сразу решил начать с топологической сортировки и выдал такой код:
class Node {
    public List<Node> dependsFrom { get; private set; }
    public bool Ready { get; set; }
    public bool? Color { get; set; }
    public Node() {
        dependsFrom = new List<Node>();
    }
    public bool ReadyDepends() {
        foreach (Node node in dependsFrom) {
            if (!node.Ready)
                return false;
        }
        return true;
    }
    public void Build() {
        //do things
        Ready = true;
    }
}
static List<Node> sorted = new List<Node>();
static void DFS(Node node) {
    if (node.Color.HasValue)
        return;
    node.Color = false;
    foreach (Node depends in node.dependsFrom) {
        DFS(depends);
    }
    node.Color = true;
    sorted.Add(node);
}
static void Main(string[] args) {
    Node root = ParseMakeFile();
    DFS(root);
    foreach (Node node in sorted) {
        while (!node.ReadyDepends()) {
            Thread.Sleep(100);
        }
        new Thread(()=> { node.Build(); }).Start();
    }
}
Тут всё довольно просто: парсим MakeFile, делаем топологическую сортировку, бежим по отсортированным нодам и билдим каждую из них.
Собеседующий некоторое время думал, а потом указал мне на огромный изъян в коде. Предположим у нас будет такая структура проектов:
Где начало стрелки показывает, что проект нужен для сборки того, который на конце стрелки.
Тогда мой алгоритм, сделав топологическую сортировку получит в sorted последовательность нодов с индексами: 4, 3, 2, 1. И билдить будет в той же последовательности. Получается, что второй проект не соберётся, пока не будет закончена сборка 3 и 4, хотя второй проект совершенно от них не зависит, т.е. я не выполнил одно из условий задания - не загрузил процессор на полную. Потупив минут 5, я выдал ответ, что надо группировать таски по уровням и билдить сначала все таски на одном уровне, потом на уровне выше и т.д.
Интервьюер попросил меня отобразить это в коде, и я выдал это:
static List<List<Node>> groups = new List<List<Node>>();
static void DFS(Node node, int index) {
    if (node.Color.HasValue)
                return;
    node.Color = false;
    foreach (Node depends in node.dependsFrom) {
        DFS(depends, index++);
    }
    node.Color = true;
    sorted.Add(node);
    if (groups.Count <index)
        groups.Add( new List<Node>());
    groups[index].Add(node);
}
static void Main(string[] args) {
    Node root = ParseMakeFile();
    DFS(root, 0);
    for (int i = 0 i< groups.Count;i++){
       foreach(node n in groups[i]){
           while (!node.ReadyDepends()) {
               Thread.Sleep(100);
           }
           new Thread(()=> { node.Build(); }).Start();
       }
    }
}
Этим вариантом работник Яндекса был уже удовлетворён и сказал что собеседование на этом закончилось. Сказал, что всё прошло нормально и надо ждать ответа в течении недели. Собеседование длилось час.

Офлайн собеседование

Спустя 3 часа после скайп-собеседования я получил письмо о том, что Яндекс приглашает меня к себе в офис на полноценное собеседование. В письме говорилось что собеседование может быть до 8 часов и предложили мне самому выбрать день, когда это произойдёт. После всех согласований по дате мне было предложено выслать им чеки о покупке билетов, чтобы Яндекс компенсировал мне потраченные деньги.
Вообще не протяжении всего этапа подготовки к собеседованию HR вели себя очень вежливо, предлагали любую помощь и даже просили звонить, если я задержусь в пробке. Это было хорошо, т.к. я был на собеседовании в Москве ещё в одной фирме в 2013 году и тогда из-за пробки и опоздания на 20 минут (хотя я позвонил и предупредил что опаздываю) мне было отказано в прохождении собеседования вообще.
К очному собеседованию я уже готовился всерьёз. Пробежался в Кормене по всем темам, в которых плаваю. Наконец-то понял и осознал алгоритм Кнута-Морриса-Пратта, в интернете писали, что его любят спрашивать в Яндексе. Прорешал много задачек, гуглил чужие интервью, спрашивал у знакомых, которые там работали и т.д.
На входе в офис меня встретила вот такая лошадь.
В Яндекс я пришёл чуть раньше назначенного времени и успел перед собеседованием оглядеться и пообщаться с другими ожидающими. Рядом со мной сидел парень, который пришёл устраиваться стажёром.
Над ресепшеном у них в офисе висят два монитора: на одном в реальном времени показывают пробки Москвы, на другом показывают, что конкретно сейчас люди ищут в Яндексе, подобный функционал можно увидеть вот по этому адресу: https://yandex.ru/company/
В комнате, в которой я ждал собеседования висели ещё два монитора, но по ним крутили только рекламу сервисов Яндекс. Остальное фотографировать я почему-то не решил.
В назначенное время ко мне спустилась моя HR, она отвела меня в комнату 7-40, на 7 этаже. В комнате был стол, три стула, телевизор, какое-то ещё оборудование. На столе были напитки: кола, чай холодный, вода с газом и без. Стены представляли собой знаменитые сплошные маркерные доски. В этой комнате на стенах натурально можно было писать везде. HR предложила кофе или чай. Спросила есть ли у меня какие-то вопросы и рассказала, как будет проходить собеседование. Мной заинтересовались 3 команды. Казалось, что я крут, но на самом деле стоило насторожиться, т.к. изначально меня звали в одну конкретную команду. Какие команды хотят меня видеть она не сказала, но сказала, что по два человека по отдельности из каждой команды проведут со мной часовое собеседование. Также будет перерыв на обед за счёт Яндекса. Каждый человек после собеседования поставит оценку мне и даст характеристику в их специальной системе. При этом заявлялось, что собеседующие не могут смотреть оценки друг друга.
Тут стоит напомнить, что происходило до этого. Яндекс настойчиво звал меня к себе, но я отказывался и потом согласился. Я им очень много раз говорил, что знаю только C#. В алгоритмах не силён. Писал последние 4 года под WinForms. Яндекс ни разу не просил меня выслать резюме, т.е. они считали, что знают обо мне достаточно. Я шёл в команду разработки под Android на Java с переобучением. Почему я решил об этом напомнить? Потому что все, кто меня собеседовал не знали совершенно ничего обо мне. Вообще.
HR сказала, что мне будут давать задачи, решение которых я буду писать на листах A4. Желательно писать сразу правильно. Тут и возникла первая проблема. На столе в комнате действительно лежала стопка листов А4, но как выяснилось годной для письма была только одна сторона верхнего листа. Остальные были исписаны другими собеседуемыми. Мне пришлось достать мою дежурную тетрадку из рюкзака. Мои листы (из моей тетрадки!), на которых я писал, после собеседования уносили с собой интервьюеры. Может у них в фирме кризис?
Первый собеседующий меня был из бэкэнда почты.
Задачи были такие: дана строка из маленьких букв латиницы, нужно для каждой буквы из тех, что встречаются в этой строке выдать максимальную длину подряд идущих символов. Например, aaaabaabbaaaaacf. Ответ: a - 5, b - 2, c - 1, f - 1. Задача не сложная.
Потом написать метод, который принимает два отсортированных массива и на выходе даёт отсортированный массив с элементами из первых двух. Это вообще составная часть сортировки слиянием и пишется на автомате.
Потом написать класс, которому в конструкторе передаётся массив пар интов: число и вес. Написать в этом классе метод GetRandom, который будет возвращаться рандомное число из заданных, где веса - отношения вероятности выпадения. Т.е. если задано 10, 1; 20, 2 ;30, 4, то 30 должно выпадать в 4 раза чаще чем 10. Тут я потупил чуть, но предложил создать массив, в котором буду для каждого числа хранить сумму частоты выпадания всех чисел перед ним, тогда мы можем использовать обычный рандом и через бинарный поиск находить в этом массиве нужное число. Если учесть, что используемый нами рандом даёт случайное число в промежутке от 1 до суммы всех частот, то мой алгоритм будет решать поставленную задачу. Для примера, указанного выше это выглядит так: массив: [[10, 1], [20, 3], [30, 7]]. В таком случае мы берём рандомом число x от 1 до 7 и выбираем из массива такую пару, у которой x будет больше сумме частот до этой пары и меньше сумме частот этой пары. В итоге, первый собеседующий сказал, что всё нормально и ушёл.
Второй человек был из Яндекс.Хранилище (там хранится почта, Я.Диск и истории запросов). Задача была такая: дан компьютер с известными параметрами процессора, памяти, харда и сети. Написать там сервер умеющий два метода: POST/key/data и GET/key, где key - всё что угодно, любого размера, value соответственно тоже. Сервер должен работать с кучей пользователей самым лучшим и быстрым способом. Тут я конечно нёс всякую чушь, т.к. в подобном я не силён. Предложил хэшировать key допустим 8 байтами, сделать дерево каталогов на компьютере, в котором в корневой папке лежали все варианты первых двух байт хэша, в них варианты всех вторых байт хэша и т.д. Это всё чтобы ускорить поиск по таблице размещения файлов. Пытался что-то говорить про B - деревья, но не нашёл нормально как их тут применить. Вопрос, который меня интересует до сих пор: зачем это всё надо разработчику под Android?
После второго собеседования мне устроили перерыв и отвели на обед в столовую в соседнее здание. HR говорила постоянно, что мы опаздываем, что мне надо есть быстрее и прочее, потому столовую нормально сфотографировать я не успел. В туалет я сходить тоже не успел, т.к. уже пришёл другой человек меня собеседовать.
Третий человек тоже из Хранилища. Попросил написать LRU кэш на плюсах в условиях какой-нибудь железки с ограниченной памятью, т.е. все локальные переменные, аллокации и т.д. тоже влияют на размер кэша и их надо считать. Очень удивился, когда я сказал, что не буду писать на плюсах, т.к. пришёл со знанием C# и переобучением на Java. Спорил почти с каждой строчкой. Доказывал, что в .NET есть reference counting, иначе не будет работать GC. Просил везде учитывать его при подсчёте размеров объектов и подобные загоны. На мои попытки объяснить, что в .NET нет счётчика ссылок сказал, что я не понимаю, как устроена память в .NET. LRU кэш я сначала начал писать с использованием кучи и словаря, но потом решил переделать кучу на двусвязный список. Интервьюер регулярно задавал вопросы в процессе написания кода. Это отвлекало. Кода пришлось писать очень много, я исписал два листа A4 и не написал толком ничего, т.к. уже пришёл следующий меня собеседовать. Пришлось на словах объяснять, как и что я бы дальше писал. Также он спрашивал нравится ли мне писать высоконагруженные сервисы на питоне. Этот вопрос у него не возник, если бы он взял у HR данные обо мне.
Четвёртый человек из бэкэнда почты. Судя по его разговорам с предыдущим интервьюером у него какой-то очень высокий и почти невозможный рейтинг во внутренней системе оценки работы программиста. И кстати, он единственный из тех, кто меня собеседовал пришёл с ноутбуком и смотрел почти всегда в него. От него задачи были такие. Дано n написать программу, выдающую все правильные скобочные последовательности длины 2n. Эту задачу я всегда давал на третьем занятии на факультативе по алгоритмам. Собственно, её решение напишу даже во сне. Он сидел с моим решением минут 15 и сказал, что оно не работает. Контрпример подобрать не смог, но всё равно сказал, что не работает. На споры с ним я потратил очень много времени. Контрпример он так и не подобрал, но сказал, что задача возможно правильная, но он не уверен. Как бы он решал эту задачу он не сказал. Потом была такая задача: дан массив точек на плоскости в декартовых координатах, нужно написать метод, который возвращает true если существует такая вертикальная прямая, что весь этот массив точек будет симметричен относительно этой прямой. Такую задачу я уже решал когда-то. И хотел предложить следующее. Мы находим самую левую и самую правую точку из заданных. Середина между ними должна быть искомой вертикальной прямой. Остаётся проверить остальные точки на то, что они симметричны относительно этой прямой. Для этого достаточно завести HashSet и хранить в нём все точки. Тогда можно в цикле пробежаться по заданным точкам, для каждой из них посчитать где должна располагаться симметричная ей точка и проверить есть ли в хэшсете такая точка. Если хотя бы одна не подходит под эти условия, то ответ к задаче отрицательный. В процессе решения задачи интервьюер уточнил, что может быть задано несколько точек с одинаковыми координатами. Тогда мне пришлось хэшсет заменить на словарь.
Собственно, на этой задаче и произошёл полный пиздец. Задача не сложная, но он меня постоянно перебивал. Говорил, что я кругом не прав, нервничал и не давал закончить предложения вообще. Минут 10 у нас был такой диалог:
- Берём первый элемент массива.
- И?
- Бежим дальше по массиву и для всех точек у которых y такой же как у первой находим minx и maxx.
- Зачем?
- Ты дослушай алгоритм до конца и поймёшь.
- Ок. Берёшь число и что дальше?
- Бегу по массиву.
- Зачем?
- Бляяяя.
В итоге он сказал, что я задачу решил неправильно. Тест, на котором она падает он опять не привёл. На мои просьбы дать свой e-mail, чтобы я выслал ему по обеим задачам код, идентичный тем, что на листе и он бы проверил этот код на любом тесте, был отрицательный ответ.
В общем, в процессе спора я на него повысил голос и сказал ему "заткнись, блядь", т.к. он вообще не давал мне закончить предложения, в ответ на это собеседующий сказал, что я кругом не прав и ушёл. Потом пришла HR и сказала, что на сегодня всё. Предложила посидеть в кабинете и успокоиться.
Интервьюеры вообще не знали на каких языках я пишу. Для них было удивление что я не буду писать на их любимом Python/Java/C++. И постоянно спрашивали на какую должность я собеседуюсь. В ответ я у них спрашивал тоже самое. Каждый из приходящих на собеседование забирал какой-нибудь напиток со стола комнаты, к вечеру мне уже было нечего пить на собеседовании. Хорошо, что я заранее купил воды в магазине по дороге. 
В целом выглядело всё несколько странно. HR Яндекса явно делали вид, что им обо мне всё известно, что я им очень сильно нужен и нужен именно на позиции Senior Java под Android. Те, кто меня собеседовал вообще не понимали для чего я к ним пришёл, на какую платформу и что я буду там делать. Это за гранью понимания, когда меня звали в одну команду, а потом выясняется, что мною заинтересовались 3 другие и потом эти 3 другие мне отказывают в работе. Может стоило спросить ту, в которую меня звали? Если бы мне ещё по телефону HR сказала, что надо будет писать хранилища под Linux и LRU кэши на плюсах, то я бы сразу отказал и жил счастливо.

Итог.

Моё отношение к работникам Яндекса немного изменилось. К продуктам нет. Яндекс я всегда очень сильно любил. Дома у меня лежит прекрасная Яндекс.Книга. Почта у меня вся на Яндексе, музыка - Яндекс, карты - Яндекс, стартовая в браузерах и поисковик по умолчанию - ну, вы поняли. Даже на телефоне я пользуюсь только Яндекс Браузером. Поработать у них, правда мне не удалось. Но люди, работающие там говорят, что я не много потерял. После смерти Сегаловича Яндекс из крутой IT-компании превратился в бездушую машину по заколачиванию бабла (да, я понимаю, что он ею был и до этого, но всё-таки). Мои знакомые поувольнялись именно потому, что поменялось отношение людей друг к другу. Люди стали холодней, не помогали если просить, не подсказывали. В общем, всё печально.

11 комментариев:

  1. Блог читают. Просто никто не признается. Все отлично.

    ОтветитьУдалить
  2. Спасибо, что нашел время рассказать о впечатлениях.

    ОтветитьУдалить
  3. Кстати, а ты не думал, что 4й интервьювер - это был стресс-тест?

    ОтветитьУдалить
    Ответы
    1. Думал, но стресса хватало и до этого: cервер написать для Android разработчика, инфа от ведущих разрабов Яндекса о том, что сборщики мусора бывают только на счётчиках ссылок (в Яндексе много пишут на Java и видимо не знаю как она работает), общее непонимание со стороны собеседующих о том кто я и зачем к ним пришёл.
      В твиттере уже пошутили о том, что мне для собеседования нужно было набрать 0 "заткнись, блядь" и я этот тест не прошёл. Но и без последнего собеседования всё было очень печально. Оно просто добило.

      Удалить
    2. К тому же я такой не один. Я получил много положительных комментариев в разных соцсетях. Многие негодуют от того как там проводят интервью.

      Удалить
  4. Часто приходится общаться по несколько часов с абсолютно незнакомыми людьми на непростые темы? Если рассматривать адекватность как соответствие поведения собеседника ожидаемому, то на собеседовании люди ведут себя НЕадекватно, как правило. :) Отчасти это связано со стрессом. Отчасти - с отсутствием навыка общения с незнакомцами. В какой-то степени неадекват может быть элементом плохой организованности, либо наоборот - заранее спланированного спектакля. Навык отрабатывать подобные ситуации это тоже скил.

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

    ОтветитьУдалить
  5. Меня добило отсутствие бумаги и вынос напитков жаждущими сотрудниками. Ну и что в уборную сходить не дали. Треш. Зачем они вообще Вас приглашали за свои деньги, непонятно...

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

      Удалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. Этот комментарий был удален автором.

    ОтветитьУдалить
  8. Сходил на очное в филиал СПб. Пришел раньше минут на 15, сидел наблюдал голые желтые стены, покрашенные водоэмульсионкой и системы кондиционирования возле рецепшн, кофе никто не предложил и никто не встретил(обычно это делает HR). С задержкой минут 7-10 пришел за мной парень и мы пошли куда-то на этаж выше в крохотную переговорку, где не было ни кофе, ни воды. Зачем так далеко ходить? На эти желтые стены смотреть? Офис Люксофта, где я до этого работал, гораздо приятней. Зашли в переговорку, сели. Писать можно на листочке, доске и на чем-то еще. Почему нельзя на ноутбуке или компьютере? Сразу дали задание - дана матрица пикселей nxm где есть фон и горы, которые представляют равнобедренные треугольники. Надо найти горы. Я до сих пор не понял до конца это условие, почему там только диагональные пикселы могут быть с разницей в 1, ведь равнобедренный треугольник не подразумевает прямой угол. Как по мне, так это какая-то полнейшая чушь. Второе задание было: даны две последовательности упорядоченные, надо вывести все элементы второй последовательности, которых нет в первой. Задание несложное, сделал с ошибками, предложили переписать, но я не стал. Как-то мне сразу не понравился интервьювер, который был немного дерганный, то что он опоздал, то что ручки не писали, надо там что-то снять было, сами задания тоже не понравились, офис не впечатлил. Про вакансии и про плюшки ничего не рассказали. В общем встал я и ушел через 50 минут и считаю, что правильно сделал.

    ОтветитьУдалить

OutOfMemory + GdiPlus иногда совсем не OutOfMemory

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