Как я готовился к собеседованию в Google

Автор оригинала: Shantanu Kshire
  • Перевод
Каждый инженер-программист стремится впечатлить людей своим техническим мастерством. Технологические гиганты этого мира — прекрасное место для работы технарей, которые могут предоставить услуги миллиардам пользователей. На моём недавнем собеседовании было несколько раундов, я получил предложения от Google и Amazon. В последние несколько лет онлайн-сообщество очень помогло мне в подготовке к собеседованиям. В этом посте я поделюсь всем о моём пути к собеседованию и верну вклад общества в моё обучение.




Собеседование SWE


Процесс обычно начинается с того, что рекрутер составляет список потенциальных кандидатов. Затем кандидат проходит первоначальный отбор или отборы, в которых определяется, подходит ли он/она для этой работы. Как только это становится ясно, проводится типичное собеседование SWE, включающее следующие этапы:

  • Программирование — от 3 до 5 раундов;
  • Дизайн систем — 1 раунд;
  • Принципы лидерства — 1 раунд.

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

A. Программирование


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

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

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

Стратегия подготовки


1. Оценка времени подготовки


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

«Давайте себе достаточно времени на подготовку. Всегда. Лучше оказаться слишком подготовленным, чем недостаточно подготовленным**».

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

  • Новичок может комфортно писать код как минимум на одном языке программирования. Ему не хватает базовых знаний о DS и алгоритмах. С трудом решает лёгкие задачи или решение требует времени.
  • Средний. Человек хорошо знает структуры данных и алгоритмы. Нет проблем с лёгким уровнем сложности. Может решить большинство задач средней сложности. Борется с Hard.
  • Продвинутый. Нет проблем со средней сложностью. Способен решить большинство сложных проблем.

Перед собеседованием я ставлю себя на средний уровень.


Оценка времени подготовки

2. Платформы, где учится программировать


В основном я практиковался в программировании на LeetCode, InterviewBit и GFG. Перед собеседованием я решил около 320 задач LeetCode, 80 InterviewBit и 30 вопросов GFG.


Как распределялись задачи

Задачи средней сложности очень важны: большинство вопросов на собеседовании имеют среднюю сложность. Решение задач средней сложности сделает вас быстрее и прибавит умения решать проблемы.

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

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

  • LeetCode: без сомнения, одна из лучших платформ. Лучшее в LeetCode — это его сообщество. Дискуссионные форумы очень полезны и предлагают несколько подходов. Не думайте дважды, выбирайте LeetCode Premium; он стоит каждого цента.
  • InterviewBit: я настоятельно рекомендую следовать по этому пути. Впечатления от работы на этой платформе максимально приближены к настоящему собеседованию. Иногда ваш код проходит все тестовые случаи, но неоптимален по времени или пространственной сложности (как требуется во время реального собеседования). InterviewBit считает такие материалы неоптимальными и даёт вам дополнительный фидбэк.
  • GFG: я использовал эту платформу, чтобы находить задачи и статьи об основах алгоритмов и структур данных. Объяснения тем и реализации там действительно хороши. На GFG также есть набор задач, связанных с конкретными компаниями и темами.

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

  • Специализация алгоритмы на Coursera:  этот трек Coursera потрясающий! Всего в нём 4 курса, охватывающих все основные и несколько продвинутых тем структур данных и алгоритмов. Отлично подходит для новичков.
  • Youtube: видеообъяснения. Я слушал их за чаем. Несколько каналов с полезным контентом (Рачит Джайн, Абдул Бари, THNLGf019nRo) — отличные пошаговые инструкции! И BackToBack SWE.
  • CTCI и EPI:  эти ресурсы дополняли подготовку. Книги дали мне возможность быстро освежить в памяти теорию и задачи. Иногда может показаться, что отдельные темы здесь занимают много времени. Я решил широко охватить разделы до интервью.
  • CLRS:  Иногда полезен, чтобы найти псевдокод. Удобный ресурс, чтобы получить углублённые знания о теории и о временной сложности алгоритмов.

И последнее, но не менее важное — статьи о BaseCS Вайдехи Джоши. Она пишет интуитивно понятные и простые объяснения по нескольким темам алгоритмов и структур данных.

3. Запускайте таймер


Поскольку продолжительность собеседований сокращается, очень важно работать над тем, как вы решаете проблемы. Как правило, собеседование по программированию длится 45–50 минут, от кандидата ждут, что он решит две средние, одну сложную или одну лёгкую и одну сложную задачи.

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

Я ставил таймер, чтобы отсчитывать время, за которое решал задачи:

  • Средняя задача: 20 минут.
  • Сложная задача: 40–45 минут.

Новички могут игнорировать время: для них найти правильное решение, очевидно, важнее.

4. Имитация собеседования


Перед настоящим собеседованием я прошёл много имитационных. Имитация собеседования может оказаться весьма полезной. Ранний отказ в тестовой среде даёт вам полезную информацию. Она поможет вам обнаружить пробелы в вашем мыслительном процессе. Старайтесь исправлять каждую ошибку и становиться лучше с каждым ложным интервью.

«Если вы несколько раз пройдёте имитации, расценивайте это как хороший знак».

Бесплатные:


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


5. Подготовьте план продвижения


