Опыт интервью стажировки DE Shaw | В кампусе 2021
В первую неделю августа 2020 года Д. Э. Шоу провел в кампусе набор на должность стажера SDE (2 месяца) в нашем кампусе.
Ниже приводится краткое изложение моего опыта.
Отборочный процесс состоял из трех туров:
Раунд 1: Технический тест (90 минут) | Хакер Ранг
В этом раунде было три кодовых вопроса. Один вопрос был о массивах, а два других — о динамическом программировании. Каждый вопрос имел установленный лимит времени, который не мог быть перенесен на следующий вопрос. Три вопроса были:
- Дан массив из n чисел. Найдите количество троек, таких что Ai<Aj<Ak или Ai>Aj>Ak, где I, j, k — индексы массива и i<j<k. Подход O (n ^ 3) не прошел бы все тестовые примеры, и решение необходимо было оптимизировать до O (n ^ 2) или O (n log (n)).
- Вам дано x львов, y тигров, z леопардов и w пантер. В ряду стоит m клеток, и вам нужно заполнить все m клеток так, чтобы никакие два одинаковых животных не стояли рядом друг с другом. Найдите общее количество способов сделать это. Данными ограничениями были: (0<=x,y,z,w<=51). Это должно было быть решено с помощью DP.
- Это был стандартный вопрос DP LCS из трех строк.
Я решил первый вопрос за 15-17 минут из 25 минут, на второй вопрос у меня ушло полных 30 минут, а третий вопрос я решил за 10-12 минут из 35 минут, благодаря чему я был выбран для следующего тура .
12 студентов были отобраны для прохождения технического собеседования из 101.
Раунд 2: Техническое интервью (раунд 1) | Кодовая пара (ранг хакера) | (60 минут)
Этот раунд должен был состояться через три дня после раунда кодирования. Там была группа из двух интервьюеров, оба весьма приятные. Вы можете использовать доску для кодирования и функции интерактивной доски платформы для описания своих решений. Количество вопросов, задаваемых в этом туре, не было фиксированным для каждого кандидата, но в основном оно зависит от интервьюера.
Этот раунд требовал хорошего понимания моего основного языка программирования: C++, а также DSA и алгоритмов. Подведение итогов раунда следующее:
- Они спросили меня, какой у меня основной язык и какие языки мне нравятся.
- Как бы вы реализовали свой собственный вектор (динамический массив) на C++? На что я ответил либо с помощью связанного списка, либо с помощью саморасширяющихся массивов, используя новые и удаляемые (фактический способ реализации векторов). Затем они попросили меня подробно описать реализацию процедур добавления, удаления, поиска и доступа обеих реализаций, их временные сложности и их сравнение с другим подходом.
- Как и в предыдущем вопросе, они также запросили подробную реализацию упорядоченных и неупорядоченных карт и наборов в C++.
- Различные способы предотвращения и разрешения коллизий при хешировании
- Объединить два несортированных массива размера n и m без лишнего пробела
- Проблема обмена монет, когда нам нужен DP и когда мы можем использовать жадный.
- Некоторые другие простые вопросы DP и Greedy
- Нарисуйте NFA, DFA для заданных грамматик (2-3 разных вопроса по одному и тому же)
- Использование NFA, DFA
- Работа микропроцессора
- Расчет времени для обработки 1 миллиарда инструкций с учетом времени для каждого цикла
- Некоторые другие вопросы по инструкциям и технологическим циклам.
- Небольшое обсуждение одного из проектов из моего резюме.
- Что такое сборщик мусора
- Типы интеллектуальных указателей в C++, их использование и работа
- Недостатки использования указателей, проблема висячих указателей, дикие указатели.
- Чтобы обойти дерево в пространстве O (1)
- Медиана потока бегущих целых чисел.
- Еще несколько вопросов по DSA
3 студента из 12 были переведены на следующий этап технического собеседования. Наиболее важными факторами являются ваши баллы за программирование, отношение, уверенность и коммуникативные способности. Вы должны иметь глубокие знания хотя бы одного из языков программирования.
Раунд 3: Техническое интервью (раунд 2) | Кодовая пара (ранг хакера) | (60 минут)
Этот тур был назначен на вечер того же дня. В этом раунде также было два интервьюера. Они также были очень полезны и давали полезные советы в подходящее время. Этот раунд был в основном основан на проектах и OOPS. Итоги раунда таковы:
- Подробное обсуждение моего последнего проекта, его работы, его применения в промышленности, используемых библиотек. Затем некоторые вопросы, например, почему вы использовали этот подход, а не другой, и почему вы использовали это или почему вы не использовали это в своем проекте.
- Изменения, которые вы должны внести, чтобы масштабировать проекты и способы обработки больших объемов данных.
- Вопросы по обходу дерева
- Как удалить узел в простом связанном списке за время O(1), если указан только его адрес
- Промежуточные вопросы DP.
- Некоторые другие вопросы по основным алгоритмам.
- Объяснить все концепции ООП и их реализацию на языке программирования.
- Реализовать список в стиле python (который может принимать разные типы данных в одном списке) на С++
- Реализовать одноэлементный класс в С++ (класс, который может иметь только один объект)
- Статические переменные и функции, глобальные переменные, внешние переменные и константные переменные.
- Некоторые другие основы C++
- Разница между строго типизированными и слабо типизированными языками, динамическими и статическими языками и их примерами.
В большинстве случаев есть еще и HR-раунд, хотя в нашей ситуации его не было, возможно, из-за нехватки времени.
После этого тура на летнюю стажировку были выбраны только двое студентов, и мне посчастливилось оказаться в их числе.
После каждого раунда вы можете задать собеседнику любые вопросы, которые пожелаете. Например, вы можете узнать об используемых компанией технологиях или языках.