Я щойно отримав роботу розробника у Facebook. Ось як я готувався до своїх інтерв’ю.

Щойно я закінчив сім інтерв’ю на місцях у технічних компаніях Силіконової долини. Зрештою, я прийняв пропозицію щодо роботи в галузі програмного забезпечення від Facebook.

Ось як я готувався до цих співбесід і що я дізнався по дорозі.

Моя багаторічна подорож до Кремнієвої долини

Коли я вивчав комп'ютерні науки в університеті в Австралії, я завжди передбачав своє майбутнє як інженер-програміст у Силіконовій долині.

Мені сподобалась ідея бути в основі всіх інновацій індустрії техніки, а також її помилок. Цей гол тримав мене мотивованим. Це тримало мене зосередженим.

Я залишив посаду провідного інженера iOS у дивовижній компанії в Мельбурні і повернувся до рідного міста Перт, щоб навчатися. Там я готувався б до процесу співбесіди, який попереду мене стояв у Силіконовій долині. Я знав, що це буде неймовірно важко і важко.

Якщо ви згадаєте про процес співбесіди з інженерами-програмістами, багато хто виступить проти загальної практики співбесіди. Багато аргументів випливає з міркувань, згідно з якими вирішення алгоритмів на дошці насправді не представляє або перекладає щоденні завдання інженера-програміста.

Заради цієї статті я не буду вдаватися до цієї розмови. Натомість я буду досліджувати ці різні типи співбесід з точки зору кандидата, а також зосереджуватимусь на тому, що я дізнався з цього процесу.

Співбесіда - це вміння

Під час підготовки я завжди знав, що співбесіда буде складною справою. Але я, чесно кажучи, не уявляв, як важко це буде, поки я не потрапив до коліна на моє перше інтерв’ю.

Напередодні співбесід я користувався як платними, так і безкоштовними послугами, які імітували кодування та дошки для співбесід по телефону з людьми, які мали досвід роботи з кандидатами в галузі. Ці співбесіди мали важливе значення для підготовки мене до тиску. Але, як я пізніше зрозумів, вони складали лише частку того, з чого складається справжнє інтерв’ю.

Я б порадив не брати інтерв’ю на роботі, про яку ви мрієте, не маючи декількох фальшивих чи справжніх співбесід за вашим поясом. Нервовість може бути неймовірно пригнічуючою, і її можна приглушити лише практикою.

Як і в багатьох інших речах у житті, практика покращить вашу впевненість.

Різні типи інтерв’ю, з якими я стикався

Якщо ви підготуєтесь та виступите досить добре на попередніх екранах телефонів, ви отримаєте можливість прийти на місце і провести цілі дні співбесід. Ці співбесіди, як правило, тривають чотири-шість годин, залежно від компанії, з якою ви проводите співбесіду.

Під час моєї поїздки в Силіконову долину мені вдалося підготувати сім інтерв’ю на місці. Це дало мені унікальну перспективу поточного ландшафту для інтерв’ю.

Як правило, виїзне місце охоплює три основні теми: алгоритм, дизайн архітектури та поведінку, саме до цього я вивчав і готувався. Однак є деякі компанії, які, схоже, підтримують цю тенденцію та розширюють свої співбесіди, щоб охопити більше практичних навичок.

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

Інтерв’ю з алгоритмом

Найпоширеніший тип співбесіди, з яким ви зіткнетеся. Інтерв'юер попросить вас вирішити проблему на дошці, яка оцінить ваші знання про структури даних, алгоритми сортування, рекурсію, аналіз складності часу / простору, а також розпізнавання шаблонів та регістрів. У цьому інтерв’ю ви, як правило, придумуєте рішення грубої сили, а потім намагаєтеся вдосконалити це рішення та обговорюєте компроміси, якщо такі є, з різними запропонованими вами рішеннями.

Це було хлібом і маслом моєї підготовки, щодня протягом шести тижнів я розгадував алгоритми на дешевій дошці, що розвішувала час, аналізував їх складність у часі / просторі, а також справді намагався зрозуміти, що відбувається в кожному рядку коду.

Особисто мені дуже подобаються алгоритми дошки, тому що мені не обов'язково турбуватися про написання компілюючого синтаксису (більшу частину часу), що дозволяє мені зосередитись виключно на порушеній проблемі. Інші люди можуть не любити дошку, але для них я б сказав, щоб практикували це послідовно, і це може передумати.

Інтерв’ю з архітектурного дизайну

Це цікаве інтерв’ю, яке я дуже недооцінив. Інтерв'юер попросить вас розробити таку систему (звичайно, на дошці), таку як система продажу квитків на автостоянку, чат-месенджер, твіттер, серед інших поширених систем.

