Ar trebui să dau răspunsul la un exercițiu de codificare eșuat în interviu?

Am avut un candidat la nivel înalt de interviu eșuează nuanța întrebării FizzBuzz 1 2 .
Vreau să spun, într-adevăr, complet, complet, a eșuat întrebarea - nici măcar aproape Am chiar l-am antrenat prin a te gândi la folosind o buclă și 3 și 5 au fost într-adevăr considerate drept cazuri speciale.

A suflat-o.

Numai pentru scopuri de asigurare a calității, am dat aceeași întrebare exactă celor trei colegi; le-a dat 5 minute; și apoi s-au întors pentru a-și colecta pseudo-codul. Toți i-au atașat și nu au văzut încă întrebarea. Doi au întrebat ce a fost ...

Pe un exercițiu logic diferit, candidatul a arătat o înțelegere a unor caracteristici disponibile în limba pe care a ales să o folosească (C #). Deci nu este ca și cum nu ar fi scris niciodată o linie de cod. Dar logica lui era încă stânjenită.

Întrebarea mea este dacă ar fi trebuit să-i fi dat răspunsul la întrebările logice.

Știa că le-a suflat și a recunoscut-o mai târziu în interviu Pe de altă parte, nu a cerut niciodată răspunsul sau ce așteptam să văd.

Știu că exercițiile de codificare pot fi folosite pentru a stabili candidații pentru eșec (din nou, a se vedea al doilea link de sus). Și am încercat cu adevărat să-l ajut să se întoarcă acasă, răspunzând la miezul întrebării. Dar acesta a fost un candidat la nivel înalt, iar Fizz-Buzz este, sincer, ușor de ridicol chiar și după ce a fost contabilizat pentru jignirea interviului.

Mă simțeam că ar fi trebuit să-i arăt o cale de a rezolva problema, astfel încât să poată învăța cel puțin de la această experiență. Dar din nou, nu a cerut.

Care este modul potrivit de a face față acestei situații?


1 Bine, asta nu este legătura cu întrebarea reală a lui FizzBuzz, dar este o bună discuție despre FSE în jurul FizzBuzz și link-uri către diferitele aspecte ale acesteia.

2 To help clarify, this is the nuance of Fizz-Buzz I asked and it's from Project Euler's first problem. Substitute printing Fizz | Buzz for summing the numbers and you have the same fundamental question.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Write a function that finds the sum of all the multiples of 3 or 5 below 1000.

3 This question attracted more attention than I had expected, and I appreciate all of the replies. Some of the later answers have really gotten to the core of my question, so I'll allow the community to review and up-vote before assigning "the" answer.

4 I selected "the" answer based upon community votes at that point in time. And I think Yannis' answer is appropriate for interviews with newer devs. I think the collective response focusing on the lack of asking for the answer is spot-on as well.

14
Problema sumă-multiplă nu este la fel ca și fizz-buzz-ul. ar putea să utilizeze o soluție fizz-buzz, dar cea mai simplă metodă de a realiza o buclă pentru a însuma multiplii de câte 3, apoi o buclă pentru a adăuga multiplii de 5, apoi bucla din nou pentru a scădea multiplii de 15 ați numărat dublu în primele două bucle. O abordare inteligentă ar folosi numere triunghiulare pentru a scăpa de buclele cu totul, deoarece fiecare buclă dă un număr multiplu (cu 3, 5 sau 15) cu un număr triunghiular.
adăugat autor Ken Gentle, sursa
Tăiați-le în pace și continuați cu ziua. În ceea ce mă privește, lipsa FizzBuzz la "nivel înalt" îmi pierde timpul în mod intenționat și rău.
adăugat autor Brad Wilson, sursa
@ 0A0D, conducând o echipă este un fel diferit de calificare din a fi un bun dezvoltator. Am văzut lideri de echipă care erau și dezvoltatori răi.
adăugat autor hao, sursa
@JoelEtherton, nu acționează surprins. M-am gândit că "199 din 200 de candidați nu pot codifica" a fost doar hiperbolă până când am început de fapt să ajut ecranul și să intervievez candidații. Ani de (presupusa) experiență pur și simplu nu contează. Titlurile de locuri de muncă nu contează. Majoritatea solicitanților sunt într-adevăr incredibil de juniori, indiferent dacă știu sau nu.
adăugat autor Fred Riding, sursa
@ Telastyn una dintre primele întrebări ale ecranului telefonului meu este "care este diferența dintre utilizarea cuvintelor cheie struct și clase în C #?" Nu am mai întâlnit un candidat care nu poate răspunde la asta și să treacă ecranul telefonului.
adăugat autor herbrandson, sursa
Recent am intervievat pentru mai multe funcții din zona mea, iar cei care au solicitat codul mi-au indicat că întâmpinau dificultăți în găsirea unor candidați la nivel înalt care să-și poată trece propriile teste "FizzBuzz". În fiecare caz reacția mea a fost "nu poți fi grav". Există aparent o mulțime de programatori teribili, care se află acolo ca un nivel senior, care nu sunt chiar aproape.
adăugat autor Joel Etherton, sursa
@Telastyn: Se pare că problema din zona mea este că multe pot vorbi despre un joc bun și au studiat materialele de referință pentru a putea oferi definiții, dar când vine vorba de rezolvarea problemelor, aplicarea logică, designul de algoritmi, pur și simplu nu au experiența .
adăugat autor Joel Etherton, sursa
Nu m-aș gândi pe cineva Senior până nu au condus o echipă. Doar pentru că ai fost programator software de 30 de ani, nu te face senior. Doar cineva care a făcut un loc de muncă timp de 30 de ani, și nu te face în mod necesar bun la ea.
adăugat autor kingchris, sursa
@Kyralessa: Da, este o abilitate diferită, dar nu te poți aștepta să te numești Senior datorită numărului de ani sub centură. Mai bine fie 1. un dezvoltator bun și un lider, sau 2. un dezvoltator de experți.
adăugat autor kingchris, sursa
Ei pot să iasă din interviu și să răspundă la fiecare întrebare pe care au ratat-o, așa că nu le dați nici un lucru pe care ei nu îl pot obține, dându-le răspunsul, deși în răspunsul lor la răspuns ați putea afla ceva despre ei . Deși fizzbuzz eșecul senior nu are nici măcar importanță, ei sunt atât de departe în a-și evalua aptitudinile sau chiar minciuna, nu știu că face orice diferență.
adăugat autor Jimmy Hoffa, sursa
@ Telastyn Gah, urăsc asta. Tipul care a scris cea mai mare parte a codului nostru depășește toți operatorii == și! = Din clasele noastre personalizate pentru a verifica egalitatea de valoare în loc de referință. Este o asemenea durere. (Editați: 'at'ed persoană greșită)
adăugat autor KChaloux, sursa
Abordarea Steve314 - ar fi eliminat testul; chiar dacă nu a fost codificată pe deplin. Props pentru referința la numere triunghiulare.
adăugat autor GlenH7, sursa
@ JoelEtherton - Același lucru pe aici. Am impins ecranele de telefon oriunde mergeam. Dacă solicitați să fiți Senior utilizând C# și nu ne puteți spune diferența dintre un tip de valoare și un tip de referință, nu primiți un interviu.
adăugat autor Telastyn, sursa
@ JoelEtherton - Da, există o mulțime de tipii ăștia, dar merită cel puțin interviul pentru a testa programul de programare. O persoană non-tehnică poate oferi ecranul de bază al telefonului.
adăugat autor Telastyn, sursa

9 răspunsuri

Cele mai multe dintre interviurile mele au fost cu studenții care căutau o poziție de stagiu și, de cele mai multe ori, au greșit exerciții simple (?). Am vrut o cale ușoară și prietenoasă de a comunica erorile lor și ceea ce am venit a fost destul de simplu: am rezolvat singur exercițiile și le-am arătat soluțiile după ce au terminat cu a lor.

Am avut destul de multe discuții extrem de interesante și dezvăluitoare cu candidații care au început prin compararea diferitelor noastre abordări pentru rezolvarea aceleiași probleme. După un timp, am anticipat chiar și unele erori, doar verificând la ce școală participă candidatul (unii "profesori" sunt ... moronii). Și, bineînțeles, în cele câteva cazuri în care un candidat nu putea să vină cu nici o soluție, i-am dat deja o dată pentru următoarea dată.

15
adăugat
@YannisRizos Aceasta este probabil o abordare bună; există întotdeauna o șansă ca persoana să nu se descurce bine în situațiile de interviu sau a evitat cumva operația modulo în munca lor (deși acest lucru nu înseamnă prea bine, să spunem cel puțin). Din experiența mea, un număr semnificativ de solicitanți sunt stomati când sunt rugați să scrie orice buclă simplă (în orice limbă aleasă de ei), chiar și pentru funcțiile de conducere. Acum, , mi se pare complet imposibil să se justifice.
adăugat autor Torrey, sursa
@RitwikG Sincer, dacă candidatul intervievează pentru o poziție de programare și nu poate face față cu fizzbuzz, aș fi probabil ... râde (hei, nu am spus niciodată că sunt un interviu bun). Acestea fiind spuse, câteva luni în urmă am pierdut în jur de câteva zile, luptând pentru ceea ce sa transformat într-un extrem trivial OBOE în codul meu. Toți avem momentele în afara noastră, iar eu nu aș fixa cu adevărat că candidatul a făcut un exercițiu, probabil aș trece imediat la următorul. Dacă nu au reușit și pe următoarea, probabil le-aș mulțumi pentru timpul lor și m-aș duce mai departe.
adăugat autor yannis, sursa
Are sens; Căutam recent un nou loc de muncă și am constatat că cei mai mulți intervievatori au făcut același lucru atunci când am dat răspunsuri greșite (sau ușor "în afara răspunsurilor punctului") la întrebările lor. Aceasta este o practică foarte bună. Mai ales pentru că deschide candidatul (de exemplu, eu) și face interviul însuși mai angajat de ambele părți. Dar, desigur, discutam despre template-uri, RAII și multithreading în C ++. Întrebarea este ce spui unei persoane care nu poate rezolva fizzbuzz?
adăugat autor Chani, sursa
Aceasta este și o bună înțelegere a procesului. Candidatul a fost, desigur, nervos, și am fost mai mult decât dispus să acord ceva pentru asta. Când a început în cele din urmă să vorbească prin încercarea sa de a găsi o soluție, a fost doar complicat și a creat condiții de frontieră pe care le-a ratat.
adăugat autor GlenH7, sursa

Oferirea răspunsului

Am fost de gând să spun că, în cazul în care candidatul nu este suficient de interesat să întreb, nu aș irosi respirația mea, dar @Yannis_Rizos răspunsul este mult mai bun.

Interviurile sunt destul de rapide. Știu că adesea mă uit după câteva zile după un interviu.

Oamenii care nu pot codifica FizzBuzz Classic

Îmi imaginez că un punct de lipire mare este conștient de operatorul%. Sperați că cineva ar putea gândi să compare (myInt/3) == (myDouble/3.0) , dar poate cu stresul unui interviu ... Totuși, FizzBuzz Classic forțează o abordare a forței brute, punându-l în categoria celor mai ușoare probleme de algoritm pentru rezolvare. Ca o sugestie, ai încercat să ceri oamenilor să codifice doar "Fizz" pentru jumătate de credit și poate să adauge mai târziu "Buzz" ca un accesoriu?

Cred că răspunsul final la întrebarea dvs. este că este foarte greu să găsiți candidați buni.

Întrebări interviu în general

De multe ori am fost mai ușor și mai productiv să-i cer pe candidați să descrie ultimul proiect de programare despre care erau încântați. Am avut un succes de 100% cu această întrebare, ceea ce înseamnă că oamenii care vorbeau animat despre un program de programare și care puteau răspunde la întrebări tehnice despre acest lucru erau angajați mari și cei care nu puteau, nu au fost. Acest lucru are efecte secundare bune de a pune candidatul în largul său, și încurajarea discuțiilor deschise. Cu această întrebare, candidatul vă va spune, de fapt, ceea ce este cel mai potrivit.

Poate că la un algoritm al think-tank-ului sunt necesare și întrebări, dar le-am abandonat în favoarea întrebării "proiect favorit".

Sumă (Fiu) din FizzBuzz

Întrebarea dvs. de interviu nu este echivalentă cu FizzBuzz:

Dacă enumerăm toate numerele naturale sub 10 care sunt multiplii de 3 sau   5, primim 3, 5, 6 și 9. Suma acestor multipli este de 23   funcție care găsește suma tuturor multipli de 3 sau 5 sub 1000.

În cazul în care FizzBuzz Classic vă forțează să treceți prin iterații n (pentru a imprima fiecare număr sau Fizz/Buzz), problema dvs. se poate face în n /5 + n /3 + n /15 iterații sau chiar nu există iterații - este posibil un calcul direct cu punct fix. Următorul program compară aceste trei metode:

public static void main(String[] args) {
  long n = Long.valueOf(args[0]).longValue();
  long sum = 0;
  long ms = System.currentTimeMillis();
 //Brute force method  Performance: cn
  for (long i = 1; i <= n; i++) {
    if ((i % 3) == 0) { sum += i;
    } else if ((i % 5) == 0) { sum += i; }
  }
  System.out.print("Brute force sum:    " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

 //Second solution: iterate through only numbers we are
 //interested in.  Performance: c * (n/3 + n/5 + n/15)
 //We counted multiples of 15 twice, so subtract one of them
  sum = countSum(n, 3) + countSum(n, 5) - countSum(n, 15);
  System.out.print("Only multiples sum: " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
  ms = System.currentTimeMillis();

 //Third solution: Use high school algebra.  Performance: c
  sum = sumSeries(n, 3) + sumSeries(n, 5) - sumSeries(n, 15);
  System.out.print("Sum of series:      " + sum);
  System.out.println(" time: " + (System.currentTimeMillis() - ms));
}

// Iteravely sum all multiples of skip
private static long countSum(long n, long skip) {
  long skipTotal = skip;
  long grandTotal = 0;
  while (skipTotal <= n) {
    grandTotal += skipTotal; skipTotal += skip;
  }
  return grandTotal;
}

// Thanks to @Caleb for pointing this out!  High school algebra
// tells us that the sum of a series is: (n * (a1 + an))/2
// where a1 is the first term and an is the nth term.  E.g. The
// sum of a series of 3 is: (n/3 * (3 + n - (n % 3)))/2
// Since we are thinking about performance here, we'll shift
// right one instead of dividing by 2 for style points.  ;-D
private static long sumSeries(long n, long skip) {
  return (n/skip * (skip + n - (n % skip))) >> 1;
}

Output (sum of FizzBuzz < 1000):

$JDK_HOME/bin/java FizzBuzzNot 999
Brute force sum:    233168 time: 0
Only multiples sum: 233168 time: 0
Sum of series:      233168 time: 0

Cu un n mai mare pentru compararea performanțelor:

$JDK_HOME/bin/java FizzBuzzNot 1000000000
Brute force sum:    233333334166666668 time: 4744
Only multiples sum: 233333334166666668 time: 818
Sum of series:      233333334166666668 time: 0

Notați celor care au votat acest lucru ca pe un subiect

Ideea de a prezenta o soluție la această întrebare este să arătăm că, în timp ce soluția forței brute la Sum of FizzBuzz este similară cu cea a FizzBuzz Classic, sunt disponibile soluții mai bune la problema Sum, făcându-l o problemă fundamental diferită. Suma din FizzBuzz este extrem de dificilă dacă nu-ți amintești formula potrivită pentru suma unei serii sau nu realizezi că se aplică atunci când treci cu 3 sau 5.

Dacă re-derivați formula pentru suma unei serii prin împărțirea seriei în jumătate, inversarea unei jumătăți și asocierea acesteia, veți obține (n + 1) (n/2) care vă poate duce într-o cale foarte dezordonată în ceea ce privește diviziunea întregului și rămășițele trunchiate. Versiunea (n (a1 + an))/2 a acestei formule este absolut critică pentru un răspuns simplu pentru toate valorile lui n.

15
adăugat
acest lucru se poate face fără o singură iterație. voi posta codul meu intr-un alt raspuns
adăugat autor user66237, sursa
Acest lucru poate fi calculat direct (Ruby): t = {| i | (i * (i + 1))/2}; fizzbuzz = {| n | 3 * t ((n-1)/3) + 5 * t ((n-1)/5)}
adăugat autor miguel.de.icaza, sursa
Unul dintre motivele pentru care s-ar putea să aveți o problemă este că numărați câteva cifre de două ori (cele divizate cu 15). Pentru un program de exemplu, consultați ideone.com/clone/oNWrhJ
adăugat autor pihentagy, sursa
Căutați o sumă dintr-o serie, dat fiind că această serie este de modulo = 0, poate fi utilizată formula n/2 * (m + nm). În cazul în care m = numărul modulo și n = numărul elementelor din serie (aka floor (x/m)), atunci S (3) + S (5) - S (3 * 5) nu se numără de două ori].
adăugat autor pihentagy, sursa
@ GlenH7 Da, am șters comentariul meu pentru că a fost buzzkill. Glen merită recuzită pentru analiză, chiar dacă nu răspunde la întrebarea AT ALL: D (În plus, am codat total și mi-am încercat propria soluție acum câteva clipe)
adăugat autor Mike McAllister, sursa
@ Hei Heh heh, adevărat! Răspunsul lui Glen este în mod extraordinar de subiectul, dar este un exemplu excelent al acestui indemn irezistibil pe care toți programatorii l-au avut :)
adăugat autor Mike McAllister, sursa
Este soluția la această problemă supusă dublării numerelor care sunt multipli de 5 și 3?
adăugat autor David G., sursa
@ GlenPeterson Știți cum să însumați numere consecutive 1..n? Anunțați prima și ultima, a doua și a doua ultima, etc. Scrieți-o și veți vedea că fiecare pereche este egală cu (n + 1). Deoarece numerele n sunt total și fiecare pereche utilizează 2 numere, totalul este (n + 1) (n/2). Soluția lui Kevin Cline (și cea a mea) folosește aceeași idee, înmulțită doar pentru a număra numai la fiecare al 3-lea sau al 5-lea întreg. De exemplu, suma multipli de 3 între 1 și 20 este (3 + 18) (20/3)/2 = 21 * 6/2 = 63.
adăugat autor Caleb, sursa
Vrei să spui că fuzzbuzz2 e mai greu, dar ai și schimbat destul de puțin poarta.
adăugat autor whatsisname, sursa
adăugat autor Eduardo Tavares, sursa
Aș mai reuși din nou, dacă aș putea pentru efortul pe care l-ați pus în răspuns. OTOH, ai atins statutul Wiki, așa că nu știu că ar face bine. Notă pentru viitorii cititori: multe dintre comentariile din acest răspuns nu vor avea sens dacă nu vă aliniați comentariile cu versiunile de răspunsuri de timbrele acestora.
adăugat autor GlenH7, sursa
@GlenPeterson - avem și întrebări mai interesante. Dar faptul că ați ucis o oră în găsirea unei soluții mai eficiente a fost un fel de dăruire ...
adăugat autor GlenH7, sursa

Am simțit că ar fi trebuit să-i arăt o cale de a rezolva problema așa   că poate cel puțin să învețe din experiență. Dar din nou, nu a făcut-o   cere. Care este modul potrivit de a face față situației?

Nu-mi pasă ce nivel este pentru interviu, nici măcar într-adevăr dacă este o întrebare la nivel de "FizzBuzz" sau o întrebare avansată. Dacă cereți unui candidat să rezolve o întrebare și nu poate, dar nici măcar nu vă deranjează să vă ceară răspunsul potrivit , atunci nu merită timpul. Cum în lume ați putea fi atât de leneș din punct de vedere intelectual?

Și chiar dacă vă stricați în totalitate în calitate de programator și încercați doar să vă bateți într-un loc de muncă, de ce nu ați fi cel puțin așa de pragmatic ca să primiți răspunsul potrivit acum, ca să știți asta pentru următorul interviu?

Deci nu, nu ar trebui să "dai" răspunsul, dar trebuie să așteptați ca candidatul să insiste să audă răspunsul corect după ce nu reușesc. Dacă nu, este un drapel roșu uriaș în cartea mea.

Dacă cineva la suflat pe FizzBuzz într-un interviu Dev, pentru că nu și-au putut aminti operatorul modulului și tocmai nu s-au putut mișca fără ea, dar apoi au fost pasionați să-și facă din nou, odată ce ai explicat răspunsul corect, sau cel puțin vorbind prin codul corect cu tine, atunci e aproape la fel de bun ca să răspunzi corect.

8
adăugat
Acum, dacă treaba pe care această persoană o intervela pentru că le-a cerut să facă algoritmi matematici și complexe, este bine ... FizzBuzz departe. Cu toate acestea, am avut interviuri pentru "senior" poziții de dezvoltatori care nu au fost absolut nimic altceva decât "Adunați cerințele de la client, faceți un site web care trage datele dintr-o bază de date și salvează datele într-o bază de date". și au pus întrebări precum FizzBuzz pentru că cineva le-a spus că este important. Acesta este locul unde mă enervez. Puneți întrebări care sunt relevante pentru poziția pe care o angajați, nu ceea ce credeți că îl face pe cineva un dezvoltator senior.
adăugat autor djpowell, sursa
@Graham: Sunt de acord. Aș spune că cheia în această situație nu este că candidatul "senior dev" nu putea să-l facă pe FizzBuzz, este că ar putea chiar să înceapă să o facă suficient pentru a satisface GlenH7. Cred că mă deranjează că atât de mulți oameni care au trecut prin colegiu pentru o diplomă de licență au început să domine domeniul și lucrurile pe care le consideră "elementele de bază" sunt lucrurile pe care un dezvoltator de auto-învățat ca mine nu le-a folosit un deceniu de programare. Se simte într-adevăr că trebuie să facem o distincție între "dezvoltatorii de afaceri" (oameni care fac aplicații CRUD) și "low level" devs
adăugat autor djpowell, sursa
@ GlenH7 - Asta e motivul pentru care am întotdeauna o problemă cu FizzBuzz. Sunt rău la matematică. Nu am cunoscut operatorul Modulus până acum câțiva ani, când FizzBuzz a devenit tot "buzz". Nu aveam absolut nici o idee despre cum să finalizez FizzBuzz, dar programam de peste 10 ani. Absolut nimic din cariera mea nu a avut vreodată nevoie să folosească ceva asemănător. Odată ce am știut despre modul, mi-am dat seama cum să fac FizzBuzz în 5 minute, dar lipsa mea de capacitate de a face acest lucru nu a spus într-adevăr ce aș putea să fac, dar ceea ce deja știam cum să fac. (continuare în următorul comentariu ...)
adăugat autor djpowell, sursa
Mă înțeleg foarte mult despre FizzBuzz ... dar acesta este răspunsul potrivit. Dacă candidatul nu solicită răspunsul, nu-i dați-i.
adăugat autor djpowell, sursa
Este o zi tristă când oamenii de pe programatori.SE iau în considerare operatorul modulului "math avansat" sau "nu este necesar pentru slujba lor". Următorul pas: "Nu trebuie să știu divizarea sau multiplicarea, nu i-am folosit niciodată în aplicația mea web".
adăugat autor Mike McAllister, sursa
"Deci nu, nu trebuie să" dați "răspunsul, dar trebuie să așteptați ca candidatul să insiste să audă răspunsul corect după ce acestea nu reușesc. Dacă nu, este un drapel roșu uriaș în cartea mea. Vezi, am citit că "Dacă nu au o lipsă de respect față de timpul meu, este un drapel roșu uriaș". Unii oameni urmăresc ideea că nu pierdeți timpul altor persoane. Nu aș întreba pentru că am fost acolo pentru un interviu, nu pentru a învăța metodologii. Este greșit acest lucru? Poate. Dar pentru a afla că respectarea altor oameni și timpul lor este un steag roșu? Cu privire la.
adăugat autor chryss, sursa
@ 0A0D, "matematica" implicată în FizzBuzz verifică pur și simplu dacă o anumită variabilă este divizibilă cu 3 și/sau cu 5. Acest nivel de matematică este prezent în aproape fiecare aplicație pe care o scrieți. Chiar și "business devs" ca și mine, care pun în aplicare același tip de proiecte de peste și peste utiliza acest nivel de matematică. GlenH7, nu sunt sigur nici dacă recursul în FizzBuzz mă va impresiona sau mă va sperie ... Desigur, pare a fi o suprasolicitare periculoasă.
adăugat autor Graham, sursa
FizzBuzz nu necesită operatorul modulului. Este pur și simplu nevoie de cod pentru a verifica și a vedea dacă un int este egal divizibil de 3 sau 5. Acest lucru ar putea fi realizat prin turnare pentru a dubla și căutarea de rezultate cu valori zecimale. N-aș fi vina pe un programator pentru că nu cunosc operatorul modulului într-o anumită limbă, pentru că nu-mi pot aminti un caz în care l-am folosit recent, dar eu pot vina un dev pentru că nici măcar nu încerc să mă gândesc problema într-un fel.
adăugat autor Graham, sursa
Ceea ce numiți "timp de risipă al altor persoane", eu numesc "demonstrarea capacității tale". Rareori o limită de timp pentru un interviu a devenit un factor pentru mine ca intervievator. Ai o oră să mă convingi că nu sugeți, deci ce vrei să arăți? Dacă gemul său împachetat, atunci poate da, nu arta pe o întrebare ratată, dar dacă aveți 2 - 5 minute la dispoziție, cererea de a vedea răspunsul corect demonstrează NICIUNE fel de curiozitate, spre deosebire de "renunțarea", deoarece că este exact modul în care am privit oameni care nu au cerut răspunsul după ce nu au răspuns la o întrebare.
adăugat autor Graham, sursa
@Graham: Cred. Lucrez la unele WSDL și alte chestii GWT .. nu matematică :) Dar când am făcut o lucrare geospațială, greu pe matematică .. deci totul depinde.
adăugat autor kingchris, sursa
@ GlenH7: Dacă lucrarea necesită matematică, atunci testați-o .. în caz contrar, dați o problemă care testează abilitățile pe care le căutați. Sunt doar un outsider în căutarea, dar dacă ați dat un test nedrept la cineva care nu a a fost expus la aceste lucruri ca un programator practic, atunci nu-i chiar vina lui.
adăugat autor kingchris, sursa
@ JamesP.Wright: Asta pentru că programarea a fost dominată în ultimul timp de oameni de știință și de inginerii software care, de obicei, vor avea un background în matematică și știință, astfel încât aceștia vor fi expuși acestor tipuri de lucruri. Pentru referință, puteți implementa modulo astfel: x - ((x/n) * n)
adăugat autor kingchris, sursa
De ce? Puteți răspunde mai târziu la Google. FizzBuzz este destul de popular. Aș fi sincer îngrijorat dacă cineva nu cunoaște divizarea modulului.
adăugat autor kingchris, sursa
@ JamesP.Wright - FWIW, sunt bine cu programatorul auto-predat, de asemenea. În esență, asta sunt ceea ce am de când fundalul inginerului meu nu sa suprapus cu programarea formală. Soluția candidatului a încercat să recurgă la condițiile de refacere și la lipsa condițiilor limită. M-am uitat puternic la această greșeală și nu a văzut eroarea în logica sa.
adăugat autor GlenH7, sursa
@ JamesP.Wright - divulgarea integrală, eu (acum) lucrez pentru o firmă de inginerie. Deci, da, matematica și algoritmi complexi sunt foarte importanți. După cum subliniază Graham, există și alte modalități de a rezolva fără a utiliza modulul și aș fi acordat pe deplin aceste încercări. Heck, ar fi putut chiar să construiască o matrice cu toate multipli și să verifice asta. Problema mea a fost că nu sa apropiat nici măcar de o abordare viabilă, motiv pentru care am întrebat ce ar fi trebuit să fac sau i-am spus ulterior candidatului.
adăugat autor GlenH7, sursa
@ JamesP.Wright - Sunt de acord într-o oarecare măsură, și intrăm în interviu, am fost un pic jenat să folosesc asta ca întrebare de plumb de codificare. Era presupus să fie ridicol de ușor și chiar am făcut-o cu un avertisment să nu citesc prea mult întrebarea. Am avut o urmărire care ar fi trebuit să fie ușoară, iar apoi am avut o treime care i-ar permite să demonstreze abilități de dezvoltare/design de nivel superior. Nu am ajuns la a treia întrebare ...
adăugat autor GlenH7, sursa
Mi-ar fi dat creditul pentru că am încercat să găsesc ceva în loc de operatorul modulului, dar nici măcar nu a ajuns la acest punct. Cred că aveți un punct bun, concentrându-se asupra eșecului său de a cere răspunsul. Observația dvs. este în concordanță cu unele dintre celelalte provocări apărute în timpul interviului.
adăugat autor GlenH7, sursa

