Как проходит собеседование в Яндекс: что спрашивают, как пройти?
Собеседование в Яндекс проходит в несколько этапов и в совокупности длится нескольк о недель. Как проходи т собеседование в Яндекс — мы расскажем чуть ниже.
Кто не знает компанию Яндекс в Рунете? Все знают. Поэтому потенциальн о м ало кто будет против поработать в этой компании, особенно это касается IT-специалистов. Если до Гугла кажется, что тяжело дотянуться, то Яндекс расположен ближе, причем и территориально , и по менталитету. Но по большому счет у ч то устраиваться в Яндекс, что устраиваться в Гугл — это тот еще квест. Поэтому в первую очеред ь н ужно быть подготовленным морально и профессионально.
Собеседование в Яндекс
Для того чтобы попасть на собеседование в Яндекс, первым делом нужно откликнуться на вакансии этой компании. Самые актуальные ваканси и н аходятся в разделе «Вакансии». Если у вас на компьютере в браузере стоит стартовая страница от Яндекса или вы пользуетесь Яндекс.Браузером, то найти этот раздел не составит труда — он расположен в самом низу страниц ы .
Нужно понимать, что в этом разделе располагаются вакансии в самом Яндексе, но у него еще есть много партнеров и дочерних компаний, в которые так же можно устроит ь ся и ощущать себя частью Яндекса.
Как про ходит собеседование в Яндекс? В несколько этапов. Первый шаг вы сделали, если откликнулись на вакансию, а далее вы автоматически попадаете на первый этап.
Экспресс-собеседование в Яндекс
- зачем вам это?
- что вы ждете от работы в Яндексе?
- какие у вас интересы?
- какая специализация?
- и др.
Онлайн-собеседование по Скайпу или Зуму в Яндекс
- либо следующий этап;
- либо отказ, а значит , вы можете еще раз откликнуться на вакансию в Яндексе.
Очное собеседование в Яндекс
Если вы успешно пройдете онлайн-собеседование, то вас пригласят на очное собеседование, а это значит, что вам придется приехать в офис. По приезд е в офис вас ждет одно большое, но чаще несколько небольших собеседований с разными специалистами Яндекса. Каждая отдельная встреча займет у вас около часа , и если их будет несколько, то на все это у вас уйдет больше половины дня, потому что между встречами у вас будет перерыв, также у вас будет перерыв на обед.
На этом этапе немного жестче будут проверять ваши технические навыки, будут смотреть , как вы подходите к решению стандартных и нестандартных задач. Вас могут попросить написать код не в редакторе, а на листке бумаг и или на доске, чтобы вы показали, что вы действительно понимает е т о , что пишите. В общем, на этих собеседованиях может происходить много всего интересного. Если вы действительно профессионал своего дела, то вам боят ь ся нечего.
Если вы пройдете этот этап, тогда вас пригласят на следующий. Но загвоздка в том, что эксперты этого этапа говорят результат не сразу, а лишь спустя несколько дней, поэтому придется немного понервничать от ожидания.
Знакомство с будущим местом работы
Если эксперты реша т , что вы достойны работать в Яндексе, то вам придется еще раз приехать в офис Яндекса, но на этот раз не на собеседование, а на знакомство с командами, где вы сможете работать. По приезд е в офис вы будете приглашены на встречу с разными командами, которые коротко расскажут о себе и о своей работе. Вам останется лишь выбрать команду, в которой вы хотите работать. Причем выбор не нужно будет делать моментально, на обдумывание вам дадут несколько дней.
Как только вы сообщите о выборе своего будущего места работы, вам нужно будет подождать еще 3-5 дней, пока подготовят официальное предложение от Яндекса на трудоустройство. Если вас устроят все условия, то все , что вам останется , — это прийти на работу в согласованную дату.
Заключение
Как вы успели заметить, собеседование в Яндекс — это довольно длительная процедура. Что самое интересное — откликнувшись на одну вакансию , пройдя все этапы, вы сможете выбрать любую команду и работать в любой другой сфере. Это говорит о том, что нужно просто быть хорошим специалистом в своем деле, а место работы вам всегда найдут.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Какие вопросы задают на собеседовании в Яндексе?
Яндекс — одна из крупнейших российских интернет-компаний, и при собеседованиях в Яндексе кандидатам задают разнообразные вопросы, чтобы оценить их знания и навыки в различных областях. Собеседования в Яндексе могут быть разделены на несколько этапов и проводиться как в формате технического интервью, так и в формате собеседования на должность менеджера или специалиста в области маркетинга или дизайна.
В техническом интервью кандидатам зачастую задают вопросы по алгоритмам и структурам данных, программированию, базам данных, а также тесты по знанию языка программирования, в котором они работают. Вопросы включают как классические задачи, такие как поиск наибольшего общего делителя или сортировка массива чисел, так и специфичные задачи, связанные с работой в Яндексе.
В собеседовании на должность менеджера или специалиста в области маркетинга или дизайна могут быть заданы вопросы о предыдущем опыте работы, знании рынка и трендов в данной области, а также о способности решать сложные задачи и работать в команде. Кандидатам могут предложить решить кейсы, связанные с продвижением продуктов, созданием эффективных рекламных кампаний или разработкой дизайн-концепций.
В целом, собеседования в Яндексе призваны оценить не только технические навыки кандидатов, но и их способность принимать решения, работать в команде и готовность принимать сложные вызовы. Компания ценит талантливых и мотивированных специалистов, и собеседования в Яндексе — это возможность продемонстрировать свои навыки и показать, что вы можете быть ценным членом команды.
Требования к кандидатам на собеседовании в Яндексе
Компания Яндекс является одним из крупнейших IT-компаний в России и постоянно ищет профессионалов для расширения своей команды. Вот несколько требований, которые ставятся к кандидатам на собеседовании в Яндексе.
Во-первых, кандидаты должны владеть высоким уровнем знания в своей области. Компания ищет экспертов, которые глубоко разбираются в своей специализации и имеют большой опыт работы. Кандидатам нужно показать, что они продемонстрировали свою экспертность в прошлой работе и достигли заметных результатов.
Во-вторых, Яндекс ценит коммуникабельность и умение работать в команде. Кандидаты должны показать, что они способны эффективно взаимодействовать с коллегами и совместно достигать поставленных целей. Важно также умение слушать и принимать критику, а также быть готовым к обратной связи.
В-третьих, Яндекс оценивает умение кандидата быстро адаптироваться к новым условиям и быстро учиться. Индустрия IT постоянно меняется и развивается, поэтому важно иметь способность быстро осваивать новые технологии и методы работы. Кандидатам нужно показать свою гибкость и готовность к постоянному обучению и саморазвитию.
Кроме того, Яндекс обращает внимание на такие качества, как ответственность, организованность и умение обосновывать свои решения. Кандидатам нужно демонстрировать свою способность к самоорганизации и планированию работы, а также умение анализировать информацию и принимать обоснованные решения.
Собеседование в Яндексе может быть сложным испытанием, и кандидаты должны быть готовы показать свои лучшие качества и навыки. Чтобы успешно пройти собеседование, кандидатам рекомендуется подготовиться заранее, изучив основные области, связанные с их профессией, и быть готовыми к активному обмену идеями и опытом с другими участниками.
Технические вопросы для соискателей в Яндексе
На собеседовании в Яндексе соискателям часто задают технические вопросы, которые помогают оценить их знания и навыки. Одним из таких вопросов может быть задача, связанная с алгоритмами и структурами данных. Например, попросить реализовать алгоритм сортировки массива или поиск элемента в двоичном дереве поиска.
Также часто спрашивают о знании основных принципов разработки и архитектуры программного обеспечения. Например, может быть задан вопрос о принципах SOLID, о применении паттернов проектирования или о том, как организовать код для достижения высокой производительности и масштабируемости.
Еще одним важным аспектом является знание языка программирования. При собеседовании в Яндексе могут задаваться вопросы о синтаксисе, особенностях работы с памятью, многопоточности и других ключевых возможностях выбранного языка. Например, может быть попрошено объяснить разницу между значениями по умолчанию и передачей по ссылке, или рассказать о принципах работы с многопоточностью в выбранном языке.
Также на собеседовании могут быть заданы вопросы о знании инструментов разработки и отладки, например, о том, как использовать отладчик или систему контроля версий. Такие вопросы помогают оценить уровень владения инструментами и готовность к работе в команде разработчиков.
Вопросы о проектах и опыте работы на собеседовании в Яндексе
На собеседовании в Яндексе часто задают вопросы о проектах, над которыми кандидат работал, и его опыте работы в общем. Компания интересуется не только конечным результатом, но и процессом разработки, технологиями и подходами, используемыми при выполнении задач. Кандидату могут задать вопросы о сложностях, с которыми он сталкивался, решениях, которые применял, и результате работы.
Кроме того, на собеседовании в Яндексе можно ожидать вопросов о собственном вкладе в проекты, над которыми кандидат работал. Компания интересуется успешностью выполненных задач, а также способностью кандидата эффективно работать в команде и достигать поставленных целей. Кандидату могут задать вопросы о его роли в проекте, его вкладе в общий результат и его способности адаптироваться к новым условиям и требованиям.
Также, на собеседовании в Яндексе могут быть заданы вопросы о проектах, которые вызвали особый интерес у кандидата или привлекли его внимание своей сложностью или инновационностью. В таких вопросах компания ожидает услышать от кандидата детали проекта, его особенности и проблемы, с которыми пришлось столкнуться. Кандидату могут задать вопросы о том, как он бы решил эти проблемы, и какие уроки он извлек из проекта.
В целом, вопросы о проектах и опыте работы на собеседовании в Яндексе направлены на выявление у кандидата знаний конкретных технологий и инструментов, умения применять их на практике, а также способности эффективно работать в команде и достигать результатов. Ответы на эти вопросы помогают компании оценить кандидата и принять решение о его приеме на работу.
Вопросы о знаниях и навыках на собеседовании в Яндексе
На собеседовании в Яндексе могут задаваться вопросы, которые направлены на оценку профессиональных знаний и навыков соискателя. Во время интервью могут быть рассмотрены следующие темы:
- Алгоритмы и структуры данных: Вопросы могут касаться основных алгоритмов и структур данных, таких как сортировка, поиск, хеш-таблицы и графы. Соискателям могут задаваться задачи на реализацию алгоритмов или анализ их времени и пространства.
- Язык программирования: Кроме знания основных алгоритмов и структур данных, могут задаваться вопросы по конкретному языку программирования. Это может быть любой популярный язык, такой как Python, Java или С++. Вопросы могут касаться особенностей языка, синтаксиса, а также использования стандартных библиотек.
- Базы данных: Вопросы о базах данных могут быть связаны с различными аспектами их работы, такими как проектирование схемы данных, SQL-запросы, оптимизация запросов и транзакции.
- Архитектура программного обеспечения: Соискателям могут задаваться вопросы о принципах проектирования программных систем, о надежности, масштабируемости и безопасности. Может быть рассмотрена архитектура клиент-серверных систем или систем на основе микросервисов.
- Операционные системы: Вопросы могут касаться основных понятий операционных систем, таких как процессы, потоки, планирование задач и управление памятью. Может быть также рассмотрена работа с файловой системой и сетью.
Это лишь некоторые из тем, которые могут быть рассмотрены на собеседовании в Яндексе. Ответы на эти вопросы помогут оценить уровень знаний и навыков соискателя в технологической сфере и определить его пригодность для работы в компании.
Вопросы о личностных качествах на собеседовании в Яндексе
На собеседовании в Яндексе, помимо проверки технических навыков, уделяется важное внимание личностным качествам кандидата. Компания стремится найти профессионалов, которые не только обладают сильными техническими навыками, но и соответствуют корпоративной культуре и ценностям.
Одним из вопросов, задаваемых на собеседовании, может быть: «Как вы организуете свою работу?». Рекрутеры интересуются, насколько кандидат способен самостоятельно планировать и организовывать свою деятельность, как он управляет своим временем и ресурсами.
Также возможны вопросы о способности работать в команде. Кандидат может быть спрошен о своем опыте работы в коллективе, о том, как он решает конфликты, как устанавливает и поддерживает партнерские отношения с коллегами.
Компания Яндекс ценит инициативность и готовность к развитию. Вопросы о самообразовании, участии в конференциях и семинарах, интересе к новым технологиям и трендам могут быть заданы на собеседовании. Рекрутеры хотят убедиться, что кандидат активно развивается и готов принимать активное участие в жизни компании.
Собеседование в Яндекс: театр абсурда :/
Напомню, что в той статье я рассказывал, каким я вижу идеальное собеседование и что я нашёл компанию, которая так и делает — и я туда прошёл, хотя это был адский отбор. Я, довольный как слон, везде отметил, что я не ищу работу, отовсюду удалился и стал работать работу.
Как вы думаете, что делают рекрутеры, когда видят «Alexandr, NOT OPEN FOR WORK»? Правильно, пишут «Алексей, рассматриваете вариант работать в X?» Я обычно игнорирую это, но тут мне предложили попытать счастья с Яндекс.Лавкой, и я не смог пройти мимо — интересно было, смогу ли я устроиться куда-нибудь, когда введут великий российский файерволл. К тому же за последние 3 года я проходил только два интервью, и мне показалось, что я не в теме, что нынче требуется индустрии. Блин, я оказался и вправду не в теме. И вы, скорей всего, тоже — об этом и статья.
Короче, я согласился — буду продавать дошики и похмелье!
Мне назначили дату интервью, и также прислали методичку, чтобы я понимал, что меня ждёт и как готовиться. Чтобы ничего не заспойлерить, я замазал квадратиками важную информацию.
Вы тоже заметили «вопросы на C++» в методичке для питониста? Не то чтобы я знал C++, но в институте проходили, авось что-нибудь да вспомню на интервью.
Тут что-то написано про leetcode, но я человек ответственный, поэтому к интервью не готовлюсь. Это кстати я не шуткую, реально: если вы ответственный человек, то вы, когда предстаёте перед компанией, отвечаете за то, что вы заявляете как ваши умения. Можно выучить типовые вопросы и даже казаться умнее и опытнее, чем есть, но по факту это переобучение на тестовых заданиях/вопросах. Ребята из ml поймут. Поэтому я гол как сокол и чист как стёклышко или что там ещё блин, если что-то знаю — скажу, что-то не знаю — скажу что не знаю. Таким образом работодатель знает, что он покупает и сколько ещё нужно вложить в меня средств на обучение. Все счастливы.
Интервью 1
Так вот, назначили мне собеседование, и в назначенный час я был в зуме. Сразу скажу, что все — и рекрутер, и интервьюеры — вежливые и приятные в общении люди, тут я подкопаться не могу, ну разве что иногда они слишком корректные: спрашивают, ничего, если будет стажёр-наблюдатель и если они будут делать заметки в ходе интервью. На какой-то из итераций мне даже стало интересно, что будет, если я скажу «нет, нельзя», но именно тогда меня не спросили, так что предлагаю вам проверить самим.
Мне кинули ссылку на Яндекс.Блокнот (это я его так называю, вообще он Яндекс.Код и живёт тут) — там можно вместе писать текст и включать подсветку синтаксиса. Запускать там, естественно, ничего нельзя, потому что это уже реализовано в coderpad, а он недостоин Яндекса. Ну ок, мне на самом деле проще, потому что написать код и написать хотя бы запускаемый код — это очень разные вещи. Минус — нельзя прогнать тесты и вообще тут как битва самураев: ваша правда против правды рекрутера, один доказывает, почему работает, другой — почему нет.
Итак, о чём вас спросит Яндекс на интервью? Выберите один правильный вариант:
2) текущие проекты
3) как вы будете решать вот эту бизнес-задачу
4) как решить вот эту алгоритмическую задачу без стандартной библиотеки
Именно так! Так давайте решим эту алгоритмическую задачу. Помните, у нас нет collections.Counter , itertools.groupby, set.intersection , вообще случилась война и стандартная библиотека питона погибла, оставив после себя int , bool , for , if и while . Ну ок, хотят проверить знание каких-то базовых вещей.
Задача 1
Даны два массива: [1, 2, 3, 2, 0] и [5, 1, 2, 7, 3, 2]
Надо вернуть [1, 2, 2, 3] (порядок неважен)
Фактически нам нужно вернуть пересечение множеств, но с повторением элементов. Не включая мозг, я начал сразу кидать что-то вроде
common = set(a).intersection(set(b)) # найдём общие элементы for el in common: occurs = min(a.count(el), b.count(el)) # и посчитаем, сколько они встречаются
Но меня осадили — у нас война, поэтому никаких intersection , только хардкор. После нескольких итераций и намёков интервьюера я родил вот это:
def common_elements(a, b): b_dict = defaultdict(int) # defaultdict выжил :) for el in b: b_dict[el] += 1 # я считаю все элементы из b, т.е. типа collections.Counter result = [] for el in a: count = b_dict[el] if count > 0: # если какой-то элемент из a встречается в b result.append(a) # то это успех b_dict[a] -= 1 # и я "вынимаю" его из b, т.е. уменьшаю его количество на 1 return result
Внимательные читатели намекнули, что на строчках 11 и 12 нужно использовать el , а не a , но на интервью и так прокатило 🙂
Тут же меня спросили, какова сложность алгоритма — ок, норм, это нужно знать, потому что в реальном программировании мне это потребовалось целых 0 раз. Ответил.
После этого задания (и впоследствии) я увидел, что хоть они и принимают рабочие решения, у них есть эталонные, к которым они вас подталкивают, особенно если сложность вашего решения больше сложности эталона. Не то чтобы прям только эталон принимают, но знайте, что он есть.
Кстати, как вы наверно догадываетесь, есть большая разница между решением, написанным в обычной рабочей атмосфере, и решением, написанным на собеседовании в яндекс.блокнотике с интервьюером на связи и ограничением по времени. Здесь и далее я привожу те решения, которые сообразил на интервью, какими бы ужасными они не были. Можно ли написать лучше? Да, в каждой из задач можно лучше.
Задача 2
Ладно, лоу-левел алгоритмическая муть позади, давайте теперь нормальную задачу, распарсить там что-нибудь или накидать архитектуру высоконагруженного прило.
Дана строка (возможно, пустая), состоящая из букв A-Z: AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB
Нужно написать функцию RLE, которая на выходе даст строку вида: A4B3C2XYZD4E3F3A6B28
И сгенерирует ошибку, если на вход пришла невалидная строка.
Пояснения: Если символ встречается 1 раз, он остается без изменений; Если символ повторяется более 1 раза, к нему добавляется количество повторений.
Ну ок, хотят проверить знание каких-то базовых вещей.
Вроде просто: for grouper, items in groupby(string) . А, да, у нас была война. Ничего нет.
def convert(s: str) -> str: result: List[str] = [] last_sym = None # последний символ, что мы видели count = 0 # и сколько мы его видели # мы будем идти по строке и записывать в result при смене символа for sym in (list(s) + [None]): # последний None искусственно триггерит посленюю смену символа if last_sym and sym != last_sym: # если случилась смена символа if count == 1: result.append(last_sym) else: result.append(last_sym + str(count)) # начнаем запоминать новый символ count = 1 last_sym = sym else: # символ просто повторился count += 1 # ну ок, запомнили что символ видели на 1 раз больше return ''.join(result)
Не помню точно, но с вероятностью 3 сигма я продолбал граничные условия — это я делать люблю. Помните, тут нельзя ничего запускать, вместо этого тут принято запускать интервьюера, который интерпретирует ваш код прям в голове и говорит какие случаи не работают, чтобы вы могли пропатчить код.
Так, давайте может что-то другое?
Задача 3
Дан список интов, повторяющихся элементов в списке нет. Нужно преобразовать это множество в строку, сворачивая соседние по числовому ряду числа в диапазоны. Примеры:
[1,4,5,2,3,9,8,11,0] => «0-5,8-9,11»
[1,4,3,2] => «1-4»
[1,4] => «1,4»
Так блин, серьёзно? Я наверно очень мутный тип, если две предыдущие задачи не показали мой скилл на этом классе задач.
Ну ок, хотят проверить знание каких-то базовых вещей.
def repr(group_start, group_end) -> str: # это просто правильно печатает группу if last_group_start == last_group_end: return str(last_group_end) return f'-' def squeeze(numbers) -> str: if not numbers: # граничный случай return '' numbers_ = sorted(numbers) # сначала располагаем по порядку groups = [] # тут будем хранить группы last_group_start = None last_group_end = None for n in numbers_: # это первая итерация, просто говорим, что группа началась и закончилась if last_group_end is None: last_group_start = n last_group_end = n # если предыдущая группа отличается от текущего числа на 1, # то это число входит в группу, то есть становится концом группы elif last_group_end == n-1: last_group_end = n # иначе мы понимаем, что группа закончилась, # мы её запоминаем и начинаем новую else: groups.append(repr(last_group_start, last_group_end)) last_group_start = n last_group_end = n else: # посленюю группу придётся обработать вручную groups.append(repr(last_group_start, last_group_end)) return ','.join(groups)
На этом интервью закончилось, и я стал ждать вестей от рекрутера.
Через пару часов мне сказали, что всё отлично и меня ждут на следующих интервью — 2 штуки подряд — задачи на написание кода. Так, минуточку, а что было до этого — написание говнокода? Ладно, там видно будет. Уж точно что-то новенькое, следующий этап всё-таки.
Интервью 2
В назначенный час я бахнул кофейку и встретился в зуме с новым рекрутером. Интервью #2 началось.
Задача 4
Я, признаюсь, был готов ко всему, но не к этому:
Дан массив из нулей и единиц. Нужно определить, какой максимальный по длине подинтервал единиц можно получить, удалив ровно один элемент массива.
[1, 1, 0]
Ну ок, хотят проверить знание каких-то базовых вещей. Вот такой ужас у меня вышел:
# пример: [0, 0, 1, 1, 0, 1, 1, 0] def max_ones_length(lst: List[int]) -> int: max_ones_length = 0 # тут мы хотим получить сгруппированные 0 или 1 и их количество: subranges = [] # [(0, 2), (1, 2), (0, 1), (1, 2), (0, 1)] last_el = None # последний элемент, который мы просмотрели # идём по элементам списка for el in lst + [0]: # [0] - это ручной триггер для обработки последнего элемента if last_el != el: # если произошла смена 0 на 1 или наоборот if el == 0: # если это была смена 1 на 0 # пример: subranges == [(0, 2), (1, 2), (0, 1), (1, 2)] # у нас произошла смена 1 на 0, до смены единица шла 2 раза # (см последний элемент subranges) - проверяем, вдруг это # максимальная длина try: last_ones_length = subranges[-1][1] max_ones_length = max(last_ones_length, max_ones_length) except IndexError: pass # а может если мы удалим один ноль между элементами 1 и 3, # то получится более длинная последовательность единиц? try: gap_length = subranges[-2][1] if gap_length == 1: combined_ones_length = subranges[-1][1] + subranges[-3][1] max_ones_length = max(combined_ones_length, max_ones_length) except IndexError: pass # добавляем новый счётчик последовательности в subranges subranges.append((el, 1)) else: # увеличиваем счётчик последней последовательности на 1 subranges[-1] = (el, subranges[-1][1]+1]) last_el = el # костыль, граничное условие if len(subranges) == 2 and subranges[1][1] == 1: return subranges[0][1] - 1 return max_ones_length
Ну что, Яндекс, ты доволен? Ты доволен?! Кто король алгоритмов?! Я король алгоритмов! Давай, удиви меня.
Задача 5
Даны даты заезда и отъезда каждого гостя. Для каждого гостя дата заезда строго раньше даты отъезда (то есть каждый гость останавливается хотя бы на одну ночь). В пределах одного дня считается, что сначала старые гости выезжают, а затем въезжают новые. Найти максимальное число постояльцев, которые одновременно проживали в гостинице (считаем, что измерение количества постояльцев происходит в конце дня).
sample = [ (1, 2), (1, 3), (2, 4), (2, 3), ]
Отлично, тут уже начинает появляться мир — ну там люди, отели, вдруг даже этот код реально где-то когда-то может пригодиться. Я прям вижу, как с каждой задачей будут появляться дороги, поезда, реки, горы и моря, металл, электричество, сервера и датацентры и блин задачи, которые будут работать в дата-центрах и серверах, ну хоть где-нибудь!
Ну ок, хотят проверить знание каких-то базовых вещей.
from collections import defaultdict def max_num_guests(guests: List[tuple]) -> int: res = 0 # для каждого дня посчитаем, сколько приехало и сколько отъехало arriving = defaultdict(int) leaving = defaultdict(int) for guest in guests: # O(n) arriving[guest[0]] += 1 leaving[guest[1]] += 1 current = 0 # едем по дням в порядке увеличения, добавлем приехавших и убавляем уехавших, # считаем сколько стало for day in sorted(set(arriving.keys()).union(set(leaving.keys()))): # O(n*log(n)) + O(n) current -= leaving[day] current += arriving[day] if current > res: res = current return res
Не без подсказки интервьюера, но я написал это, и теперь менеджер, наверно, может эффективно узнать важную инфу. Круто. Пора прыгать на следующее собеседование (да, они шли одно за другим).
Интервью 3
Новый интервьюер; можно наблюдателя; можно писать заметки; да, я знаю, как работает ваш яндекс.блокнот лучше вас уже, давайте наконец
Задача 6
Sample Input [«eat», «tea», «tan», «ate», «nat», «bat»]
Sample Output [ [«ate», «eat», «tea»], [«nat», «tan»], [«bat»] ]Т.е. сгруппировать слова по «общим буквам».
Смутное чувство дежавю посетило меня. Нет, показалось наверно. Ну ок, хотят проверить знание каких-то базовых вещей.
Эта задача простая, наверно хотят удостовериться, что пока я разруливал дела в отеле, я не забыл, как пользоваться словарём. Не лишено смысла! Давайте накидаем что-нибудь простое.
def group_words(words: List[str]) -> List[List[str]]: groups = defaultdict(list) for word in words: # O(n) key = sorted(word) groups[key].append(word) return [sorted(words) for words in groups.values()] # O(n*log(n))
Тут меня спросили «а какая сложность у сортировки», и я воспользовался лайфхаком. Дело в том, что все собеседования проводятся разными людьми, и они вообще не знают ваш контекст — например, о чём я говорил в предыдущих сериях и, например, кхм, сколько алгоритмических задач я прорешал до этого. На прошлом собеседовании меня спросили, какая сложность у сортировки, я не знал и мне сказали — и на этом собеседовании я уже ответил.
Задача 7
Слияние отрезков:
Вход: [1, 3] [100, 200] [2, 4]
Выход: [1, 4] [100, 200]
Честно говоря, где-то тут мне уже стало плевать на собеседование, Яндекс и все эти алгоритмы, и в реале я бы уже просто послал всех в /dev/null, но мне хотелось знать, что в конце всего этого, ведь конец должен быть? Будет задача, где я завалюсь, и это кончится. Что-то вроде эвтаназии, но в интервью.
Ну ок, хотят проверить знание каких-то базовых вещей.
def merge(ranges: List[Tuple[int, int]]) -> List[Tuple[int, int]]: if not ranges: return [] result_ranges = [] last_range = None # последний отрезок, что мы видели for rng in sorted(ranges): # обязательно сортируем if not last_range: last_range = rng continue # если начало текущего отрезка меньше конца предыдущего if rng[0]
Задача 8
Время собеседования подходит к концу, но всё-таки можно ещё поболтать про кодинг и поспрашивать практические вопросы, например по Django или SqlAlchemy:
Дан массив точек с целочисленными координатами (x, y). Определить, существует ли вертикальная прямая, делящая точки на 2 симметричных относительно этой прямой множества. Note: Для удобства точку можно представлять не как массив [x, y], а как объект
Ну ок, хотят проверить знание каких-то базовых вещей.
Тут я как всегда пошёл куда-то не туда и написал вот что:
from statistics import mean def is_vertical_symmetry(points: List[Point]) -> bool: # сначала найдём вертикальную прямую в середине всех точек x_center = mean(p.x for p in points) # тут будем хранить точки, для которых пока не нашли пары: unmatched_points = defaultdict(int) for point in points: if point.x == x_center: # если точка на прямой, то она сама себе пара continue # создадим "брата" - точку, которая симметрична текущей относительно вертикальной прямой brother = Point( x = x_center * 2 - point.x, y = point.y, ) # если этот брат есть в unmatched_points, то достаём его оттуда и говорим, что текущая точка сматчилась if unmatched_points[brother]: unmatched_points[brother] -= 1 # иначе добавляем эту точку в не-сматченные else: unmatched_points[point] += 1 return not any(unmatched_points.values())
Здесь я прям видел, как интервьюер ожидал что-то другое, а получил меня. Ну бывает. Я тоже, знаете, ожидал собеседование.
Так, третье собеседование пройдено, и эти садисты сказали, что я прошёл дальше. Ну вот за что?
Интервью 4
Честно говоря, вот тут я потерялся, потому что я всё жду, когда начнётся собеседование, ну, человеческое собеседование имеется в виду, а пока вместо этого я превращаюсь в алгоритмэна.
По собственным ощущениям я добрался до какого-то мини-босса и на предстоящем интервью у меня должна была пройти какая-то битва на более общие вопросы. А рекрутер мне пишет: знаете, Яндекс настоятельно советует потренироваться на задачках с leetcode. А там опять алгоритмы. Ох, не к добру это.
Ну тут уж я сломился и решил таки глянуть, что там за задачки, раз мне так настойчиво намекают. Вообще там есть сложные, и над ними было прикольно подумать и порешать в уме, но я так и не понял, как это поможет в интервью. Задачек слишком много и, что более важно, они, блин, разные, и решив одну, я не решаю класс задач - я решаю одну задачу. Соответственно либо я решаю их все и зачем мне тогда ваш Яндекс после такого, либо. короче, я опять не готовился. Ответственный человек, помните?
Кстати, где-то в этот момент я узнал, что я юзаю что-то вроде тора, но для собеседований: я общаюсь с рекрутером, мой рекрутер общается с рекрутером Яндекса, а рекрутер Яндекса общается с собеседователями, а может цепочка ещё больше. Меня это поразило прям: вы меня тут дерёте за O(n^2) в решениях, так может я у вас посчитаю длину цепочки от кандидата до собственно интервьюера и спрошу "а можно оптимальнее?!"
Итак, началась четвёртое (да, ей-Богу) интервью. Интервьюер спрашивает, на каком языке я буду решать задачки. На йоптаскрипте, разумеется. Кстати, по косвенным признакам я понял, что интервьюер больше в C, чем в питон, и это тоже здорово. Итак: после того как компания решила нанять сеньор питон разраба за 200к и сношала его 3 часа на долбанных задачках, она отправляет на собеседование сишника и спрашивает, на каком языке кандидат будет сношаться с долбанными задачками. Л - логика!
Итак, вот задачка от мини-босса:
Задание 9
Даны две строки.
Написать функцию, которая вернёт True, если из первой строки можно получить вторую, совершив не более 1 изменения (== удаление / замена символа).
Погодите, да это же. Ну ок, хотят проверить знание каких-то базовых вещей. Сссссуууу. пер.
Если вы хотите решить задачу не так, как хотел интервьюер, то смотрите:
def no_more_than_one_change(string1: str, string2: str) -> bool: # string1: a b c d # string2: a b c max_length = max(len(string1), len(string2)) # наибольшая длина строк diff = abs(len(string1) - len(string2)) # разница в длине строк # дополняем строки до максимальной длины при помощи zip_longest, # то есть на место "недостающих" элементов ставим None, и строки # теперь одинаковой длины; # ----> # string1: a b c d # string2: a b c None # идём слева направо по обеим строкам и сравниваем символы, # находим индекс, при котором строки начинают отличаться: change_left = None for i, (char1, char2) in enumerate(zip_longest(string1, string2)): # O(n) if char1 != char2: change_left = i # в нашем примере будет 3 break else: # если мы такой индекс не нашли, то строки просто совпадают return True # теперь делаем то же, но идём справа налево: # string1: a b c d # string2: None a b c #
Внимательный читатель может заметить, что, по-моему, это даже на приведённом примере не работает 🙂 , хотя пофиксить несложно. Так или иначе, вот такие вещи как я написал лично мне тяжело гонять в голове, и интервьюеру тоже; интервьюер принял это как решение, прогнав несколько тестов в уме. Если хотите возвести это в абсолют, то пишите сразу на brainfucke и с умным видом объясняйте, почему оно будет работать. А вообще я просто тонко намекаю, что всё-таки компилятор/интерпретатор под рукой нужен.
Задание 10
Осталось совсем немного времени, и вот в довершение пара реально сложных заданий на понимание многопоточности и gil в python:
Дан список интов и число-цель. Нужно найти такой range, чтобы сумма его элементов давала число-цель.
elements = [1, -3, 4, 5]
target = 9
result = range(2, 4) # because elements[2] + elements[3] == target
А теперь все вместе хором: НУ ОК, ХОТЯТ ПРОВЕРИТЬ ЗНАНИЕ КАКИХ-ТО БАЗОВЫХ ВЕЩЕЙ. Вы восхитительны. Спасибо.
Здесь я уже не успевал по времени и озвучил идею: мы бежим по списку и сохраняем в память значения сумм для всех range до этого элемета. Иными словами, для каждого элемента мы пробуем делать ranges, которые кончаются на этом элементе, и смотрим на их сумму элементов.
[1, -3, 5, 6, 2, 3, 5] ^____[range(0,1)=1] [1, -3, 5, 6, 2, 3, 5] ^___[range(0,2)=range(0,1)-3=-2, range(1,2)=-3] [1, -3, 5, 6, 2, 3, 5] ^___[range(0,3)=range(0,2)+5=3, range(1,3)=range(1,2)+5=2, range(2,3)=5]
Не угадал, конечно - "а можно чтобы быстрее?". Но тут, к счастью, время вышло, и мой мозг не успел придумать ничего лучше.
>> Сейчас я нахожусь здесь
Прелесть ситуации в том, что я ещё не получил фидбек, то есть я кандидат Шрёдингера - я и прошёл (формально я все задачи решил), и не прошёл (== не всё угадал, где-то баги), и суперпозиция сколлапсирует, когда ответ пройдёт через всю цепочку рекрутеров ко мне. А пока я полностью беспристрастен, ведь 1) меня не отшили, то есть это не пост обиженного на компанию человека, и 2) мне плевать на результат, потому что мне и на текущей работе офигенно.
К чему всё это
Вообще это просто так тупо, что забавно, и я не мог с вами не поделиться. Никак не связанные люди тестируют меня на одном и том же типе задач, который максимально оторван от реальности, всё это длится много часов, сложность задач неупорядочена, проверяется всё в голове и никакого фидбека.
Сколько вопросов, блин, можно спросить про http, rest, django orm, sql, python, stdlib, docker, multithreading/multiprocessing/async, да про что угодно - что вы там в лавке делаете? - спросите про похмелье, но зачем 4 часа алгоритмов? Что это показывет - что я устойчив к тупости? Честно говоря, я уже не уверен.
Может кому-то пригодится разбор задачек, ну вдруг вы любитель такого, хотя я уже говорил о качестве решений 🙂
А если вам нужен вывод, то вот несколько, берите любой:
- Тестировать кандидатов нужно на реальных задачах, а не синтетических
- Нужно уважать время кандидатов
- Кто-то в яндексе пересмотрел "день сурка"
- Знаете, когда целое не равно сумме частей? Вот тут так же: люди тебя собеседуют хорошие и встречи приятные, а в целом всё гавно.
- Открыто новое достижение: ругательство "да пошёл ты в яндекс!"
- Большие компании ай-яй-яй
- Какой-то чувак написал смешную статью
И да, если вы ищете работу на питоне - залетайте к нам. У нас не Яндекс.
Мой канал в телеграме: Блог погромиста.
«Собеседование в Яндекс было сложнее, чем в некоторые американские компании»: выпускник ИТМО Алексей Иванов ― о жизни и работе в Кремниевой долине
Выпускник ИТМО Алексей Иванов десять лет назад переехал в США и сейчас работает в Dropbox. В интервью ITMO.NEWS он рассказал, с какими сложностями столкнулся при переезде, сколько зарабатывают айтишники в Кремниевой долине и трудно ли получить там работу, а также о том, чем западная корпоративная культура отличается от российской.
Алексей Иванов. Фото: Дмитрий Григорьев / ITMO.NEWS
― Расскажите немного о себе — откуда вы? Как поступили в ИТМО и чем занимались в вузе? ― Я родился в Киселевске, в Кемеровской области, потом мы переехали в Петербург. У мамы был такой подход: ребенок должен попробовать разное и что-то выбрать, поэтому в детстве я занимался всем — от бальных танцев до программирования, и им увлекся. В ИТМО ходил на курсы для программистов, окончив их, поступил на факультет точной механики и технологии. В итоге вышел оттуда бакалавром приборостроения. Во время учебы я параллельно занимался разными проектами: работал системным и сетевым администратором, занимался видеоинжинирингом, 3D-моделированием, HTML, CSS, разрабатывал сайты… Много писал статей для Хабра. И однажды у меня вышла неплохая статья об оптимизации операционной системы FreeBSD. После нее мне начало поступать много предложений о работе. В результате я уехал работать в Москву. Год поработал в стартапе, а потом устроился на работу в «Яндекс». Первое время я был немного в шоке, так как всю свою сознательную жизнь провел в Петербурге, а тут вдруг переезд. Я спросил совета у друга, и он тогда сказал мне: «Леш, что за вопрос вообще? У тебя есть три предложения: назначай три собеседования — утром, днем и вечером. Берешь билет на ночной поезд, приезжаешь, собеседуешься, уезжаешь. Потом снимаешь квартиру и работаешь». А я в ответ: «А что, так можно было?» Не думал, что все окажется так просто. ― Есть шутка про петербуржцев, что для них лучшее место в Москве — это «Сапсан», потому что четыре часа ― и ты уже в Питере. Тяжело было привыкнуть к жизни в Москве? ― Я ужасный москвич, из тех кто «понаехал». Каждый мой день представлял собой дорогу до «Яндекса» и обратно. На тот момент моя девушка (сейчас она уже жена) жила в Питере, поэтому каждые выходные или я приезжал в Питер, или она ко мне в Москву. Лучшее место, это, кстати, не «Сапсан» — а ночной поезд. На выходных я брал билет и приезжал в Питер — так мы некоторое время жили на два города, пока она не переехала. ― Чем вы занимались в «Яндексе»? ― Я занимался поиском, у «Яндекса» был огромный проект по переводу с FreeBSD на Linux. Я почти всегда занимался инфраструктурой — это самый низкий уровень между «железом» и запущенной программой. Поиск — это множество программ, все они работают в сцепке. И ваш запрос идет по этой цепи и в итоге уходит в какую-то базу данных, там ищет необходимый ответ. Потом он по цепочке идет обратно, ранжирует, форматирует и выдает результат. В итоге я проработал там три года: два года в Москве в офисе и еще год — удаленно, так как мы с женой путешествовали по Юго-Восточной Азии. ― Как вы решились переехать в США, как нашли там работу? ― В США я переехал в 2012 году. На самом деле, решился на все очень просто. Мне кажется, собеседование в «Яндекс» было сложнее, чем в некоторые американские компании. Алгоритм относительно простой, проходить собеседования — это скил, который нужно тренировать, точно так же, как и другие навыки. Особенно учитывая, что все общение происходит на английском. Я поступил так: выбрал около 50 компаний, куда хотел бы устроиться на работу. Потом отсортировал их в порядке увеличения интересности. Например, если ты хочешь попасть в Google, то нужно собеседоваться туда в последнюю очередь. Это нужно для того, чтобы получить опыт собеседований. 25 компаний мне либо не ответили, либо сразу отказали. Еще 25 компаний назначили телефонные собеседования, половину из них я успешно завалил. Еще с частью оставшихся мы не договорились по условиям. В итоге у меня осталось три варианта, из которых я выбрал Linkedin. Это было, кстати, очень забавно — найти работу в Linkedin на самом сервисе. ― Что входило в ваши обязанности там? ― Там я занимался трафиком. Весь компьютерный инжиниринг ― он о данных, их перемещении, обработке и хранении. А все, что поверх — сервисы, приложения и так далее ― оперируют с этими тремя вещами. В Linkedin я концентрировался именно на передаче данных, то есть на том, как доставить запрос пользователя от сетевого оборудования до сервера, который запущен глубоко в американском дата-центре. ― С какими сложностями вы столкнулись при переезде? Трудно было адаптироваться? ― По сравнению с переездом в Москву переезд в Америку был гораздо проще, так как там есть компания, которая помогает тебе со всеми бытовыми моментами. Ту же машину сложно купить, если у тебя есть 500 тыс. руб. и надо найти хорошее авто в России. А когда в Америке у тебя беспроцентный кредит от компании или от банка и зарплата айтишника в Кремниевой долине, то и машину, и жилье найти нетрудно. ― А какие зарплаты у программистов в Кремниевой долине? ― Они очень сильно варьируются. Думаю, если тебе уже предложили работу и переезд, то минимальная зарплата составляет около $100 тыс. в год и выше. ― Почему вы решили уйти из LinkedIn в Dropbox? ― У меня есть такой принцип: вне зависимости от моего счастья на работе, раз в год я хожу на собеседования в другие компании. Делаю это для того, чтобы понять, какие специалисты нужны индустрии, куда они развиваются, как устроены собеседования. Вакансию в Dropbox я, опять же, нашел на LinkedIn и перешел туда. Компания искала человека, который будет заниматься трафиком. Это было интересно, так как у Dropbox он огромный. Мы, конечно, не можем бороться с Google или Facebook по количеству данных, но все равно у нас их безумное количество, эксабайты данных, петабайты метаданных к этим данным… На тот момент команда была очень маленькая, всего около 500 инженеров, включая продуктовых, а в инфраструктуре работало всего человек 60. ― Какими, на ваш взгляд, гибкими навыками должен обладать специалист, который хочет успешно работать в Кремниевой долине? ― На протяжении всего пути будут встречаться проблемы, главное — уметь их переживать. Мне очень сильно помогло, что все школьные годы мне твердили, какой я плохой ученик и ничего у меня в жизни не удастся. Я не отступаю, когда мне отказывают. Когда отсылаешь пятьдесят резюме, и половина компаний тебе или отказывает, или не отвечает, это очень демотивирует. Поэтому умение не отступать — один из самых важных навыков. Второй навык — уметь разбивать одну большую проблему на маленькие и систематически их решать. И третий — найти все эти маленькие проблемы. Когда мы нанимаем людей в Dropbox, то смотрим, может ли человек самостоятельно разобраться с задачей. Если да, то это самый лучший специалист, которого можно найти. Важно умение самостоятельно разбираться в задаче. ― В Кремниевой долине работает довольно много российских IT-специалистов, они востребованы, их активно хантят. Что, по вашему мнению, делает их конкурентоспособными? ― Их действительно много. По этой причине, кстати, и ассимиляция у меня получилась так себе. Дело в том, что я русский, моя жена тоже, и коллеги, преимущественно, русскоговорящие: из России и стран бывшего СНГ. В один момент мы наняли человек 20-25 из «Яндекса» и других российских компаний. Были времена, когда мы могли даже на встречах по-русски говорить. Но это не совсем правильно, поскольку у людей примерно один тип мышления, плюс-минус одна инженерная база. Поэтому лучше разбавлять коллектив сотрудниками разного пола, расы и бэкграунда. Что касается вопроса о том, что делает российских специалистов конкурентоспособными… Мне сложно на него ответить. Дело в том, что современных выпускников я практически не знаю. Мы нанимали в основном людей, которых знаем, с кем когда-то работали. Поэтому у меня в этом плане небольшая пропасть в последние десять лет. Если говорить про предыдущее поколение, то это в основном самоучки, в университете их не учили, поскольку те специальности, на которых они работают, тогда там еще не существовали. Например, в мои годы ни системное администрирование, ни DevOps/SRE не преподавались. Я уже не говорю про специализации вроде трафика, это очень узкие сферы, тут нет смысла создавать университетскую программу, так как она устареет уже к концу года. Специфика людей, которых мы нанимали из России, заключалась в том, что в родной стране им на тот момент не платили конкурентную зарплату. А нам выгодно было нанимать высококвалифицированных специалистов. Но у русских айтишников очень специфический набор знаний, все они были самоучками. Это, с одной стороны, хорошо, поскольку человек мог глубоко разобраться в проблеме. А с другой ― были «дыры» в знаниях, так как отсутствовало систематическое обучение. В целом у российских инженеров есть свои бонусы: прежде всего, хорошая самообучаемость, они отлично разбираются в низких слоях «железа» и операционных системах. Кроме того, в России высокий процент людей с высшим образованием — в Америке такого нет. ― Чем, с вашей точки зрения, корпоративная культура западных компаний, например, тех же Dropbox или LinkedIn, отличается от культуры в российских? ― Мне сложно об этом говорить, так как тот же «Яндекс», который я видел десять лет назад, сейчас сильно изменился. Он пережил многое, например, там устранили проблемы с зарплатой. Помню, была проблема еще с тем, что в России не было понятного карьерного роста, системы уровней, которая есть практически в любой американской компании. В Америке ты можешь прийти к своему менеджеру и попросить показать свою «вилку» зарплат, а также узнать, где ты находишься относительно своего уровня. И менеджер ответит тебе, а также расскажет, какие компетенции надо улучшить, чтобы зарплата выросла, и как получить различные бонусы. Кроме того, в «Яндексе», когда я там работал, было очень мало рабочих встреч, на которых инженеры встречались бы с коллегами. Зачастую все такие встречи были неформальными. А в LinkedIn и Dropbox, напротив, было очень много формальной коммуникации. Тут важно соблюдать баланс — чтобы были и те, и другие формы взаимодействия, чтобы у разных отделов было понимание, кто и чем занимается в компании. Большая проблема специалистов, приезжающих из России, — это софт-скилы. Обычно российские специалисты хорошо проходят все технические собеседования. Но когда доходит черед до вопросов о том, как бы они общались с клиентами, начинаются проблемы. Да, они технически «отжигают» на своем проекте, но менеджерская часть полностью отсутствует. Когда я десять лет назад приехал в США, это очень бросалось в глаза. ― Как вы считаете, как университет и выпускники могут быть полезны друг другу в дальнейшем? Насколько важно, чтобы выпускники оставались на связи с вузом? ― В Америке постоянно стараются нанимать выпускников, здесь есть много университетских программ. Например, студент может летом прийти на трехмесячную практику в компанию. В США этот процесс поставлен на поток. Одному только Google нужны тысячи стажеров каждое лето. Computer Science в Америке не выпускает такого количества людей, поэтому компании в штатах реально борются за стажеров между собой. Студент даже может выбирать порой, куда ему пойти: в Google, Apple, Microsoft или к нам. ― Что бы вы могли посоветовать тем, кто только начинает строить карьеру? ― Я бы советовал качать софт-скилы, на них работодатели будут очень внимательно смотреть. Кроме того, не стоит сдаваться, получая отказы, и не бояться их. Пробуйте много разного в своей сфере, чтобы найти то, что вам интересно. Скорее всего, вы не будете работать именно по своей специальности, а станете заниматься чем-то смежным. Так что пробовать как можно больше всего — это полезно.