Току-що получих работа за разработчик във Facebook. Ето как се подготвих за интервютата си.

Току-що завърших седем интервюта на място в технологични компании от Силициевата долина. В крайна сметка приех оферта за работа по софтуерно инженерство от Facebook.

Ето как се подготвих за тези интервюта и какво научих по пътя.

Моето многогодишно пътуване към Силициевата долина

Когато изучавах компютърни науки в моя университет в Австралия, винаги си представях бъдещето като софтуерен инженер в Силициевата долина.

Хареса ми идеята да бъда в основата на всички иновации на технологичната индустрия - както и нейните грешки. Тази цел ме поддържаше мотивирана. Това ме държеше фокусиран.

Напуснах поста си на водещ инженер на iOS в невероятна компания в Мелбърн и се отправих обратно към родния си град Пърт, за да уча. Там бих се подготвил за процеса на интервюиране, който ми предстои в Силициевата долина. Знаех, че ще бъде невероятно трудно и мъчително.

Ако споменете процеса на техническо интервю пред стая от софтуерни инженери, мнозина ще се обявят против обичайните практики за интервюиране. Голяма част от аргумента идва от разсъжденията, че решаването на алгоритми на бяла дъска всъщност не представлява или превежда ежедневните задачи на софтуерен инженер.

Заради тази статия няма да влизам в този разговор. Вместо това ще изследвам тези различни видове интервюта от гледна точка на кандидата, ще се съсредоточа и върху наученото от процеса.

Интервюирането е умение

По време на подготовката си винаги знаех, че интервюто ще бъде предизвикателство. Но честно казано нямах представа колко трудно ще бъде, докато не докарам до първото си интервю.

В началото на интервютата бях използвал както платени, така и безплатни услуги, които симулираха интервюта за кодиране и бяла дъска по телефона с хора, които имат опит в интервюирането на кандидати. Тези интервюта за практика бяха от съществено значение за подготовката ми за натиска. Но както по-късно разбрах, те представляват само малка част от това, от което се състои истинското интервю.

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

Както при много други неща в живота, практиката ще подобри вашата увереност.

Различните видове интервюта, които срещнах

Ако се подготвите и се представите достатъчно добре на предварителните телефонни екрани, ще ви бъде предоставена възможност да дойдете на място и да проведете интервюта на стойност цели дни. Тези интервюта обикновено ще продължат от четири до шест часа в зависимост от компанията, с която интервюирате.

По време на пътуването ми до Силициевата долина успях да подредя общо седем интервюта на място. Това ми даде уникална перспектива за настоящия пейзаж за интервюиране.

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

Ще прегледам накратко всяка от темите, които срещнах.

Интервюта за алгоритъм

Най-често срещаният тип интервю, с което ще се сблъскате. Интервюиращият ще ви помоли да разрешите проблем на бяла дъска, който ще оцени вашите познания за структурите на данни, алгоритмите за сортиране, рекурсията, анализа на сложността във времето / пространството, както и разпознаването на шаблони и ръбове. В това интервю най-често ще излезете с решение за груба сила и след това ще се опитате да подобрите това решение и да обсъдите компромисите, ако има такива, с различните решения, които предлагате.

Това беше хлябът и маслото на моята подготовка, всеки ден в продължение на шест седмици, решавах алгоритми на евтина бяла дъска, анализирах тяхната сложност във времето / пространството, както и наистина се опитвах да разбера какво се случва на всеки ред код.

Лично аз наистина се радвам на алгоритмите за бяла дъска, защото не е задължително да се притеснявам за писането на компилируем синтаксис (през повечето време), което ми позволява да се съсредоточа единствено върху проблема, който имаме. Други хора може да не харесват бялата дъска, но на тях бих казал да я практикуват последователно и това може да промени мнението им.

Интервюта за архитектурен дизайн

Това е интересно интервю и едно, което силно подцених. Интервюиращият ще ви помоли да проектирате система (на бяла дъска, разбира се) като система за продажба на билети за паркинг, чат месинджър, Twitter емисия, наред с други често срещани системи.

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

