Читать книгу Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию - Гейл Макдауэлл - Страница 22
Часть VI. Технические вопросы
Подготовка
ОглавлениеЕсли вы купили эту книгу, то, скорее всего, уже проделали достаточно долгий путь к вершине отличной технической подготовки. Поздравляю, прекрасная работа! Но существуют как лучшие, так и худшие способы подготовки. Многие кандидаты считают, что достаточно просмотреть задачи и готовые решения. Это в чем-то похоже на попытку научиться считать, читая книги. Но если вы хотите научиться решать задачи, запоминание готовых решений не поможет.
Как организовать подготовку
Для каждой задачи из этой книги:
• Попытайтесь решить задачу самостоятельно. Я имею в виду действительно попытаться решить задачу. Вам встретится множество сложных заданий – и это нормально. Когда вы решите задачу, подумайте об эффективности использования пространства (памяти) и времени выполнения. Задайтесь вопросом, можно ли ускорить выполнение программы, оптимизируя использование памяти, и наоборот.
• Запишите код алгоритма на бумаге. Вы всю жизнь программировали на компьютере, и это, безусловно, хорошо. Но на собеседовании вам не поможет ни подсветка синтаксиса, ни автозавершение кода, ни компиляция. Сымитируйте условия собеседования, записывая код на бумаге.
• Протестируйте свой код. Представьте, что вы – компилятор, проверьте код на наличие ошибок. Вам придется это делать на собеседовании, поэтому лучше подготовиться заранее.
• Введите написанный код в компьютер «как есть», возможно, вы обнаружите множество ошибок. Проанализируйте все ошибки и сделайте все, чтобы на настоящем собеседовании их не допустить.
Очень полезны псевдоинтервью. На CareerCup.com вы найдете примеры псевдоинтервью с сотрудниками Microsoft, Google, Amazon – используйте их, когда будете практиковаться с друзьями. Хотя ваши друзья не являются профессиональными интервьюерами, они в состоянии проверить решения задач на программирование и алгоритмизацию.
Что нужно знать
Большинство интервьюеров не будут задавать вопросы о конкретных алгоритмах балансировки двоичного дерева или других сложных алгоритмах. Честно говоря, они сами их уже забыли, ведь такие вещи забываются сразу после окончания учебы.
Вам нужно знать основы.
1[8]
Убедитесь, что вы понимаете, как использовать и реализовывать каждую из задач, знаете их область применения, эффективность использования памяти и время выполнения. Вам могут задать вопрос по теме из таблицы или попросить реализовать какую-либо ее модификацию.
Обратите внимание на хэш-таблицы – это наиболее важная тема. Она часто встречается на собеседованиях.
Таблица степеней двойки
Некоторые люди помнят ее как таблицу умножения, если вы не относитесь к их числу, вам нужно подготовиться. Таблица степеней двойки пригодится в задачах масштабируемости – в расчетах необходимого объема памяти для набора данных.
Используя эту таблицу, вы можете легко рассчитать, например, хватит ли имеющегося объема памяти для хэш-таблицы, отображающей каждое 32-битное число в булевое значение.
Если вы проходите телефонное собеседование в веб-ориентированной компании, полезно держать эту таблицу перед глазами.
Нужно ли знать все о программировании на C++, Java или других языках
Хотя я лично никогда не любила вопросы такого рода (например: «Что такое vtable?»), многие интервьюеры действительно их задают. В крупных компаниях – Microsoft, Google, Amazon и других – таким вопросам не уделяется слишком много внимания. Вы должны понимать основные концепции языка, которым вы владеете, но лучше сфокусироваться на структурах данных и алгоритмах.
В то же время для небольших компаний вопросы, связанные с языками программирования, могут быть очень важны. Поищите компанию, в которой собираетесь проходить собеседование, на CareerCup.com. Если вашей компании там нет, поищите аналогичную компанию. Большинство стартапов проверяют навыки именно «их» языка программирования.
8
Про «О-большое» можно прочитать в Википедии http://ru.wikipedia.org/wiki/ «O»_большое_и_ «o»_малое. – Примеч. ред.