Как пройти техническое интервью в Google, если вы не технарь
Почти год назад я прошла весь цикл из 5 интервью и получила оффер на позицию senior продакта в Google, в комаду на стыке ML, developer experience и hardware. Оффер я не приняла, но наконец-то закрыла гештальт и теперь с уверенностью могу говорить, что университетское образование (а я по диплому и первым 8 годам работы журналист) совершенно не ограничивает, над какими продуктами ты будешь работать в дальнейшем.
Сегодня я хочу рассказать, как я готовилась к самому, на мой взгляд, сложному интервью - интервью по системному дизайну.
В чем суть интервью?
Тебе дают продукт (например, Instagram или chess.com), а тебе надо продумать его архитектуру и объяснить трейд-оффы. Изначальный вопрос очень размытый, и тебе надо для начала уточнить все бизнес-требования (например, а сколько пользователей у продукта? надо ли обрабатывать только картинки, или еще и видео?), а затем ответить на дополнительные вопросы, которые могут уйти, на самом деле, в любую степь. Например:
- а как будем бороться с latency, если неожиданно пришло много пользователей?
- а что будет, если пользователь писал пост, а у него отвалилось интернет соединение?
- а что если два пользователя одновременно пытаются модифицировать один объект?
- как будем обрабатывать пользователей с миллионами подписчиков (по сравнению с остальными).
Мне рассказывали, что иногда подобные интервью уходили в глубокое обсуждение, как, например, работает DNS, так что надо быть готовым ко всему 🙂
Разработчики, к слову, проходят то же самое интервью, поэтому я пользовалась ресурсами, которые они используют для подготовки.
1. Я прочитала книжку Web scalability for startup engineers и посмотрела курс Grokking the System Design interview. Вот здесь еще больше отличных рекомендаций по книгам и курсам. Я рекомендую выбрать какой-то один курс или книгу по основам подготовки, так как все они примерно говорят об одном и том же: дают фреймворк + раскладывают по полочкам примеры.
Книгу Web scalability нужно читать всем! Даже если вы не собираетесь в гугл 🙂
2. ОБЯЗАТЕЛЬНО сделайте 3-4 тестовых интервью. Я уже сто раз говорила, что прохождение интервью - это отдельный навык, и часто даже очень крутые и умные кандидаты валятся, так как не могут четко артикулировать свои мысли.
3. Соберите информацию. Я, например, прошлась по отзывам в интернете и Glassdoor (там есть секция про вопросы на интервью), выписала все вопросы и прописала примерно структуру ответа.
👆Все шаги выше заняли у меня примерно 2 недели интенсивной подготовки, но есть еще несколько вещей, которые я делала на протяжении нескольких лет:
1. Если у вас нет технического бэкграунда, пройдите базовый Computer Science курс, чтобы разобраться с основами. Мне, например, очень зашел CS50.
Такой курс должен быть достаточно коротким и общим, чтобы дать представление об основных концептах, но не перегрузить вас деталями. Потом уже на него можно наслаивать другие, более специализированные курсы: например, я потом проходила классическую программу по ML от Andrew Ng и курс по рекомендательным системам.
2. По моему личному опыту, учиться программировать было прикольно, но не очень ценно. Например, я начала разбираться с Python, но “юнит-экономика” не сошлась: польза этой информации на единицу потраченного времени не была высокой.
Самым полезным было освоить SQL и начать читать техническую документацию: при достаточно низком пороге входа это дало очень хорошее представление, как работает система.
3. Продакт должен знать, как выглядит его продукт end to end: latency, reliability, обработка данных - все это такие же (а иногда и более важные) части продукта, как и интерфейс.
Когда я прихожу в новую команду или мы начинаем разработку новой фичи, инженеры всегда делают для меня tech walkthrough. Задавайте вопросы, просите помочь вам разобраться. Вот это и есть системный дизайн в реальной жизни - не упускайте возможность попрактиковаться 🙂
Post #1167
19.5K