Естествено, трябва да насочвате разговора, за да обхванете знанията си за това как работят системите. Ако сте бекенд инженер, няма да влезете в механиката на подробностите за клиентското приложение, освен ако не сте имали предишен опит в тази област. Аз съм инженер на iOS, затова говорих за архитектурни модели, модулизация на функционалността, дизайнерски модели, вместо за това как да мащабирате крайните точки на API, добавяйки работници, AWS и други.

Поведенчески интервюта

Интервюиращият ще ви зададе въпроси за себе си и как се справяте с определени видове ситуации. Подготовката за този не е толкова трудна, колкото другите, но изисква много самоанализ от ваше име.

Въпросите обикновено са в съответствие с:

Как се справяте с неуспеха?

Коя е най-голямата ти слабост?

Как разрешавате конфликти?

· Какво бихте направили по различен начин?

Чувствам, че би било доста трудно да се прецака това, но съм чувал, че много хора го правят. Те се опитват да прикрият силните си страни като слабости, да проектират отговора си на нещо, което според тях интервюиращият би искал да чуе или дори просто да прехвърли вината за провалени проекти върху други хора.

„Моята слабост е, че съм прекалено фокусиран“

„Всичко беше по вина на Джери, той беше болен през по-голямата част от проекта“

Тези интервюиращи са обучени и калибрирани, за да идентифицират глупави хора и имат голямо внимание към глупостите. Това е бърз начин да изхвърлите кандидатурата си през прозореца. Просто бъдете искрени, проявете страст към работата си, притежавайте недостатъците си, проявете инициатива за подобрение и ще се справите добре.

Култура Fit

Това обикновено се съчетава с поведенческото интервю и е фокусирано върху това дали сте съгласувани с ценностите на компанията. Например, Facebook следва хакерската култура на смелост и изпращане на нови идеи, опит чрез експерименти, без да се страхува да пречупи нещата. Докато Airbnb иска да създаде свят, в който хората да се чувстват като че ли принадлежат навсякъде, където и да отидат, така че те търсят хора с големи умения за гостоприемство.

Много от големите технологични компании много наблягат на културата и наемат хора въз основа на привеждането на този човек в съответствие с неговите ценности. Ако провеждате интервюта в някоя от тези компании, важно е да потърсите техните ценности и да намерите минали преживявания, които можете да свържете и да съобщите на интервюиращия.

Програмиране по двойки

Интересна категория, за която ще бъдете сдвоени с друг инженер пред компютър, който е настроен със среда за разработка, подобно на това, което бихте използвали в реалния свят. Получавате основна задача със списък с изисквания, които трябва да изпълните, докато завършвате всяка задача, интервюиращият ще ви помоли да внедрите повече функционалност, докато не бъде достигнат ограничението. Можете да използвате каквито ресурси искате, като Stack Overflow или онлайн документация.

Чувствам, че голяма част от успеха на кандидата в това интервю ще се определя от излагането на реалния опит. За разлика от бялата дъска, се изисква писане на синтактично правилен код, така че трябва да знаете своя език и среда отвътре и отвън, защото не искате да прекарвате твърде много време в интернет или документация в търсене на отговори.

По време на предишната ми роля щях да пиша чист код, докато работех над задача, последвана от оптимизация, след като почувствах, че задачата е завършена. Този вид работен процес не беше от полза за този тип интервюта. Успях да се изчистя в ъгъла, като оптимизирах твърде рано, което направи по-сложното възстановяване от него. Открих, че писането на скарап код и споменаването на интервюиращия, че ще го направя по различен начин в производството, се счита за достатъчно, отколкото да пиша чисто и оптимизирано.

Намиране и закърпване на грешки

Голяма част от това, което правим като инженери, се съсредоточава върху намирането и изправянето на грешки, за които ни се съобщава от различни източници. В това интервю ще ви бъде даден списък с грешки, които да намерите и поправите, както и да идентифицирате други потенциално проблемни кодове по пътя.

Видях само един екземпляр от този тип интервю и смятам, че би било доста трудно някой да се подготви истински, особено ако е младши. Всяка кодираща среда има свои малки странности и нюанси, голяма част от пачуърка, който направих, идва от предишния опит с IDE (Интегрирана среда за разработка) и свързаните с тях рамки, натрупани през годините.

Тестване на знания за домейн

Програмирането е фундаментално еднакво за повечето често срещани езици, които виждаме днес. Шансовете са, че ако знаете обектно-ориентирано програмиране на един език, тези умения най-вече ще се прехвърлят на друг.

