Какие вопросы типа FizzBuzz для веб-разработчиков или разработчиков SQL? [закрыто]

10

Через некоторое время мы снова нанимаем, и я проверяю тесты для программистов; некоторые из них немного устарели. Каковы некоторые из вопросов типа FizzBuzz для веб-разработчиков и SQL? То есть не слишком тривиально, но все же разрешимо за пять-десять минут с ручкой и бумагой и без Google?

Обычно я исключаю около двух третей или более кандидатов на основе резюме, а затем всех, кроме нескольких действительно хороших кандидатов, в одномчасовом собеседовании (которое может быть по телефону). В этот момент кандидат пишет тест на личность и имеет шанс написать немного кода, похожего на FizzBuzz. Итак, я не пытаюсь исключить группу кандидатов, но я пытаюсь подтвердить свою первоначальную оценку того, что кандидат может быть нанят и способен кодировать.

Domchi
источник
2
Какие навыки вы ищете в веб-разработчике?
Одед
Я думаю, что я ищу понимание HTML / CSS / JSON / HTTP; как упоминала Рейчел, FizzBuzz отлично подходит для тестирования Javascript / PHP / и т. д.
Домчи

Ответы:

12

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

Подходящей заменой SQL было бы просто попросить кандидата написать инструкцию SQL, например выбрать поля «Имя» в двух соединенных таблицах, которые начинаются с A. Это просто и демонстрирует, что кандидат на самом деле действительно знает SQL.

SELECT Table1.Name, Table2.Name
FROM Table1 
INNER JOIN Table2 ON Table1.Id = Table2.Id
WHERE Table1.Name LIKE 'A%' OR Table2.Name LIKE 'A%'

Для веб-разработчика я бы просто спросил их FizzBuzz. То, что вы программируете для Интернета, не означает, что вам не хватает умения выполнять базовую логику программирования.

Если вы ищете актуальные вопросы для интервью, есть много хороших онлайн, которые вы можете найти с помощью быстрого поиска. Я нашел больше, чем я хотел бы перечислить, потратив 10 секунд с Google.

Рейчел
источник
2
Объединения - хороший способ отделить новичков от более продвинутых программистов на SQL, поскольку в программировании на SQL обычно требуется другая парадигма мышления, чем на стороне сервера, что обычно является обязательным условием. Объединения и подзапросы вводили меня в заблуждение, пока я не начал думать об операторах SQL в терминах наборов.
Крис С
@ CCRicers Я согласен. И если вы проводите собеседование для опытного разработчика SQL, я бы на самом деле также добавил к нему требование GROUP, поскольку я немного поработал с SQL, прежде чем полностью понял, что означают группы и как они работают
Рэйчел
Подумайте о необходимости самостоятельного присоединения: «СОЗДАТЬ СОТРУДНИКА ТАБЛИЦЫ (ИД NUMBER, ИМЯ ТЕКСТ, НОМЕР MANAGER_ID)» затем «Как я могу составить список сотрудников и их руководителей?»
Кевин Клайн
В зависимости от типа базы данных / позиции SQL, которую вы нанимаете (и опыт разработчика / ваше окружение), вы можете запросить фактический ответ «FizzBuzz».
Заводная муза
И у него есть дополнительное преимущество - плохая спецификация, поэтому он проверяет, разъясняет ли кандидат требования перед написанием кода.
Питер Тейлор
4

Вот ответ, который я дал на очень похожий (возможно, дублирующий) вопрос, который был закрыт на этом сайте.

Чрезвычайно простой уровень: заданная таблица сотрудников со столбцами EmpID, FirstName, Lastname, HireDate и TerminationDate: напишите запрос, чтобы вернуть всех сотрудников, все еще работающих в компании, с фамилиями, начинающимися с «Smith», отсортированного по фамилии и имени.

Простой уровень Учитывая приведенную выше таблицу Employee, а также новую таблицу «AnnualReviews» со столбцами EmpID и ReviewDate: напишите запрос, чтобы вернуть всех сотрудников, у которых никогда не было отзыва, отсортированного по HireDate.