Те, що ви оцінюєте, - це те, як ви берете широку концепцію та розробляєте систему, яка відповідає всім вимогам та обмеженням. Але кандидат повинен задати правильні питання, які визначають вимоги та обмеження. Це інтерв’ю - це більше розмова, змішана з деякими діаграмними малюнками і, можливо, навіть структуруванням класів. Все на досить високому рівні, тому ви не будете писати фактичний код реалізації.

Звичайно, слід керувати розмовою, щоб охопити свої знання про те, як працюють системи. Якщо ви - бекенд-інженер, ви б насправді не заглиблювались у механіку деталей клієнтської програми, якщо б не мали попереднього досвіду в цій галузі. Я інженер iOS, тому я говорив про шаблони архітектури, модулізацію функціональності, шаблони дизайну, а не про те, як масштабувати кінцеві точки API, додаючи працівників, AWS тощо.

Поведінкові інтерв’ю

Інтерв'юер задасть вам запитання про себе та про те, як ви вирішуєте певні типи ситуацій. Підготовка до цього не така складна, як інші, але вимагає багато самоаналізу від свого імені.

Запитання, як правило, відповідають:

Як ви справляєтеся з невдачею?

Яка ваша найбільша слабкість?

Як ви вирішуєте конфлікти?

· Що б ви зробили по- іншому?

Я відчуваю, що було б досить важко зіпсувати це, але я чув, що це роблять багато людей. Вони намагаються замаскувати свої сильні сторони як слабкі, формують свою реакцію на те, що, на їх думку, інтерв'юер хотів би почути або навіть просто перекласти провину невдалих проектів на інших людей.

“Моя слабкість полягає в тому, що я занадто зосереджений”

“Всьому була винна Джеррі, він більшу частину проекту хворів”

Ці інтерв'юери навчені та відкалібровані для виявлення безглуздих людей та приділяють гостру увагу фігням. Це швидкий спосіб викинути свою кандидатуру з вікна. Просто будьте справжніми, виявляйте пристрасть до своєї роботи, володійте своїми недоліками, проявляйте ініціативу щодо вдосконалення, і у вас все буде добре.

Культура Fit

Зазвичай це поєднується з поведінковим інтерв’ю і спрямоване на пошук відповідності вашим цінностям компанії. Наприклад, Facebook дотримується хакерської культури сміливості та надсилання нових ідей, випробувань шляхом експериментів, не боячись зламати речі. Тоді як Airbnb хоче створити світ, де люди відчуватимуть свою належність куди завгодно, тому вони шукають людей із чудовими навичками гостинності.

Багато великих технологічних компаній приділяють велику увагу культурі та наймають людей на основі відповідності цієї людини своїм цінностям. Якщо ви берете інтерв’ю в одній із цих компаній, важливо вивчити їхні цінності та знайти минулий досвід, який ви зможете передати і повідомити своєму інтерв’юеру.

Програмування пар

Цікава категорія, для якої ви будете поєднуватися з іншим інженером перед комп’ютером, який налаштовано на середовище для розробки, подібно до того, що ви використовували б у реальному світі. Вам дається основне завдання зі списком вимог, які ви повинні виконати, коли ви закінчуєте кожне завдання, інтерв'юер попросить вас реалізувати більше функціональних можливостей до досягнення обмеження часу. Ви можете вільно використовувати будь-які ресурси, які вам заманеться, наприклад, переповнення стека або онлайн-документацію.

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

Під час моєї попередньої ролі я писав чистий код під час роботи над завданням, а потім оптимізацію, як тільки відчував, що завдання виконано. Цей тип робочого процесу не був корисним для такого типу співбесіди. Мені вдалося очистити код у кут, занадто рано оптимізувавши, що спростило відновлення. Я виявив, що написання обривкового коду та згадування інтерв’юеру, що я буду робити це інакше на виробництві, вважається достатнім, ніж написання чистого та оптимізованого.

Пошук і виправлення помилок

Багато з того, що ми робимо як інженери, зосереджується на пошуку та виправленні помилок, про які нам повідомляють з різних джерел. У цьому інтерв’ю вам буде надано список помилок для пошуку та виправлення, а також ідентифікацію інших потенційно проблемних кодів.

Я бачив лише один приклад такого типу співбесіди, і я відчуваю, що для когось буде досить складно по-справжньому підготуватися, особливо якщо він молодший. Кожне середовище кодування має свої маленькі химерності та нюанси, багато печворку, який я робив, походить від попереднього досвіду роботи з IDE (інтегрованим середовищем розробки) та пов'язаних з ними фреймворків, які я накопичував протягом багатьох років.

