Ho fallito FizzBuzz, mi assumeresti? [chiuso]


27

Sono uno sviluppatore con una laurea in CS e ho esperienza lavorativa facendo sviluppo in diverse lingue per quasi 3 anni.

Oggi ho avuto un colloquio, nel complesso è andato abbastanza bene, mi sono preparato per la maggior parte delle domande e mi sono sentito pronto a tutto. Alla fine dell'intervista, mi hanno posto UNA domanda di programmazione ... un problema come FizzBuzz (senza la stampa della parte numerica). Credo di aver fatto troppi errori e di averlo "fallito". Tutta la speranza è persa per me?

Ecco il mio codice:

  void FizzBuzz()
  {
    for(int i = 0; i <= 100; i++)
    {
      bool isThree = i % 3;
      bool isFive = i % 5;

     if (isThree)
     {
         print "Fizz\n";
     }
     else if(isFive)
     {
         print "Buzz\n";
     }
     else
     {
         print "FizzBuzz\n";
     }
  }
 }

Come puoi vedere ho incasinato i bool che dovrebbero avere la sintassi i% 3 == 0; Se ricordo bene la domanda, metto anche un altro invece di un altro con isThree && isFive. Ero abbastanza stressato, ma questa non è una scusa per perdere un semplice problema.

Quindi la domanda è: quanto è importante essere in grado di produrre un codice funzionante sul posto rispetto ad altri fattori, come l'esperienza e la personalità? Ad esempio, il codice di cui sopra sarebbe un rompicapo?


31
Penso che il fatto che tu abbia usato l'operatore del modulo sia abbastanza buono
Ryathal il

9
inoltre non stampi il numero quando non è né un multiplo di 3 né 5. Il fatto di non aver menzionato che neanche nel pubblicare questa domanda renderebbe molto scettico.
whatsisname

13
Come può qualcuno rispondere a nome dei tuoi intervistatori?
pdr

5
Consigli tangenziali: fai problemi con l' elettrodo di progetto 1-10 e avrai una gestione di molte delle domande sui tipi standard che ti verranno poste come "puoi programmare - scrivi questo codice"

20
Non credo che assumerei qualcuno che non è riuscito a scrivere FizzBuzz, ma IMHO non sei riuscito a scrivere la sintassi perfettamente su una lavagna, che è qualcos'altro.
Michael Shaw,

Risposte:


44

Il punto di FizzBuzz è mostrare che in realtà sai come programmare , non che hai memorizzato tutte le regole di sintassi più fini della lingua in cui ti è stato chiesto di programmare (anche se questo è importante, se vogliono sapere quanto vissuto sei nella lingua).

Se sei arrivato così lontano nello stress di un ambiente di intervista e puoi dimostrare di aver compreso gli errori che hai commesso, direi che hai superato.


D'accordo, non stavo cercando di insinuare che ero io a memorizzare la risposta. È che sento di essere un programmatore abbastanza capace, ma ho solo un problema di programmazione e non farlo bene è un riflesso davvero negativo delle mie capacità. Inoltre non hanno detto nulla sul problema. Non mi ero reso conto dell'errore dei miei modi fino a quando non ero salito in macchina e ho iniziato a guidare verso casa. Quindi è stato un OMG whyyy !! reazione.
ja_programmer,

Prima ti hanno fatto la domanda su FizzBuzz? Se non hanno interrotto subito l'intervista, sei passato. Gli intervistatori considerano altri fattori oltre a un semplice test di codifica; i buoni datori di lavoro vogliono persone che sappiano pensare in modo critico e risolvere i problemi.
Robert Harvey

Hanno trascorso la maggior parte del tempo a chiedermi del mio curriculum, chiedendo informazioni sulle varie tecnologie che avevo usato e su come le ho usate. E poi mi hanno chiesto il problema di programmazione. Poi mi hanno fatto domande su di me. Poi ho fatto una serie di domande e ho stretto le mani e me ne sono andato.
ja_programmer,

