Jakie są pytania typu FizzBuzz dla programistów stron WWW lub SQL? [Zamknięte]

10

Po jakimś czasie znów rekrutujemy i sprawdzam testy dla programistów; niektóre z nich są trochę nieaktualne. Jakie są pytania typu FizzBuzz dla programistów stron internetowych i SQL? To nie jest zbyt trywialne, ale nadal można je rozwiązać za pomocą pióra i papieru w ciągu pięciu do dziesięciu minut bez Google?

Zazwyczaj eliminuję około dwóch trzecich lub więcej kandydatów na podstawie CV, a następnie wszystkich oprócz kilku naprawdę dobrych kandydatów podczas godzinnej rozmowy kwalifikacyjnej (która może być prowadzona przez telefon). W tym momencie kandydat pisze test osobowości i ma szansę napisać trochę kodu podobnego do FizzBuzz. Nie próbuję więc wyeliminować grupy kandydatów, ale staram się potwierdzić moją wstępną ocenę, czy kandydat jest zatrudniony i potrafi kodować.

Domchi
źródło
2
Jakich umiejętności szukasz u programisty?
Oded,
Chyba szukam zrozumienia HTML / CSS / JSON / HTTP; jak wspomniała Rachel, FizzBuzz nadaje się do testowania Javascript / PHP / etc.
Domchi,

Odpowiedzi:

12

Widzę FizzBuzz jako test sprawdzający, czy ludzie rzeczywiście wiedzą, co twierdzą w swoim CV. Nie użyłbym tego jako pytania innego niż pytanie, aby odrzucić kandydatów, którzy nie wiedzą o czym mówią.

Odpowiednim zamiennikiem SQL byłoby po prostu poproszenie kandydata o napisanie instrukcji SQL, na przykład wybranie pól Nazwa dwóch połączonych tabel, które zaczynają się na A. Jest to proste i pokazuje, że kandydat faktycznie ma pewną wiedzę na temat 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%'

Dla programistów internetowych po prostu zapytam ich o FizzBuzz. To, że programujesz dla Internetu, nie oznacza, że ​​powinieneś nie mieć umiejętności wykonywania podstawowej logiki programowania

Jeśli szukasz rzeczywistych pytań do rozmowy kwalifikacyjnej, w Internecie znajdziesz wiele dobrych pytań, które można szybko znaleźć. Znalazłem więcej niż mi zależy na liście, biorąc 10 sekund z Google.

Rachel
źródło
2
Połączenia są dobrym sposobem na oddzielenie nowicjuszy od bardziej zaawansowanych programistów SQL, ponieważ w programowaniu SQL zwykle wymaga innego paradygmatu myślenia niż programowanie po stronie serwera, co jest zwykle konieczne. Połączenia i podzapytania mnie zaskakiwały, dopóki nie zacząłem myśleć o instrukcjach SQL w kategoriach zestawów.
Chris C,
@CCRicers Zgadzam się. A jeśli wywiadów dla zaawansowanych SQL Developer, bym faktycznie również dodać wymóg GROUP do tego, ponieważ pracowałem z SQL trochę, zanim w pełni zrozumiała, co oznaczało, grupy i jak one działają
Rachel
Rozważ konieczność samodzielnego dołączenia: „UTWÓRZ PRACOWNIKA TABELI (NUMER ID, TEKST NAZWA, NUMER MANAGERA_ID)”, a następnie „Jak wyświetlić listę pracowników i ich menedżerów?”
kevin cline,
W zależności od rodzaju bazy danych / pozycji SQL, którą zatrudniasz (i tła programisty / środowiska), możesz poprosić o rzeczywistą odpowiedź „FizzBuzz”.
Clockwork-Muse,
I ma tę dodatkową zaletę, że jest słabą specyfikacją, więc sprawdza, czy kandydat wyjaśnia wymagania przed napisaniem kodu.
Peter Taylor,
4

Oto odpowiedź, której udzieliłem na bardzo podobne (być może duplikat) pytanie, które zostało zamknięte na tej stronie.

Niezwykle łatwy poziom: Biorąc pod uwagę tabelę pracowników z kolumnami EmpID, Imię, Nazwisko, HireDate i TerminationDate: Napisz zapytanie, aby zwrócić wszystkich pracowników nadal pracujących dla firmy o nazwiskach zaczynających się od „Smith” posortowanych według nazwiska, a następnie imienia.

Łatwy poziom Biorąc pod uwagę powyższą tabelę pracowników oraz nową tabelę „Przegląd roczny” z kolumnami EmpID i Data przeglądu: Napisz zapytanie, aby zwrócić wszystkich pracowników, którzy nigdy nie mieli oceny posortowanej według HireDate.

