Devo ammettere qui che sono uno di quelli a cui piace fare domande sugli algoritmi durante le interviste, ma devo sottolineare che la risposta effettiva alla domanda è assolutamente irrilevante. Non mi interessa minimamente se l'intervistato conosce o meno la risposta. Invece, per me, questa domanda si rivolge a diversi aspetti, come i seguenti - 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à corretta 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 un array di N numeri, ma non dovrebbe farlo senza chiedere maggiori dettagli su X e Y. Diciamo che X e Y sono compresi tra 1 e 1000 , quindi, vai avanti e avvia una soluzione basata su array. Ma se ti dico che l'intervallo è 1 e 1 miliardo, allora il problema diventa completamente diverso. Lasciami sottolineare ancora, che non mi interessa la soluzione.
Tecniche standard
Non voglio assumere un programmatore che non sa nemmeno cosa significhi O (n). È assolutamente da sapere se hai avuto un'educazione decente in quella zona. Ma è anche importante non solo sapere cosa significa, ma applicare effettivamente tale conoscenza. Nel tuo esempio, voglio che un candidato si renda conto che non gli è consentito ordinare i dati (senza fare ulteriori domande mirate all'opzione di un bucket bucket o altri approcci di ordinamento O (n)) a causa dell'ordinamento richiesto O (n log n) in generale.
Allo stesso modo, altre domande dell'algoritmo si rivolgono a tecniche standard come la traversata di alberi o grafici o la ricorsione. Un candidato può scivolare su una di queste tecniche, il che non fa una buona impressione. In questi casi, tuttavia, mi piace scavare più a fondo per scoprire se il candidato ha un background CS. Naturalmente, dipende da quale sia la posizione target, ma di solito uno sviluppatore che non conosce le complessità del runtime, né le strutture di dati tipiche e i loro attraversamenti, non sarà di alcun aiuto.
Mentalità problematica
Dopo aver posto la domanda, controlli attentamente il candidato. Come reagisce? Qui ottieni i migliori risultati da candidati che non hanno assolutamente idea di come risolvere il problema all'inizio . A tale proposito, la domanda verifica cosa potrebbe accadere se si verificasse una situazione simile sul posto di lavoro in un secondo momento. Potresti imbatterti in un simile problema durante il tuo sviluppo ed è bene sapere come il tuo candidato affronta questi problemi, anche se non è in grado di risolverlo da solo.
Esempio: non vuoi che il tuo candidato passi in modalità silenziosa per la prossima mezz'ora! Controlla se riesce a formulare domande intelligenti (vedi Requisiti), controlla se inizia a pensare fuori dagli schemi una volta che si rende conto di non poterlo fare. Anche una contro-domanda "divertente" come una "Posso usare l'opzione telefono a un collega di lavoro?" è un buon segno.
Come rispondere
In generale, le migliori risposte che puoi dare per questo tipo di domande sono contro-domande! Dire subito una risposta fallisce sostanzialmente, e in realtà non è affatto una buona risposta, perché tutte queste domande suggeriscono compromessi, cosa che la tua risposta implica, senza che tu abbia le informazioni richieste ma che lo fai in modo intelligente scambio. Naturalmente, la qualità delle contro-domande varia tra i candidati.
Come nota generale sulle domande del colloquio: le contro-domande raramente sono 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 questo, e perché?" - Ho semplicemente contrastato con "Sono limitato a questi due?". Indovina da te, che tipo di reazione ricevi da un intervistatore per una contro-domanda del genere - e quanto sia facile per te mostrare effettivamente all'intervistatore di cosa sei capace.
find the missing element in O(N) or better
cosa significa "o meglio" in questo contesto? Sembra il tipo di cose che verrebbero risolte con un semplice ciclo while, ma comunque non capisco - è risolto o non risolto , giusto?