Эта книга поможет программисту с легкостью пройти собеседование и трудоустроиться в любую крупнейшую IT-компанию мира.
Книга включает в себя примеры тестовых заданий, которые получают соискатели на собеседовании, информацию о языках программирования, технологиях и шаблонах, которая обычно требуется для успешного интервьюирования, а также множество советов, которые помогут подготовиться к прохождению собеседования.
Author(s): Монган Дж., Киндлер Н., Гижере Э.
Series: Для профессионалов
Publisher: Питер
Year: 2014
Language: Russian
Commentary: увеличил контрастность, 600dpi
Pages: 368
Об авторах 12
О научных редакторах 13
Благодарности 14
Предисловие 15
Предисловие к первому изданию 16
Введение . 19
Цель собеседования 19
Как работать с этой книгой 21
Глава 1. С чего начать
Познайте себя
Изучение рынка
Базовая информация о состоянии рынка
Отношение к работе по субподряду
Востребованные, навыки
Завершайте проекты
Ваш профиль в Сети
Заключение
Глава 2. Подача заявления
Поиск фирм и первый контакт
Поиск
Получение рекомендаций
Обращение к специалистам по трудоустройству
Обращение непосредственно в фирму
Ярмарки вакансий
Интервью
Предварительные собеседования
Собеседования в офисе
Одежда
Роль специалистов по найму
Предложения и переговоры
Давление специалистов по найму
Обсуждение зарплаты
Как принять предложение и отказаться от него .
Заключение
Глава 3. Задачи на программирование
Процедура
Сценарий
Задачи 46
Выбор языка 47
Важность общения 47
Решение задач 48
Основные шаги 48
Если вы не знаете, что делать 51
Анализ решения 52
Определение вычислительной эффективности 52
Как выполняется анализ «О» большого 53
Лучший, средний и худший случаи 55
Оптимизация и «О» большое 55
Процедура анализа «О» большого 56
Самый эффективный алгоритм 56
Анализ объема занимаемой памяти 57
Заключение 58
Глава 4. Связные списки 59
Почему именно связные списки? 59
Разновидности связных списков 60
Односвязные списки 60
Двусвязные списки 62
Кольцевые связные списки 63
Основные операции со связными списками 63
Отслеживание начального элемента списка 63
Обход списка . 65
Вставка и удаление элементов 66
Задачи со связными списками 67
Реализация стека 67
Поддержка указателя конца списка 74
Проблемы функции removeHead 80
Поиск элемента с конца 82
Линеаризация списков ' 86
Делинеаризация списков 89
Ноль или кольцевой список 91
Заключение — 95
Глава 5. Деревья и графы 96
Деревья 96
Бинарные деревья 98
Бинарные деревья поиска 100
Кучи 102
Распространенные варианты поиска 103
Обходы 104
Графы 105
Задачи с деревьями и графами . . 106
Высота дерева 106
Прямой порядок обхода 107
Прямой порядок обхода без рекурсии 109
Ближайший общий предок 111
От бинарного дерева к куче 113
Несбалансированное бинарное дерево поиска 116
Шесть шагов до Кевина Бэйкона 119
Заключение 124
Глава 6. Массивы и строки 125
Массивы 125
С и C++ 126
Java 127
C# 128
JavaScript 129
Строки 129
С 130
C++ 131
Java 131
C# 133
JavaScript 133
Задачи с массивами и строками 133
Поиск первого неповторяющегося символа 133
Удаление символов 137
Изменение порядка слов на обратный 141
Преобразования типов Integer и String 145
Заключение 151
Глава 7. Рекурсия 153
Основные сведения о рекурсии 153
Задачи на рекурсию 157
Двоичный поиск 158
Перестановки в строке 160
Сочетания в строке 163
Телефонные номера в виде слов 167
Заключение 173
Глава 8. Сортировка 174
Алгоритмы сортировки 174
Сортировка выбором 176
Сортировка вставками 177
Быстрая сортировка 178
Сортировка слиянием 180
Задачи на сортировку 182
Лучший алгоритм сортировки 182
Устойчивая сортировка выбором 186
Многоключевая сортировка 189
Устойчивая сортировка 190
Оптимизация быстрой сортировки 192
Сортировка блинов 196
Заключение 198
Глава 9. Параллелизм 200
Основные понятия 201
Программные потоки 201
Системные и пользовательские программные потоки 202
Мониторы и семафоры 202
Взаимная блокировка .. 203
Пример использования программных потоков 204
Задачи на параллелизм 207
Активное ожидание 207
Производитель/потребитель 210
Обедающие философы 213
Заключение 217
Глава 10. Объектно-ориентированное программирование 218
Основные понятия 218
Классы и объекты 218
Наследование и полиморфизм 219
Конструирование и удаление объектов 221
Задачи на объектно-ориентированное программирование 222
Интерфейсы и абстрактные классы .....— 222
Виртуальные методы — ..— 224
Множественное наследование 226
Заключение 227
Глава 11. Паттерны проектирования 228
Что такое паттерны проектирования? 228
Зачем нужны паттерны проектирования? 229
Паттерны проектирования на собеседовании 229
Распространенные паттерны проектирования 230
Порождающие паттерны 230
Поведенческие паттерны 233
Структурные паттерны 234
Задачи с паттернами проектирования 235
Реализация паттерна Одиночка 235
Декоратор или наследование 238
Эффективное обновление паттерна Наблюдатель 240
Заключение 240
Глава 12. Базы данных 241
Основные понятия 241
Реляционные базы данных 241
SQL 242
Транзакции в базах данных 247
Задачи с базами данных 249
Простой SQL-запрос 249
База данных с таблицами компаний и сотрудников 249
Максимум без групповых функций : 252
Троичная логика 254
Заключение 256
Глава 13. Графика и манипуляции битами 257
Графика 257
Манипуляции битами 259
Дополнительный код для двоичных чисел 259
Побитовые операторы 260
Оптимизация при помощи сдвига 262
Задачи на управление графикой 262
Одна восьмая окружности 262
Пересекающиеся прямоугольники 265
Задачи на манипуляции битами 269
От старшего к младшему или наоборот 270
Количество единиц 272
Заключение 276
Глава 14. Головоломки с подсчетами, измерениями и перестановками . . 277
Подход к решению головоломок — 278
Решайте реальные задачи 278
Не пугайтесь 280
Остерегайтесь простых задач 281
Оценочные задачи 281
Задачи-головоломки 282
Подсчет открытых шкафчиков 282
Три выключателя 285
Переход через мост 286
Тяжелый мрамор 290
Количество АЗС 294
Заключение 295
Глава 15. Графические и пространственные головоломки 297
Сначала нарисуй 297
Графические и пространственные задачи 298
Лодка и причал 298
Подсчет кубиков 301
Лиса и утка 305
Горящие фитили 308
Бегом от поезда 309
Заключение 311
Глава 16. Вопросы общего характера 312
Подготовка 312
Задачи 313
C++ и Java 314
Дружественные классы 315
Передача аргументов 316
Макросы и встраиваемые функции 317
Наследование 320
Сборка мусора 320
32- и 64-разрядные приложения 322
Производительность сети 323
Безопасность веб-приложений 324
Шифрование 327
Хэш-таблицы и бинарные деревья поиска 328
Заключение 328
Глава 17. Нетехнические вопросы 329
Зачем нужны нетехнические вопросы? 330
Вопросы 331
Чем вы хотели бы заниматься? 331
Какой язык программирования вы предпочитаете? 332
Как можно охарактеризовать ваш стиль работы? 333
Что вы можете сказать относительно вашего опыта работы? 333
Каковы ваши карьерные устремления? 333
Почему вы ищете новую работу? 334
Каков ожидаемый вами уровень заработной платы? 334
Какую зарплату вы получали раньше? 338
Почему мы должны нанять именно вас? 338
Почему вы хотите у нас работать? 338
Есть ли у вас вопросы? 339
Заключение 339
Приложение. Резюме 340
Техническое резюме 340
Плохой пример 340
Продавайте себя 344
Будьте кратким 344
Указывайте нужную информацию 345
Выражайтесь понятно и лаконично 346
Только относящаяся к делу информация 348
Обратный хронологический порядок 349
Проверяйте ошибки 350
Улучшенная версия , 350
Руководители и старшие разработчики 352
Резюме под конкретную вакансию 359
Примеры резюме 360
Заключение 365