Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию
Реклама. ООО «ЛитРес», ИНН: 7719571260.
Оглавление
Гейл Макдауэлл. Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию
Предисловие
Введение
Что-то не так
Мой подход
Моя страсть
От издательства
Часть I. Процесс собеседования
Небольшое вступление
Как выбираются вопросы
График и карта подготовки
Процедура оценки
Неправильные ответы
Дресс-код
10 наиболее частых ошибок
1. Использование компьютера
2. Игнорирование поведенческих вопросов
3. Отказ от псевдоинтервью
4. Попытка зазубрить ответ
5. Решение задачи «в уме»
6. Спешка
7. Грязный код
8. Отказ от проверки
9. Небрежное отношение к исправлению ошибок
10. Отказ от решения
Часто задаваемые вопросы
Нужно ли мне говорить интервьюеру, что я уже знаком с вопросом?
Какой язык программирования следует использовать?
После собеседования мне ничего не сказали. Мне отказали?
Могу ли я попытаться еще раз, если мне отказали?
Часть II. За кулисами
Microsoft
Amazon
Apple
Yahoo!
Часть III. Нестандартные случаи
Кандидат-профессионал
Тестеры и SDET
Менеджеры программ и менеджеры продукта
Стартап
Процесс подачи заявления
Виза и разрешение на работу
Резюме
Процесс собеседования
Часть IV. Перед собеседованием
Получаем «правильный» опыт
Налаживаем связи
Правильный круг знакомств
Как построить сильный круг знакомств
Идеальное резюме
Правильный размер
Трудовой стаж
Указывайте только значимые позиции
Проекты
Языки программирования и программные продукты
Часть V. Подготовка к поведенческим вопросам
Поведенческие вопросы
Как подготовиться
Ваши слабые места
Что заставляет вас работать
Какие вопросы нужно задавать интервьюеру
Ответы на поведенческие вопросы
Отвечайте четко, но без высокомерия
Часть VI. Технические вопросы
Подготовка
Как организовать подготовку
Что нужно знать
Таблица степеней двойки
Нужно ли знать все о программировании на C++, Java или других языках
Ответы на технические вопросы
Пять шагов к решению
Шаг 1. Задайте вопросы
Шаг 2. Разработайте алгоритм
Шаг 3. Псевдокод
Шаг 4. Код
Шаг 5. Проверка
Пять подходов к алгоритмизации
Подход 1. Приводим пример
Подход 2. Сопоставление с образцом
Подход 3. Упростить и обобщить
Подход 4. Базовый случай и сборка решения
Подход 5. Мозговой штурм структур данных
Как выглядит хороший код
Структуры данных
Обоснованное многократное использование кода
Модульность
Гибкость и надежность
Проверка
Часть VII. Жизнь после собеседования
Реакция на предложение и на отказ
Сроки принятия решения
Вы отказываетесь от работы
Вам отказали
Вам сделали предложение
Финансовый пакет
Карьерный рост
Стабильность компании
Удовольствие от работы
Переговоры
На работе
Создайте график своего карьерного роста
Устанавливайте прочные отношения
Спросите себя, что вам нужно
Часть VIII. Вопросы собеседования
Структуры данных. Вопросы и советы
1. Массивы и строки
Хэш-таблицы
ArrayList (динамический массив)
StringBuffer (буфер строк)
Вопросы интервью
2. Связные списки
Создание связного списка
Удаление узла из односвязного списка
Метод бегунка
Рекурсия и связные списки
Вопросы собеседования
3. Стек и очередь
Реализация стека
Реализация очереди
Вопросы собеседования
4. Деревья и графы
Потенциальные ловушки
Бинарное дерево vs бинарное дерево поиска
Сбалансировано vs несбалансировано
Полнота дерева
Обход бинарного дерева
Балансировка: красно-черные и АВЛ-деревья
Префиксное дерево
Обход графа
Поиск в глубину
Поиск в ширину
Вопросы собеседования
Концепции и алгоритмы. Вопросы и советы
5. Поразрядная обработка
Расчеты на бумаге
Биты: трюки и факты
Основные задачи: получение, установка, очистка и обновление бита
Извлечение бита
Установка бита
Очистка бита
Обновление бита
Вопросы собеседования
6. Головоломки
Начните говорить
Правила и шаблоны
Балансировка худшего случая
Алгоритмический подход
Вопросы собеседования
7. Математика и теория вероятностей
Простые числа
Делимость
Является ли число простым
Список простых чисел: решето Эратосфена
Теория вероятностей
Вероятность события {A and B}
Вероятность события {A or B}
Независимость событий
Взаимоисключающие события
Обратите внимание!
Вопросы собеседования
8. Объектно-ориентированное проектирование
Как подготовиться к заданиям по ООП
Разработка шаблонов
Singleton
Factory Method
Вопросы собеседования
9. Рекурсия и динамическое программирование
С чего начать
Динамическое программирование
Простой пример динамического программирования: числа Фибоначчи
Рекурсивные и итерационные решения
Вопросы собеседования
10. Сортировка и поиск
Общие алгоритмы сортировки
Алгоритмы поиска
Вопросы собеседования
11. Масштабируемость и ограничения памяти
Пошаговый подход
Что нужно знать: информация, стратегия и проблема
Типичная система
Разделение данных
Пример: найдите все документы, содержащие список слов
Вопросы собеседования
12. Тестирование
Чего ожидает интервьюер
Тестирование реального объекта
Тестирование программного обеспечения
Тестирование функций
Поиск и устранение неисправностей
Вопросы собеседования
Базовые знания. Вопросы и советы
13. C и C++
Классы и наследование
Конструкторы и деструкторы
Виртуальные функции
Виртуальный деструктор
Значения по умолчанию
Перезагрузка операторов
Указатели и ссылки
Ссылки
Арифметика указателей
Шаблоны
Вопросы собеседования
14. Java
Подход к изучению
Ключевое слово final
Ключевое слово finally
Метод finalize
Перегрузка vs переопределение
Java Collection Framework
Вопросы собеседования
15. Базы данных
SQL-синтаксис и его варианты
Денормализованные и нормализованные базы данных
SQL-операторы
Запрос 1: регистрация студента
Запрос 2: размер аудитории
Проектирование небольшой базы данных
Проектирование больших баз данных
Вопросы собеседования
16. Потоки и блокировки
Потоки в Java
Расширение класса Thread
Расширение класса Thread vs реализация Runnable-интерфейса
Синхронизация и блокировки
Методы синхронизации
Синхронизованные блоки кода
Блокировки
Взаимные блокировки и их предотвращение
Вопросы собеседования
Дополнительные задачи
17. Задачи умеренной сложности
18. Задачи повышенной сложности
Часть IX. Решения
Структуры данных: решения
1. Массивы и строки
Структуры данных: решения
2. Связные списки
Структуры данных: решения
3. Стеки и очереди
Структуры данных: решения
4. Деревья и графы
Концепции и алгоритмы: решения
5. Поразрядная обработка
Концепции и алгоритмы: решения
6. Головоломки
Концепции и алгоритмы: решения
7. Математика и теория вероятностей
Концепции и алгоритмы: решения
8. Объектно-ориентированное проектирование
Концепции и алгоритмы: решения
9. Рекурсия и динамическое программирование
Концепции и алгоритмы: решения
10. Сортировка и поиск
Концепции и алгоритмы: решения
11. Масштабируемость и ограничения памяти
Концепции и алгоритмы: решения
12. Тестирование
Базовые знания: решения
13. C и C++
Базовые знания: решения
14. Java
Базовые знания: решения
15. Базы данных
Базовые знания: решения
16. Потоки и блокировки
Дополнительные задачи: решения
17. Задачи умеренной сложности
Дополнительные задачи: решения
18. Задачи повышенной сложности
Благодарности
Об авторе
Отрывок из книги
Дорогой читатель!
Я не HR-менеджер и не работодатель, а всего лишь разработчик программного обеспечения. Именно поэтому я знаю, что может произойти на собеседовании (например, вас попросят быстренько разработать блестящий алгоритм, а затем написать к нему безупречный код). Мне самой давали такие же задания, когда я проходила собеседование в Google, Microsoft, Apple, Amazon и в других компаниях.
.....
Есть много разных способов решить такую задачу.
Неудачная реализация
.....
Пользователь
Код в примерах просто ужасен
В данном переводе примеры кода просто ужасные. Код не виделен читабельно. Читать очень тяжело. В оригинале намного лучше.