Penso che ci siano quelle domande facili come fizzbuzz, invertire una stringa, ecc., E poi ci sono alcune domande mentre se non le hai mai viste prima è difficile ottenere la soluzione ottimale prevista con la pressione aggiuntiva dell'intervista e il breve tempo vincoli. La parte peggiore è che a volte i recruiter senza conoscenze tecniche pongono alcune di queste domande e stanno cercando una risposta molto specifica .... Se non dai la risposta ottimale, pensano che tu sia un idiota assoluto. Anche se la tua risposta funziona, risolve il problema e, sebbene possa non essere ottimale, non è troppo inefficiente ....
Alcuni esempi:
come mescolerai un mazzo di carte? Stanno cercando il metodo Fisher-Yates http://it.wikipedia.org/wiki/Fisher%E2%80%93Yates_shufflele altre risposte sono "sbagliate" ..... Questo non è qualcosa che è probabile che tu sappia a meno che tu non abbia voluto mescolare prima le carte e specificatamente cercarle. Potresti inciampare su di esso nel corso della risposta, ma da quello che ho visto si aspettano che tu sappia questo freddo, quindi è dubbio che ci sarà molto tempo per consentire di trovare la soluzione. Un altro modo meno efficiente (ma forse più ovvio) è quello di creare un nuovo array con un puntatore all'array originale e un numero che è un numero casuale, quindi ordinare l'array in base al numero casuale. Quindi utilizzare l'array ordinato per costruire un nuovo array di carte. In ogni caso, ho ottenuto 0 crediti per averlo presentato a un recruiter.
Un altro esempio è la domanda su come rileveresti un numero duplicato in un elenco di n numeri tutti da 1 a n-1. La risposta ovvia (che è relativamente efficiente in una prospettiva temporale) è quella di utilizzare una tabella hash per inserire ogni elemento e se ne trovi uno già inserito, allora hai trovato il duplicato. La risposta ottimale è perché i numeri sono compresi tra 1 e n se non ci sono duplicati, è possibile ottenere la somma prevista come n (n + 1) / n. Quindi, sommando l'array si ottiene la somma effettiva che è inferiore alla somma prevista. Quindi sostanzialmente n - (Somma prevista - Somma effettiva) = numero duplicato ... È un caso abbastanza speciale .... In realtà ho già visto qualcosa prima in qualche post online su problemi di intervista di anni fa su uno correlato con lo stesso trucco, quindi Stavo bene ....
Un altro, inverti tutte le parole in una stringa senza usare spazio aggiuntivo. Ho dovuto pensarci e il recruiter è stato piuttosto impaziente nei 5 minuti in cui ho pensato (dividere e ricollegare la stringa al contrario, o andare parola per parola in un nuovo array sono entrambi molto facili). Mi è venuto in mente di trovare il bordo dell'ultima parola, di trovare la fine della prima parola e di spostare costantemente l'intera lista in basso di 1 e quindi di inserire la lettera appropriata. Quindi ripeti fino a quando non hai raggiunto la fine dell'elenco. Questo metodo ha funzionato e l'intervistatore ha concordato (era un po 'tecnico), ma è piuttosto inefficiente. Quando sono tornato a casa ho cercato la risposta ottimale, ed è solo per invertire l'elenco, quindi invertire ogni singola parola. Alcune persone potrebbero inventarlo,
Ora è vero una volta che hai visto alcuni di questi problemi, puoi risolverli più facilmente. Perché ci sono alcune domande simili con alcuni degli stessi trucchi. Conosco in particolare la formula n (n-1) / 2 e l'elenco dei numeri ha diverse varianti. Ma ancora non so cosa testino queste domande. Un FizzBuzz è qualcosa che tutti dovrebbero essere in grado di fare (anche se ho visto variazioni che non sono così semplici nel qual caso comincio a chiedermi se anche quello è realistico per una situazione di intervista senza essere in grado di digitare / eseguire il debug del codice). Alcune di queste domande sono ovvie quando le vedi, ma se non le hai viste non sono ovvie. Dopo tutto quello che qualcuno ha menzionato, ci sono voluti anni per far apparire la prima corretta implementazione della ricerca binaria ... In questo momento la ricerca binaria è così ovvia perché tutti possono leggerne.
Tuttavia, penso che la parte peggiore sia quando le persone non tecniche stanno ponendo le domande perché non possono apprezzare la tua soluzione sia corretta anche se non ottimale. Sanno solo che la tua soluzione non è quella presentata e quindi è tutto sbagliato, non ottieni credito per il tentativo. Anche le soluzioni non ottimali mostrano spesso una conoscenza dei costrutti di programmazione. A meno che non stia programmando giochi di poker, non mi interessa quanto qualcuno possa mescolare un mazzo di carte. E anche se lo fossi, dopo aver mostrato loro l'algoritmo efficiente sono sicuro che chiunque a metà decente potrebbe seguirlo.
Le domande sui template sembrano dare un vantaggio ai candidati che intervistano più a lungo poiché hanno maggiori probabilità di aver visto più domande sui template. Anche FizzBuzz, la prima volta che lo vedi potresti impazzire, ma quando lo vedi più volte ti abitui. La cosa migliore che potresti fare è dare una sfida alla codifica che richiede una logica aziendale personalizzata. Ad esempio, creare un set di dati (array di oggetti / record), quindi creare alcune regole aziendali da applicare a ciascun oggetto e restituire una risposta. Ad esempio, un tipo di classificazione, ecc. Ma regole molto personalizzate. Mentre probabilmente hanno visto scorrere i record e applicare la logica un milione di volte, le tue regole saranno uniche, quindi almeno dovrebbero capire e implementare con successo le regole che hai creato.
Diciamo che stipendio previsto e un elenco di candidati e i loro primi 3 videogiochi preferiti, e forse uno stipendio iniziale. I candidati a cui piace Zelda ricevono una penalità di 300, i candidati a cui piace la sirenetta ricevono un bonus di 200. I candidati a cui piacciono Donkey Kong e Super Mario Brothers ma non il Dr. Mario ricevono un bonus di 300. I candidati a cui piace Metroid o Kid Icarus ricevono un bonus di 200, ecc. Sembra un po 'folle ma ti mostrerebbe la loro capacità di tradurre le regole di business in costrutti logici di programma e testare anche la loro comprensione della logica booleana. Nel complesso non è molto diverso dal fizzbuzz, tranne per il fatto che non si utilizzano moduli e loop. Ovviamente potresti dare loro l'elenco e farli scorrere attraverso di esso e stampare i risultati sullo schermo usando anche criteri di output specifici.