Кодирање интервјуа иза кулиса - добрих и лоших

Интервјуисање је само по себи умеће. Можете бити најбољи програмер на свету, али можда ћете и даље зезнути интервју.

Гоогле: 90% наших инжењера користи софтвер који сте написали (Хомебрев), али не можете обрнути бинарно стабло на белој табли, тако да одјебите.

- Мак Ховелл (@мкцл) 10. јуна 2015

Колико пута сте изашли из интервјуа и питали се шта сам погрешио? Зашто су ме одбили?

Као кандидат, много помаже разумевању очекивања у интервјуу.

У овом чланку желим да покажем сваком надобудном кандидату разлику између доброг и лошег интервјуа и како га анкетар доживљава.

Упоредићемо и упоредити два различита интервјуа и из њих ћемо учити како бисте могли да прилагодите своје поступке у складу са очекивањима.

Први интервју

Дозволићу да узмем исто питање изнад „Инвертовање бинарног стабла“.

Испитивач (И) : Здраво, добродошли у нашу компанију. Ја ккк радим иии. Па причај ми о себи.

Кандидат (Ц) : Ја сам ккк. Имам око 5 година искуства у развоју Бацкенд-а. Волим да решавам техничке проблеме .....

И : То је сјајно. Па да пређемо на део решавања проблема?

Ц : Свакако!

И : Дакле, дато вам је бинарно стабло. Желим да обрнете бинарно стабло и одштампате резултирајуће стабло.

Ц : (Размишљам у главу) Хммм Ок. Бинарно стабло има двоје деце. Дакле, претпостављам да инвертовање значи штампање од листа до корена. Најлакши начин да то урадите је да пређете дрво до краја и пронађете лишће ...

И : (Након 5 минута потпуне тишине)  Разумете ли питање? Да ли треба неко појашњење?

Ц : Јасно ми је . Сада само размишљам о начину штампања чворова почевши од листа.

И : Како то мислите да штампате чворове почев од листа?

Ц : Дакле, у основи би требало да штампам од листа до корена, зар не? Лако је прећи до листа. Али најтежи део је повратак уназад?

И : Хммм. Јесте ли сигурни да сте добро разумели питање? Обртање дрвета значи да бисте требали заменити леву и десну децу .

Ц : Извини, нисам јасан. Кад сте рекли обрнуто, претпоставио сам да мислите на штампање од листа до корена.

И : То је у реду (Овде сте изгубили посао) . Сад кад сте јасни, наставимо.

Ц : Да, јасан сам. Тако да сада морам заменити леви и десни чвор. То је лако тачно.

(Пише код у тишини)

def invert(node) t = node.left node.left = node.right node.right = t return node end 

Ц : Завршио сам са кодом.

И : Супер. Па, шта сте урадили овде?

Ц : Обрнуо сам стабло замењујући леви и десни чвор. Тако да задржавам темп променљиву да постигнем исто.

И : (Покушавам да гурнем ка правом решењу) Али ово мења само коријенски чвор, зар не?

Ц : (збуњено) Хмм да, тако да ће лева и десна деца бити обрнута. То је питање, зар не?

И : (Још увек нема јасноће у питању) Дакле, питање је да цело дрво треба да се обрне. Не само корен.

Ц : Ох Боже. Дакле, није само корен већ и цело дрво. Да ли сам у праву?

И : Да, то је тачно.

Ц : Ок. Пустите ме да размислим о томе.

(После 2 мин)

Ц : Мислим да сам схватио. Дакле, у основи морам да урадим исти алгоритам који сам написао за цело дрво. Да ли сам у праву?

И : Да, али како се то ради?

Ц : (Почиње писање кода)

def invert(node) n = Node.new(node.val) invert(node.left) invert(node.right) n.left = node.right n.right = node.left return n end

Па претпостављам да би ово требало да успе.

И : Хммм, да видим. (Проналази проблем. Можете ли?) Нисам сигуран да ли ради. Можете ли ме, молим вас, провести кроз то?

Ц : Наравно. Прво обрћем лево подстабло, затим десно поддрво, а затим их замењујем тако да се корен обрне.

И : Хммм. Али леви и десни чворови враћају нове чворове након замене зар не? Још увек замењујете старе чворове.

Ц : Нисам сигуран шта под тим мислите. Мислим да ће ово успети за све случајеве.

И : Сјајан човек! Понестало нам је времена. Хвала на вашем времену, било је дивно разговарати с вама. ХР ће вам се јавити.

Повратна информација

Е сад, шта мислите шта је била коначна одлука и какве су биле повратне информације анкетара? Хипотетичке повратне информације биле би нешто у вези са овим:

  • Кандидат је претпоставио пуно ствари и није разјаснио проблем.
  • Кандидат је приступио ниоткуда и иза таквог приступа није постојало одговарајуће образложење. (Сећате ли се тишине у интервјуу?)
  • Кандидат није био упознат са захтевима ни у фази примене.
  • Кандидат се борио са спровођењем и није био у стању да покупи наговештаје који упућују на решење.
  • Кандидат није успео да идентификује грешке у шифри, чак ни након што је обезбедио довољно времена и проверио да ли је решење тачно.

