Support us

Собеседования в Нью-Йорке

Оставить комментарий
Собеседования в Нью-Йорке
Так уж получилось, что нелёгкая занесла меня в Нью-Йорк, где мне пришлось искать работу программистом. Думаю, многим будет любопытным узнать, как “там” (точнее тут) проходят собеседования и что на них спрашивают, поэтому я решил поделиться своим опытом. Если интересно, жмите "далее", иначе прошу прощения за спам. Исходные данные: имеется опыт чуть более 5 лет на С++ и столько же на Яве, а самое главное - есть гринкарта, так что заставлять работодателя оформлять рабочую визу не приходится. Для начала несколько общих слов. Начинается всё с того, что тебе звонит рекрутер. В большинстве случаев, сотрудник кадрового агентства, ищущий сотрудника для своего клиента. Как правило, с ним разговор за жизнь: с чем работал? сколько опыта в ...? Почему ушёл с прошлой работы и т.д. Технических вопросов здесь, как правило, не задают. Хотя один раз мне повезло нарваться на сказочно стереотипный технический телефонный тест с человеком, не фига в программировании не шарящим (вопросы были в стиле ай-эн-ти ай equals to one semicolon new line ай плас плас семиколон new line system dot out dot prшntln open bracket ай close bracket semicolon, какой будет результат?). В одном случае рекрутер перед тем, как презентовать меня клиенту, устроил ещё и внутреннее телефонное собеседование с кем-то вроде сотрудника кадрового агенства (или, возможно, с человеком, не так давно ими трудоустроенным). В другом случае прислали примерно такое тестовое задание (перевод мой):
  1. реализовать shuffle массива без использования стандатной библиотеки;
  2. Есть класс “Человек” с полями id, имя. Есть класс “Счёт” с полями id, id человека, сумма (связь “один человек - много счётов”). Есть класс “Результат” с полями id человека, коллекция его счетов, общая сумма денег на его счётах. Реализовать метод, принимающий на вход коллекцию людей и коллекцию счётов и возвращающий коллекцию результатов.
  3. Есть класс “Бабло” с полями: общая сумма; процент, определяющий, какая часть лежит в банке; процент, определяющий, какая часть лежит в кармане; процент, определяющий, какая часть лежит где-то ещё (гарантируется, что сумма всех трёх процентных полей равна единице). Написать метод, принимающий коллекцию таких объектов и возвращающий результирующий объект (с полями: общее количество денег, процент, сколько денег из общего количества лежит в банках, и т.д.) Всё реализовать на 5-й или 6-й яве, предоставить юнит-тесты.
Если всё проходит благополучно, назначают техническое телефонное интервью с работодателем. Судя по моим впечатлениям, это обязательный шаг - по крайней мере в моём случае собеседований без предварительного телефонного интервью не было вообще. Беседа занимает минут 30-40, проходит в заранее согласованное время. В большинстве случаев в качестве средства коммуникации используется телефон (в одном случае, впрочем, был Скайп). Примерные вопросы на телеинтервью:
  1. Пользователь набирает в своём любимом браузере http://bla-bla-bla.com, получает какую-то страницу. Расскажите как можно более подробнее, что происходит между нажатием enter и отображением страницы. Что изменится, если набрать https?
  2. Расскажите, как бы вы реализовали hash map (забегая вперёд, скажу, что имплементация hashmapa - это по- моему самый популярный вопрос, не было ни одного интервью, где бы его не было). Какова сложность вставки / поиска элемента?
  3. Как бы вы реализовывали такую функцию: на вход массив intов и еще один int. Вывести все пары из массива, сумма которых равна указанному числу. Какова сложность такого алгоритма?
  4. Приведите пример, объясняющий, что такое полиморфизм.
  5. Дано двоичное дерево (значения не обязательно отсортированы, просто двочичное). Предложить алгоритм, определяющий, симметричное ли оно.
  6. Дан текстовый файл, содержащий слова. Предложить алгоритм, которая печатает 10 самых частых слов. Какова его сложность?
  7. Предложить структуру объектов для представления записей из телефонной книжки. У каждой человека может быть телефон, адрес, etc. Какие изменить эти объекты, если у каждого человека может быть несколько телефонов или адресов, и т.д.
  8. Дан связанный лист. Определить, есть ли в нём циклы.
  9. Чем hash table отличается от hash map? Кстати, на другом интервью был другой вопрос на ту же тему: чем hash table отличается от hashset? :-) впрочем, я подозреваю, что интервьюер оговорился.
  10. Чем процесс отличается от потока?
  11. Есть класс с двумя методами, оба - synchronized. Создаётся объект класса и два потока, объект передаётся в потоки. Первый поток дёргает первый метод, второй - второй. Что произойдет? Что изменится, если один из методов сделать static? А если оба?
  12. В чём отличия состояний running и runnable у потока? Если поток уже running, можно ли его вернуть в состояние runnable? Что делает метод yeiild?
  13. У класса Thread в Яве есть метод stop, который deprecated с незапамятных времён. Как вы думаете, почему? Если Вам требуется похожая на stop функциональность, как бы Вы её реализовали?
  14. Какие можете припомнить различия между struts 1 и struts 2?
  15. Чем вам нравится и чем не нравится spring?
  16. В чём разница между JSP и сервлетом?
  17. Серверная часть посылает JSON-response. Что должен сделать JavaScript на стороне клиента, чтобы этот JSON распарсить?
  18. Как трекается сессия?