4
I buoni intervistatori interrompono l'intervista quando non c'è più interesse ad assumerti, cosa che sarebbe dovuta succedere subito dopo FizzBuzz se non avessi superato il test. Non significa che ti assumeranno ancora, ma significa che non hai fallito il colloquio.
Robert Harvey,

4
@RobertHarvey - non tutti interromperanno l'intervista allora e là. Con il mio recente candidato che ha fallito FizzBuzz, ho continuato l'intervista nel tentativo di vedere se poteva salvare le cose. In altre parole, ero disposto a concedere di perdere l'esercizio a causa dello stress del colloquio.

26

La maggior parte delle persone che ho intervistato che hanno fallito la parte di esercitazione del codice sulla sintassi minore o leggermente fuori logica hanno finito per essere i migliori assunti.

Ottenere l'idea di base della logica (cosa che hai fatto) e convertirla in qualcosa di decente e conciso dal punto di vista del codice (cosa che penso che tu abbia fatto per lo più) è molto più importante per me che ottenerla assolutamente perfetta.

Compro un IDE per il suo controllo della sintassi, non assumere un dev per questo, e avresti realizzato gli altri errori in pochi istanti del tuo primo debug.

Sei passato dal requisito iniziale a un primo tentativo abbastanza direttamente e senza fare nulla di terribile. Ciò è più prezioso in molti ambienti della perfezione in assenza di feedback. Se il datore di lavoro è così aggrappato ai dettagli che hai perso, potrebbe comunque essere un segnale dell'ambiente a venire.

Se l'attività fosse la variante dei numeri di stampa, la mancanza dei dettagli sarebbe un po 'brutta, ma non avrebbe abbastanza peso per cambiare la mia decisione se mi piacessi per la posizione altrimenti.

[Modifica] Come ha sottolineato Alex, c'è anche l'aspetto della reazione e della compostezza. Personalmente cerco di toglierlo di mezzo prima di arrivare agli esercizi pratici cercando di angolare l'intervistato su qualcosa un po 'al di fuori della loro esperienza, ma alcuni potrebbero scegliere di combinare i due. Ogni tanto mi sono imbattuto in qualcuno che ha solo una conoscenza dei libri di testo e naviga attraverso le questioni teoriche e di fondo, ma mi viene seriamente da dove iniziare con l'esercizio pratico. Alcuni non riescono nemmeno a capire da dove cominciare.

Queste persone sono ESATTAMENTE ciò che desidero eliminare con questo esercizio.

Quindi, a meno che tu non abbia impiegato 20 minuti per fare in modo che l'intervistatore chiarisca il requisito, immagino che la tua soluzione sia stata più o meno il tuo primo tentativo con forse un paio di correzioni man mano che procedi. Se hai ottenuto ciò che hai messo sopra in meno di 5 minuti, hai dimostrato di poter pensare abbastanza ai miei standard.


2
Bill, voglio solo dire molte grazie per il feedback dettagliato. È bello avere altre prospettive. È frustrante fare errori su qualcosa di così semplice e sapere che sei meglio di così.
ja_programmer,

1
Fammi solo confermare ciò che Bill ha appena detto. Questo tipo di test è progettato principalmente per vedere come le persone reagiscono sotto pressione. NON ci si aspetta che tu sia un programmatore perfetto quando lavori in queste condizioni. Dovresti solo ... lavorare. Veramente. Dovresti solo cercare di mantenere la calma e affrontare il problema nel miglior modo possibile. Questo è esattamente quello che hai fatto.
AlexBottoni,

Non si tratta solo di non stampare i numeri, ma anche di non riconoscere che a una moltitudine di 15 non si stampa Fizz o Buzz ma FizzBuzz. Non mostra una buona scomposizione del problema. Quando stampare "FizzBuzz" è l'elemento più importante di questo puzzle.
Pieter B,

