Собеседование в Яндексе
Посмотрите ролик о том, как устроен процесс интервью в Яндексе и прочитайте FAQ для кандидатов-разработчиков.
Как попасть на собеседование
Все актуальные вакансии можно всегда найти в разделе «Вакансии». Вы можете откликнуться на любую из них, если считаете, что ваш опыт соответствует требованиям для выполнения перечисленных задач.
В течение 5 дней после отклика с вами свяжется рекрутер, чтобы пригласить на первый этап интервью, или объяснит, почему сейчас мы не можем рассмотреть вас на данную вакансию.
Советы для кандидатов
Советы для разработчика
Программирование. Вы должны свободно владеть хотя бы одним языком программирования. Чаще всего разработчики Яндекса имеют дело с C++, Java и Python, но кандидат может попробовать пройти собеседование и не зная ни одного из них. Главное — быть хорошим программистом и хотеть учиться новому. Ошибок в вашем коде быть не должно, лучше написать неэлегантный код, но без ошибок, чем наоборот. Имейте в виду, что задачи, которые вам предложат, потребуют знания не только самого языка, но и его стандартных библиотек.
Алгоритмы. Мы рассчитываем на то, что вы знакомы со стандартными алгоритмами, включая разные методы сортировки и обхода графов. Нужно уметь давать оценку сложности алгоритма в нотации big O. Типичная задача на собеседовании — составить алгоритм, доказать его корректность, предложить пути оптимизации. Подготовиться вам поможет система Яндекс.Контест, где есть задачи, аналогичные тем, что мы используем на собеседованиях, а также видеоролики с нашими рекомендациями.
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 1
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 2Структуры данных. Вы должны быть знакомы с внутренним устройством стандартных структур данных и знать вычислительную сложность основных операций над ними. На собеседовании вам точно пригодится знание хеш-таблиц, деревьев поиска, очередей с приоритетом. Во время подготовки стоит повторить способы представления графов в памяти и менее распространённые структуры данных, такие как фильтры Блума, префиксные деревья, k-d деревья.
Многопоточность. Без многопоточности невозможно представить себе ни один бекенд-сервис Яндекса, поэтому знания в этой области особенно важны. Мы рассчитываем, что вы знакомы с основными примитивами синхронизации, с моделью работы памяти современных архитектур и lock-free-операциями, умеете справляться с типичными проблемами, возникающими в многопоточном контексте.
Математика. На собеседовании может быть нужно решить стандартные задачи из области дискретной математики и теории вероятностей — например, на генерацию всех перестановок или выбор k случайных элементов из n.
Архитектура. Если у вас достаточно опыта, вам могут предложить спроектировать сложную систему. Потребуется сформулировать требования к системе, оценить необходимые мощности, спроектировать высокоуровневую архитектуру и, возможно, детально описать один из компонентов. Также будут интересны ваши мысли о таких инженерно-проектных аспектах, как планирование и оценка длительности воплощения, метрики, разбиение на стадии и контрольные точки, и план тестирования.
Полезные книги и ресурсы
C++
С. Майерс, Эффективное использование C++.
С. Майерс, Эффективное использование STL.
Б. Страуструп, Язык C++.
С. Майерс, Эффективный и современныи С++.
Г. Саттер, Новые сложные задачи на С++.
Г. Саттер, Стандарты программирования на С++.
Python 3.7.4 documentation
Mark Lutz, Learning Python, 5th Edition
Java
Bruce Eckel, Thinking in Java
Brian Goetz, Java Concurrency in Practice
К. Сьерра, Б. Бэйтс "Изучаем Java"
Герберт Шилдт, "Java 8. Полное руководство"
Джеймс Гослинг, Билл Джой "Язык программирования Java SE 8. Подробное описание"
Роберт Лафоре "Структуры данных и алгоритмы Java"
Программирование
М. Фаулер, Рефакторинг. Улучшение существующего кода.
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования.
Э. Таненбаум, Современные операционные системы.
Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship.
Gayle Laakmann, McDowell, Cracking the Coding Interview: 189 Programming Questions and Solutions
Э. Хант, Д. Томас, Программист-прагматик. Путь от подмастерья к мастеру.
Алгоритмы
https://www.interviewbit.com/courses/programming/
https://habr.com/ru/post/196560/
https://habr.com/ru/post/156361/
https://m.habr.com/ru/company/yandex/blog/337690/
https://m.habr.com/ru/company/yandex/blog/340784/
http://www.algolist.net
http://e-maxx.ru/algo/
Советы для аналитика
Теория вероятностей и статистика. Аналитику необходимо хорошо понимать основные понятия теории вероятностей (случайная величина, распределение), знать критерии проверки статистических гипотез, уметь оценивать доверительные интервалы. Будьте готовы к тому, что на собеседовании нужно будет использовать эти знания для принятия решений.
Веб-аналитика. Важно разбираться в том, как устроены веб-сайты с технической точки зрения, а также в способах проверки продуктовых гипотез. Внедряя что-то новое, мы опираемся на данные А/Б-тестов и других способов измерений, ведь улучшить можно только то, что можно измерить. Освежите в памяти основные продуктовые метрики сайтов и приложений, а также способы монетизации веб-контента. На собеседовании мы наверняка попросим придумать метрику под конкретный кейс.
Машинное обучение. В некоторых командах Яндекса аналитики используют машинное обучение. Поэтому нужно знать принципы машинного обучения и основные подходы к нему, уметь формулировать задачу, создавать и отбирать факторы, формировать обучающие и тестовые выборки, оценивать качество обученных классификаторов и по возможности их улучшать.
Программирование. Вы должны свободно владеть хотя бы одним языком программирования. Чаще всего аналитики Яндекса имеют дело с Python. На собеседовании мы предлагаем задачи, которые требуют знания не только самого языка, но и его стандартных библиотек. Потренироваться в решении таких задач можно на платформе Яндекс.Контест.
Рекомендуем также посмотреть видеоролики:
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 1
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 2
Обработка данных. Наши аналитики работают с большими объёмами данных. Мы используем полный спектр систем хранения и обработки данных — от классических СУБД до распределённых хранилищ — и соответствующие инструменты, от SQL до MapReduce. Ваши познания и опыт в этих областях очень нам пригодятся.
Полезные книги и ресурсы
Книги
- «Статистика и котики», Владимир Савельев
- «Теория вероятностей и математическая статистика», Л. Н. Фадеева, А. В. Лебедев
- «Наглядная математическая статистика», М. Б. Лагутин
Онлайн-ресурсы
Видеолекции курса «Алгоритмы и структуры данных»
Яндекс.Контест
TopCoder
HackerRank
LeetCode
CollabEdit
Советы для разработчика интерфейсов
Программирование. Вы должны свободно владеть хотя бы одним языком программирования, однако основной язык разработки фронтенда в Яндексе — JavaScript. Знание его основ необходимо, чтобы успешно пройти собеседование. Кандидат также должен уметь применять его хотя бы в одном окружении – на клиенте (в браузере, приложениях, расширениях и т.п.) или на сервере.
При написании кода на собеседовании нужно придерживаться правил: код должен быть без ошибок, читаемым и легко восприниматься.
Алгоритмы и структуры данных. Мы рассчитываем на то, что вы знакомы со стандартными алгоритмами, включая разные методы сортировки и обхода графов. Нужно уметь давать оценку сложности и расходу памяти алгоритма в нотации big O. Вы должны быть знакомы с внутренним устройством стандартных структур данных JavaScript и знать вычислительную сложность основных операций над ними. Кроме того, нужно разбираться с особенностями асинхронного программирования. Дополнительным плюсом будет умение составлять бенчмарки и оценивать реальную производительность программных решений в зависимости от среды исполнения. Подготовиться вам поможет система Яндекс.Контест, где есть задачи, аналогичные тем, что мы используем на собеседованиях, а также видеоролики с нашими рекомендациями.
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 1
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 2Библиотеки и фреймворки. На собеседовании от вас не требуется знания конкретных библиотек или фреймворков, нужно уметь решать задачи без них. При этом умение использовать готовые и популярные решения, обосновывая свой выбор, — необходимый навык в дальнейшей работе.
Фронтенд. У разработчиков интерфейсов широкий круг задач, поэтому необходимы знания в самых разных областях: JavaScript, HTML и CSS, протокол HTTP, механизмы работы браузера, способы и форматы передачи данных между клиентом и сервером, профилирование кода и оптимизации загрузки страниц, понимание механизмов обеспечения безопасности веб-приложений. Для подготовки и систематизации своих знаний можно использовать материалы, ссылки на которые приведены в конце страницы.
Архитектура. Вы должны уметь использовать хорошие практики проектирования в рамках создания или изменения текущих компонентов. Будет большим плюсом понимание таких концепций, как SOLID, KISS, DRY и т.п., а также знание их сильных и слабых сторон. Необходимо понимать, как создавать удобные программные интерфейсы и писать код, который легко использовать заново, изменять и тестировать.
Если у вас достаточно опыта, вам могут предложить спроектировать сложную систему. Потребуется сформулировать требования к системе, оценить необходимые мощности, спроектировать высокоуровневую архитектуру и, возможно, детально описать один из компонентов. Также будут интересны ваши мысли о таких инженерно-проектных аспектах, как планирование и оценка длительности воплощения, метрики, разбиение на стадии и контрольные точки, план тестирования.
Полезные книги и ресурсы
Книги
- Серия You Don't Know JS, Kyle Simpson
- Speaking JavaScript, Axel Rauschmayer
- «Секреты JavaScript ниндзя», Джон Резиг
- JavaScript Enlightenment, Cody Lindley
- «Чистый код: создание, анализ и рефакторинг», Роберт Мартин
- «Секреты CSS», Леа Веру
- Introduction to Algorithms, Thomas H. Cormen
- Cracking the Coding Interview, Gayle Laakmann McDowell
Программирование
М. Фаулер, Рефакторинг. Улучшение существующего кода.
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования.
Э. Таненбаум, Современные операционные системы.
Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship.
Gayle Laakmann, McDowell, Cracking the Coding Interview: 189 Programming Questions and Solutions
Э. Хант, Д. Томас, Программист-прагматик. Путь от подмастерья к мастеру.
Алгоритмы
https://www.interviewbit.com/courses/programming/
https://habr.com/ru/post/196560/
https://habr.com/ru/post/156361/
https://m.habr.com/ru/company/yandex/blog/337690/
https://m.habr.com/ru/company/yandex/blog/340784/
http://www.algolist.net
http://e-maxx.ru/algo/
JavaScript
JavaScript-Garden
Разработка интерфейсов
ШРИ
O'Reilly, You Don't Know JS. Scope and Closures.pdf
Axel Rauschmayer, Speaking JavaScript
Джон Резиг, «Секреты JavaScript ниндзя»
Леа Веру, «Секреты CSS»
Онлайн-материалы
http://shamansir.github.io/JavaScript-Garden/
https://academy.yandex.ru/events/frontend/
ШРИ
Онлайн-задачи
https://www.codewars.com/
https://www.hackerrank.com
Яндекс.Контест
Советы для мобильного разработчика
Программирование. iOS-разработчикам нужно хорошо знать Swift/Objective-C и системные фреймворки, а разработчикам на Android — Java/Kotlin и Android SDK. И тем и другим не обойтись без многопоточного программирования. И чем глубже ваши знания, тем лучше — базовых может и не хватить. Важно понимать, как язык работает «изнутри».
На собеседовании мы предложим практические задачи на многопоточность или попросим реализовать не очень сложный алгоритм. Важно уметь объяснить, что происходит при выполнении кода. Ошибок в нём быть не должно: лучше написать неэлегантный код, но без ошибок, чем наоборот.
Будьте готовы писать код на ноутбуке в онлайн-редакторе (без компилятора и синтаксических подсказок), а также на доске или просто на листочке.
Алгоритмы. Мы рассчитываем на то, что вы знакомы со стандартными алгоритмами, включая разные методы сортировки. Нужно уметь давать оценку сложности алгоритма в нотации big O. Типичная задача на собеседовании — составить алгоритм, доказать его корректность, предложить пути оптимизации. Подготовиться вам поможет система Яндекс.Контест, где есть задачи, аналогичные тем, что мы используем на собеседованиях, а также видеоролики с нашими рекомендациями.
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 1
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 2Структуры данных. Вы должны быть знакомы с внутренним устройством стандартных структур данных и знать вычислительную сложность основных операций над ними. На собеседовании вам точно пригодится знание хеш-таблиц.
Платформы
Для IOS необходимо:
- хорошо разбираться в стандартной системе сборки iOS;
- уверенно знать UIKit, понимать организацию UI и уметь корректно его организовывать;
- понимать жизненные циклы приложения и отдельных компонентов — UIApplicationDelegate и UIViewController;
- разбираться в многопоточности;
- понимать, как устроена работа с памятью, и корректно осуществлять её в своём коде;
- знать основные паттерны разработки, понимать их суть и уметь выбирать то или иное решение разумно.
Для Android необходимо:
- хорошо разбираться в стандартной системе сборки Android;
- уметь эффективно реализовывать сложный GUI, разбираясь в устройстве стандартных UI-компонентов Android;
- обладать знанием жизненных циклов как приложений, так и отдельных компонентов (Activity и Services);
- понимать, как работает многопоточность;
- знать, как устроена работа с памятью и, как следствие, корректно её осуществлять в своём коде;
- разбираться в основных паттернах разработки, уметь выбирать оптимальное решение.
Архитектура. В этом разделе необходимо знать ООП, паттерны проектирования и архитектурные принципы. Нужно уметь рассказать на примере своих проектов, какие архитектурные решения вы принимали и почему. В качестве практического задания мы предложим продумать архитектуру приложения или подсистемы: нужно будет нарисовать схему либо написать код для проектирования подсистем.
Полезные книги и ресурсы
Книги
- Р. Мартин. Чистый код. Создание, анализ и рефакторинг.
- Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес. Приемы ООП. Паттерны проектирования.
- Базовые справочники Apple: управление памятью в ObjC, базовые классы, работа с многопоточностью.
- Erik Hellman. Android Programming: Pushing the Limits.
- EGayle Laakmann McDowell. Cracking the Coding Interview.
Программирование
М. Фаулер, Рефакторинг. Улучшение существующего кода.
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования.
Э. Таненбаум, Современные операционные системы.
Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship.
Gayle Laakmann, McDowell, Cracking the Coding Interview: 189 Programming Questions and Solutions
Э. Хант, Д. Томас, Программист-прагматик. Путь от подмастерья к мастеру.
Алгоритмы
https://www.interviewbit.com/courses/programming/
https://habr.com/ru/post/196560/
https://habr.com/ru/post/156361/
https://m.habr.com/ru/company/yandex/blog/337690/
https://m.habr.com/ru/company/yandex/blog/340784/
http://www.algolist.net
http://e-maxx.ru/algo/
Android
Bruce Eckel, Thinking in Java
Brian Goetz, Java Concurrency in Practice
Dmitry Jemerov, Svetlana Isakova, Kotlin in Action
Developing Android Apps
https://www.youtube.com/user/androiddevelopers
https://androidweekly.net
https://fragmentedpodcast.com
https://androiddev.apptractor.ru
https://kotlinlang.org
Программирование на Kotlin
Java. Базовый курс
Android Architecture
Design Patterns
The Busy Coder's Guide to Android Development
iOS
https://www.objc.io
Apple Developer Documentation
Мэт Геллоуэй, Сила Objective-C 2.0
https://www.mikeash.com/pyblog/
Advanced Swift
Онлайн-ресурсы
Видеолекции курса «Алгоритмы и структуры данных»
Яндекс.Контест
TopCoder
HackerRank
LeetCode
CollabEdit
Советы для ручного тестировщика
Процессы. Чтобы успешно пройти собеседование в Яндекс, не обязательно быть опытным тестировщиком. Главное — способность и желание разбираться в том, как это должно работать и как работает сейчас. Мы рассчитываем, что вы знаете различие между QC и QA, понимаете, в какой момент лучше приступать к тестированию и на что влияет тестировщик. Не лишними будут знания о процессе разработки программного обеспечения и существующих методологиях. Кроме того, если вы обладаете достаточным опытом, на собеседовании вам могут предложить самостоятельно спланировать процесс тестирования системы.
Теория. На собеседовании пригодится хотя бы теоретическое знание основ тестирования и готовность применить их на практике. Без этого невозможно представить себе процесс тестирования, поэтому знания в этой области особенно важны. Мы рассчитываем, что вы знакомы с основными видами и уровнями тестирования и техниками тест-дизайна, понимаете, в чем различие тестирования «белого ящика» и «черного ящика», умеете локализовать проблемы и знаете, что такое хороший багрепорт.
Документация. Мы рассчитываем, что вы знакомы со стандартными видами тестовой документации и сможете рассказать о ее необходимости, целях, плюсах и минусах. Нужно легко ориентироваться в понятиях test suite, test case, test plan и т. п.
Инструменты. Вы должны быть знакомы с многообразием инструментальных помощников тестировщика, от багтрекеров до снифферов. На собеседовании вам точно пригодится понимание того, как устроены приложения — веб, мобильные или десктоп. Во время подготовки стоит повторить сетевые протоколы и коды ответов. Еще от вас потребуется общее представление об автоматизации тестирования: один из типичных вопросов на собеседовании касается необходимости и целесообразности автоматизации тестирования того или иного продукта.
Логика. хороший эстетический вкус и критическое мышление — неотъемлемые качества хорошего тестировщика. На собеседовании может понадобиться решить нестандартные задачи — посмотреть на обычные вещи под необычным углом. Не менее важны терпение, усидчивость и умение работать в команде.
Полезные книги и ресурсы
Книги
Сэм Кэнер: Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений,
Роман Савин: Тестирование Дот Ком, или Пособие по жестокому обращению с багами в интернет-стартапах
Онлайн-ресурсы
http://software-testing.ru
Советы для менеджеров
Управление проектами. Систематизируйте свой опыт управления проектами: как планировать и контролировать работу, решать проблемы и так далее. Вам пригодится знание основных методик управления проектами, их плюсов и минусов. Например, важно понимать, в каких случаях лучше использовать для организации разработки Kanban, а в каких — Scrum.
Управление продуктами. Поупражняйтесь в решении продуктовых задач: возьмите любой продукт Яндекса и подумайте, как понять, чего в нём не хватает, что нужно внедрять в первую очередь и так далее. На собеседовании вам могут предложить составить продуктовые требования к какому-либо сервису — например, к версии Яндекс.Такси для пожилых людей. Знание технологий. Нам важно, чтобы менеджер разбирался в устройстве интернета: базовых протоколах, основных технологиях и стандартах. Перед собеседованием освежите в памяти, как работать с данными, кодом, утилитами командной строки. Пример задания из этой области — посчитать количество уникальных слов в файле размером больше 1ТБ.
Для технических менеджеров
Управление людьми. Одна из сторон деятельности технического менеджера проектов — это управление людьми. Ваш опыт в мотивации, убеждении, решении конфликтных ситуаций будет очень полезен на собеседовании.
Программирование. Крайне желательно владеть хотя бы одним языком программирования. Чаще всего технические менеджеры проектов имеют дело со скриптовыми языками.
Unix/Linux. Необходимо знать соответствующие операционные системы на уровне продвинутого пользователя. Владение языками командной оболочки и основными консольными утилитами может пригодиться вам на собеседовании.
Обработка данных. Технический менеджер проектов, отвечающий за определенный сервис, часто сталкивается с необходимостью анализировать большие объемы данных, которые генерирует вверенная система. Мы используем полный спектр систем хранения и обработки — от классических СУБД до распределенных хранилищ — и пользуемся соответствующими инструментами, от SQL до MapReduce. Ваши познания и опыт в этих областях будут очень полезны и интересны для нас.
Математика. На собеседовании может понадобиться решить стандартные задачи из области теории вероятностей, оптимизационные задачи и задачи на логику.
Распределенные системы хранения и обработки данных. Менеджеру проектов важно знать основные принципы и подходы в построении распределенных систем. Ваше знакомство с существующими в мире распределенными системами будет полезно на собеседовании. Кроме того, вас могут попросить спроектировать одну из таких систем, выстроить связь основных компонентов, описать их назначение и проанализировать узкие места.
Полезные книги и ресурсы
Онлайн-ресурсы
1. Видеокурс Школы менеджеров Яндекса
2. Видеокурс «Управление продуктом»
3. Дополнительная статья о подготовке к собеседованию на менеджера продукта
4. Блог Олега Якубенкова
5. Статьи и подкасты Ивана Замесина
6. Лекции и курс Ильи Красинского, Ники Атаманюк и Натальи Эйсмант
7. Подборка полезных ресурсов на Хабре
8. Подборка материалов о UX Research
Управление проектом
- Дэвид Майстер, Патрик Маккенна «Первый среди равных. Как руководить группой профессионалов»
- Пол Вилкинсон, Брайан Джонсон «Управление ITSM-проектами от лукавого. Сборник вредных советов»
- Том Демарко, Тимоти Листер «Человеческий фактор. Успешные проекты и команды»
- Джефф Сазерленд «Scrum. Революционный метод управления проектами»
- Том Демарко «Deadline. Роман об управлении проектами»
- Скотт Беркун «Искусство управления IT-проектами»
- Руководство к своду знаний по управлению проектами (Руководство PMBOK®)
- Том Демарко, Тимоти Листер «Вальсируя с Медведями. Управление рисками в проектах по разработке программного обеспечения»
- Eric Brechner «Agile Project Management with Kanban»
- «Стартап-гайд. Как начать и… не закрыть свой интернет-бизнес»
- Питер Тиль, при участии Блейка Мастерса «От нуля к единице. Как создать стартап, который изменит будущее»
- Роб Фитцпатрик «Спроси маму. Как общаться с клиентами и подтвердить правоту своей бизнес-идеи, если все кругом врут?»
- Intercom on product management https://www.intercom.com/resources/books/intercom-product-management
- Aladdin Happy «TOP 101 Growth Hacks»
- Нир Эяль, Райан Хувер «Hooked. На крючке. Как создавать продукты, формирующие привычки»
- Марти Каган «Inspired. Вдохновленные. Все, что нужно знать продакт-менеджеру»
- Эрик Рис «Бизнес с нуля. Метод Lean Startup для быстрого тестирования идей и выбора бизнес-модели»
- Алан Купер «Психбольница в руках пациентов. Алан Купер об интерфейсах»
Советы для разработчика машинного обучения
Программирование. Вы должны свободно владеть хотя бы одним языком программирования. Чаще всего разработчики машинного обучения Яндекса имеют дело с Python и C++, но кандидат может попробовать пройти собеседование и не зная ни одного из них. Главное — быть хорошим программистом и хотеть учиться новому. Код должен быть без ошибок, читаемым и легко восприниматься. Лучше написать неэлегантный код, но без ошибок, чем наоборот. Имейте в виду, что задачи, которые вам предложат, потребуют знания не только самого языка, но и его стандартных библиотек.
Алгоритмы. Мы рассчитываем на то, что вы знакомы со стандартными алгоритмами, включая разные методы сортировки и обхода графов. Нужно уметь давать оценку сложности алгоритма в нотации O большое. Типичная задача на собеседовании — составить алгоритм, доказать его корректность и предложить пути оптимизации. Подготовиться вам поможет система Яндекс.Контест, где есть задачи, аналогичные тем, что мы используем на собеседованиях, а также видеоролики с нашими рекомендациями.
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 1
Как решать алгоритмические секции: помощь разработчикам, собеседующимся в Яндекс. Часть 2Структуры данных. Вы должны быть знакомы с внутренним устройством стандартных структур данных и знать вычислительную сложность основных операций над ними. На собеседовании вам точно пригодится знание хеш-таблиц, деревьев поиска и очередей с приоритетом. Во время подготовки стоит повторить способы представления графов в памяти и менее распространенные структуры данных, такие как фильтры Блума, префиксные деревья и k-d деревья.
Машинное обучение. В ML-секции мы проверяем знания в области классических моделей машинного обучения, методов оптимизации (первого и второго порядка), методик офлайн- и онлайн-оценки качества моделей, а также опыт решения практических задач с использованием алгоритмов машинного обучения. В выборе практической задачи для обсуждения мы исходим из вашего релевантного опыта, так как хотим, чтобы вы наилучшим образом продемонстрировали свои знания и умения.
Как подготовиться к секции по машинному обучению.
ML-архитектура. В этой секции мы проверяем ваш опыт и знания в проектировании продакшн-систем с использованием алгоритмов машинного обучения. Мы ждем от вас понимания подходов к сбору данных для обучения моделей и проблем обучения современных моделей на large-scale данных. Также мы поговорим с вами о выкатке моделей в условиях высокой нагрузки, ограниченных вычислительных ресурсах и памяти, а также строгих требований, касающихся времени ответа сервиса. Дополнительным пунктом может стать необходимость спроектировать стабильные методы обновления моделей.
Полезные книги и ресурсы
Книги
C. M. Bishop, Neural Networks for Pattern Recognition,
David MacKay, Information Theory, Pattern Recognition and Neural Networks,
Trevor Hastie, Robert Tibshirani, Jerome Friedman, The Elements of Statistical Learning: Data Mining, Inference, and Prediction,
К. Воронцов, курс лекций про машинное обучение
Онлайн-ресурсы
Вводный курс «Машинное обучение и анализ данных»,
Продвинутая специализация «Advanced machine learning»
Онлайн-задачи
Задачи на алгоритмы
Советы для сетевых инженеров
Протоколы маршрутизации. Будьте готовы обсудить современные протоколы маршрутизации, технологии коммутации по меткам и защиты от петель. Главное здесь не знание таймеров и констант, а понимание принципов работы, областей применения и недостатков каждого протокола. Полезно знать, из-за чего они были построены так или иначе, и ориентироваться в современных вариантах протоколов маршрутизации. Иногда мы используем специфические протоколы, но классический набор выглядит так: BGP, OSPF, xSTP, MPLS-стек и маршрутизация в топологиях типа Fat Trees.
Архитектура сетей и сетевых устройств. Если у вас достаточно опыта, вам могут предложить спроектировать коммутационную фабрику современного дата-центра или сеть оператора связи. Мы можем попросить вас рассказать о текущей сети, её архитектурных недостатках и достоинствах. Нам важно, чтобы вы понимали принципы балансировки нагрузки и распределения трафика на всех уровнях — от приложения до сети.
Для решения возникающих в сети проблем нужно разбираться в архитектуре сетевых устройств. Безусловно, необходимо знать аппаратную базу современных маршрутизаторов и коммутаторов. Отправной точкой может послужить статья о жизни пакета внутри сетевого устройства. Дополнением — личный опыт и знание вендорских подходов и реализаций, чипов и других компонент, методов реализации QoS и буферизации.
Инструменты автоматизации. Мы стараемся полностью уйти от ручных операций с сетью, поэтому проверяем знания в области автоматизации и программирования. Джентльменский набор: инвентарные системы, системы мониторинга, средства версионирования, механизмы доставки конфигурации на устройство, механизмы инициализации устройства (ZTP) и умение связать всё это в единый CI/CD пайплайн. Из языков программирования подойдёт Python.
Архитектура сервиса. Вполне вероятно, что вас попросят спроектировать систему. Спектр задач сетевого инженера широк, поэтому она может быть любой: коммутатор или дата-центр, сервис управления потоками трафика или мониторинга состояния сети, система управления конфигурацией устройств или обработкой инцидентов.
Здесь могут пригодиться любые знания и навыки — от ТРИЗ до способов подключения консоли к коммутатору. Но вам не обойтись без понимания основ инженерного проектирования и теории систем, навыков декомпозиции задач и планирования процессов, знания принципов построения современных сетей и технологий балансировки нагрузки.
Не беспокойтесь — не обязательно обладать экспертными знаниями во всех областях. Задачи по архитектуре нужны для того, чтобы вы смогли показать себя именно в той области, которая вам наиболее близка и интересна.
Полезные материалы
Сети
- Введение в сетевые технологии, часть 1
- Введение в сетевые технологии, часть 2
- Компьютерные сети, часть 1
- Компьютерные сети, часть 2
- Сети и протоколы, часть 1
- Сети и протоколы, часть 2
- Сети, протоколы и сетевое оборудование
- IpV6
- TCP/IP Illustrated, Volume 1: The Protocols (2nd Edition) by Kevin Fall and W. Richard Stevens
- TCP/IP Illustrated: The Implementation, Vo* 2 by Gary R. Wright and W. Richard Stevens
- TCP/IP Illustrated, Vo* 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols by W. Richard Stevens
- The Practice of System and Network Administration, Second Edition by Thomas A. Limoncelli and Christina J. Hogan
- Practical network automation by Abhishek Ratan
- Anatomy of Core Network Elements by Josef Ungerman
- Hardware-Defined Networking Kindle Edition by Brian Petersen
- MPLS in the SDN Era: Interoperable Scenarios to Make Networks Scale to New Services 1st Edition by Antonio Sanchez Monge, Krzysztof Grzegorz Szarkowicz
- The Datacenter as a Computer: Designing Warehouse-Scale Machines, Third Edition
- Synthesis Lectures on Computer Architecture
- QOS-Enabled Networks: Tools and Foundations (Wiley Series on Communications
- Networking & Distributed Systems) 2nd Edition by Miguel Barreiros, Peter Lundqvist
- Балансировка нагрузки
- BGP Design and Implementation by Randy Zhang
Linux
- Linux Understanding the Linux Kernel, Third Edition by Daniel P. Bovet and Marco Cesati / Ядро Linux, Д. Бовет, М. Чезати
- UNIX and Linux System Administration Handbook (4th Edition) by Evi Nemeth / Unix и Linux
- Руководство системного администратора, Эви Немет
- The UNIX Programming Environment by Brian W. Kernighan and Rob Pike
- The Practice of Cloud System Administration: Designing and Operating Large Distributed Systems, Volume 2 by Thomas A. Limoncelli and Strata R. Chalup
- How Linux Works, 2nd Edition: What Every Superuser Should Know Second Edition by Brian Ward
- Автоматизация программируемых сетей, Мэтт Осуолт, Скотт Лоу, Джейсон Эделман
- Python для сетевых инженеров
- Blackbox-мониторинг в Clos-сетях
- Как масштабировать дата-центры
- Introduction to modern network load balancing and proxying
Советы инженеру Application Security
Служба информационной безопасности отвечает за все продукты Яндекса: веб-сервисы, мобильные приложения, мультимедиа и IoT-решения.
Поиск уязвимостей. Около 40% своего времени специалист ИБ тратит на поиск уязвимостей в исходных кодах, файлах конфигураций, логике работы приложений. Разработчики сильно превосходят нас по численности, поэтому вам не обойтись без анализаторов исходных кодов и инструментов тестирования на проникновение. Важно также уметь писать векторы эксплуатации самостоятельно — человек не ограничен рамками подстрок и регулярных выражений.Безопасность инфраструктуры и расследование инцидентов. Мобильные и веб-приложения — это только верхушка айсберга, за ними стоят контейнеры, операционные системы, балансировщики нагрузки, сетевые протоколы, прошивки аппаратной части инфраструктуры. Будем рады, если вы уверенно чувствуете себя в этой области. Злоумышленники часто используют вредоносное ПО (malware), и без знания среды функционирования вируса сложно его найти и обезвредить. Мы поговорим и об особенностях протоколов и операционных систем, и о методиках форензики.
Криптография и стеганография. Вопрос доверия решается в интернете с помощью систем цифровой подписи, а шифрование гарантирует конфиденциальность данных. Понимание современных протоколов и основ криптографии нужно и при решении инженерных задач (скажем, при выборе алгоритма для устройств интернета вещей), и при создании архитектуры (например, системы аутентификации), и при тестировании на проникновение («Передайте, пожалуйста, хэш!»). Мы обязательно предложим обсудить эти темы.
Создание и применение компенсационных мер защиты. Основная задача системы безопасности — увеличить стоимость атаки до неприемлемой. А в идеале — сделать атаку невозможной за счёт архитектуры. Системы в Яндексе разные: где-то подойдут широко известные подходы (CSP, AppArmor, TVM), где-то нужно будет придумывать новую технологию, а где-то — проектировать архитектуру с самого начала, учитывая все возможные угрозы. Каждый тип задач встретится на собеседовании.
Программирование. Как ни интересна работа White Hat, всё со временем приедается, начинает казаться тривиальным и обыденным. Дабы не упасть духом и освободить время для покорения новых вершин, каждый специалист в области ИБ должен уметь автоматизировать выполнение рутинных задач, будь то поиск типовых багов или утверждение доступов.
Мы не ждём от вас идеального знания всех способов развёртывания красно-чёрного дерева, но базовые знания алгоритмов нужны. Иначе понимать код разработчиков-олимпиадников будет сложно. А лучший способ проверить чей-то навык — посмотреть на его применение в реальном времени. Так что у вас будет возможность показать себя в деле.
Мы используем в основном языки Go, Python 3 и Java. Знание остальных в любом случае пригодится на аудитах.
Полезные книги и ресурсы
Криптография и стеганография
- Applied Cryptography. Protocols, Algorithms, and Source Code in C. Bruce Schneier
- Cryptography Engineering. Design Principles and Practical Applications. Niels Ferguson, Bruce Schneier, and Tadayoshi Kohno
- RFC-8446: The Transport Layer Security (TLS) Protocol Version 1.3
- Основы криптографии. М.: Гелиос АРВ, Алферов А. П., Зубов А. Ю., Кузьмин А. С., Черемушкин А. В.
Безопасность приложений
- OWASP Foundation — организация, которая классифицирует проблемы безопасности и создаёт методики их поиска и устранения
- Google Project Zero — команда аналитиков безопасности, нанятая Google для поиска 0-day уязвимостей
- The Tangled Web: A Guide to Securing Modern Web Applications. Michal Zalewski
- HackThisSite — площадка для обучения и поиска уязвимостей в веб-приложениях
- hackerone.com/hacker101 — набор видео, статей и практических материалов о том, как начать искать уязвимости в веб-приложениях
- portswigger.net/web-security — бесплатная онлайн-площадка для обучения ИБ от создателей Burp Suite
Инфраструктура и расследование инцидентов
- UNIX and Linux System Administration Handbook (4th Edition) by Evi Nemeth / Unix и Linux. Руководство системного администратора. Эви Немет
- Windows Internals. Алекс Ионеску, Марк Руссинович
- The Art of Memory Forensics: Detecting Malware and Threats in Windows, Linux, and Mac Memory. Michael Hale Ligh
- Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software. Michael Sikorski
- Practical Packet Analysis, 3E: Using Wireshark to Solve Real-World Network Problems. Chris Sanders
- Krebs On Security — истории расследований киберпреступлений
- HackTheBox , VulnHub — здесь можно найти образы уязвимых виртуальных машин
Программирование
- Документация на Python 3
- Mark Lutz, Learning Python, 5th Edition
- Б. Страуструп, Язык C++
- Bruce Eckel, Thinking in Java
- Сайты с базами задач: leetcode.com, codewars.com, hackerrank.com
Разное
- Лекции Школы информационной безопасности Яндекса
- LiveOverflow — YouTube-канал энтузиаста ИБ с отличными разборами уязвимостей и обучающими материалами
Советы инженеру SOC
Яндекс уделяет особое внимание безопасности серверной и сетевой инфраструктуры, а также пользовательского окружения. За это у нас отвечает целая команда SOC (Security Operation Centre). Она занимается такими задачами, как:
- активный и пассивный сбор данных и хранение журналов в централизованном хранилище;
- поиск корреляции между разными событиями, автоматическая постановка задач при обнаружении проблем;
- контроль работоспособности и актуальности алертов;
- расследование инцидентов информационной безопасности;
- взаимодействие с пользователями и администраторами сервисов при расследовании инцидентов;
- ручной анализ журналов, построение гипотез компрометации (threat hunting), проверка гипотез на хранящихся у нас данных.
Безопасность ОС. В этом разделе мы обсудим методы компрометации знакомых вам операционных систем (Windows, Linux или MacOS), методы их защиты, а также сбор событий и индикаторов компрометации.
Безопасность сервисов. По аналогии с предыдущей темой поговорим о том, как скомпрометировать известные вам сервисы, как их мониторить и защищать. Вы можете выбрать любой из сервисов: Microsoft Active Directory, Web Application Service, Databases (SQL, NoSQL).
Безопасность виртуализации и контейнеризации. Обсудим развитие технологий изоляции, их преимущества и недостатки, а также основные методы обхода ограничений.
Безопасность в сетевых технологиях. Знание сетевых технологий — одно из важнейших условий успешной работы в SOC. Мы ожидаем, что вам известны базовые принципы работы основных сетевых протоколов, методы их компрометации и защиты, а именно:
- протоколы и принципы работы сетей;
- принципы адресации, маршрутизация с L2 до L7;
- основы протоколов HTTP, SMTP, DNS, IMAP, SMB, VPN, IPSEC различных версий.
Принципы работы систем безопасности. Обсудим, как работают IDS, IPS, WAF, AV, Sandbox: какие у них области применения, достоинства и недостатки, а также методы обхода.
Программирование. Мы предложим вам типовые для инженера SOC задачи, которые нужно будет выполнить на Bash или Python. Ожидается, что вы выберете правильный язык, который позволит решить задачу за минимальное время и оптимальным способом. К задачам относятся сортировки, поиск по регулярным выражениям.
Тестирование на проникновение. Выберем гипотетическую ситуацию и обсудим, как её может использовать нарушитель. Или поговорим про методы расследования уже случившегося инцидента. Вам потребуются знания в объёме курса OSCP.
Мы не ждём, что вы блестяще знаете все описанные выше технологии. В первую очередь нам нужен человек с пытливым умом, которому интересно создавать что-то новое. Но без базовых знаний в области безопасности вам не обойтись.
Полезные материалы
Безопасность
- Mitre ATT&CK
- Pen-testing Labs
- Расследование инцидентов
- Сборник ссылок от Digital Security
- Обзорная лекция по безопасности
- Сетевые технологии
- Сетевая безопасность
- Безопасность ОС
- Безопасность Unix
- Расследование инцидентов
- Виртуализация и контейнеризация
- Криптография
Операционные системы
- UNIX and Linux System Administration Handbook (4th Edition) by Evi Nemeth / Unix и Linux. Руководство системного администратора, Эви Немет
- Windows Internals Book
Сети
Программирование
- Mark Lutz, Learning Python, 5th Edition
- Bash
Советы инженеру по доступности сервисов
Безопасность ОС. В этом разделе мы обсудим методы компрометации знакомых вам операционных систем (Windows, Linux или MacOS), методы их защиты, а также сбор событий и индикаторов компрометации.
Программирование. Чтобы успешно пройти собеседование в Яндекс, нужно свободно владеть хотя бы одним языком программирования, знать встроенные типы, их различия, изменяемость и стандартные методы, а также применение циклов и условий. Чаще всего дежурные Яндекса имеют дело с языком Python, но можно пройти собеседование и не зная его. Главное — быть хорошим программистом и хотеть учиться новому. Ошибок в вашем коде быть не должно: лучше написать не элегантный, но безошибочный код, чем наоборот. Задачи, которые вам предложат, потребуют знания не только самого языка, но и его стандартных библиотек.
Алгоритмы. Мы рассчитываем на то, что вы знакомы со стандартными алгоритмами, включая последовательный и бинарный поиск. Нужно уметь оценивать сложность алгоритма в нотации big O. Типичная задача на собеседовании — построить алгоритм, доказать его корректность, предложить пути оптимизации. Подготовиться вам поможет система Яндекс.Контест, в которой найдутся задачи, аналогичные тем, что мы предлагаем на собеседованиях, а также видеоролики с нашими рекомендациями.
Структуры данных. Вы должны понимать простые и сложные базовые типы: либо как абстракции числа, строки, символы, байты, файлы, списки, массивы, стеки, множества, map (словари), кортежи, либо их исполнение в языке (желательно в языке Python или C++). Приветствуется знание нестандартных типов данных в языках, например комплексных чисел в языке Python.
Архитектура. Вам пригодится понимание основных принципов построения сервисов. Мы ожидаем, что вы знаете модель OSI, протоколы транспортного уровня и маршрутизации, понимаете архитектуру ОС, мониторинг и принципы его организации. Плюсом будет знание популярных архитектурных шаблонов.
Траблшутинг. Вы должны знать основные утилиты диагностики загруженности и неполадок хоста (дисков, сети, процессора): top, dmesg, ps, ss, ip, iostat, vmstat. Плюсом будет знакомство с atop, iftop, tcpdump, понимание устройства procfs . Мы ожидаем, что вы знакомы с протоколами прикладного уровня (в первую очередь HTTP(S)), используемыми в веб-сервисах. Обязательный навык – работа в консоли, желательно знание bash, умение пользоваться sed и awk.
Полезные книги и ресурсы
Bash
Linux
- UNIX and Linux System Administration Handbook
- Ноа Гифт, Джереми М. Джонс «Python в системном администрировании UNIX и Linux»
- Б. Керниган, Р. Пайк «Unix. Программное окружение»
- К. Негус «Linux Библия пользователя»
- А. Робачевский «Операционная система Unix»
- Архив лекций КИТ
Сети
Программирование
Python
- https://pythontutor.ru/
- Muhammad Yasoob Ullah Khalid «Intermediate Python»
- Swaroop C. H. «A Byte of Python»
- Примеры задач
- «Изучаем Питон» Марка Лутца
Архитектура
Как проходит собеседование
Предварительное собеседование
Первый разговор обычно продолжается около часа. В оговоренное время вам позвонит специалист из Яндекса. Вопросы на собеседовании могут различаться в зависимости от позиции. Разработчику предложим задачи на знание базовых алгоритмов и проверку навыков написания кода. Аналитику — задачи, связанные с аналитикой и математической статистикой. С техническим менеджером обсудим ваш проектный опыт.
Серия очных или дистанционных встреч
Когда вы пройдете предварительное собеседование, вас пригласят на встречи с экспертами Яндекса: очные (в офисе) или дистанционные (Skype/Zoom). Вас ждет от 2 до 5 бесед. Каждая продолжается час. Если вы не сможете поговорить со всеми экспертами в один день — мы подстроимся под вас. Для дистанционных встреч понадобится микрофон и веб-камера.
Знакомство с командами
Эксперты принимают решение не сразу — обычно приходится подождать несколько дней. Если оно будет положительным, вас пригласят на встречу с командами, к которым можно присоединиться. Будущие коллеги по очереди расскажут, как устроена работа, какие перед ними стоят задачи и какую роль предполагается отвести вам. Выбор команды за вами. Торопиться не нужно — у вас будет несколько дней, чтобы спокойно всё обдумать.
Приглашение на работу
После того как вы сообщите сотруднику службы найма о сделанном выборе, придётся ещё немного подождать — обычно от трёх до пяти дней, иногда чуть дольше. Когда всё будет готово, вам позвонит рекрутер, чтобы озвучить предложение Яндекса и подробно обсудить все условия. Если вас всё устроит, останется только согласовать дату первого рабочего дня.
Как повысить шансы на успех
Во время собеседований часто приходится решать задачи без компьютера — на листочке или на доске. Стоит попрактиковаться заранее, чтобы не растеряться с непривычки.
Мыслите вслухПроговаривайте вслух ход мыслей, подробно обосновывайте выводы. Эксперту важно не только получить правильное решение задачи, но и понять, каким путём вы к нему пришли.
Не бойтесь спрашиватьЕсли поставленная задача не вполне понятна, смело задавайте уточняющие вопросы. Не приступайте к решению, пока условие и требования к ответу не станут совершенно ясны.
Не стесняйтесь предлагать второе (третье, четвёртое…) решениеПервое решение не всегда самое удачное. Если вам пришло в голову, как его можно улучшить, — непременно скажите об этом, даже если задачу уже рассмотрели и отложили в сторону.