Am scris fizzbuzz în timp ce la telefon cu intervievatorul în timpul unei pre-ecran. Asta e ceva care, chiar dacă toată lumea nu a auzit de, ar trebui să poți să călcați împreună după un semestru de lucru, desigur, dar cu siguranță după obținerea statutului "senior".

Nu există nicio recuperare din cauza imposibilității de a face acest lucru. Este una din acele neplăceri necesare pe care trebuie să le iei de la capăt doar în caz.

Aș spune că are sens să difuzați ca pre-ecran, astfel încât să nu pierdeți timpul pentru a le aduce pe site pentru un interviu.

4
adăugat
Nu există gard în scenariul ăsta. Dacă "codul său de probă" demonstrează o cunoaștere puternică și nu poate codifica fizzbuzz, scoateți mostra și cereți-i specificul. Dacă nu poate să-l susțină, atunci este timpul pentru linia mea favorită "avem încă niște candidați pentru a revedea, vom reveni la tine".
adăugat autor herbrandson, sursa
@ Graham - A fost și el acolo. În ultimul an, am făcut niște interviuri pentru un proiect pe termen scurt (pe termen scurt pentru ei, eu încă lucrez la același proiect, așa este). Firma noastră de recrutare le-a "pre-verificat" și au fost convinse că interviurile mele ar fi o formalitate. Când am întrebat ceva dintr-un curs Microsoft cert, cum ar fi "Ce sunt A-B-C lui WPF", am primit răspunsul corect fără ezitare. Când am instalat shell-ul unei probleme asemănătoare cu FizzBuzz pe tablă, inclusiv câteva teste de unitate simple, mă așteptam ca ei să treacă și le-au înmânat un marker de ștergere uscată.
adăugat autor KeithS, sursa
Atunci când codul eșantionului furnizat nu corespunde cunoștințelor demonstrate într-un interviu, creierul meu devine imediat suspicios de codul eșantion.
adăugat autor Graham, sursa
Da, sunt de acord cu Mike. Am fost o dată pe o echipă de interviu pentru un candidat la nivel mediu C #. Au fost furnizate toate cuvintele cheie și eșantioanele de cod, dar candidatul a eșuat la prima întrebare: "Arată-ne HelloWorld în C #".
adăugat autor Graham, sursa
@ 0A0D Din păcate nu am lucrat niciodată într-un loc care să permită acest tip de flexibilitate. Dacă poziția anunțată a fost un concert cu normă întreagă, este tot ce am putea oferi persoanei.
adăugat autor Graham, sursa
@ Graham: Închiriați-l ca o temperatură timp de 6 luni ..
adăugat autor kingchris, sursa
@ Graham: Interesant .. se pare ca un nu-brainer. De obicei nu beneficiați de niciun beneficiu. Angajatorul meu îl oferă ca o opțiune pentru persoanele pe care le au la gard.
adăugat autor kingchris, sursa
Pentru pre-ecranul nostru, am cerut un exemplu de cod, care a fost furnizat. Acest cod avea câteva funcții de limbaj intermediar până la avansat C#, așa că m-am așteptat cu adevărat să treacă prin întrebările logice în doar un minut sau două.
adăugat autor GlenH7, sursa

