Які питання для перевірки знань програмістів SQL? [зачинено]


14

Які питання для перевірки знань програмістів SQL? Яка відповідь на запитання? І що буде означати відсутність правильної відповіді з точки зору часу, який, можливо, зрозуміє концепцію, що стосується питання?

GOOGLED: sql завдання


2
Я напевно надам справжній живий приклад і попросив би написати складний запит. Наприклад, попросіть вибрати найвигідніший місяць для кожного з останніх 10 років, якщо у вас є таблиця покупок. Але, оскільки ви також ставите питання і відповідь, це, ймовірно, означає, що ви не експерт і не можете судити. У цьому випадку ви можете спробувати послугу тестування третьої сторони, принаймні як початковий фільтр перед інтерв'ю. Я б запропонував test4geeks.com . У них є тест SQL.
Дхаваль Патель

Відповіді:


20

Це залежить від того, наскільки важко вам це хочеться. Крім того, я трохи насторожено даю вам відповідь, оскільки в більшості проблем SQL є кілька прийнятних способів робити речі, а також існують способи вирішення проблем SQL неохайними способами, що спричинить інші проблеми. Людині, яка "оцінює" відповідь, безумовно, потрібно вміти її вирішити самостійно.

Це сказало, ось декілька я придумав з верхньої частини голови.

Надзвичайно простий рівень:
Дано таблицю працівників зі стовпцями EmpID, FirstName, прізвище, HireDate та TerминаDate:
Напишіть запит, щоб повернути всіх співробітників, які все ще працюють у компанії з прізвищами, починаючи з "Smith", відсортованого за прізвищем, а потім прізвищем.

Легкий рівень
З огляду на таблицю працівника вище, а також нову таблицю "Щорічні огляди" зі стовпцями EmpID та ReviewDate:
Напишіть запит, щоб повернути всіх працівників, які ніколи не мали огляду, відсортованого за HireDate.

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

Тяжкий рівень
З огляду на таблицю працівників вище, напишіть запит, щоб обчислити найдовший період (у днях), який компанія пройшла без найму чи звільнення когось.

Більш важкий рівень.
Знову використовуючи ті самі таблиці, напишіть запит, який повертає кожного працівника, і для кожного рядка / працівника включається найбільша кількість працівників, які працювали в компанії в будь-який час їх перебування на посаді та першої дати досягнення максимальної кількості. Додаткові бали за невикористання курсорів.


Приємно, відповідь - дуже подобається еволюція питань. Чому людина, яка задає питання, повинна мати можливість відповісти на них? Чому б просто не написати тестовий блок на основі виходу та часу виконання? Крім того, що б ви сказали, скільки тижня сполучних тижнів прогресуючого оволодіння поняттями SQL знадобиться пересічному програмісту, щоб досягти найважчого рівня, заданого вами? Ви також вірите, що програміст, здатний відповісти на найскладніші запитання, які ви можете поставити, зможе ефективно вирішити дуже велику більшість завдань, що стосуються SQL?
грубі помилки

3
Причина, за якою я хочу, щоб запитуючий (або принаймні "грейдер") міг відповісти на них, - це те, що підхід може сказати вам як результат. Я також переживаю, що інтерв'ю з нетехнологією має попередньо написану відповідь і не приймає інших потенційно правильних відповідей (На картці написано "Moop").
JohnFx

Що стосується того, чи демонструють ці питання здатність вирішувати дуже велику більшість завдань, що стосуються SQL. Якщо їхньою роботою буде писати запити, мабуть, так. Якщо ви очікуєте, що вони будуть адмініструвати сервер БД, тоді вам потрібно буде задати конкретні питання.
JohnFx

Дякуємо за роз’яснення, нетехнолог-інтерв'юер у цьому випадку буде не людиною, а системою, отже, одиничним тестом та часом виконання. Зрозуміло, що системи не пишуть чи не читають код, люди є, але програмістів у світі так багато, і, на мою думку, необхідність мати їх на місці обмежена в кращому випадку. Здогадайтесь, якщо людина провалила тест, але думала, що має рацію, завжди може позначити як правильне.
помилки

І так, ціллю питань буде програміст, а не адміністратор бази даних.
помилки

4

Я, як правило, сиджу на інтерв'ю для спеціалістів з даних, тому мої запитання, як правило, важкі. Але одне, що я б зажадав від усіх, хто буде писати SQL, - це знання про приєднання та коли використовувати лівий з’єднання проти внутрішнього з'єднання. Той, хто не розуміє, що не має жодного ділового запиту до бази даних в будь-якій формі.

Інша річ, яку я хотів би зробити, це переконатися, що вони розуміють, як робити GROUP BY і використовувати функції агрегування.

І різниця між UNION та UNION ALL усунула багато бідних кандидатів на моїй роботі.


2

Я б запитав "Чому і як слід санітувати вхідні значення, надані користувачем, які будуть використовуватися в SQL-запиті?"

Це необхідно , щоб запобігти ін'єкції SQL, і бути в змозі відповісти на цей питання потребує хорошого знання про синтаксисі і команд (таких як SQL SELECT, UPDATE, DROP, DELETEі т.д.), а також , як ті , можна обійти за допомогою коментарів SQL , щоб розбити запит і ввести те, що може зробити бажаний злоякісний користувач.


1
Чи не відповідь: ніколи не саніруйте матеріали, використовуйте підготовлений вислів?
кевін клайн

@Emmad Kareem, той, хто не може відповісти на це, не повинен писати SQL.
HLGEM

@gablin, я дійсно не розумію, чому так. Не могли б ви пояснити трохи? Скільки книг SQL обговорюють цю тему?
NoChance

2

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

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

У нас був подібний досвід з іншими технічними тестами. Для співробітників служби підтримки Windows задачі схожі на "створити користувача домену", "додати принтер", "змінити дозволи на файл". Більшість людей не може виконувати ці завдання, особливо під тиском. Ми вважаємо, що якщо ви можете зробити навіть прості речі, ви, ймовірно, досить компетентні.


1
Боюся, що я на стороні розробника, що використовує графічний інтерфейс. Ви можете провести всю кар’єру, не регулярно писаючи сценарії CREATE TABLE. Багато людей розробляють моделі даних в інструментах CASE, які автоматично генерують DDL для вас. Взагалі я ухиляюся від будь-яких тестів, які в основному покладаються на запам'ятовування синтаксису, на користь тих, хто перевіряє більш широке розуміння проблем, пов'язаних із цим
cjmUK

+1 @Barry Brown: Я згоден, і це цікавий момент.
помилки

0

Якщо ви хочете задавати більш відкриті запитання: Задайте загальні запитання щодо типів даних ДАТА, ДАТЕТИНА .... Запитайте про відмінності між різними впровадженнями / продуктами постачальника. Поговоріть про інструменти командного рядка, масові навантажувачі, гарні принтери ... можливо, ви зможете навчитися нового фокусу під час співбесіди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.