Това интервю обаче се фокусира върху аспектите, които не могат да бъдат прехвърлени между езици или рамки. Ще бъдете интервюирани за спецификите на средата, свързани с API, управление на паметта, възможности, ограничения, история и т.н.

Практикуването може да бъде предизвикателство за тази конкретна тема. Подобно на интервюто за откриване и корекция на грешки, чувствам, че голяма част от отговорите произтичат от предишния опит. В зависимост от нивото на ролята, за която кандидатствате, отговорите, които предоставяте, могат да бъдат претеглени по различен начин. Например, ако някой, кандидатстващ за младша роля, не знае историята защо API е структуриран по определен начин, може да му бъде предоставена отстъпка. Ако обаче кандидат, кандидатстващ за старша роля, не знае, тогава той може да бъде маркиран срещу по-сурово.

Разбиране на операционните системи

В зависимост от ролята или екипа, за който интервюирате, може да имате интервю, което да се фокусира единствено върху операционните системи. В това интервю ще ви бъдат зададени въпроси, които ще оценят вашето разбиране за механиката от по-ниско ниво на операционната система на компютъра.

Разбира се, това интервю ме изненада. Операционните системи бяха нещо, което бях научил през ранните години в университета, но оттогава знанията ми станаха мъгляви по темата, което се отрази в представянето ми.

Как трябва да се подготвите

Както писах по-рано, интервюирането е самостоятелно умение. Дори ако вече сте страхотен програмист в ежедневната си работа или получавате страхотни оценки в обучението си, тези умения няма да прехвърлят точно 1: 1, когато сте в малка стая за интервюта. Постоянството, повтарянето и последователността с подготовката и практиката за интервю ще бъдат ключовите определящи фактори за вашия резултат.

Минимални познания

Ако някой би ме попитал, какво според мен ще бъдат области, върху които да се съсредоточа, бих предложил следното:

  • Научете се първо да пишете код на ръка върху хартия и бяла дъска и след това да го хвърлите в IDE за подчертаване на синтаксиса, това трябва да стане второ естество за вас.
  • Развийте задълбочени познания за структурите на данните , техните силни и слаби страни в сравнение помежду си. Открих, че внедряването на структури от данни и тяхното поведение от нулата ме научи много повече от това, което знаех от абстрактните им концепции.
  • Напълно разбирайте обозначенията Big O както за времевата, така и за пространствената сложност, това ще се съчетае перфектно с вашия алгоритъм и въпроси за сортиране.
  • Вземете всички основни алгоритми за сортиране, защото разликата във времевата / пространствената сложност има потенциал да извади от релсите вашето оптимално решение за алгоритъм, който се опитвате да разрешите.

Кога да започнете

В зависимост от вашата времева линия, може да искате да започнете по-рано, отколкото по-късно. Много от компаниите, с които съм интервюирал, са имали 12-месечен период на охлаждане преди неуспешен кандидат да може да кандидатства отново. От друга страна, ако знаете, че няма да сте готови в рамките на една година, можете също да започнете процеса сега и да усетите малко какво е да преминете през интервюто, така че когато сте готови, той ще спечели " не е почти толкова страшно.

Не се притеснявайте

Разбрахте това.

Ресурси

Фиктивни интервюта

  • interviewing.io (бета), Безплатно
  • Прамп, безплатно
  • CareerCup, платено

Алгоритми

  • Cracking the Code Interview, Book
  • байт по байт, уебсайт и YouTube
  • CS50, YouTube
  • Интервю торта, уебсайт
  • HackerRank, уебсайт
  • LeetCode, уебсайт

Операционна система

  • Концепции на операционната система, книга

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

  • Въведение в архитектурата и системите, YouTube

Поведенчески

  • Въведение в поведенческите интервюта, YouTube

Ако ви харесва това, което сте прочели днес, можете да разгледате другите ми статии за разработка на iOS и Swift, или ако искате да се свържете, моля, изпратете ми туит или ме последвайте в Twitter @andyyhope , това наистина ми прави деня.

Анди Хоуп (@AndyyHope) | Twitter

iOS инженер. Blogger / говорител на Swift и iOS twitter.com