Non uso questo esempio particolare poiché molte case a contratto lo memorizzano dai loro candidati, ma è stata la mia esperienza che le persone che commettono gli errori "oh duh" in questi esercizi si rivelano generalmente migliori colleghe. La sua logica è iniziata dal posto giusto e non c'è un mucchio di cazzate in più, va bene. Ha perso qualcosa che avresti visto nella prima compilazione. Preferirei avere quel ragazzo che sbaglia 3 volte in 15 minuti, quindi è bravo rispetto al ragazzo che impiega 30 minuti per iniziare.
Bill

@Bill - Che tipo di risposte a questo problema vedi? Non capisco come chiunque non abbia avuto una lezione di programmazione non possa sapere almeno quanto ho messo. L'ho scritto tra forse un minuto e un minuto e mezzo e l'unica ragione per cui ci è voluto tanto tempo era perché parlavo e scrivevo sulla lavagna allo stesso tempo.
ja_programmer

15

Il codice di cui sopra probabilmente sarebbe un punto di rottura per me se non avessi qualcos'altro da fare. Se seguono lo stile dell'intervista con Microsoft, probabilmente la persona che ti ha fatto questa domanda ti bloccherà e spesso ne basta uno.

Ciò che mi sconcerta è che l'intervistatore non ti ha chiesto questo codice. Un buon intervistatore ha visto abbastanza del proprio codice per sapere che le persone commettono errori, soprattutto quando hanno fretta. Di solito dicono "Ora vedi qualcosa di sbagliato in questo codice?" "No? Beh proviamolo". Vengono forniti alcuni set di risultati e quindi viene eseguito attraverso la funzione. Quindi dici "Oh merda, non ha funzionato." "Ok, come lo aggiusteresti ..." e così via. Se sopravvivi a quel dialogo, in realtà è abbastanza impressionante e dimostra una capacità di pensare in modo critico, elaborare casi di test ed eseguire il debug del tuo codice.

Inoltre, di solito non sono alla ricerca di "codice funzionante". Chi lo produce comunque il primo tentativo? Ma logicamente corretto con la gestione degli errori e buoni set di test è un buon obiettivo.

Inoltre, questo potrebbe sorprenderti, ma stai competendo con molte persone che non possono nemmeno iniziare a usare fizzbuzz. Tendiamo a supporre che tutti gli altri stiano attraversando b + alberi nel loro sonno .... ma in realtà, non riescono nemmeno a capire multipli di 3 e 5 e usano un operatore di modulo. Potresti essere piacevolmente sorpreso da quanto hai fatto meglio degli altri candidati.

Il mio consiglio, basta spazzarlo via. Di recente ho intervistato grandi aziende produttrici di software (Microsoft, Amazon ecc ...) ed è stata la mia prima volta in assoluto a superare un processo di intervista così approfondito. Mi sono preso gioco di me stesso in un'intervista a Microsoft in gran parte a causa dei nervi, ma non sapevo cosa aspettarmi o esattamente cosa stessero cercando. Ho risolto un problema con il percorso più breve solo per risolvere alcuni problemi davvero semplici. Ho estratto i valori dall'estremità sbagliata di uno stack, dimenticato in unint atoi(char* value) un'implementazione cheint val = value[i] - '0';mi darebbe il valore intero del personaggio e molti altri errori sciocchi. Sono stato felice per la maggior parte dell'intervista, ma ho ancora capito perché non ho ricevuto un'offerta. Ho dovuto rendermi conto che non si trattava tanto di una riflessione sulle mie capacità, quanto di un indicatore che dovevo solo continuare a provare fino a quando non sono stato in grado di padroneggiare i miei nervi. Alla fine ho inchiodato alcune interviste con domande molto più difficili e ho ottenuto il lavoro dei miei sogni. È davvero - per la maggior parte delle persone che sanno davvero cosa stanno facendo - solo una questione di capire cosa vogliono gli intervistatori, avere fiducia in se stessi e darlo a loro. Ci vuole un po