Да је ово стварни интервју, кандидат би био одбијен. Сад, како би требао ићи идеални интервју?

Други интервју

Испитивач (И) : Здраво, добродошли у нашу компанију. Ја ккк радим иии. Па причај ми о себи.

Кандидат (Ц) : Ја сам ккк. Имам око 5 година искуства у развоју Бацкенд-а. Волим да решавам техничке проблеме .....

И : То је сјајно. Па да пређемо на део решавања проблема?

Ц : Свакако!

И : Дакле, дато вам је бинарно стабло. Желим да обрнете бинарно стабло и одштампате резултирајуће стабло.

Ц : (Размишљајући наглас) Кул. Дакле, бинарно стабло има два чвора. Па, шта је тачно инвертовање? да ли се мења лево и десно?

И : Тачно тако. Дакле, леви чвор би требао бити на десној и обрнуто.

Ц : Ок. Дакле, у овом случају шта се дешава?

Пружа пример и појашњава улаз и излаз

И : Донекле си у праву. Али ово би се требало догодити за цело дрво, а не само за корен. (Приметите колико су рано захтеви учвршћени)

Ц : Ох, схватила сам! Тако да мислим да то морам да радим рекурзивно. Човече, то је тешко! Дај да видим. Али пре тога, само ћу проверити своје разумевање пролазећи кроз још један пример.

Пружа још један, на пример за разјашњавање недостајућих комада

И : Да, у праву си. То је резултат. Мислим да сте у потпуности решили проблем. Па како му приступити?

Ц : Да видим. Дакле, да бих заменио лево и десно, могу само да користим темп. Али како ћу онда то учинити да останем? Ох, да, могао бих само да се вратим за остале и учиним исто.

И : Супер. Да ли постоји неки проблем са тим приступом?

Ц : Хммм. Да, ако само рекурзивно заменим лево и десно, како ћу пратити старо и ново стабло?

И : Нисам сигуран да ли вас пратим. Шта је старо и ново?

Ц : Оно што сам мислио је да ће бити ажуриране деце, треба да их заменим, а не стару децу.

И : Да, тачно.

Ц : Да, могу само позвати ову функцију рекурзивно за лево и десно и те вредности сачувати у променљивој. Тада бих могао да ажурирам стабло са тим променљивим. На овај начин могу да се уверим да је цело дрво обрнуто.

И : Супер. Још нешто вам недостаје?

Ц : Не, мислим. Дакле, биће потребно О (н) време и О (1) простор јер не користим додатни простор. (Обратите пажњу на то колико кандидат активно говори о времену и простору)

И : Добро сам. Можете почети са кодирањем.

Ц : Наравно. (Разговара кроз код док кодира)

def invert(node) invert(node.left) invert(node.right) node.left,node.right = node.right, node.left return node end 

Ц : Завршио сам. Пустићу вас да вас прођем кроз мој код. Дакле, за дрво попут ... (Објашњава и суве трке на примеру)

И : Претпостављам да си у праву. Да ли ради за све случајеве?

Ц : Хммм. Претпостављам да ћу добити изузетак Нулл показивача за празно стабло. Да то поправим додавањем нулл провере.

И : Сад изгледа добро. Било шта друго што вам недостаје.

Ц : Не, мислим да су друге ствари које сам покривао попут лишћа, једног листа итд. (Обратите пажњу на то како позива сваки случај који је разматрао)

И : Супер. Ја сам добро. Неко питање? :)

Повратна информација

Па, шта мислите о овом интервјуу?

  • Кандидат је разјаснио захтеве пре почетка примене.
  • Кандидат је такође замрзнуо захтеве пролазећи кроз неколико примера и појашњавајући своје разумевање.
  • Кандидат је смислио радно решење без икаквог испитивања.
  • Кандидат је проактивно разговарао о временској и просторној сложености.
  • Током кодирања, кандидат је имао јасну визију шта ради и куда иде.
  • Кандидат је имао грешку у свом коду, а када је затражено да провери да ли има грешака, пронашао је грешку и отклонио је сам.

Закључак

Интервјуисање је потпуно другачија вештина од кодирања. Иако се добро бавите решавањем проблема, интервју је окружење у којем анкетар покушава да одлучи да ли ће вас ангажовати или не. Дакле, поред кодирања, такође морате да разумете перспективу испитивача како бисте му олакшали да вас запосли. У овом чланку желео сам да упоредим и упоредим добар интервју са осредњим. Покушајте да вежбате вештине интервјуа одвојено јер што више вежбате, то сте бољи. Можете ми се обратити ако вам је потребна помоћ током лажних интервјуа.

Овај чланак је први пут објављен на //каизенцодер.цом. Ако вам се свидео овај чланак, посетите да бисте прочитали још таквих или сазнајте више о мени!