Які питання FizzBuzz для розробників веб або SQL? [зачинено]


10

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

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


2
Які навички ви шукаєте у веб-розробника?
Oded

Я думаю, я шукаю розуміння HTML / CSS / JSON / HTTP; як згадувала Рейчел, FizzBuzz чудово підходить для тестування Javascript / PHP / тощо.
Домчі

Відповіді:


12

Я розглядаю FizzBuzz як тест, щоб зрозуміти, чи насправді люди знають, про що вони стверджують, що знають у своєму резюме. Я б не використовував це як щось інше, як питання, щоб відлучити кандидатів, які не знають, про що говорять.

Підходящою заміною SQL було б просто попросити кандидата написати SQL-оператор, такий як вибір полів Name з двох об'єднаних таблиць, які починаються з А. Це просто і демонструє, що кандидат насправді має деякі знання 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 з точки зору наборів.
Кріс C

@CCRicers Я згоден. І якщо ви берете інтерв'ю для просунутого розробника SQL, я фактично також додаю до цього вимогу GROUP, оскільки я працював із SQL зовсім небагато, перш ніж я повністю зрозумів, що означають групи та як вони працюють
Рейчел

Подумайте про необхідність самостійного приєднання: "СТВОРИТИ ТАБЛИЧНИЙ ПРАЦІВНИК (Ідентифікаційний номер, текст імені, номер MANAGER_ID)", потім "Як я можу перерахувати працівників та їх керівників?"
кевін клайн

Залежно від типу бази даних / SQL позиції, яку ви наймаєте (та фону розробника / оточення), ви можете запитати фактичну відповідь "FizzBuzz".
Завод-Муза

І додатковою перевагою є те, що це погана специфікація, тому він перевіряє, чи уточнює кандидат, перш ніж писати код.
Пітер Тейлор

4

Ось відповідь, яку я дав на дуже схоже (можливо, повторне) запитання, яке було закрито на цьому веб-сайті.

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

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

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

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

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


1
Цікаве запитання. Однак рівень "Жорсткий" / "Жорсткіший" мені здається справді важким. Навіть маючи пристойний досвід SQL, я вважаю, що це, мабуть, занадто важко вирішити в ситуації інтерв'ю. Можливо, якщо ви залишите кандидата в спокої на півгодини або близько того.
sleske

Я міг сказати, що "складніше" питання було важким, коли я зрозумів, що навіть не знаю, що таке курсор ... і я використовував 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 року тощо.


2
-1: Справді важко працювати з часом і виправити це. Здогадайтесь, чому існують такі бібліотеки, як JodaTime, і це не просто якийсь тривіальний елемент програмного забезпечення.
sebastiangeiger

@sebastiangeiger Я згоден. Я працюю з SQL майже щодня, і хоча я можу ефективно використовувати функції дати SQL ефективно, я не зміг би швидко чи легко зробити щось подібне без допомоги Google. Насправді, мені потрібно було це зробити кілька місяців тому, і після кількох хвилин намагання розібратися в SQL, я просто розіграв його і отримав кілька сценаріїв, які використовую з деякими модифікаціями, щоб відповідати моїм потребам.
Рейчел

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

1
@Eli Я думаю, що FizzBuzz, як очікується, буде вирішено / закодовано відповідно.
Аарон Маківер

1
Я не вважаю, що частина 2 - це гарне питання. Насправді ця тема має дивне рішення, яке не зустрічається майже в будь-якій іншій проблемі дизайну баз даних у бізнесі. невідомості відповіді не є ознакою поганих знань SQL.
NoChance
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.