Sono d'accordo sul fatto che il codice sarebbe un grosso problema anche per me (sono stato in alcune posizioni principali dove avevo bisogno di rivedere il codice). Mi aspettavo che mi facessero una serie di problemi di programmazione e che facessero quello che pensavo fosse l'approccio "tradizionale" di una sorta di guida attraverso il problema, se necessario. Come hai detto "Vedi qualcosa di sbagliato in questo codice" mi avrebbe lasciato immediatamente. Non mi aspettavo FizzBuzz e pensavo che questo fosse un esercizio di velocità. E ero sicuramente nervoso, non ho dormito molto la sera prima. Sono contento di sentire che hai ottenuto il lavoro dei tuoi sogni. Continuerò a intervistare per ottenere anche il mio!
ja_programmer,

@ja_programmer bene fizzbuzz è un esercizio di velocità. Dovresti completarlo in meno di 2 minuti. Non stanno testando le tue capacità di problem solving, ma solo la tua capacità di scrivere velocemente un semplice codice. Inoltre mi è stato chiesto "Vedi qualche problema con questo codice?" quando il codice era completamente corretto e stavano solo cercando di valutare la mia fiducia o farmi incazzare - non ho ancora deciso.
Jonathan Henson,

Buon punto, potrebbero dire che se fosse corretto. Tuttavia, penso che in questo caso avessi bisogno di un destro in testa alla testa che avrebbe ottenuto "qualsiasi problema con questo codice". Se avessi attraversato un semplice caso di test come una persona normale, avrei notato che la mia logica non era corretta. Inoltre, per quanto riguarda la tua domanda, vado con un po 'di entrambi;)
ja_programmer

2
+1 per No? Well let's test it. Chiedo ai candidati di scrivere ronzio nelle interviste. Li faccio anche scrivere un test unitario. A volte il loro ronzio frizzante non riesce, ma il loro test unitario lo rileva, portandoli a risolverlo - va bene. I ragazzi che vengono rifiutati sono quelli che scrivono una soluzione fallita e poi scrivono un test che non riesce a rilevarlo. Chiedo loro, sei contento di questo test, se lo sono, è quando falliscono.
Qwerky,

12

Dovrei dire di no, ma non per il motivo che hai indicato, ma che hai inserito la sezione FizzBuzz per ultima. Con il modo in cui funziona il tuo codice, non stamperà mai FizzBuzz quando te lo aspetti. Come ha commentato Lee, lo stamperà per ogni valore non divisibile per 3 o 5.

Ma il punto principale è che impari da esso. Mi piace il fatto che tu stia qui chiedendo come avresti potuto fare di meglio. Assicurati di fare alcuni enigmi con il codice e di cercare domande comuni per le interviste. Inoltre, potresti provare a cronometrare te stesso o fare qualcos'altro che aumenterebbe la pressione in modo da poter provare a imitare la sensazione che otterrai durante un'intervista. E prep, prep, e fai ancora più preparazioni per l'intervista se vuoi davvero buttarla fuori dal parco.


3
Stampa FizzBuzz ogni volta che inon è divisibile per 3 o 5.
Lee

1
Sì, me ne rendo conto. Davvero non so cosa stavo pensando.
ja_programmer,

@ Mi dispiace, hai ragione, intendevo che non sarebbe mai stato stampato quando lo voleva.
David Peterman,