L-am antrenat chiar să mă gândesc să folosesc o buclă și asta 3   și 5 au fost într-adevăr merită luate în considerare ca cazuri speciale.

Ar fi interesant să știi ce tu credeți că este răspunsul "corect" la întrebarea dvs. FizzBuzz-ish. De unde stau, unul bun (în C) scris în scrisoarea de întrebare este:

int f(void) {
   //sum the multiples of 3 and of 5 and subtract multiples of 15 so we don't count them twice
    return ((1000/3)/2)*(999+3) + ((1000/5)/2)*(995+5) - ((1000/15)/2)*(990+15);
}

Ar putea fi mai bine:

De ce naiba ați scrie un program pentru a face acest lucru atunci când îl puteți calcula direct?

Ideea este că există mai multe modalități de a pătrunde o pisică, iar faptul că candidatul în cauză nu a început imediat să scrie pentru buclele și operatorii mod nu înseamnă că e prost. Dacă doriți să aflați ce știe candidatul, discutați problema - aflați ce gândește el. Dacă este blocat sau confuz, afla unde și de ce. El te-ar putea duce la o abordare pe care nu o consideri niciodată.

Întrebarea mea este dacă aș fi dat sau nu răspunsul la întrebările logice.

În calitate de intervievator, nu este locul dvs. pentru a învăța candidatul o lecție . Dacă într-adevăr nu știu cum să scrie cod, nu este absolut necesar să-i facem de rușine localizând cât de mult nu știu. Dacă sunt suficient de interesați să ceară, atunci cu toate mijloacele nu ezitați să le împărtășiți. În caz contrar, finalizați interviul, mulțumiți-i pentru timpul acordat și treceți la următorul candidat.

