Те, кто проходит собеседования на втором языке, редко проваливаются на коде. Они проваливаются на тишине: две минуты печати без единого слова или решение не той задачи, потому что не задали вопрос. Интервьюер оценивает только то, что слышит. Этот гайд о том, как сделать ход мыслей слышимым на простом английском.
01Что слушает интервьюер
На большинстве собеседований по коду коммуникация входит в оценку. Советы Microsoft к техническим интервью и рекомендации Google просят объяснять ход мыслей и задавать уточняющие вопросы. На практике обычно смотрят на четыре вещи:
Уточнение
Вы проверяете условие, прежде чем решать.
План
Вы объясняете подход до того, как писать код.
Компромиссы
Вы говорите, почему выбрали решение и чего оно стоит.
Проверка
Вы тестируете свой код на примерах и граничных случаях.
Ничего из этого не требует продвинутого английского. Короткие ясные фразы работают лучше длинных и идеальных.
02Уточните, прежде чем писать код
Потратьте первые две-три минуты на то, чтобы договориться о задаче. Этого ждут, и это даёт время подумать.
- Перескажите задачу своими словами: «So we need to…»
- Спросите о входных данных: размер, тип, пустые значения, дубликаты, отрицательные числа.
- Спросите об ограничениях: время или память и подойдёт ли сначала простое решение.
- Договоритесь о маленьком примере и ожидаемом результате.
Если не понимаете слово в условии, спросите. Вопрос «Sorry, what do you mean by a ‘stable’ sort here?» звучит профессионально и слабость не выдаёт.
03Думайте вслух, но без лишних слов
Думать вслух не значит комментировать каждое нажатие клавиши. Проговаривайте решения, а не набор текста.
Используйте простые ориентиры, чтобы за вами было легко следить: «First…», «Next…», «The tricky part is…», «Now I’m handling the edge case where…». Если нужна пауза, так и скажите: «Give me thirty seconds to think about this.»
04Произносите код и сложность вслух
Многие прекрасно знают Big-O, но ни разу не произносили его по-английски. Тренируйте эти формы, пока они не зазвучат естественно:
| Как пишется | Как говорится |
|---|---|
| O(1) | “constant time” · “O of one” |
| O(n) | “linear time” · “O of n” |
| O(n log n) | “O of n log n” |
| O(n²) | “O of n squared” · “quadratic” |
| arr[i] | “array at index i” · “the i-th element” |
| i++ | “increment i” |
| != | “not equal to” |
| null / None | “null” · “none” · “if it’s empty” |
Каждый выбор объясняйте через «because»: «I’m using a set because I only need to know whether I’ve seen the value.» Затем назовите цену: «The trade-off is extra memory.»
05Если вы застряли
Застрять нормально; вредит молчание или извинения за свой английский. Интервьюеру часто важно увидеть, как вы выходите из ступора.
- Вернитесь к примеру и пройдите его вручную, вслух.
- Назовите проблему: «The issue is that I’m visiting nodes twice.»
- Предложите два варианта и спросите, какое направление им ближе.
- Принимайте подсказку спокойно: «That helps, thank you. So if I…»
06Системный дизайн на английском
Раунд по системному дизайну почти целиком состоит из разговора, поэтому структура важнее словаря. Каждый раз держитесь одного порядка:
Требования
Функциональные и нефункциональные: пользователи, масштаб, задержки, согласованность.
Оценки
Примерные цифры: запросы в секунду, объём данных за год.
Общая схема
Основные компоненты и потоки данных между ними.
Детали
Один-два компонента подробно, по выбору вместе с интервьюером.
Компромиссы
Что вы измените при десятикратной нагрузке и что может отказать.
Назовите компромисс до того, как спросят: «I’d accept eventual consistency for the feed, because a few seconds of delay is fine for users.»
07Фразы для каждого этапа
| Этап | Фразы |
|---|---|
| Пересказ задачи | “Just to make sure I understand: we get a list of transactions, and we need the top three customers by total spend?” |
| Уточняющие вопросы | “Can the input be empty?” · “Are the values always positive?” · “Roughly how large can n get?” · “Should I optimise for time or memory?” |
| Объяснение плана | “Let me walk through a small example first.” · “My plan is: first…, then…, and finally….” |
| Выбор и компромиссы | “I’m choosing a hash map here because lookups are constant time.” · “The trade-off is extra memory.” |
| Проверка кода | “Let me test this with the edge cases: an empty list, one element, and duplicates.” · “I think there’s an off-by-one here; let me check.” |
| Если застряли | “Let me think about this for a moment.” · “Could I talk through two options and get your view?” · “Would a hint be okay here?” |
| Системный дизайн | “Before I design anything, can we agree the requirements?” · “Let me estimate the load first.” · “The bottleneck here is likely the database writes.” |
| Если что-то не расслышали | “Sorry, could you repeat the last part?” · “Do you mean X or Y?” |
| Вместо | Попробуйте |
|---|---|
| “I will do the for.” | “I’ll loop through the list.” |
| “This is more fast.” | “This is faster.” · “This scales better.” |
| “I don’t know.” | “I haven’t used that, but here’s how I’d approach it.” |
| “Wait. Wait. Wait.” | “Give me a moment to think this through.” |
| “It’s finished.” | “I think this works. Let me test it with a couple of cases.” |
08Пример: первые десять минут собеседования по коду
Придуманная запись классической задачи. Прочитайте вслух реплики кандидата и обратите внимание, как мало сложного английского в них нужно.
Two Sum, вслух
Interviewer: Given an array of integers and a target, return the indices of two numbers that add up to the target.
Candidate: Okay. Just to check: can I assume there’s exactly one solution? And can I use the same element twice?
Interviewer: Exactly one solution, and no, not the same element.
Candidate: Got it. Let me try a small example: two, seven, eleven, fifteen, with target nine. The answer is indices zero and one.
Candidate: The obvious approach is to check every pair. That’s O of n squared. I think we can do better with a hash map: as I go through the array, I store each number and its index, and for each new number I check whether target minus that number is already in the map.
Interviewer: Sounds good. What’s the complexity?
Candidate: One pass, so linear time, and linear extra memory for the map. If memory were tight, I could sort and use two pointers, but then I’d lose the original indices unless I store them. Shall I go with the hash map?
Interviewer: Yes, go ahead.
Candidate: [after coding] Let me test it. With the example, at seven the complement is two, which is in the map at index zero, so it returns zero and one. Now an edge case: negative numbers work the same way. And if the array has two elements, it still works.
09Перед техническим раундом
- Я пересказываю задачу и задаю минимум два уточняющих вопроса.
- Я договариваюсь о маленьком примере до написания кода.
- Я объясняю план в трёх фразах, прежде чем печатать.
- Я умею произносить Big-O и типичный код по-английски.
- Я называю причину через «because» и компромисс.
- Я проверяю код вслух на граничном случае.
- У меня есть готовая фраза на случай, если застряну.
