Breaking It Down: Как да се подходи към всеки проблем с техническо интервю

Безопасна рецепта, за да разберете как да направите всеки проблем по-управляем.

1. Когато получите въпроса (преди да напишете един ред код)

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

Неща, които трябва да изясните с вашия интервюиращ:
Какъв е очакваният принос? Каква е очакваната продукция?
Всякакви предположения, които може да имате относно определени тестови случаи

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

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

2. Писане на кода (и какво да направите, ако се забиете)

След като измислите алгоритъма си и обясните логиката си, следващото нещо, което трябва да направите, е да преведете идеята си в код.

В този момент грубата сила е напълно ок. Създаването на работещо решение (дори и времето за изпълнение и пространствената ефективност да не е перфектно) е далеч по-добро от това да се задържите да се опитате да преждевременно оптимизирате кода си.

Докато пишете кода, не забравяйте да:

  1. Говорете ясно за това, какво парче код работите в момента и защо го добавяте към решението си
  2. Опитайте се да използвате очевидни имена на променливи и направете вашия код приятен за четене
  3. Говорете с вашия интервюер чрез вашия мисловен процес и какви плюсове и минуси могат да дойдат с вашето решение
  4. Направете своя код модулен, когато е възможно (помощните функции са вашите приятели!)

За да се справиш с това неудобно мълчание, ако се заседнаш или имаш нужда от време да мислиш ...

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

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

Интервюиращият обикновено е на ваша страна и иска да види, че сте успели - само не забравяйте дали той или тя ви подсказва, никога не го игнорирайте!

3. Преглед на вашето решение и добавяне на оптимизации

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

В този момент е добре да се помисли:

  1. Възможни крайни случаи, които може да сте пропуснали
  2. Всяко изключване от една грешка (особено при индексиране или използване на цикъл)
  3. Има ли повтаряемост във вашия код, която можете да почистите?

Въпроси, които трябва да зададете, когато се опитвате да оптимизирате:

  1. Каква е сложността на текущото време и пространство?
  2. Има ли място за подобрение, ако сте използвали различна структура на данни или леко промените подхода си?

Когато преглеждате кода си, не забравяйте, че е напълно възможно да сте направили неволна грешка - опитайте се да проследите програмата си, сякаш това е нечия работа, която виждате за първи път!

Опаковане всичко

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

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

Не забравяйте, че всяко интервю е опит за обучение и независимо от резултата сте получили ценна представа, която не сте имали преди. Да останеш позитивен и да се учиш от обратна връзка е чудесен начин за непрекъснато подобряване! Късмет!

Ако това ръководство беше в състояние да ви помогне по някакъв начин, моля, изпратете клауза или две над :), това наистина означава много за мен - благодаря и успех с пътуването ви!