4
adăugat
@ user1172763 Asta e punctul - spre deosebire de FizzBuzz, întrebarea interviului OP poate fi răspuns printr-un singur calcul. Prin urmare, este o alegere proastă dacă scopul este de a vedea dacă candidatul poate scrie o buclă. Nu vă puteți aștepta ca un candidat să aleagă o soluție mai lentă, mult mai verbală, presupunând că vă adresați întrebarea pentru un anumit motiv (și netestat). Într-adevăr, intervievatorul ar putea fi cu ușurință o întrebare "truc" pentru a vedea dacă candidatul observă că looping-ul este complet inutil. Citirea minții tale nu este responsabilitatea candidatului.
adăugat autor Caleb, sursa
Dacă aș fi fost intervievatorul tău și mi-ai dat acel răspuns, te-aș referi la un district școlar care are nevoie de profesori de algebră. FizzBuzz reprezintă demonstrarea unei cunoștințe de bază a programării, astfel încât intervievatorul să poată trece la întrebări care vă vor diferenția de ceilalți programatori decent. Răspunsurile dvs. sunt deștepte, dar ele nu stabilesc că înțelegeți îndoială, aritmetică modulară etc., lăsând interviul fie să mergeți mai departe, presupunând că oamenii care știu algebra știu de asemenea programarea (greșit) sau pur și simplu să vă scuture mâna și merge mai departe (mai probabil).
adăugat autor user1172763, sursa
+1 pentru răspunsul solid din ultimul tău paragraf. Și tu ridici un punct bun în care ar fi trebuit să spun "un" răspuns în loc de "răspunsul". Există mai multe modalități de a rezolva acel particular. În ceea ce privește discuta problema , elementul a venit cu alte întrebări în timpul interviului. Din păcate, candidatul a fost ... mai puțin decât să vină în replică. Nu am adăugat acest aspect în întrebarea inițială, deoarece încercam cu adevărat să păstrez regulile P.SE pentru "bunul subiectiv".
adăugat autor GlenH7, sursa
"nu este locul tău să-i înveți pe candidat o lecție" - Nu sunt de acord. Un programator bun este mereu învățat. Dacă vă răspund la lecția dvs., acționând recunoscător pentru a învăța lucruri noi, atunci este un semn că sunt un bun programator. Dacă vă scot din lecție, atunci ei sunt cel mai probabil un programator rahat.
adăugat autor DEH, sursa

