Devo ammettere che sono uno di quelli a cui piace porre domande sugli algoritmi nelle interviste, ma devo sottolineare che la risposta effettiva alla domanda è assolutamente irrilevante. Non mi interessa minimamente se l'intervistato conosce la risposta oppure no. Invece, per me, questa domanda si rivolge a diversi aspetti, come il seguente: in ordine di importanza:
Requisiti
Tali domande sono deliberatamente sottostimate. Nel tuo esempio, non ci sono ulteriori dettagli sulla sequenza. Se hai un intervistato che ti chiede se questi numeri sono effettivamente ordinati, allora è un buon segno. Ha la mentalità giusta per chiedere ai clienti ulteriori dettagli, che aiuteranno a trovare una soluzione migliore in un tempo più breve. Il candidato può anche giocare con l'idea di usare lo spazio O (n) per memorizzare una serie di numeri N, ma non dovrebbe farlo senza chiedere maggiori dettagli su X e Y. Diciamo che X e Y sono tra 1 e 1000 , quindi sicuro, andare avanti e accendere una soluzione basata su array. Ma se ti dico che l'intervallo è 1 e 1 miliardo, allora il problema diventa completamente diverso. Vorrei sottolineare ancora una volta che non mi interessa la soluzione. Voglio vedere se il candidato può trovare la differenza tra questi problemi, che sono immensamente diversi.
Tecniche standard
Non voglio assumere un programmatore che non sappia nemmeno cosa significa O (n). Questo è un assoluto deve sapere se hai avuto un'educazione decente in quella zona. Ma è anche importante non solo sapere cosa significa, ma applicare effettivamente quella conoscenza. Nel tuo esempio, voglio che un candidato si renda conto che non è autorizzato a ordinare i dati (senza porre ulteriori domande che mirano all'opzione di un ordinamento del bucket o altri approcci di ordinamento O (n)) a causa dell'ordinamento richiesto O (n log n) in generale.
Allo stesso modo, le altre domande sugli algoritmi hanno come obiettivo tecniche standard come il tree-or-traversal grafico o la ricorsione. Un candidato può scivolare su una di queste tecniche, che non fa una buona impressione. In questi casi, tuttavia, mi piace scavare più a fondo per scoprire se il candidato ha qualche background di CS. Naturalmente, dipende da quale sia la posizione di destinazione, ma in genere uno sviluppatore che non conosce le complessità di esecuzione, né le tipiche strutture di dati e le loro traversate, non sarà di alcun aiuto.
Mente mentale per la risoluzione dei problemi
Dopo aver fatto la domanda, controlli attentamente il candidato. Come reagisce? Ottieni i migliori risultati qui da candidati che non hanno assolutamente alcun indizio su come risolvere il problema all'inizio . A tale riguardo, la domanda verifica cosa potrebbe accadere se una situazione simile si verifica successivamente sul posto di lavoro. Durante lo sviluppo potresti riscontrare un problema simile, ed è bene sapere in che modo il tuo candidato affronta questi problemi, anche se non è in grado di risolverli da soli.
Esempio: non vuoi che il tuo candidato entri in modalità silenziosa per la prossima mezz'ora! Controlla se riesce a trovare domande intelligenti (vedi Requisiti), controlla se inizia a pensare fuori dagli schemi una volta che si rende conto che non può farlo. Anche una contro-domanda "divertente" come "Posso usare l'opzione di un collaboratore telefonico?" è un buon segno.
Come rispondere
In generale, le risposte migliori che puoi dare per questo tipo di domande sono contro-domande! Dire una risposta immediatamente fallisce fondamentalmente, e in effetti non è una buona risposta, perché tutte queste domande lasciano intendere i trade-off, che la tua risposta implica, senza che tu abbia ancora le informazioni richieste per farlo in modo intelligente scambio. Naturalmente, la qualità delle domande contrarie varia tra i candidati.
Come nota generale sulle domande dell'intervista: le contro-domande sono raramente una cosa negativa. In una delle mie interviste mi è stato chiesto ad esempio qualcosa del tipo: "Se dovessi implementare X, sceglieresti C ++ o Java per quello, e perché?" - Ho semplicemente ribattuto con "Sono limitato a questi due?". Indovina per te, che tipo di reazione hai ricevuto da un intervistatore per una tale contro-domanda - e quanto sia facile per te mostrare effettivamente all'intervistatore ciò di cui sei capace.