Самое интересное, конечно же, если дело доходит до личного интервью. Наибольшое отличие от наших собеседований в том, что собеседует тебя не один-два человека, а как минимум 4-5, а то и больше, но не все сразу, а один за другим. На каждого уходит минут по 40, соответственно общее собеседование может очень сильно растянуться. Рекорд - это где-то с 10 до 16.30. Организация при этом может сильно различаться. В хороших случаях применяется какое-то разделение ролей (например, первый человек спрашивает тебя о предыдущих проектах, о самых интересных задачах, с которыми приходилось столкнуться, второй спрашивает алгоритмистику, третий - чисто технические вопросы по Яве и фреймворкам, четвёртый - “а нарисуйте мне классы для такого-то поекта” и так далее). Иногда собеседующие ведут какой-то журнал вопросов, чтобы избежать повторений. Но это в хороших случаях. А во многих, увы, информацией между собой интервьюеры не обмениваются и роли не распределяют. В итоге довольно часто разговор может получится примерно таким: Интервьюер номер один: "Здравствуйте, меня зовут так-то. Чем вы занимались на прошлой работе? Как реализуется hash map?” Дальше какой-нибудь вопрос про потоки или synchronized. И 4й вопрос - по вкусу. Интервьюер номер два: как реализуется hash map и всё то же самое на 75%. Интервьюер номер три: … и так далее. В итоге hash map, прямо-таки скажем, несколько задалбывает. Некоторые типичные или просто запомнившиеся вопросы:
  1. Как предотвратить SQL injection в Яве.
  2. Первый пользователь в 9 утра загружает запись из БД для редактирования и идёт курить. Второй пользователь загружает ту же запись в 9.30, меняет одно поле и быстро сохраняет. Первый в 10.00 заканчивает редактирование другого поля и сохраняет всю запись, в результате чего изменение от второго пользователя благополучно теряется. Какие есть стратегии для предотвращения такой ситуации.
  3. Что-нибудь не очень сложное по SQL, типа написать запрос, который извлекает запись с максимальной датой.
  4. Есть программа на Яве, при запуске валится с outofmemory. Как можно пофиксить? Исходя из вашего опыта, можете припомнить максимальное значение этого волшебного аргумента в случае 32-разрядной ява-машины? Но он ощутимо меньше, чем разрешённые 4 gb, куда остальная память девается?
  5. Создаётся объект какого-то класса, складывается в hash map. Затем у объекта модифицируется какое-то поле, влияющее на hash code. Затем у hashmap’ы спрашивают, содержит ли она такой объект. Что она ответит?
  6. Есть массив из 999 различных чисел, каждое от 1 до 1000 (то есть фактически представлены все числа от 1 до 1000, кроме одного). Как оптимально определить, какое число осутствует.
  7. Также было несколько вопросов про фреймворки ( в зависимости от требований, одни спрашивали про struts, другие про GWT). Из уже приводить не буду. Но, в целом, достаточно базовые. И надо сказать, что спрашивают честно: если ты говоришь, что с чем-то никогда не работал, то про него никогда и не спросят.
  8. Ещё что бывает - тыкнут пальцем в какую-нибудь framework из резюме и попросят объяснить, как с ней работать, что в ней нравится, что нет. Затем выберут из резюме другую из той же области, попросят их сравнить - что лучше в одной, а что в другой.
  9. А вообще кое-кто может и про остальные пункты из резюме поспрашивать, вне зависимости от срока давности. Например, если в 2001 ты работал в области криптографии, то кто-нибудь спросит, с какими алгоритмами имел дело. И какой, например, размер блока у Rijndael. Самым неожиданным для меня вопросом был: " в одна тысяча девятьсот девяносто восьмом году вы работали в институте ядерных проблем, а почему вы оттуда ушли? Ядерные проблемы - это ведь так актуально".
  10. Интервьюер набросал на доске кусок программы на яве, работающий со строками ( конкатенациия, substring и тд). Нарисовать на доске, что на каждом шаге происходит в памяти.
  11. Тоже хороший вопрос: сколько примерно воды в океанах.