1
@mattnz No, ma mi aspetto che qualcuno che rivendica 3 anni di esperienza sia in grado di scrivere una dichiarazione if funzionante e, anche se sbaglia, possa dirmi con precisione dove ha sbagliato. (senza offesa per l'OP, sto solo cercando di essere il più onesto possibile)
David Peterman il

6
@mattnz: sarei meno preoccupato per i bug e la compilazione rispetto al fatto che la logica del programma è completamente sbagliata. Potrei vivere con l'errore isThree = i% 3, ma la parte "else print FizzBuzz" lo uccide per me. Probabilmente darei all'intervistato una piccola spinta per vedere se riescono a capire e risolvere quel problema, ma in caso contrario si tratta di un dealbreaker.
Misko,

9

No. Il punto di FizzBuzz è vedere se sei in grado di elaborare la logica condizionale di base, che copre tutti i casi. Contrariamente alle opinioni di alcune persone, FizzBuzz non riguarda l'operatore di modulo, conoscendo operazioni ternarie o operandi booleani. È un semplice esercizio in condizioni e non ci sei riuscito.

Il problema è strutturato in modo che tutto il codice dall'aspetto "elegante" non riesca a coprire almeno un caso.

Risposte accettabili:

if div3 print fizz
if div5 print buzz
if !div3 && !div5 print x


if div3 {
    print fizz;
    if div5 {
        print buzz;
    }
} else {
    if div5 {
        print buzz;
    } else {
        print x;
    }
}

2
Il tuo secondo esempio è troppo confuso.
Brian,

7

Offro alla gente banali problemi di programmazione da fare alla lavagna. Se il codice risultante è privo di bug non è affatto il punto di decisione. Invece mi interessa un certo numero di comportamenti esibiti durante la stesura del codice. È interattivo e sto imparando molto sui candidati mentre sta accadendo.

Vado più in dettaglio al "test" della lavagna durante un'intervista: un modo legittimo per eseguire il backup del codice (lavagna)?

Certo, il tuo intervistatore potrebbe non essere niente come me. Ma è del tutto possibile che tu abbia superato un colloquio con me durante la produzione di codice che è un po 'piccolo, e del tutto impossibile aver fallito con lo stesso codice.


1
grazie per il link. È stata una buona lettura. È tutto ciò di cui ho sentito parlare (alcuni anni fa) durante la mia lezione di preparazione ai colloqui. Vorrei avere ascoltato il tuo consiglio prima di questa intervista passata. Non mi sono state poste domande, ma non ero nemmeno disponibile e non avevo fornito informazioni. Beh, forse un po ', ma penso che la maggior parte sia stata borbottata. Prenderò a cuore i tuoi consigli e li userò in un'intervista (speriamo presto) futura che ho. Grazie!!
ja_programmer,

4

Se stavo valutando questo, avrei cercato le seguenti cose:

  1. Il candidato cerca di comprendere chiaramente i requisiti prima di passare all'implementazione? Il candidato cerca di risolvere il mio problema o di usare i suoi strumenti per animali domestici nella sua cassetta degli attrezzi di programmazione? In che modo il candidato risolve i problemi?
  2. Il candidato parla fluentemente almeno un linguaggio di programmazione?
  3. Il candidato ha una comprensione della logica booleana?
  4. Cosa fa il candidato per garantire la qualità delle sue soluzioni?
  5. Come risponde il candidato al feedback sul suo codice?

-

È difficile da dire sul n. 1. La tua domanda afferma che il tuo problema non includeva la parte "numero di stampa" e che la tua soluzione non lo include. Non ho altra scelta che prendere la tua parola, ma se in realtà era il classico problema di FizzBuzz che includeva la stampa di numeri che non erano divisibili per entrambi, allora sembra che tu sia passato a una soluzione prima di comprendere appieno i requisiti, che sarebbe un segno distintivo.

Ti darei un credito parziale per # 2 e # 3. Sapevi di usare l'operatore del modulo e avevi la struttura di una soluzione funzionante, ma mancavano parti di entrambi.

Sembra che tu non abbia fatto il n. 4, il che ti segnerebbe. In futuro, consiglierei di fare un passo indietro dalla lavagna e di esaminare la tua soluzione prima di chiamarla fatta. Vorrei anche (senza essere richiesto) passare attraverso un paio di unit test per la tua soluzione, che avrebbe rapidamente dimostrato dove hai sbagliato.

Non ti hanno dato la possibilità su # 5, il che è sfortunato. Ma il punto è che non voglio qualcuno che pensi che ogni riga di codice che abbia mai scritto sia oro puro che non potrebbe essere migliorato, ma piuttosto qualcuno disposto ad accettare feedback sulle sue soluzioni e impegnarsi in una conversazione sul suo approccio .

-

Quindi, se stessi valutando da solo, voterei "No Hire". Cose come questa sono una sorta di misurazione di una performance art piuttosto che capacità di programmazione , ma padroneggiarla può comunque aiutare la tua carriera. Quindi i miei consigli per future interviste tecnologiche sarebbero:

  1. Prima del colloquio, pratica un paio di questi tipi di esercizi a freddo, usando il minor numero possibile di risorse esterne. Non per memorizzare soluzioni, ma per essere sicuri che tu sia a tuo agio con la tua lingua preferita

  2. Poni domande sul problema per convalidare i tuoi presupposti.

  3. Prima di annunciare la soluzione completa, fai un passo indietro dalla lavagna e guardala oltre, e attraversa un paio di semplici casi di test unitari.


Mentre sono d'accordo con questo come obiettivo di base dell'intervista, questo non è il punto di fizzbuzz. Fizzbuzz sta misurando una cosa e una sola cosa. Sai scrivere codice semplice in modo rapido e corretto? Di solito gli intervistatori vogliono che questa domanda sia fatta in meno di 2 minuti. Non è tutto, lo so, ma è a questo che serve la domanda.
Jonathan Henson,

1
Il punto di fizzBuzz è quello che l'intervistatore vuole che sia. Se dovessi usare fizzBuzz o un esercizio simile, questo è quello che avrei cercato.
JohnMcG,

1
Certamente qualsiasi domanda di intervista è qualunque cosa l'intervistatore voglia usare per valutare le cose a cui sono interessati. Il mio punto è che FizzBuzz è una domanda molto scarsa per valutare qualcosa di diverso da "Può scrivere rapidamente il codice corretto?" Non è tecnicamente abbastanza impegnativo per valutare le capacità di pensiero critico. Se qualcuno si impegna seriamente su questa domanda, li vuoi anche nella tua squadra? È come assumere un ingegnere che non può fare calcoli di base. Mentre tutti vogliono assicurarsi che l'Ingegnere conosca il suo calcolo di base, è davvero non negoziabile che lo faccia.
Jonathan Henson,

2

Chiedere a qualcuno di risolvere un problema senza dargli la possibilità di ottenere feedback sulla propria soluzione è un approccio discutibile, perché non gli è permesso migliorare.

Tutto ciò che questo test ci dice è che non hai dimostrato ottime capacità di risoluzione dei problemi "top-of-the-head".

Questo potrebbe essere uno degli elementi nella decisione di assumerti o meno, ma per me non dovrebbe assolutamente essere l'unico.

Ti avrebbero fornito un ambiente di testing o esecuzione dell'unità, gli errori che avresti commesso sarebbero stati meno scusabili.


1
C'è tempo e spazio per migliorare le tue capacità, ma il colloquio di lavoro non lo è.
RokL

Implichi che un recruiter non dovrebbe preoccuparsi della capacità del candidato di migliorarsi?
Guillaume31,

1
Il miglioramento di se stessi avviene su scale temporali più lunghe di un'ora. Non è importante per il reclutatore.
whatsisname

Penso che, dato quanto fosse facile il problema, non avrei dovuto commettere errori nonostante fossi stressato. Detto questo, penso che ci siano motivi di "miglioramento" in problemi come questo, se l'intervistatore spinge un po 'il candidato. Anche dicendo qualcosa di semplice come "pensi di poter migliorare tutto ciò?" darà al candidato un indizio che qualcosa non va o che potrebbe fare di meglio. Non ho ricevuto commenti del genere.
ja_programmer,

@whatsisname: penso che dovrebbe essere importante per il recruiter, ma non nel modo in cui potresti pensare. Se il candidato viene rifiutato, il reclutatore ha bisogno di feedback per capire perché, in modo che possa presentare candidati migliori alla società in futuro, e istruire questo candidato su come diventare un candidato più forte per il futuro. Penso che ci sia spazio per reciproco vantaggio lì.
alroc,
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.