С втория голям бум на Силиконовата долина инженерите са имали невероятно голямо търсене от страна на стартиращи компании и технологични гиганти. За тези, които имат инженерни среди или изучават компютърни науки, светът е вашата стрида в момента.
Като се има предвид, компаниите не просто раздават работни места. Програмистите все още трябва да преминат през специализирани процеси за интервю - включително понякога страховитото техническо интервю.
Подготовката за тях може да бъде объркващи изпитания. Трябва ли да изучавате конкретни технически проекти или като цяло да се обновявате по много теми? Трябва ли да тренирате на компютър или с приятел?
Като трети инженер в Pocket Gems, който има около 165 технически служители, проведох стотици интервюта по телефона и на място. През това време научих много за това как правилно да се подготвя за такъв. Ето съветите, от които се нуждаете, за да ноктирате следващото си техническо интервю.
Съсредоточете се върху основите
Интервюиращите ще ви зададат главно въпроси относно вашите основи: структури от данни, анализ на сложността на алгоритмите, дизайн на класове и други подобни. Това ще бъдат въпроси както директно за основите (например, използвайте X, за да направите Y), така и въпроси, за които ще използвате вашите основи (повече за това по-долу).
Помислете за основите като инструментите във вашата кутия с инструменти. Те ще останат същите, без значение каква страхотна нова технология излезе. Със силни основи ще бъдете по-добре подготвени за справяне с отворени проблеми - видовете проблеми, които ние и много други стартиращи компании решават ежедневно. Като се съсредоточат върху основите, интервюиращите могат да отделят по-малко време за задаване на въпросите за интервюто и повече време да видят как мислите.
Например, може да ви бъде попитано нещо от рода на: Давате ви двоично дърво и два възли в дървото. Намерете най-ниския общ прародител на двата дадени възли за O (n) време.
Чрез този въпрос интервюиращият търси да види колко добре можете да комуникирате своя мислен процес и решение. Как мислите чрез проблема, организирате мислите си и съобщавате отговора си често е толкова важно, колкото и вашето заключение. Ние работим в сложна и постоянно променяща се среда и се нуждаем от хора, които могат както да решат трудни проблеми, така и ефективно да ги съобщават на техническите и нетехническите си съотборници.
В тази област на интервюто би трябвало да ви е удобно да обсъждате неща като низове, масиви, основен синтаксис, типове данни, свързани списъци, дървета, графики, стекове, опашки и хеш-таблици. О, и се уверете, че можете да отговорите на FizzBuzz, без да мидите око.
Бъдете готови да решавате нещата по различни начини
Всяка от вашите основи има плюсове и минуси и предлага уникално решение за определен тип проблем. След като интервюиращите ви зададат въпрос единствено относно вашите основи, те вероятно ще видят как можете да ги използвате на практика. Това се постига чрез задаване на отворени въпроси, които могат да бъдат решени по най-различни начини.
Примерен въпрос тук ще бъде: Дадено ви е аритметично уравнение като низ. Това уравнение ще има едноцифрени 0-9, събиране, изваждане, умножение и скоби. Напишете функция, която приема това уравнение и изчислява правилния отговор. Примерните входове включват „1 + 1“ и „2 * (1 + 9) - ((2 + 5) -9“).
Както преди, интервюиращият иска да види как разбивате отворени въпроси и вашия мисловен процес при избора на вашето решение. Най-важното е, че искат да видят, че можете ефективно да комуникирате сложни проблеми.
Без значение какъв въпрос или кое решение изберете, не забравяйте да мислите на глас! Ако имате различни начини за решаване на проблема, говорете чрез опциите, преди да решите кой да използвате. Той помага на интервюиращия да види и разбере вашия мисловен процес. Също така интервюиращият може да препоръча едно решение пред останалите, тъй като знае, че другите може да имат определени клопки или да са извън обхвата на интервюто.
Не се страхувайте да задавате въпроси, ако нещо не е ясно или няма много подробности. Те показват, че и вие мислите - и дават на интервюиращия усет как бихте работили с другите. Уверете се, че задавате изясняващи въпроси, за да разберете напълно въпроса и че не разширявате обхвата на проблема (напр. Какви са някои примерни входове? Трябва ли да се притеснявам за разделянето на 0? Трябва ли да се притеснявам за спестяване на дневна светлина?)
И накрая, уверете се, че сте провели устно няколко тестови случая, преди да кажете, че сте готови. Това ви позволява както да проверите кода, така и да покажете на интервюиращия, че проверявате кода си. Колкото и лесно да се правят интервюта за работа, за съжаление не можем да четем мнението ви.
Така че, докато се подготвяте, практикувайте да решавате въпроси с различни инструменти от вашата кутия с инструменти, така че да развиете интуиция за това. Знайте кога да използвате всеки от инструментите си, за да не се сблъскате по време на интервюто. И не забравяйте да практикувате пълно описание на вашия мисловен процес - това може да бъде най-трудната част за кодерите, които са свикнали да работят изолирано.
Практика, практика, практика
Колкото повече тренирате, толкова по-добре ще сте подготвени за интервю за техническо кодиране. Това е вярно за повечето неща, но особено уместно за техническите интервюта - те наистина изискват от вас да затоплите мозъка си.
Ето няколко съвета, които да ви помогнат да извлечете максимума от времето си за практика:
- Уверете се, че симулирате средата за интервю. Дайте си ограничение във времето за проблеми. Ако ще правите телефонно интервю, практикувайте и в Stypi, и в Google Документи. (Сам знам, че липсата на автоматично довършване и подчертаване на синтаксиса ме е задействало в телефонни интервюта.) Ако ще правите интервю лично, практикувайте да правите проблеми на хартия или на бяла дъска.
- Накарайте нетехнически приятел да ви зададе въпросите за интервюто и да го разгледате чрез вашите отговори. Ако можете да му го обясните, аз съм сигурен, че можете да го обясните на техния интервюиращ.
- Не чувствайте, че изневерявате, ако използвате някои от предварителните инструменти, които са там. Те често предлагат страхотна информация и практикуват въпроси. Любимите ми са уебсайтове като TopCoder и книгите Head First . Някои други книги, които говорят повече за процеса на интервю, са Програмирани интервюта, изложени и Пропукване на интервюто с код .
Техническите интервюта за кодиране могат да ви се струват доста обезсърчаващи, но с правилните видове фокусирана практика ще сте готови да ги оцените. Не забравяйте да се съсредоточите върху хляба и маслото си, основите и практикувайте много. Следвайте горните съвети и ще бъдете подготвени за следващото си интервю за техническо кодиране.
Искате повече информация? Наскоро се представих по тази тема на конференцията на UC Berkeley Engineering / Tech Career. Вижте моите слайдове от беседата по-долу за повече мисли и ресурси!