Quali sono alcune domande di tipo FizzBuzz per gli sviluppatori Web o SQL? [chiuso]


10

Dopo un po ', stiamo assumendo di nuovo, e sto rivedendo i test per i programmatori; alcuni sono un po 'obsoleti. Quali sono alcune delle domande di tipo FizzBuzz per gli sviluppatori Web e SQL? Cioè, non troppo banale, ma ancora risolvibile in cinque o dieci minuti con carta e penna e senza Google?

In genere elimino circa due terzi o più dei candidati in base al curriculum vitae, e poi tutti tranne alcuni candidati davvero bravi in ​​un'intervista di un'ora (che può essere al telefono). A questo punto il candidato sta scrivendo un test di personalità e ha la possibilità di scrivere un po 'di codice simile a FizzBuzz. Quindi, non sto cercando di eliminare un gruppo di candidati, ma sto cercando di convalidare la mia valutazione iniziale che il candidato può essere assunto e in grado di codificare.


2
Quali competenze cerchi in uno sviluppatore web?
Oded,

Immagino che sto cercando la comprensione di HTML / CSS / JSON / HTTP; come ha detto Rachel, FizzBuzz va bene per testare Javascript / PHP / ecc.
Domchi,

Risposte:


12

Vedo FizzBuzz come un test per vedere se le persone realmente sanno cosa affermano di sapere sul loro CV. Non lo userei come nient'altro che una domanda per eliminare i candidati che non sanno di cosa stanno parlando.

Una sostituzione SQL adatta sarebbe semplicemente chiedere al candidato di scrivere un'istruzione SQL come selezionare i campi Nome di due tabelle unite che iniziano con A. È semplice e dimostra che il candidato ha effettivamente una certa conoscenza di 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%'

Per uno sviluppatore web vorrei semplicemente chiedere loro FizzBuzz. Solo perché stai programmando per il web non significa che dovresti perdere la capacità di fare la logica di programmazione di base

Se sei alla ricerca di domande sul colloquio, ce ne sono molte buone online che puoi trovare con una rapida ricerca. Ho trovato più di quello che mi interessa elencare prendendo 10 secondi con Google.


2
I join sono un buon modo per separare i rookie dai programmatori SQL più avanzati, poiché nella programmazione SQL di solito richiede un paradigma diverso per pensare rispetto alla programmazione lato server che di solito è imperativo. Unioni e sottoquery mi facevano paura finché non ho iniziato a pensare alle istruzioni SQL in termini di insiemi.
Chris C,

@CCRicers Sono d'accordo. E se stai intervistando per uno sviluppatore SQL avanzato, in realtà aggiungerei anche un requisito GROUP a questo, dal momento che ho lavorato un po 'con SQL prima di aver compreso appieno cosa significano i gruppi e come funzionano
Rachel,

Prendi in considerazione la necessità di un auto-iscrizione: "CREA TABELLA DIPENDENTI (NUMERO ID, TESTO NOME, NUMERO ID MANAGER)", quindi "Come posso elencare i dipendenti e i loro dirigenti?"
Kevin Cline,

A seconda del tipo di database / posizione SQL che stai assumendo (e dello sfondo dello sviluppatore / del tuo ambiente), puoi chiedere una vera risposta "FizzBuzz".
Clockwork-Muse

E ha l'ulteriore vantaggio di essere una specifica scadente, quindi verifica se il candidato chiarisce i requisiti prima di scrivere il codice.
Peter Taylor,

4

Ecco una risposta che ho dato a una domanda molto simile (forse duplicata) che è stata chiusa su questo sito.

Livello estremamente semplice: data una tabella dei dipendenti con le colonne EmpID, FirstName, Lastname, HireDate e TerminationDate: scrivere una query per restituire tutti i dipendenti che lavorano ancora per l'azienda con i cognomi che iniziano con "Smith" ordinati per cognome e poi nome.

Livello semplice Data la tabella dei dipendenti sopra, più una nuova tabella "AnnualReviews" con le colonne EmpID e ReviewDate: scrivere una query per restituire tutti i dipendenti che non hanno mai avuto una recensione ordinata per HireDate.