Am simțit că ar fi trebuit să-i arăt o cale de rezolvare a problemei, astfel încât să poată învăța cel puțin din experiență. Dar din nou, nu a cerut. Care este modul potrivit de a face față situației?

În modul în care o văd, nu există nicio situație de rezolvat. Presupunând că ați respins cererea sa, lipsa de interes a candidatului (aparent) nu este ceva ce trebuie să vă îngrijorați.

Într-adevăr, chiar dacă a cerut întrebarea, nu-i dați << o explicație. Și dacă ați vorbit cu oamenii de resurse umane despre acest lucru, ei ar putea să vă recomande că discuțiile suplimentare cu candidatul nu sunt recomandate din motive legale.


De asemenea, este de remarcat faptul că problema FizzBuzz are răspunsuri "cele mai bune" diferite, în funcție de modul în care o cereți. Dacă solicitați soluția "cea mai simplă" și soluția "cea mai eficientă", cele mai bune răspunsuri sunt radical diferite. Și aceasta poate să-ți decoreze incorect hotărârea ... dacă nu ai cunoștință de modul în care ai pus întrebarea. (Pe de altă parte, un candidat bun/cu experiență ar avea previziunea de a clarifica faptul că, înainte de a începe să cod ...)

2
adăugat

Pentru a răspunde la întrebarea dvs., nu aș da răspunsul. Dacă persoana dorește să fie un inginer de software mai bun, ei vor găsi răspunsul. Dacă le dai răspuns, îi jefuiești de această ocazie.