Головоломки, якобы столь любимые американскими компаниями, лично мне попались один раз (ирония судьбы ещё и в том, что спрашивал их экс-соотечественник), зато сразу три штуки.
  1. Довольно известная - дано две бутылки, вместимостью на 5 и на 3 галона, и неограниченный источник воды. Отмерить 4 галона.
  2. Также довольно известная - в тёмной шляпе 10 белых носков и 10 чёрных. Сколько (минимально) носков нужно достать, чтобы гарантированно иметь два носка одинакового цвета.
  3. (Лёша, привет!) 4 человека на одном берегу реки, около моста. Есть один зонтик на 4, он вмещает 2 человека. Всем нужно перейти на другой берег, не промокнув. Первый переходит за 1 минуту, второй за две, 3-й за 5, 4-й за 10. Если двое идут под зонтиком рядом, скорость равна скорости самого медленного. Решение в лоб первый идёт со вторым (2 мин), потом первый возвращается (2 + 1 мин), потом первый идёт с третьим (2 + 1 + 5 мин), потом первый возвращается (2 + 1 + 5 + 1), потом первый идёт с четвёртым даёт 2+1+5+1+10=19 минут. А как перейти за 17 минут?
На всякий случай хотелось бы отметить, что ни в одном из упомянутых собеседований не говорилось, что вопросы представляют из себя тайну, поэтому открывая их, я вроде бы ничего не нарушаю. Было одно собеседование, содержимое которого в явном виде попросили держать в секрете. Соответственно ни один из тех вопросов в этот список не попал. Наконец, после всего этого счастья тебе поступает (ну или не поступает) предложение. Из поступивших предложений ты выбираешь самое худшее и через некоторое время повторяешь весь процесс заново. Но это уже совсем другая история.
Место солидарности беларусского ИТ-комьюнити

Далучайся!

Читайте также
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
Java по-прежнему входит в список самых популярных языков программирования. Вместе с Digitaldefynd мы составили список курсов по Java, которые подойдут как новичкам, так и людям с опытом программирования, чтобы освоить этот востребованный язык.
Число софтверных вакансий в США падает 23 недели подряд. Эксперты: это только начало
Число софтверных вакансий в США падает 23 недели подряд. Эксперты: это только начало
Число софтверных вакансий в США падает 23 недели подряд. Эксперты: это только начало
5 комментариев
США запретили IT-компаниям с господдержкой строить заводы в Китае в течение 10 лет
США запретили IT-компаниям с господдержкой строить заводы в Китае в течение 10 лет
США запретили IT-компаниям с господдержкой строить заводы в Китае в течение 10 лет
«‎‎Главная ошибка собеса — подгонять ответы»‎. Рекрутеры рассказали о найме в IT
«‎‎Главная ошибка собеса — подгонять ответы»‎. Рекрутеры рассказали о найме в IT
Bubble
«‎‎Главная ошибка собеса — подгонять ответы»‎. Рекрутеры рассказали о найме в IT

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.