До сих пор мы много говорили о различных элементах подготовки. Теперь давайте попробуем соединить всё и составить план продвижения! Посмотрите скриншот моего календаря за месяц до собеседования.


Расписание подготовки

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

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



Еженедельное распределение времени

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

B. Дизайн систем


В этом раунде проверяют навыки технического проектирования. Его можно разделить на дизайн низкого уровня (LLD) и дизайн высокого уровня (HLD). Знания в этой области становятся больше с опытом работы в отрасли.

Попытайтесь приобрести знания о таких концепциях, как распределённые системы, балансировка нагрузки, сетевые протоколы, согласованное хеширование, теорема CAP, репликация, сегментирование и т. д.


C. Принципы лидерства. Поведение


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

Главное — оставаться прозрачным и просто быть собой.
Я выделю раздел, упомянутый в CTCI о модели S.A.R. (ситуация, действие, результат). Идея в том, чтобы определить важные обсуждения, распределяя рассказы с предыдущего места работы. Вот схема навыков работы в обществе (т. н. soft skills), чтобы вы узнали о них больше.


Таблица SAR

Практические советы


  • Участвуйте в конкурсах программирования на LeetCode и Codeforces. Следите за проблемами, которые вы не смогли решить, и всегда старайтесь довести дело до конца.
  • Я часто пользовался «Shuffle» на LeetCode. Также избегайте решения проблем с большим количеством дизлайков. Обычно они не стоят вашего времени.
  • Многие собеседования проводятся вне IDE, например в Google Docs, CollabEdit, так что попробуйте написать производственный код в простом блокноте.
  • Думайте вслух во время собеседования. Если вы идете в неправильном направлении, это помогает собеседующему перенаправить вас.
  • Я часто начинаю с того, что записываю несколько подходов к любой задаче собеседования. Начиная с простейшего перебора и заканчивая самым оптимальным подходом, определяя структуры данных, пространственную и временную сложность каждого. Это систематическое разбиение проблему помогает объяснить, как я думаю.

Частые вопросы


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

Темы высокого уровня без определённого порядка:
Связные списки, битовые манипуляции, стеки и очереди, бинарный поиск, кучи, жадные алгоритмы, динамическое программирование, векторы/ArrayList, нотация большое О, время и пространство, сортировки, указатели, окна TCP/IP, системы непересекающихся множеств, операции со строками, графы и деревья, удержание стабильности системы, поиск в ширину и в глубину, рекурсия, поиск с возвратом, хеширования, синтаксическое дерево, обрезка деревьев и индексированных бинарных деревьев.

Q2. Какие языки программирования вы изучали?
Изучите один язык снаружи и внутри; на мой взгляд, этого достаточно. Я предпочитаю Java.

Q3. Откуда вы знаете, какие задачи подходят, чтобы практиковаться для решения всех проблем?
Практически невозможно решить все проблемы. Тем не менее есть максимум 12-15 тем из области структур данных и алгоритмов. Старайтесь лучше овладеть каждой темой, решая тематические задачи. С практикой придет умение определить нужную структуру данных и алгоритм. Сосредоточьтесь на качестве, а не на количестве.

Q4. Есть ли у меня шанс, если я не программирую на соревнованиях?
Да, безусловно. Программировать на конкурсах в этом контексте необязательно.

  • Программирование на соревнованиях — это спорт, круг его задач шире производственного программирования. Такие платформы, как CodeChef и Codeforces, более склонны к такому программированию.
  • Безусловно, есть области, где соревновательное программирование совпадает с производственным и может быть полезен: например, оно помогает привлечь внимание рекрутера к вашему профилю, умению решать задачи и т. д.

Однако раунды кодирования представляют собой совсем другой этап и имеют разные приоритеты.

Q5. Как получить приглашение на собеседование? Как вы подали заявку?
Рекрутер связался со мной напрямую через LinkedIn. Я не знаю, как отбираются кандидаты. Но у меня есть несколько предложений.

  • Пока вы студент, сосредоточьтесь на учёбе. Участвуйте в конкурсах, хакатонах, работайте над интересными и инновационными проектами. Попробуйте сделать вклад в проект с открытым исходным кодом. Есть масса способов сделать ваш профиль особенным.

Самое главное — наслаждайтесь путешествием. Будьте прилежны в работе. Имейте терпение, уважение и всегда стремитесь сегодня быть лучше, чем вчера, а также не забывайте про специальный промокод HABR, который добавит 10% к скидке на баннере. Остальное приложится.



image



SkillFactory
Школа Computer Science. Скидка 10% по коду HABR