Întrebarea mai relevantă este când vă puteți numi un dezvoltator senior? Acest lucru variază între organizații și țări. De exemplu, o companie cu care am lucrat cu ingineri de software cu 5 ani de experiență ca seniori. Nu sa accentuat calitatea experienței, ci doar lungimea.

Până când vom veni cu un standard care să clasifice toți inginerii de software indiferent de limba lor, noi suntem lăsați cu individul să decidă nivelul abilităților lor. Și vom continua să auzim despre "inginerii seniori", care nu au reușit să obțină testul celor mai rudimentare abilități.

Cu câteva săptămâni în urmă, întrebarea a fost solicitată . Am scris, de asemenea, un post blog pe subiectul.

2
adăugat
@ Linkul André actualizat.
adăugat autor Martin Plante, sursa
Vreți să vă revizuiți linkurile pe blog?
adăugat autor André, sursa

Obținerea unui răspuns corect nu este partea importantă a acestui test. Ce măsurați este abordarea cuiva în rezolvarea problemelor, modul în care acestea se angajează cu întrebarea, orice creativ sau interesant pe care îl au pe parcurs; chestii de genul ăsta. Chiar dacă primesc un răspuns greșit, acestea pot fi viabile în continuare prin aceste criterii.

OK, neștiind că operatorul modului este inexplicabil și că metricile pe care le-am oferit acestui candidat pare să fie în continuare o abrogare, dar nu cred că doar dând răspunsul corect la acest candidat va fi de orice beneficiu.

