Любые хорошие темы, связанные с собеседованием? - PullRequest
6 голосов
/ 22 июня 2010

При опросе выпускников я обычно задаю им вопросы о структурах данных, алгоритмах и теории сложности. Я действительно хотел бы задать вопрос, который позволит им показать свое знакомство с многопоточными концепциями, не вдаваясь в языковые проблемы.

Есть хорошие вопросы? Единственный вопрос, о котором я могу подумать, это как написать Singleton, который поддерживает многопоточный доступ.

Ответы [ 4 ]

3 голосов
/ 22 июня 2010

Классический вопрос «напишите мне очередь потребителя-производителя» мне кажется достаточно хорошим. Вы можете заранее поговорить о синхронизации вручную в течение пяти минут или около того (например, начните с «Что делает Object.wait()? С какими другими методами в Object это связано?». Можете ли вы привести пример, когда вы могли бы использовать эти? Какие еще методы параллелизма вы могли бы использовать на практике [потому что на самом деле довольно редко, когда использование примитивов ожидания / уведомления является наилучшим подходом]? »). Убедитесь, что кандидат адресует (или, по крайней мере, дает понять, что он в курсе) и атомарность («пропущенные обновления») и изменчивость (видимость нового значения в других потоках)

Затем, после того, как вы поговорили об их теории, заставьте их потратить несколько минут на написание кода для очереди примитивного производителя-потребителя. Это должно быть просто для любого, кто на самом деле понимает, о чем они говорили выше, но это отсеет тех, кто может «говорить», но на самом деле не понимает это на практике (возможно, самая опасная группа).

Что мне нравится в этих упражнениях по мини-кодированию, так это то, что их часто легко расширять. Например, если кандидат легко выполняет задание, вы можете спросить, как бы они расширили его для ситуации XXX - придумайте требования, которые, как вы знаете, расширят границы запрашиваемого вами решения. Это не только позволяет адаптировать глубину задаваемых вопросов, но и дает представление о том, насколько хорошо кандидат справляется с разъяснением требований и модификациями существующего дизайна (что очень важно в этой отрасли).

1 голос
/ 24 июня 2010

Поговорите с ними о популярной, но малоизвестной теме, в которой обработка потоков необходима.

Я рекомендую вам создать веб-сервер с ними, конечно, только на бумаге или просто на словах.Результат должен выглядеть примерно так: есть основной поток, который прослушивает сокет.Когда что-то приходит, он передает сокет в пул, затем этот поток возвращается к прослушиванию сокета.В пуле есть фиксированное количество слотов.Потоки обработки запросов предназначены для получения работы из пула.Выясните, что лучше, если потоки одновременно проверяют пул или основной поток составителя списка выбирает свободный слот / поток для нового входящего запроса.Попробуйте написать небольшой псевдокод или график для обеих сторон обработки пула.

Давайте представим небольшое приложение: счетчик страниц , которое сообщает, сколько запросов страниц было сделано с тех порзапуск сервера.Не говорите им, что счетчик должен быть защищен от одновременной модификации, позвольте им выяснить, как это сделать с мьютексами, синхронизацией или чем-то еще.Может быть, вы могли бы пропустить часть веб-сервера, приложение счетчика страниц проще определить.

Другой пример - chat , с 2+ клиентами и сервером, узнайте, как решитьпроблема в том, что все сообщения должны поступать в одном и том же порядке для всех клиентов.Или рефлекторная игра : сервер ждет случайным образом 1,5 секунды, затем говорит «прятка», и побеждает игрок, который первым нажимает пробел.Укажите его для 2 игроков, затем попробуйте расширить его до N игроков.


Кроме того, будьте внимательны с АЭС.АЭС стоит: «Программист непрограммирования».Есть парни, которые могут говорить о проблемах программирования, они знают все 3/4-буквенные сокращения (в мире Java lot , EJB, JSP, XSLT и мой любимый: POJO, которыйозначает Pure Old Java Objects, lol), они понимают и модифицируют коды или делают аналогичные программы из базы, но они терпят неудачу даже при небольших проблемах, это нужно делать самостоятельно, например, находить ближайший элемент к базе в массиве,Иногда это занимает месяцы, пока не получается.Они хорошо выступают на собеседованиях, потому что готовятся к этому.Может быть, они даже не знают, что они АЭС, это известный эффект: http://en.wikipedia.org/wiki/Dunning-Kruger_effect

Трудно распознать противоположных парней, которые не слышали о модных библиотеках или шаблонах, но они могутизучите это даже на собеседовании.(Личное замечание: мое последнее интервью было в 1999 году, и, похоже, я больше не буду давать интервью. Я никогда раньше не слышал о динамических веб-страницах, но я выяснил термин «сессия» во время интервью, вопрос былэто то, как создать простое веб-приложение для подвешенного человека. Я был нанят.)

1 голос
/ 22 июня 2010
  • Различия между мьютексом и семафор.
  • Использование условных переменных.
  • Когда не использовать темы. (например, IO мультиплексирование)
1 голос
/ 22 июня 2010

Здесь вы можете найти несколько тем для обсуждения:

  • реализация потоков (ядро против пространства пользователя)
  • поток локального хранилища
  • примитивы синхронизации
  • тупики, livelocks
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...