Перевірка знань про домен

Програмування принципово однакове для більшості поширених мов, які ми бачимо сьогодні. Швидше за все, якщо ви знаєте об’єктно-орієнтоване програмування однією мовою, ці навички здебільшого передаються іншій.

Однак це інтерв'ю зосереджується на аспектах, які неможливо перенести між мовами чи системами. Вас опитатимуть про особливості навколишнього середовища, що стосуються API, управління пам’яттю, можливостей, обмежень, історії тощо.

Практика може бути складною для цієї конкретної теми. Подібно до інтерв’ю щодо виявлення та виправлення помилок, я вважаю, що багато відповідей випливають із попереднього досвіду. Залежно від рівня ролі, на яку ви претендуєте, відповіді, які ви надаєте, можуть зважуватися по-різному. Наприклад, якщо хтось, хто претендує на молодшу роль, не знає історії того, чому API структурований певним чином, він може отримати поступку. Однак, якщо кандидат, який претендує на старшу роль, не знає, тоді вони можуть бути позначені проти більш жорстких.

Розуміння операційних систем

Залежно від ролі чи команди, з якою ви берете інтерв’ю, ви можете провести співбесіду, яка фокусується виключно на операційних системах. У цьому інтерв’ю вам будуть задані запитання, які оцінять ваше розуміння механіки нижчого рівня операційної системи комп’ютера.

Слід визнати, що це інтерв’ю застало мене зненацька. Операційні системи - це те, чого я навчився в перші роки навчання в університеті, але відтоді мої знання стали туманними з цього питання, що знайшло відображення в моїй роботі.

Як слід готуватися

Як я вже писав раніше, співбесіда - це власна навичка. Навіть якщо ви вже чудовий програміст у своїй повсякденній роботі або отримуєте чудові оцінки під час навчання, ці навички точно не перенесуть 1: 1, коли ви знаходитесь у крихітній кімнаті для співбесід. Наполегливість, повторюваність та послідовність підготовки до співбесіди та практики будуть ключовими визначальними факторами вашого результату.

Мінімум знань

Якби хтось запитав мене, на що, на мою думку, було б зосередитися, я б запропонував наступне:

  • Навчіться спочатку писати код від руки на папері та дошці, а потім перекидайте його в IDE для виділення синтаксису, це має стати для вас другою природою.
  • Розвивати глибокі знання про структури даних , їх сильні та слабкі сторони порівняно між собою. Я виявив, що впровадження структур даних та їх поведінки з нуля навчило мене набагато більше, ніж те, що я знав з їх абстрактних концепцій.
  • Повністю розуміючи позначення Big O як за часом, так і за простором, це чудово поєднується з вашим алгоритмом та питаннями сортування.
  • Охопіть усі основні алгоритми сортування, оскільки різниця в часовій / просторовій складності потенційно може зірвати ваше оптимальне рішення для алгоритму, який ви намагаєтеся вирішити.

Коли починати

Залежно від вашої хронології, можливо, ви захочете розпочати це раніше, ніж пізніше. Багато компаній, з якими я брав інтерв’ю, мали 12-місячний період охолодження, перш ніж кандидат, який провалився, зміг подати заявку повторно. З іншого боку, якщо ви знаєте, що не будете готові протягом року, ви можете також розпочати процес зараз і трохи відчути, що таке проходження процесу співбесіди, щоб, коли ви будете готові, він виграв ' це може бути майже таким же страшним.

Не хвилюйся

У вас це є.

Ресурси

Фіктивне інтерв’ю

  • interviewing.io (бета-версія), Безкоштовно
  • Коляска, безкоштовно
  • Кубок за кар'єру, платний

Алгоритми

  • Злом інтерв’ю коду, книга
  • байт за байтом, веб-сайт та YouTube
  • CS50, YouTube
  • Торт з інтерв’ю, веб-сайт
  • HackerRank, веб-сайт
  • LeetCode, веб-сайт

Операційні системи

  • Поняття операційної системи, книга

Архітектурний дизайн

  • Вступ до архітектури та систем, YouTube

Поведінковий

  • Вступ до поведінкових інтерв'ю, YouTube

Якщо вам сподобалось прочитане сьогодні, ви можете переглянути інші мої статті про розробку iOS та Swift, або якщо ви хочете зв’язатися, надішліть мені твіт чи підпишіться на мене у Twitter @andyyhope , це справді робить мій день.

Енді Хоуп (@AndyyHope) | Twitter

Інженер iOS. Блогер / спікер Swift та iOS twitter.com