Acest lucru vine de la opinia dvs. personală de aici. Doriți să oferiți feedback de interviu pentru a ajuta candidatul să facă mai bine în interviurile viitoare (și ca viitorii intervievatori să nu trebuiască să sufere ceea ce tocmai ați trecut)? Dacă da, faceți-vă un răspuns în termenii pe care tocmai l-am prezentat mai sus: spuneți-i că nu este vorba doar de răspunsul corect, dar cum lucrează pentru a ajunge la răspuns este un factor critic.

2
adăugat
+1 pentru comentariul lui cum lucrează pentru a ajunge la răspunsul este un factor critic. În timp ce mă așteptam la un operator de modul care să fie folosit, doar pentru că așa i l-au rezolvat. Am fost foarte deschis să văd orice altă abordare care a rezolvat problema fără a crea erori clare de condiție de limită (vedeți diferitele mele comentarii cu privire la abordarea cu recurs ...).
adăugat autor GlenH7, sursa

Problema dvs. este că sunteți un om empatic, deci este greu să urmăriți pe cineva să se lupte cu o problemă la care știi răspunsul (aceasta este și o problemă dacă executați studii de uzabilitate). Dintr-o perspectivă de sarcină-ca-intervievare, nu sunteți în nici un fel obligat să-l învățați pe intervievat cum să programeze sau să rezolve probleme sau soluția la o problemă pe care o întrebați.

Când antrenezi un intervievat, nu e așa ca ei să poată obține răspunsul corect. Este astfel încât să puteți vedea dacă într-adevăr nu pot rezolva problema sau dacă tocmai au închis una sau două greșeli sau neînțelegeri.

Deci, dacă doriți să oferiți intervievatorului soluția după fapt, o faceți doar pentru dvs. În general, aș prefera să folosesc acest timp pentru a permite intervievatului să încerce o altă problemă. Dar un programator "senior" care nu poate răspunde la FizzBuzz este probabil în afara listei. Dacă decideți să oferiți soluții, asigurați-vă că nu vă păcăliți să vă gândiți că interviul a mers mai bine decât sa întâmplat (dacă vă gândiți că "el nu a putut rezolva problema, dar când i-am explicat că a înțeles bine", atunci esti pe o cale periculoasa).

Și da, am fost un intervievat care era în fruntea lui și nici nu a făcut prima încercare de a rezolva o problemă de interviu. Asta înseamnă că am nevoie să învăț mult mai mult pentru a-mi urma un loc de muncă în acest domeniu.

2
adăugat