Poziom średni
Biorąc pod uwagę powyższą tabelę pracowników, napisz zapytanie, aby obliczyć różnicę (w dniach) między najbardziej i najmniej zatrudnionym pracownikiem nadal pracującym dla firmy?

Poziom trudny Biorąc pod uwagę powyższą tabelę pracowników, napisz zapytanie, aby obliczyć najdłuższy okres (w dniach), jaki firma przeszła bez zatrudniania lub zwalniania z pracy.

Trudniejszy poziom
Ponownie, używając tych samych tabel, napisz zapytanie, które zwraca każdego pracownika, a dla każdego wiersza / pracownika należy podać największą liczbę pracowników, którzy pracowali dla firmy w dowolnym momencie ich kadencji oraz datę pierwszego osiągnięcia maksymalnego. Dodatkowe punkty za nieużywanie kursorów.

JohnFx
źródło
1
Interesujące pytanie. Jednak poziom „Hard” / „Harder” wydaje mi się naprawdę trudny. Uważam, że nawet przy przyzwoitym doświadczeniu w języku SQL rozwiązanie problemu w trakcie rozmowy kwalifikacyjnej jest zbyt trudne. Może jeśli zostawisz kandydata w spokoju na pół godziny.
sleske,
Mogłem powiedzieć, że „trudniejsze” pytanie było trudne, gdy zdałem sobie sprawę, że tak naprawdę nie wiem, co to jest kursor… i używałem MySQL codziennie! : - /
thesunneversets
@Johnfx Widzę te odpowiedzi na twoje problemy, z którymi przeprowadzam wywiad następnego dnia, docs.google.com/document/d/…
mr_eclair
Dlaczego potrzebujesz, żebym na to spojrzał. Możesz to przetestować samodzielnie i sprawdzić, czy uzyskasz właściwą odpowiedź.
JohnFx
3

Co powiesz na sam fizzbuzz? Oto wersja 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

źródło
1
+1 za niesamowitość, ale myślę, że tabele liczb wirtualnych nie pojawiają się wystarczająco często, aby znaleźć się w skrzynce narzędziowej SQL wszystkich. Trzeba by ich zauważyć
Conrad Frix,
0

Uważam, że ludzie mają z jakiegoś powodu wiele problemów z pracą z czasem, więc może to być dobre miejsce na przetestowanie.

Coś takiego:

Część 1: Utwórz funkcję, która obliczy N-ty lub ostatni dzień tygodnia w danym miesiącu - tj. pierwszy, trzeci, ostatni wtorek w przyszłym miesiącu.

Część 2 (w razie potrzeby): Tabele tabel do przechowywania wyrażeń czasowych dla zestawień cyklicznych. Harmonogramami może być dowolny z „N-tego dnia tygodnia jednego lub więcej miesięcy” lub „N-tego dnia jednego lub więcej miesięcy” lub „co N dni od daty”.

Przykład: 15 każdego miesiąca, ostatnia środa każdego marca, ostatni dzień każdego miesiąca, co 17 dni od 2 grudnia 2008 roku itp.

Eli
źródło
2
-1: Praca z czasem i poprawianie JEST naprawdę trudne. Zgadnij, dlaczego istnieją biblioteki takie jak JodaTime, a nie tylko trywialne oprogramowanie.
sebastiangeiger
@sebastiangeiger Zgadzam się. Pracuję z SQL prawie codziennie i chociaż mogę efektywnie korzystać z funkcji daty SQL, nie byłbym w stanie zrobić czegoś takiego szybko lub łatwo bez pomocy Google. W rzeczywistości musiałem to zrobić kilka miesięcy temu i po kilku minutach próbowania rozgryźć to w SQL, po prostu googlowałem i dostałem kilka skryptów, których używam z pewnymi modyfikacjami, które odpowiadają moim potrzebom.
Rachel
Nie szukam problemów; Szukam czegoś, z czym każdy przeciętny programista pracuje na co dzień i może sobie przypomnieć bez problemu w nieznanym środowisku (brak dostępnego komputera). Chociaż twój przykład nie jest taki trudny, to raczej problem, który dałbym komuś, kto koduje przede mną, aby zobaczyć, jak on myśli.
Domchi
1
@Eli Myślę, że FizzBuzz powinien zostać odpowiednio rozwiązany / zakodowany.
Aaron McIver,
1
Nie sądzę, aby część druga była dobrym pytaniem. W rzeczywistości ten temat ma dziwne rozwiązanie, które nie występuje prawie w żadnym innym problemie z projektowaniem baz danych w biznesie. nieznajomość odpowiedzi nie świadczy o słabej znajomości SQL.
NoChance