Какие есть вопросы для проверки знаний программистов на SQL? [закрыто]

14

Какие есть вопросы для проверки знаний программистов на SQL? Каков ответ на вопрос? И что будет означать отсутствие правильного ответа с точки зрения времени, чтобы понять концепцию (и), связанную с вопросом?

ХОРОШО: вызов sql

просчеты
источник
2
Я определенно дал бы реальный живой пример и попросил бы написать сложный запрос. Например, попросите выбрать наиболее прибыльный месяц для каждого из последних 10 лет, если у вас есть таблица покупок. НО, поскольку вы также задаете вопрос и ответ, это, вероятно, означает, что вы не эксперт и не можете судить. В этом случае вы можете попробовать какую-нибудь стороннюю службу тестирования, по крайней мере, в качестве первоначального фильтра до интервью. Я хотел бы предложить tests4geeks.com . У них есть тест SQL.
Давал Патель

Ответы:

20

Это зависит от того, насколько сложным вы хотите, чтобы это было. Кроме того, я немного опасаюсь дать вам ответ, потому что у большинства проблем SQL есть несколько приемлемых способов сделать что-то, и есть также способы решения проблем SQL небрежным способом, которые вызовут другие проблемы. Человек, «оценивающий» ответ, определенно должен уметь решать его самостоятельно.

Тем не менее, вот несколько, которые я придумал с макушки головы.

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

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

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

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

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

JohnFx
источник
Здорово, ответь - очень нравится эволюция вопросов. Почему человек, задающий вопросы, должен быть в состоянии ответить на них? Почему бы просто не написать модульный тест, основанный на выводе и времени выполнения? Кроме того, что бы вы назвали, сколько соединительных недель для усвоения понятий SQL потребовалось бы среднему программисту, чтобы достичь самого сложного уровня, заданного вами? Верите ли вы также, что программист, способный ответить на самый сложный вопрос, который вы задаете, сможет эффективно решать очень большое большинство задач, связанных с SQL?
промахи
3
Причина, по которой я бы хотел, чтобы спрашивающий (или, по крайней мере, «грейдер») мог ответить на них, заключается в том, что подход может сказать вам столько же, сколько и результат. Я также беспокоюсь о том, что нетехнологический интервьюер имеет заранее написанный ответ и не принимает другие потенциально правильные ответы (на карточке написано «Moop»).
JohnFx 11.10.10
Относительно того, демонстрируют ли эти вопросы способность решать очень большое большинство задач, связанных с SQL. Если их работа будет заключаться в написании запросов, вероятно, так. Если вы ожидаете, что они будут администрировать сервер БД, вам нужно будет задать вопросы, специфичные для этого.
JohnFx 11.10.10
Спасибо за разъяснения, нетехнологический интервьюер в этом случае будет не человеком, а системой, а значит, модульным тестом и временем выполнения. Очевидно, что системы не пишут или не читают код, люди это делают, но в мире так много программистов, и, на мой взгляд, необходимость иметь их на месте в лучшем случае ограничена. Угадай, если человек провалил тест, но думал, что он прав, он всегда может пометить как правильный.
промахи
И да, целью для вопросов будет программист, а не администратор базы данных.
промахи
4

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

Еще я бы хотел убедиться, что они понимают, как выполнять GROUP BY, и использовать функции Aggregate.

И различие между UNION и UNION ALL устранило много плохих кандидатов на моей работе.

HLGEM
источник
2

Я бы спросил: «Почему и как следует очищать входные значения, данные от пользователя, которые будут использоваться в запросе SQL?»

Это необходимо , чтобы предотвратить инъекции SQL, и быть в состоянии ответить на этот вопрос требует хорошего знания о синтаксисе и команд (таких как SQL SELECT, UPDATE, DROP, DELETEи т.д.), а также , как те , можно обойти с помощью комментариев SQL , чтобы разбить запрос и введите то, что злоумышленник может пожелать сделать.

gablin
источник
1
Разве это не ответ: никогда не очищайте входные данные, используйте подготовленное утверждение?
Кевин Клайн
@ Эммад Карим, любой, кто не может ответить, не должен писать SQL.
HLGEM
@ Габлин, я действительно не понимаю, почему это так. Не могли бы вы немного объяснить? Сколько книг по SQL обсуждают эту тему?
NoChance
2

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

Большинство соискателей, которые называли себя экспертами в SQL, провалили тест. Один из них сказал, что, хотя он много лет был разработчиком SQL, он никогда не писал оператора CREATE TABLE, потому что GUI делал это для него.

У нас был похожий опыт с другими техническими испытаниями. Для сотрудников службы поддержки Windows задачи аналогичны «создать пользователя домена», «добавить принтер», «изменить права доступа к файлу». Большинство людей не могут выполнять эти задачи, особенно под давлением. Мы считаем, что если вы можете делать даже простые вещи, вы, вероятно, довольно компетентны.

Барри Браун
источник
1
Боюсь, я на стороне разработчика, использующего графический интерфейс. Вы можете провести всю карьеру без регулярного написания скриптов CREATE TABLE. Многие люди разрабатывают модели данных в инструментах CASE, которые автоматически генерируют DDL для вас. В общем, я уклоняюсь от любых тестов, которые в основном полагаются на запоминание синтаксиса, в пользу тех, которые проверяют более широкое понимание связанных с этим проблем
cjmUK
+1 @ Барри Браун: Я согласен, и это интересный момент.
промахи
0

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

KNB
источник