Комментарии 77

    +20
    Теперь в гугле он сможет решать литкод-задачки на время
      +6
      Если за это платят 100к eur и опционы вестятся, то я согласен.
        –11

        Если интересует только бабло, проще бизнес открыть или лохов на стартапы разводить

          +8
          не проще, было бы проще, программистов не осталось бы.
          +6

          100к евро много где платят.

            +1
            А вот опционы дают не везде
              +1
              А тем более, опционы от гугла.
          +7
          Лучше, можно проводить собеседования и смотреть как другие решают литкод-задачки на время.
          +1

          Лучше б они на собеседовании спрашивали, как (и зачем) редирект настраивать:


          Заголовок спойлера

            +1
            Там же написано, что ничего больше не знаем.
              0

              Вот и спрашивали бы. Глядишь, кто бы и объяснил.

            +17
            Это вот серьезно месяц подготовки для интервью? Работа видимо вообще вся кончилась в мире. Работа в Гугле вообще не отличается от работу где либо еще в энтерпрайзе. Те-же формочки, круд и прочая скукота в 90% позиций (это еще оптимистично). Если метить в 10% оставшихся, так там не тот уровень что можно за месяц подготовить.

            По деньгам… ну так… средне. Ну может выше среднего, но никак не золотые горы. Не стоит оно убитого забесплатно месяца, если только не хочется именно в Гугл или времени свободного девать некуда.
              +1
              Есть опыт работы в Гугл?
                +1
                В Гугл нет. Я собственно объяснил почему не хочу туда. А в Fortune 500 конечно есть.
                  +10

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


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

                    +1
                    Много кто идёт в G для резюме. А потом уходят в компанию мечты, так как это может облегчить наём.
                      0

                      ИМХО гугл в резюме хорош, если вы относительно после вуза, и опыта работы у вас ещё нет. После этого его притягательность не особо очевидна, особенно для того, чтобы мириться с некоторыми недостатками.

                        0
                        Конечно, именно так. Всему своё время.
                      +1
                      Есть опыт общения с гуглерами и собеседования в гугл

                      Ну это аргумент из серии «одна бабка сказала»
                        0
                        Ну аргумент, что в гугле любая вакансия — рокет сайнс, полет инженерной мысли и вообще там все кросавчеги — как-бы вообще ни на чем не основан. Банальные-то вещи, рутину, кто будет делать? :)

                        Да и рокет сайнс у них местами тот еще. Ну в смысле, все, как у всех: habr.com/ru/company/itsumma/news/t/488802 (2020), habr.com/ru/news/t/538624 (2021)
                          +4
                          А что, вы сторонник приницпа «сначала добейся»?
                          Я вот тоже с гуглерами работал достаточно много, даже на гугл работал контрактором через третью фирму, но с возможностью посмотреть внутрь, доступами и т.д. и на собеседования туда ходил, и вот на этой серии «технических собеседований» был.
                          Впечатления средние. Безусловно там есть люди с руками и головой (кто-то же все это делает, там есть очень крутые штуки), там отличный HR департамент (внешний по крайней мере), в столовой в целом неплохо кормят, да.
                          Но компетенции и внутренняя структура большинства на типичном уровне крупной технологической компании. Добиваться решения месяцами — легко. Пойти по цепочке технической эскалации и обнаружить что там на самом деле 1. не знают, 2. не хотят знать — легко.
                          Короче обычная большая контора. Хорошо, если повезет и хватит скилов попасть в те проценты людей, которые действительно занимаются крутыми вещами. Но шанс, скажем так, весьма не велик.
                          Да, отбор там настроен на решение вот таких вот общих технических задачек и это очень чувствуется, когда человек в общем то решать задачки на алгоритмы и подобное умеет, а вот конкретную бизнес-задачу чет как-то не очень. Поэтому да, тебе с легкостью могут рассказать как обходить граф и какие мат. теории и приемы существуют на этот счет, но вот пойти и подебажить компонент или подумать над решением конкретной технической проблемы, с которой сталкиваются кастомеры — тут начинается что-то удивительное и люди как-то оперативненько сливаются, потому что там внезапно не только теория графов нужна, а надо, совершенно неожиданно, что-то руками делать, думать другими абстракциями и вообще вписывать продукт в бизнес-ожидания и работать на удовлетворение кастомера, а не собственного любопытства.
                          Это не значит, что там люди глупые (совершенно нет), или плохие (тоже нет), но сама система так построена, что люди, работающие в ней, создают весьма интересные технические решения, которые повернуты к кастомеру задней полусферой.
                          Ну это как очень неплохой Google Cloud, у которого нет кастомерской поддержки, куда можно хотя бы написать, так что если что-то пойдет не так, ну… ой. А там иногда идет что-то не так. Поэтому везде сквозит ощущение про «тут не для тебя все, а чтобы технически круто было».
                          Про интерфейсы я вообще молчу, оно подлагивает, местами крайне медленно работает и совершенно не отзывчивое даже на Ryzen 9 5950x, аппаратным ускорением отрисовки через GTX 1650 и полугигабитным интернет-каналом. Я хрен знает, как написать такой интерфейс, чтобы он ТАК себя вел. Или как придумать решение, когда у при удалении бакета в сторадже из UI он начинает удалять все объекты внутри бакета рекурсивно (что в целом правильно). Даже если их там миллион (а вот это уже не очень). По объкту на запрос (вообще что-то странное). Что ожидаемо подвешивает браузер, да. Вообще, я думаю у многих найдется история такого порядка про гугловые продукты.
                          Так что, я совершенно согласен и с 0xd34df00d, и с UnclShura. Рваться туда по сути смысла очень уж большого нет, в подавляющем большинстве случаев в компаниях F500 будет +- так же, даже с опционами. Но да, мерча из гугла не будет, хвастаться будет сложно:)
                            0

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

                            0

                            Мне интересно где ещё можно получать по 200-300к в год не будучи крутым специалистом по теории типов, математиком и прочим "узким" специалистом.

                              0

                              Можно сносно знать C++ и пойти в околофинансовые вещи на деньги куда получше 300к, например. Знакомый в Morgan Stanley что-то делает за сильно бо́льшие деньги, другой знакомый в банке где-то за 400к сидит. Ну, то есть, да, уметь пользоваться SFINAE там уже полезно, но вот эти вот все извращения с какими-то хардкорными компилтайм-вычислениями там не нужны.

                                0
                                Не, С++ не интересуют. Если низкоуровневая фигня то хотя бы раст. По-опыту раст зовут во всякие HFT с безумными тестовыми заданиями на несколько дней, так что тут пока опыт отрицательный.
                          +5

                          Не работал в гугле, но во-первых с ростом уровня зарплаты более чем конкуренты, судя по levels.fyi и прочим.
                          Во-вторых, множество бонусов, от своей столовой и залов, до множества офисов и возможности переезжать из страны в страну не меняя компании. Бонусы кстати, стоит перевести из натурального вида в денежный и сравнить. К примеру, вы явно наедите обедов на большую сумму. Здесь они бесплатны, значит, вы сэкономили столько то тысяч долларов в год. И так далее. Не говоря уже про страховку.
                          В-третьих, резюме с гуглом и резюме без гугла — это очень разные вещи "по весу". Одна только работа там не означает, что вы хороший девелопер и вроде как все это знают… Но я лично был свидетелем, как фраза "я работал в гугле и мой опыт говорит о том, что вот так то лучше" моментально выигрывает спор. Особенно в глазах менеджеров, да.
                          И в четвертых, это связи. В гугле работают тысячи крайне сильных программистов и не только, и знакомство с ними — это тоже огромный капитал. От возможности спросить совета и помощи (даже если вы уже уволились), до возможного инвайта"по знакомству" в перспективный стартап

                            +7
                            О, а вы устройтесь! Через пару лет на этот свой пост сами будете смотреть немного с улыбкой. :)

                            — Львиная доля бонусов окажется «дайте лучше деньгами — и я сам ими распоряжусь: где мне обедать, куда ездить и из какого офиса работать».
                            — Строчка в резюме подсветит вас (и не кисло) на радарах HR-ов и будущих коллег, но не более. Ни один производственный спор вы не выиграете. Ну хотя бы потому, что в гугле куча своих велосипедов ссылаться на которые в реальном мире просто бессмысленно. Их неоткуда готовые взять, да и не работают они толком без гугловой инфраструктуры.
                            — Ну и про связи: да, люди приятные, образованные, но львиная масса тупо перекладывает json'ы и пилит банальные crud'ы. И ни в какой перспективный стартап они вас, конечно же не посоветуют, потому, что их никто и не спросит. Да и не пойдете вы в стартап после гугла.

                            Я не отговариваю. Наоборот. Идите. Даю «голову на отсечение» — это реально клевый опыт. Но розовые очки лучше дома оставьте. ;-)
                              +2
                              Во-вторых, множество бонусов, от своей столовой и залов, до множества офисов и возможности переезжать из страны в страну не меняя компании.

                              Это очень сильно зависит. Например, я жил в Нью-Йорке (где у гугла есть офис), и общался с ними на предмет работы. Потенциально интересная мне команда компиляторщиков сидит в калифорнийском офисе, и для того, чтобы с ними работать, мне потребовалось бы переезжать в Калифорнию.


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

                              Ну фиг знает. ИМХО в моём резюме куда интереснее строки типа «в одну морду сделал такой-то проект».


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

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


                              — А я работал в гугле!
                              — А я написал свой компилятор!
                              — А я издал свою книгу!
                              — А я издал свою книгу не в самиздате Pakt, а в MIT Press!


                              Вот связи да, связи — это хорошо. Но их и на конференциях всяких хорошо завязывать.


                              С другой стороны есть этика — например, лично мне не очень нравится, что и как делает гугл, и как он влияет на социум. Точно так же кто-то не будет работать на Palantir, или на ICE.

                              0
                              Еще нужно учесть, что вся подготовка ничего не гарантирует. Интервью это лотерея с не такими уж большими шансами. Попалась знакомая задача — есть шанс показать хороший результат. Если попалась незнакомая, то 40 минут явно мало для того, чтобы изобрести решение, отладить его и обсудить оптимизации.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  0

                                  А куда трактор заводили, если не секрет? В Германии из более чем десятка собесов меня только в одной конторе спрашивали что-то сильно сложнее 2+2. Задача была уровня:


                                  Дано: есть массив с данными о серверах. Вида type Server = { cpu: int, memory: int, hdd: int }. И есть набор задач вида type Task = { cpu: ... те же поля }. Задача написать алгоритм так, чтобы он их пооптимальнее раскидал.


                                  Ну я вначале написал решение в лоб. С тестами. Потом минут 5-10 обсудили как это можно сделать лучше чем в лоб. Я ничего умного не придумал, но очертил направления в которых я бы стал думать (всякие там сортировки).


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


                                  upd1. Перечитал ваш комментарий. Вы имеете ввиду именно все FAANG подобные компании? Туда я не собеседовался пока

                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      А разве сейчас американские компании вообще ведут поиск вне США? Вроде бы сейчас действует запрет на выдачу рабочих виз, ну и всеобщая удаленка сейчас в моде.
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            Понятно. А по итогу получилось в Амазон? (вроде только они из крупных набирали)
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            Запрет сняли. Более того, правила H1B изменились, и там теперь вместо лотереи сортировка по зарплате.
                                            То есть начиная со следующего апрельского отбора, будут просто выдавать визы тем, кому предлагается максимальная зарплата, начиная с максимальной и по уменьшению, пока не закончится лимит виз или пока предлагаемая зарплата не станет ниже ~85К в год, что является нижним лимитом. Это очень сильно повышает шанс получения визы, если приглашает крупная компания, которая готова платить хорошие деньги. И машет ручкой галерам, которые выгребают львиную долю виз.
                                            Всего виз в год — 65 тысяч.
                                            При этом только крупные бодишопы типа Infosys, TATA и Deloitte, Accenture и прочие в сумме подавали под пол миллиона заявок, при этом предлагая среднюю зарплату, к примеру, у Infosys — 83к, у TATA — 70к, а они крупнейшие просители, почти 200 тысяч заявок, и нет ни одного «консалтинга», который бодишоп на самом деле, который, прося больше 10 тысяч виз предлагал бы более 92 тысяч в год в среднем.
                                            Для сравнения, реальные среди реальных продуктовых компаний больше всего просят IBM India (35 тысяч заявок со средней 77к) и Microsoft (34 тысячи заявок со средней в 136к). За ними идет Google с 26 тысячами заявок и средней почти в 145к. Если посмотреть в детализации, то бОльшая часть предлагаемых зарплат ниже 200к. В общем, если не хочется лотереи, нужно пробиваться на позицию с компенсацией 200+, что почти гарантирует получение H1B.
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                          0

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

                                            0

                                            Я потому и написал, что она "сильно сложнее 2+2". Я тоже её не решил. Но offer мне дали. Точнее решил полным перебором, слегка покрыл тестами и мы вслух порассуждали как её решать оптимальнее, чем перебор. Я ничего умнее чем сказать "ну там наверное надо отсортировать исходные данные по каждому из критериев" и "отсеивать заведомо худшие результаты, чтобы более вероятные варианты просчитывать первыми". Когда уже понятно, что ранее мы уже посчитали что-то лучшее, чем текущая итерация, то можно конкретную ветку отбросить.


                                            Ещё была 1 сложная задачка. Но она была тестовым заданием. Дано: Х файлов огромного размера. Файлы текстовые, внутри просто строчки текста. Задача — отсортировать эти строки текста и поместить результат в один результирующий файл. Есть ограничение по памяти — нельзя считывать и обрабатывать за раз больше Y строк в памяти. Причём Y >= 2. Было интересно. Сортировать терабайт строк не сортируя больше двух за раз :-D

                                              0
                                              Ну это просто внешняя сортировка, известная ерунда :)
                                        0
                                        Если речь идет о SWE, то собеседование на «интересные» и «не интересные» позиции не сильно отличаются и в подготовке нет большой разницы. Вы сначала проходите собеседование, а только уж потом происходит team matching, когда вы выбираете себе менеджера и команду. И там есть из чего выбрать.

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

                                        Еще такого формата собеседования — это не только в Google, это стандарт по индустрии среди топ компаний (FAANG). По поводу убитого месяца времени, еще как стоит того. Ко всем остальным плюсам, при устройстве в FAANG можно легко получить бонус $15k-$30k (а иногда и выше) за подписание контракта. Вполне себе может покрыть месяц подготовки + значительное повышение зарплаты по сравнению со многими другими компаниями. levels.fyi вам в помощь — там цифры достаточно правдивые.

                                        Я уже почти 2 года работаю в Google и скучно не стало. Нетривиальных задач хватает и с формочками работать не приходится. Все вышесказанное является моим личным мнением, а не позицией компании.
                                          +4
                                          А вот как раз и нет! Мой поинт в том, что Гугл по деньгам не сильно лучше той-же финансовой индустрии. То, что из скучной задачи можно сделать нескучную — ну так на этом вся индустрия и держится! Это не какой-то особый бонус Гугла. Это везде так.

                                          Насчет стандарта FAANG… Это не так. Они разные все. Да у вас может быть несколько coding interview, да у вас может быть несколько интервью с менеджерами. Но они все непохожи на Гугловые как Гугловые не похожи на Амазон. А если сделать шаг в сторону (совсем не далеко) то возникает море возможностей. По моему опыту стандарт это полчаса телефонного интервью, онсайт техническое с программированием на бумажке и 1-2 с менеджерами, плюс еще одно с HR. Это банки. Хеджфонды — сразу codility, потом один день с утра до вечера технические, математика, менеджеры и после этого еще менеджеры в другой день вплоть до отца основателя в зависимости от размера конторы. Так, что разные стандарты.

                                          Подготовку к интервью я вообще не рассматриваю как валидную активность — она не дает ничего ни интервьюверу (это-же не реальный уровень кандидата, а надутый) ни интервьюируемому (вам кажется, что вы теперь знаете больше? смею вас разочаровать). Поясню: вот вы месяц готовитесь и теперь можете любую стортировку написать по пямяти и всю симптоматику помните наизусть. Хорошо. Тогда у меня вопрос: а раньше вы почему всего этого не знали? Не надо было? Или забыли? В обоих случаях, те знания что вы, как вам кажется, приобрели либо пропадут за ненадобностью либо вы и так все это знали и вам не месяц надо было а часа полтора покопаться в сети. Это очень повезло если они реально пригодятся в работе. Но это именно случай — сейчас слишком много информации. Все запомнить нельзя. Знать о существовании и уметь найти — обязательно. В памяти держать — нет. Я например не помню алгоритмов сортировки и из O(). Но сейчас они мне и не нужны вообще. Мне надо помнить совершенно другое — численные производные по поверхностям. И я это помню. Надо будет отсортировать что-то длиннее 20 элементов — посмотрю в сети. А один раз 20 элементов и дефолтный сорт (quick который) отсортирует без проблем.
                                            0
                                            Подготовку к интервью я вообще не рассматриваю как валидную активность — она не дает ничего ни интервьюверу (это-же не реальный уровень кандидата, а надутый) ни интервьюируемому (вам кажется, что вы теперь знаете больше? смею вас разочаровать).
                                            Тут теория игр в действии, как с эволюцией. Аналогичный пример на государственных экзаменах в разных странах: ЕГЭ, ВНО, ЕНТ. По изначальной идее оно призвано для того, чтобы оценить, как ученик освоил школьную программу в течение 11 лет. Но еще оно служит для пропуска в университет, особенно на бюджет. Если к нему сейчас не готовиться, то легко не попасть на бюджет, пропустив вперёд менее эрудированных и талантливых, но просто более подготовленных к самому экзамену. Выживает самый приспособленный, а не честный.
                                            FAANG должен это учитывать, конечно.
                                        +4
                                        этот абзац — пример отвратительного машинного перевода:

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


                                        Должно быть что-то вроде:

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

                                          +3
                                          Я б даже сказал что это пример отвратительного человеческого перевода. Никакой автоматический перевод не нафантазирует «окна TCP/IP» вместо sliding window и «обрезку деревьев» которой вообще в тексте нет даже близко, как будто это переводил садовод.
                                          Linked-List, Bit-Manipulation, Stacks & Queues, Binary Search, Heaps, Greedy Algorithms, Dynamic Programming, Vectors/ArrayLists, Big O Time and Space, Sorting, Two Pointers, Sliding Window, Union-Find, String Manipulations, Trees and Graphs, BFS/DFS, Recursion, Back-Tracking, Hashing, Trie, Segment Trees & Binary Indexed Trees.
                                          +1

                                          Конечно, вряд ли кто согласится с моим мнением, но кажется мне, что Google выдохся. Довольно неожиданно так говорить про компанию, которая везде и всюду, но просто подумайте – что они сделали нового за последние 10 лет? Все их ключевые программы и сервисы (поисковик, Gmail, Android, Chrome, Youtube, Карты) были сделаны уже более 10 лет назад. Ни одного реально нового пользовательского продукта за это время, только итеративное улучшение уже существующих. И при всем при этом, я постоянно нахожу самые разные баги во всех их приложениях. Даже удивительно, раз их создают так тщательно отобранные разработчики.
                                          Не из-за этой ли системы отбора такая ситуация?..

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

                                              gmail — давно пора сделать лучше, как с позиции фичей, так и UX
                                              YouTube — круто
                                              Chrome — круто, но последние годы только закручивание гаек
                                              Android — круто, но множество UX проблем
                                              Карты — проблемы с UX
                                              Аналитика — мощно, но UX — говнище.


                                              Я вижу системные проблемы в подходе гугла к развитию продуктов.
                                              Эти же проблемы похоронили множество довольно хороших продуктов, в которых цена ошибки была выше.


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


                                              https://m.habr.com/ru/company/skillfactory/blog/538536/comments/#comment_22579576

                                                0
                                                Спасибо за эти подробные баг-репорты. Обязательно займусь как будет момент.

                                                Бизнес решает бизнес, а инженеры решают инженерные проблемы.
                                                  0
                                                  Совершенно внезапно инженеры решают в первую очередь бизнесовые задачи с помощью инженерных навыков, а уже потом, иногда, развлекаются инженерией ради инженерии.
                                                  Вообще вся компания в первую очередь решает бизнесовые задачи, если это коммерческая компания, а не университет или RnD лаборатория, которая может себе позволить иногда заниматься инженерией ради инженерии в рамках исследований. Хотя их конечно потом все равно как-то коммерциализировать надо.
                                                  Нет никакого «бизнес решает бизнес», инженеры в коммерческой компании это не black box, в который с одной стороны грузят бабки тоннами, а с другой стороны он выдает идеальные инженерные продукты, которые берут какие-нибудь сейлзы и пытаются продать, это симбиоз специалистов, которые умеют делать много чего инженерного, но при этом не забывают, что их продукт придется продавать в каком-то виде.
                                                  Гугл при этом во многом похож именно на компанию, в которой engineering excellence (причем без customer experience) стоит во главе угла. Больших проблем это не создает потому, что есть стабильный поиск и относительно небольшая команда, которая занимается именно парой реклама+поиск и эта пара, как отличный печатный станок, приносит такое количество денег, которым можно закрыть любые коммерчески провальные эксперименты.
                                                  При этом, у гугла к сожалению за последнее время не получилось успешно запустить ни одного коммерческого продукта в новой для них нише и фейлились они не потому, что они технически плохо сделаны, а потому, что в них только technical excellence и есть, а вот про пользователя забыли. И кладбище закрытых продуктов продолжает шириться.
                                                  В целом ситуация то вполне объяснима — начиная именно с найма, они отбирают инженеров с хорошими фундаментальными знаниями, при этом не уделяя практически никакого внимания реальным навыкам решения реальных продуктовых проблем. Такие люди могут делать супер-крутые штуки, но им нужны не менее крутые визионеры и менторы уже над ними, которые будут задавать правильное направление и помогать правильно применять свои инженерные знания. Причем это должны быть весьма неординарные и сильные люди. А вот их уже нанять на несколько порядков сложнее. При том, что их нужно много, задача может стать крайне трудной, фактически близкой к невыполнимой.
                                                  Поэтому да, получается много сильных инженеров, которые делают технически крутые штуки, но при этом пользователи почему-то ими пользоваться не особо то хотят.
                                                  Пожалуй, из последнего в этом плане весьма показательна Stadia, которая фактически является иллюстрацией «как имея все технические компетенции, огромный бюджет и собственную общемировую маркетинговую машину провалить проект».
                                                    0

                                                    Как профессионально — на критику отвечать ёрничанием.


                                                    Что там с карьерным ростом? Программисты растут в лидов, потом — в управленцев (менеджеров, в западном понимании этого слова).


                                                    И лейтмотив сохраняется.

                                                      0
                                                      Все отлично с карьерным ростом, не переживайте. 10.000 обычных разработчиков превращаются в 10.000 тимлидов, а чуть позже в 10.000 председателей советов директоров.
                                                        0
                                                        А как мне ответить? Не фиксить же баги только по этой информации выше, верно?
                                                        Комментарий до моего ответа тоже не особо детальный получился. И такое бывает.
                                                  +2
                                                  напомнило шутку про группу Meshuggah
                                                  — вы с 2008 года так и не написали ничего уровня Bleed
                                                  — а кто написал?
                                                    0
                                                    Ради любопытства погуглил и послушал. Ну что я могу сказать… Это тот редкий случай, когда даже Бузова смотрится вполне достойно.
                                                      0
                                                      подозреваю, что прог-металл — не ваше и вы не совсем в теме. Бывает
                                                        0

                                                        Должен признаться, что Obzen и я не считаю сильным альбомом. Nothing имхо куда круче и вообще топчик у них, ИМХО. И Koloss > Obzen.

                                                          0
                                                          неужели вы считаете, что он настолько плох? :)
                                                            0

                                                            Я просто расслушал Koloss :]


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

                                                        0

                                                        Frontierer точно тогда не слушайте.

                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                      0
                                                      У автора слишком небольшая выборка(1 человек) для каких либо безапелляционных утверждений. Правильнее, наверно, было делиться опытом в виде «Я делал так то», «В моём случае подошло то то».
                                                        0

                                                        Это правда, но все выжившие пишут примерно это же. Вот например, в фейсбук прошёл готовился так-то: https://medium.com/@alimirio/before-you-start-solving-problems-on-leetcode-prep-work-9d65fc964c6f


                                                        Ну или вспомните Cracking the Coding Interview, там примерно похожий подход и ЕМНИП автор как программист, так и интервьюировавший в FAANG достаточно большое число кандидатов.

                                                          0

                                                          Эм, один мой знакомый прошёл интервью в FAANG, но не готовился к нему вообще. ИМХО, достаточно какой-то общей образованности и опыта решения программистских задач.


                                                          Готовиться? Месяцами? Да ну.

                                                            +2
                                                            это у вас завышенное мнение о квалификации среднестатистического программиста на самом то деле.

                                                            это к пониманию 'какойто общей образованности' да и среднестатистических программистских задач.
                                                              0
                                                              Ну вот у этого знакомого были такие задачи:
                                                              1. Проверить, является ли скобочное выражение сбалансированным.
                                                              1*. А если там скобки разных видов?
                                                              1**. Сгенерировать все сбалансированные скобочные выражения длины L.
                                                              1***. Чтобы сразу без дубликатов, и не нужна была пост-фильтрация.
                                                              2. Написать класс на плюсах, который бы убеждался, что переданная ему функция вызывается не чаще N раз за последнюю секунду, и не вызывать её при превышении порога. Звёздочек почему-то не было.
                                                              3. Какая-то задача, не помню уже точную формулировку, что-то про то, что даны текущие положения такси и текущие положения людей, надо сматчить такси и людей. Простейшая задача, которая благодаря дополнительным условиям, которые я забыл, сводится к предсортировке попарных расстояний. Сложность получается так себе, но интервьювера она вполне устроила, про всякие там kd-деревья и прочую ерунду он даже слушать не захотел.
                                                              4. Какой-то датасайенс на простейшие определения.
                                                              5. Behavioral interview — ну надо просто делать вид, что ты дофига командный игрок, и никогда ни в коем случае не говорить прямым текстом, что какой-то твой коллега с прошлой работы был плохим. Пазитиффчик)))

                                                              Какая-то подготовка нужна, ИМХО, только для 1***, но и без этого, насколько я знаком с внутренней кухней найма, будет strong hire.
                                                              Зачем готовиться для остального?
                                                                +2
                                                                Зачем готовиться для остального?

                                                                Вы определённо переоцениваете уровень среднего разработчика. Причём сильно. К примеру задачу из п2 большинство из моих знакомых погроммистов будут весьма долго решать. Сам не так давно делал что-то подобное на linked list-е. Задача из п3. не совсем ясна, но я думаю подавляющее большинство разработчиков споткнётся уже на стадии — а как вычислить расстояние между двумя точками. А узнав это будут долго чесать репу, думая что теперь с этим делать? Сравнивать всё со всеми? А дальше? До рабочего кода я думаю дело не дойдёт.


                                                                Мне кажется у вас просто очень нерелевантный типичному опыт. В хорошем смысле этого слова. А обыкновенного разработчика который писал обыкновенный бакенд\фронтенд даже такие задачи могут поставить в долговременный ступор. Люди с 5+ годами опыта с муууками решают примерно такую задачу:


                                                                Напишите метод который принимает на входе массив чего-нибудь, и число limit: number. Задача на выходе вернуть массив chunk-ов длинною limit или меньше. Пример: test([1,2,3,4,5], 2) => [[1,2], [3,4], [4,5]].

                                                                Или такую задачу:


                                                                Нужно написать метод который может сжать строку по такому принципу AAABBCB => 3A2B1C1B.

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


                                                                Естественно не все кандидаты валятся на этом. Многие валятся много раньше Но многие Senior-ы, выстрадав и родив хоть что-то работающее, на полном серьёзе не понимают, зачем им что-то итерировать. Ведь JSON туда сюда и без этого можно переслать. И "вообще я React программист, а это не React" :-D


                                                                Так что отвечая на ваш вопрос "нужно ли готовиться?". Да… Нужно :)

                                                                  0
                                                                  1. — легко
                                                                  1*. — берем стек
                                                                  1** — а во тут уже сложнее. На литкоде похожую задачу помню делал, в итоге за полчаса (или час?) так и не сделал, когда время кончилось пошел подсматривать. Навскидку я бы попробовал тупо написать в рекурсию: сбалансированные собочные выражения длины L это все возможные скобочные комбинации длины (L-2)xКоличество вида скобок.
                                                                  1*** — тут даже непонятно что хотят — откуда возьмутся дубликаты в последовательностях, который мы генерируем?

                                                                  2. звучит не очень сложно, но опять же из нюансов то что поток может приостанавливаться незаметно для приложения или многопоток.
                                                                  3. Задачу понял, решение не до конца: для каждых пар (человек, такси) посортировали по дистанциям и выбрали уникальные комбинации чтобы суммарная дистанция была минимальной? Или как? Опять же, задачи на оптимизации нужно решать какими-то умными методами: отжиги всякие, розенброки и прочее.
                                                                  4. не знаю датасаенса в принципе, как и большинство «средних разрабов».
                                                                  5. ну разве что пункт к которому готовиться действительно не надо)
                                                                    +1
                                                                    Навскидку я бы попробовал тупо написать в рекурсию: сбалансированные собочные выражения длины L это все возможные скобочные комбинации длины (L-2)xКоличество вида скобок.

                                                                    Ну да, там достаточно просто аккуратно написать рекурсивный шаг (но писать решение я тут, конечно же, не буду).


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

                                                                    Зависит от того, как сделана рекурсия. Есть решение, генерирующее уникальные комбинации по построению, а есть решение, когда генерируются дубликаты.


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

                                                                    А, не, никаких потоков-многопотоков. Самое простое, что может быть.


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

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


                                                                    не знаю датасаенса в принципе, как и большинство «средних разрабов».

                                                                    Ну, значит, не надо идти на позицию машинного обучателя :] Был бы ещё раунд либо из system design, либо на кодинг и задачки.

                                                          +1
                                                          Готовиться к собеседованию 1-3 месяца (с учетом того, что это будет делаться после работы), ну уж нет. Все-таки не такой большой стимул для этого. Думаю это с удовольствием делают вчерашние студенты, которые еще не отвыкли от экзаменов.
                                                            +1

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


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


                                                            Поэтому не хотите, всё устраивает — да ради бога.

                                                              0
                                                              Это из разряда. Я делаю ТЗ, а кто-то его не делает. Но все мы работаем и получаем примерно одну и ту же ЗП.
                                                              Может Яндекс, Майл, Сбер и тд крупные компании могут себе позволить повыпендриваться и искать супер-супер умы. Но остальным нужно не умение решать задачки. Им нужно здесь и сейчас решить проблему на их проекте. А решение задач не позволяет узнать есть ли у тебя такой опыт или соискателя нужно учить.
                                                                0
                                                                По мере того, как подобные практики собеседования проникают из FAANG и fortune500 в остальные компании у вас может не остаться выбора, если хотите попасть в более-менее приличное место.

                                                                Не могу воспроизвести. В одну компанию я получил оффер вообще после полутора часов общения, за которые я пообщался по 15 минут с двумя людьми, ну и с третьим час даже пописали код (написали определение типа данных, описывающего дерево — ура!).
                                                                В другую компанию я получил оффер после общения с тремя людьми, с двумя из них мы больше говорили, а кода писали очень мало, с третьим — обсуждали один из моих проектов на гитхабе.


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

                                                              –3

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

                                                                +1
                                                                Мне это напомнило видео, «Почему я отказался работать в гугле, а потому что меня туда не звали».

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

                                                                Самое читаемое