Средний уровень
Учитывая приведенную выше таблицу сотрудников, напишите запрос, чтобы рассчитать разницу (в днях) между наиболее и менее штатным сотрудником, все еще работающим в компании?

Сложный уровень Учитывая приведенную выше таблицу сотрудников, напишите запрос, чтобы рассчитать самый длинный период (в днях), который компания прошла без найма или увольнения.

Уровень сложности
Снова, используя одни и те же таблицы, напишите запрос, который возвращает каждого сотрудника, и для каждой строки / сотрудника указывается наибольшее количество сотрудников, которые работали в компании в любое время в течение срока их службы, и первая дата, когда был достигнут максимальный уровень. Дополнительные баллы за неиспользование курсоров.

JohnFx
источник
1
Интересный вопрос. Тем не менее, уровень «Hard» / «Hard» кажется мне действительно сложным. Я полагаю, что даже имея приличный опыт работы с SQL, это слишком сложно решить в ситуации интервью. Может быть, если вы оставите кандидата в покое на полчаса или около того.
Слеське
Я мог бы сказать, что «сложный» вопрос был трудным, когда я понял, что даже не знаю, что такое курсор ... и я использовал MySQL каждый день! : - /
thesunneversets
@Johnfx Пожалуйста, посмотрите эти ответы для ваших проблем, с которыми я буду беседовать послезавтра, docs.google.com/document/d/…
mr_eclair
Зачем тебе я на это смотрю. Вы можете проверить это самостоятельно и посмотреть, получите ли вы правильный ответ.
JohnFx
3

Как насчет самого fizzbuzz? Вот версия Oracle:

select case when mod(level,35) = 0 then 'fizzbuzz'
            when mod(level,7) = 0 then 'buzz'
            when mod(level,5) = 0 then 'fizz'
            else to_char(level) end fizzbuzz
from dual connect by level <= 100

источник
1
+1 за удивительность, но я думаю, что таблицы виртуальных чисел не появляются достаточно часто, чтобы быть в каждом наборе инструментов SQL. Вы бы заметили это
Конрад Фрикс
0

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

Что-то вроде этого:

Часть 1. Создайте функцию, которая будет вычислять N-й или последний день недели в данном месяце, т.е. первый, третий, последний вторник в следующем месяце.

Часть 2 (при желании): Разработайте таблицы для хранения временных выражений для повторяющихся расписаний. Расписание может быть любым из «N-го дня недели одного или нескольких месяцев» или «N-го дня одного или нескольких месяцев» или «каждые N дней от даты».

Например, 15 числа каждого месяца, последняя среда каждого марта, последний день каждого месяца, каждые 17 дней со 2 декабря 2008 года и т. Д.

Eli
источник
2
-1: Работать со временем и правильно его понимать - действительно сложно. Угадайте, почему существуют такие библиотеки, как JodaTime, а не просто тривиальная часть программного обеспечения.
Себастьян
@sebastiangeiger Я согласен. Я работаю с SQL почти ежедневно, и хотя я могу эффективно использовать функции даты SQL, я не смог бы сделать что-то подобное быстро или легко без помощи Google. Фактически, мне нужно было сделать это несколько месяцев назад, и после нескольких минут попыток выяснить это в SQL, я просто прогуглил это и получил несколько скриптов, которые я использую с некоторыми изменениями, чтобы удовлетворить мои потребности.
Рэйчел
Я не ищу проблемных зон; Я ищу что-то, с чем любой среднестатистический разработчик работает ежедневно и может вспомнить без каких-либо проблем и в незнакомой среде (компьютер недоступен). Хотя ваш пример не так уж сложен, я бы поставил перед кем-то, кто кодирует передо мной, проблему, чтобы понять, как он думает.
Домчи
1
@ Или я думаю, что FizzBuzz должен быть решен / закодирован соответствующим образом.
Аарон Макивер
1
Я не думаю, что часть 2 - хороший вопрос. На самом деле эта тема имеет странное решение, которое не встречается практически ни в одной другой проблеме проектирования баз данных в бизнесе. незнание ответа не является признаком плохого знания SQL.
NoChance