Livello medio
Data la tabella dei dipendenti sopra, scrivere una query per calcolare la differenza (in giorni) tra il dipendente più o meno occupato che lavora ancora per l'azienda?

Livello difficile Data la tabella dei dipendenti sopra, scrivere una query per calcolare il periodo più lungo (in giorni) in cui la società è andata senza assumere o licenziare nessuno.

Livello più difficile
Sempre utilizzando le stesse tabelle, scrivere una query che restituisca ciascun dipendente e per ogni riga / dipendente includere il maggior numero di dipendenti che hanno lavorato per l'azienda in qualsiasi momento durante il loro mandato e la prima data in cui è stato raggiunto il massimo. Punti extra per non usare i cursori.


1
Domanda interessante. Tuttavia, il livello "Hard" / "Harder" mi sembra davvero difficile. Anche con una discreta esperienza SQL, credo che probabilmente sia troppo difficile da risolvere in una situazione di intervista. Forse se lasci il candidato da solo per mezz'ora o giù di lì.
sleske,

Potrei dire che la domanda "più difficile" è stata difficile quando ho capito che non sapevo nemmeno cosa fosse un cursore ... e ho usato MySQL ogni giorno! : - /
thesunneversets

@Johnfx Per favore, vedi queste risposte per i tuoi problemi che ho intervistato domani, docs.google.com/document/d/…
mr_eclair

Perché hai bisogno che io lo guardi. Puoi testarlo tu stesso e vedere se ottieni la risposta giusta.
JohnFx

3

Che ne dici di fizzbuzz stesso? Ecco una versione 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 per la bellezza, ma penso che le tabelle dei numeri virtuali non escano abbastanza spesso da essere nella casella degli strumenti SQL di tutti. Dovresti individuarli in quel modo
Conrad Frix il

0

Trovo che le persone tendano ad avere molti problemi a lavorare con il tempo per qualche motivo, quindi potrebbe essere un buon posto per fare un piccolo test.

Qualcosa come questo:

Parte 1: creare una funzione che calcolerà l'ennesimo o l'ultimo giorno della settimana in un determinato mese, ovvero; il primo, il terzo, lo scorso martedì del prossimo mese.

Parte 2 (se lo si desidera): progettare una o più tabelle per contenere espressioni temporali per pianificazioni ricorrenti. Gli orari potrebbero essere qualsiasi tra "l'ennesimo giorno della settimana di uno o più mesi" o "l'ennesimo giorno di uno o più mesi" o "ogni N giorni dalla data".

Esempio, il 15 di ogni mese, l'ultimo mercoledì di ogni marzo, l'ultimo giorno di ogni mese, ogni 17 giorni dal 2 dicembre 2008, ecc.


2
-1: lavorare con il tempo e farlo nel modo giusto è davvero difficile. Indovina perché esistono librerie come JodaTime e non sono solo alcuni banali software.
sebastiangeiger,

@sebastiangeiger Sono d'accordo. Lavoro con SQL quasi ogni giorno e anche se posso usare le funzioni di data di SQL in modo efficiente, non sarei in grado di fare qualcosa del genere in modo rapido o semplice senza l'aiuto di Google. In effetti, avevo bisogno di farlo qualche mese fa e dopo alcuni minuti di tentativi di capirlo in SQL, l'ho appena cercato su Google e ho ottenuto alcuni script che uso con alcune modifiche per soddisfare le mie esigenze.
Rachel,

Non cerco aree problematiche; Sto cercando qualcosa con cui ogni sviluppatore medio stia lavorando quotidianamente e possa ricordare senza problemi e in un ambiente sconosciuto (nessun computer disponibile). Mentre il tuo esempio non è così difficile, è più un problema che darei a qualcuno che codifica davanti a me per vedere come sta pensando.
Domchi,

1
@Eli Penso che FizzBuzz dovrebbe essere risolto / codificato di conseguenza.
Aaron McIver il

1
Non penso che la Parte 2 sia una buona domanda. In realtà questo argomento ha una strana soluzione che non si presenta quasi in nessun altro problema di progettazione di database negli affari. non conoscere la risposta non è indice di scarsa conoscenza di SQL.
NoChance,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.