Domanda:
Perché gli intervistatori pongono domande all'algoritmo anche se la posizione lavorativa non richiede tale conoscenza?
user10125
2014-06-14 20:57:35 UTC
view on stackexchange narkive permalink

Ho visto molti intervistatori fare domande anticipate sull'algoritmo e sulla struttura dei dati mentre il lavoro non richiede alcuna conoscenza di essi. È vero molte volte, quindi perché gli intervistatori fanno queste domande?

Che tipo di lavori di programmazione non richiedono la conoscenza di algoritmi e strutture dati? Senza queste basi, tutto ciò che puoi fare è copiare senza pensieri i dati. Non puoi nemmeno progettare un buon modello di dati.
@kevincline la maggior parte dello sviluppo web nei negozi di siti web standard, ad esempio.
@BenjaminGruenbaum Quale lavoro di sviluppo web non richiede la conoscenza di algoritmi e strutture dati? Mia moglie gestisce un negozio di mobili online, ma quando ha voluto apportare le più piccole modifiche ai modelli di modelli del negozio ha dovuto imparare a conoscere gli array associativi. Per fortuna è abbastanza intelligente e ci sono voluti solo pochi minuti, ma doveva ancora sapere cosa stava succedendo.
Gli array associativi non "conoscono le strutture dei dati", tua moglie non ha dovuto passare un minuto a pensare alla tabella hash di supporto o all'albero rosso nero. Questo è il bello :)
Per molti c'è una risposta semplice: lo fanno perché lo fa Google.
Sto piangendo per l'industria in questo momento.
@Benjamin: C'è molto spazio per una grave inefficienza in Javascript lato client. L'ho visto molte volte. Se intendevi "scrivere HTML e CSS", questo è design grafico, non programmazione.
È un test di quanto recentemente eri uno studente universitario CS.
Perché è necessario per il lavoro.
@GlenPierce non è proprio più perché è alla moda
@Neuromancer, Sono d'accordo, perché è trendy.Proprio l'anno scorso, le aziende tecnologiche mi hanno fatto sviluppare piccole applicazioni per loro, ora mi danno tutti algoritmi Codility e Hackerrank e mi mandano sulla mia strada e no non mi chiedono di spiegare le mie soluzioni.Quindi chiamo buoi su quello.Guardano solo per vedere se ho il 100%, no?ok, al prossimo ragazzo dispiaciuto con un curriculum.
Un ultimo e lampante punto che tutti sembrano perdere.In qualsiasi altro settore, se ti viene chiesto di dimostrare che puoi fare qualcosa, era già delineato nella descrizione del lavoro (per la maggior parte).Quindi, entrambi i posti ** devono conoscere algoritmi ** nella descrizione del lavoro OPPURE ** devono avere una laurea in CS **.Testare qualcuno su qualcosa che non hai chiesto in una descrizione del lavoro suona falso quando lasci fuori l'elegante giustificazione fornita da kolossus.In parole povere, si chiama essere ciechi.
Cinque risposte:
kolossus
2014-06-14 21:24:03 UTC
view on stackexchange narkive permalink

È principalmente una prova della tua comprensione dei fondamenti dell'informatica (che dovrebbe essere un prerequisito per qualsiasi programmatore).

Lo sviluppo del software si è evoluto al punto che i fondamenti della creazione di un buon prodotto sono stati astratti dallo sviluppatore medio. I linguaggi "di alto livello" hanno generato un nuovo raccolto di programmatori copia-incolla che non sanno perché funziona, solo che lo fa. Anche se non è facile, quasi tutti possono imparare un'API al giorno d'oggi.

Chiedere algoritmi, strutture dati e modelli di progettazione aiuta molte aziende a eliminare i programmatori che possono razziare Stackoverflow per ottenere buone risposte, senza capire il funzionamento principi alla base. Scoprirai anche che molte aziende che chiedono informazioni su tali fondamenti, costruiscono in una varietà di piattaforme. Piuttosto che chiedere cose peculiari a una lingua / piattaforma specifica, apriranno l'intervista con domande più generali sull'informatica.

Conoscere i fondamenti di CS ti aiuta a prendere decisioni migliori di livello superiore durante la programmazione. Se fossi un datore di lavoro, vorrei assumere un programmatore che conosca la differenza tra Stack e Queue; un ArrayList da un LinkedHashSet; Bubble sort da Quick Sort; Ci sono implicazioni in termini di prestazioni / progettazione per queste decisioni. È importante capirli, piuttosto che strappare qualcosa dalla rete (da un autore che potrebbe aver preso la decisione sbagliata senza la tua comprensione / conoscenza). Conoscere la soluzione non significa capire la soluzione

Perché i sistemi operativi, i compilatori, ...? Perché solo algoritmi?
... ma perché? Se non hai assolutamente bisogno di conoscere i fondamenti, perché dovrebbero chiederlo? (Non sto dicendo che non dovresti, solo che non hai davvero fornito una ragione nella tua risposta.) Ci sono anche altri motivi per cui farebbero domande del genere.
@VarunAgw - I sistemi operativi ei compilatori sono fondamentalmente costruiti su cosa? Algoritmi. Strutture dati. Logica. Fondamenti. Questo è ciò a cui tutto si riduce alla fine. Piuttosto che dividere i capelli tra C # e Java, preferisco farti domande basate su qualcosa che entrambi hanno in comune
@Dukeling - Se fossi un datore di lavoro, vorrei assumere un programmatore che conosca la differenza tra uno Stack e una coda; un ArrayList da un LinkedHashSet; Bubble sort da Quick Sort; Discussioni vs processi. Ci sono implicazioni in termini di prestazioni / progettazione per queste decisioni. È meglio capire che strappare qualcosa dalla rete che potrebbe aver preso la decisione sbagliata senza la tua comprensione / conoscenza. Conoscere la soluzione non è capire la soluzione. Non sto dicendo che devi capire la soluzione il 100% delle volte, ma come datore di lavoro, sarei più felice di sborsare i soldi se lo facessi.
@kolossus Questo dovrebbe probabilmente entrare nella tua risposta.
@Dukeling - Sono abbastanza sicuro di aver fornito più ragioni, sulla falsariga di "..suggire i programmatori che possono razziare Stackoverflow per ottenere buone risposte, senza comprendere i principi operativi dietro di loro" ecc.
@Dukeling - capito
`aiuta molte aziende a eliminare i programmatori` Tuttavia penso che ci siano modi migliori. Possono chiedere di codificare qualcosa direttamente correlato al lavoro. Può anche aiutare a eliminare i programmatori. Inoltre, una buona conoscenza degli algoritmi non significa che farai bene il lavoro perché farai qualcosa di diverso dallo scrivere buoni algoritmi nel lavoro.
@VarunAgw- chiaramente gli algoritmi e le strutture dei dati non sono la totalità dell'intervista. Ti verranno poste una serie di domande; i datori di lavoro che usano quelli non sono stupidi sai.
@VarunAgw, quando sei un manager, puoi fare tutte le domande che vuoi provare per capire chi è e chi non è in grado di fare il lavoro che hai. Le persone che stai intervistando hanno un motivo per chiederlo e non importa quale sia il motivo in ultima analisi, dal momento che dovrai avere una risposta accettabile per muoverti attraverso il processo. Ma poiché queste sono domande che mettono alla prova la tua comprensione fondamentale dell'informatica, non le vedo scomparire presto. Forse hanno eliminato alcune persone potenzialmente buone, ma hanno anche eliminato la maggior parte degli incompetenti.
@kolossus: NSMutableArray funziona perfettamente come uno stack e una coda.Aggiungi elementi alla fine e l'unica differenza è se rimuovi elementi alla fine o all'inizio.Le prestazioni sono le stesse.
@gnasher729 "stack" e "queue" sono tipi di dati * astratti * (ADT).Il tuo esempio è un tipo concreto che può essere utilizzato nell'ambito di uno stack o una coda.La considerazione delle prestazioni qui diventa se hai bisogno del comportamento FIFO (una coda) o LIFO / FILO (uno stack).
@kolossus, Amo la tua risposta per la sua logica e mi apre ad accettare questo nuovo modo di intervistare, ma è imperfetto.Quindi conoscere gli algoritmi mi renderà facile e veloce imparare lo sviluppo delle API?chi dovrebbe insegnarmi?Nessuna azienda tecnologica negli Stati Uniti si preoccuperà di investire risorse in tale impresa, dovrei saperlo, ma ho passato il mio tempo ad apprendere algoritmi, un problema diverso da risolvere rispetto allo sviluppo delle API.
@Daniel - felice che tu abbia trovato utile la risposta.Per il tuo punto, conoscere * alcuni * algoritmi ti renderà uno sviluppatore migliore * in generale *;non è necessario conoscere tutti gli algoritmi del libro.Imperfetto o no, questa è solo la realtà del reclutamento per un negozio di software decente.Si aspettano che tu conosca i fondamenti (nemmeno le cose veramente fantasiose come gli alberi più esoterici) * prima * che tu arrivi a lavorare per loro.
@kolossus, il mio istinto mi dice che una volta che un numero sufficiente di noi sta imparando e superando questi test algoritmici, trasferiranno nuovamente il formaggio a una nuova tendenza.Quindi, immagino che il mio punto di vista generale sia che se la maggior parte dei negozi lo facesse per il motivo che dai, sarebbe accettabile per me, ma sono d'accordo che la maggior parte delle aziende lo fa solo perché lo fanno altre società.L'indizio è in quelle aziende che non si preoccupano mai di chiedermi il perché?Ho scelto la risposta che ho fatto, quelle che ti danno un link Codility / Hackerrank e ti mandano sulla tua strada.
Bernhard Barker
2014-06-15 05:02:57 UTC
view on stackexchange narkive permalink
  • Sai scrivere codice funzionante?

    Questo ovviamente presuppone che ti venga effettivamente chiesto di scrivere codice effettivo durante l'intervista (lavagna stile).

    Non si tratta tanto di non avere nemmeno un singolo errore di battitura nel codice, ma piuttosto di sapere come sono fatti i costrutti di base come i cicli for, sapere come mettere insieme i bit e dimostrando che hai effettivamente scritto un po 'di codice in una lingua per conoscere la maggior parte dei metodi / classi più comuni (apparentemente gli intervistatori hanno un po' di problemi con i candidati che non riescono nemmeno a superare il fizz buzz test).

  • Riesci a pensare a un problema?

    Questo sicuramente non si applica solo agli algoritmi.

    È necessario essere in grado di comprendere il problema, analizzare i requisiti, scegliere strutture di dati e algoritmi appropriati, scrivere il codice / seguire l'approccio e analizzarlo: ciò è richiesto per molti / la maggior parte (non bug -fix) attività di programmazione.

  • Puoi com comunicare bene (sulla programmazione)?

    Capisci il problema come descritto?

    Chiedi chiarimenti quando richiesto?

    Puoi spiegare l'approccio di alto livello prima di iniziare a scrivere il codice?

    Sei in grado di spiegare il tuo codice dopo il fatto?

    La capacità di comunicare bene è importante nella tua giornata un lavoro quotidiano come programmatore.

    Il tuo capo non dovrebbe preoccuparsi che tu non sia in grado di capire la spiegazione di un problema, non chiedere chiarimenti quando le cose non sono chiare (e alcuni presupposti radicali), non sono in grado di spiegare come intendi risolvere un determinato problema e / o non hanno la capacità di spiegare il codice che hai scritto a nessun altro.

  • Hai una discreta conoscenza delle strutture dei dati e degli algoritmi?

    Anche se ti potrebbe essere chiesto di una struttura dati avanzata o di un algoritmo che non utilizzerai mai, la conoscenza di questa struttura dati potrebbe essere un indicatore abbastanza accurato del fatto che conosci abbastanza bene tutti quelli di base.

    Sono anche abbastanza sicuro che puoi attenersi a semplici strutture dati o algoritmi (lista collegata, array, albero di ricerca binario, ricerca binaria, ecc.) In molti casi e ancora fare bene in questo aspetto specifico - mentre un dato avanzato struttura o algoritmo possono essere più adatti a risolvere il problema in questione, spesso potresti risolvere il problema in modo abbastanza efficiente con una combinazione di quelli di base: c'è ancora da scegliere tra loro in base all'adeguatezza e combinarli in modo appropriato.

    E hai sicuramente bisogno di una discreta conoscenza delle strutture dei dati e degli algoritmi: non puoi essere bravo in quello che fai se non sai quando usare quali strumenti nella tua cassetta degli attrezzi.

  • Riesci ad analizzare la complessità del tempo e dello spazio e valutare le scelte l'una contro l'altra tenendo conto di esse, fare la scelta più appropriata per la situazione?

    Qualsiasi domanda sulla struttura dei dati o sull'algoritmo dovrebbe comportare complessità e sarà molto significativa per il tuo lavoro quotidiano: nessuno ti vuole per, ad esempio, scrivere codice che esegue ricerche lineari all'infinito attraverso un grande array immutabile perché non sai cosa sta succedendo a basso livello.

Sascha
2018-01-14 23:19:20 UTC
view on stackexchange narkive permalink

Faccio interviste tecniche. Molto spesso non chiedo affatto alle persone le cose che faranno, ma le cose vagamente correlate che hanno fatto. La logica alla base di questo è semplice:

  • posso vedere quanto a fondo alla persona piace entrare nei dettagli tecnici.

  • Posso confronta la persona con i suoi pari

  • Posso testare meglio la sua forza analitica su qualcosa in cui sa effettivamente qualcosa su quella cosa sconosciuta.

  • Vedo anche l'auto-riflessione e le capacità di squadra. Per esempio. quando una persona CS parla della propria tesi di laurea e afferma esplicitamente di aver lasciato una certa parte da fare per un compagno di squadra o di come si è impadronita di qualcosa

Tutto questo può funzionare solo se presento loro qualcosa che in realtà posso aspettarmi che sappiano. Se sono bravi in ​​queste cose, di solito lo sono anche in altri argomenti.

sei un intervistatore tecnico molto sensibile e molto saggio.Non respingo il kolossus fornito in quanto ha anche molto senso.C'è un piccolo dettaglio che kolossus manca.La scrittura di un algoritmo risolve un problema molto specifico, la funzionalità CRUD risolve un problema molto specifico.Come sono collegati?In altre parole, se imparo il primo, ciò porterà a una comprensione intuitiva del secondo?
James Adam
2014-06-14 21:01:15 UTC
view on stackexchange narkive permalink

Ci sono probabilmente due risposte principali:

Primo, perché è un'opportunità per vedere come un candidato affronta un problema. Anche se non conosci immediatamente la soluzione specifica del problema, il modo in cui spieghi come affronteresti il ​​problema potrebbe rivelare la tua capacità di pensare chiaramente, di comprendere il problema e di dimostrare altre qualità come la pazienza.

La seconda risposta è che lo stanno facendo semplicemente perché è un modo per dimostrare quanto sa un candidato e che credono che altre società facciano lo stesso, quindi la domanda agisce come un ostacolo abbastanza arbitrario che vogliono candidati per saltare.

Molto spesso è un modo per reclutare persone come me e talvolta anche un modo per usare le proprie credenziali come forma di comportamento dominante.
@James, i test dell'algoritmo che un'azienda mi ha fatto fare finora, era solo un qui andare a fare questo test su Codility e andare via per sempre.Nessuno è mai tornato in contatto con me per chiedermi perché ho scritto gli algoritmi nel modo in cui ho scritto.Hanno appena visto che non tutte le mie soluzioni erano corrette al 100%, quindi hanno detto, beh, vogliamo il ragazzo che ne riceve il 100% e basta.
@Daniel Mi dispiace che tu abbia avuto quell'esperienza.Sembra che tu sia meglio non lavorare per quella società, se è così che trattano le persone!
@JamesAdam, per essere chiari, in realtà non me l'hanno detto.Il punto è che molte aziende stanno cercando un modo semplice per aggirare il fatto di dover effettivamente passare attraverso 100 candidati.Quindi hanno scoperto che prenderanno Codility o Hackerrank e daranno a tutti un test dell'algoritmo standard di cui loro stessi non hanno idea e cercheranno il candidato che ottiene il 100%.Ma sono d'accordo che io e altri sia meglio non lavorare per un'azienda del genere.
Vladimir Nabokov
2018-01-14 02:08:33 UTC
view on stackexchange narkive permalink

L'autore ha chiesto: "perché controllano gli algoritmi, anche se il lavoro non li richiede"

Nella maggior parte dei casi, perché:

1) è il modo più semplice per un programmatore immaturo, fresco di uni o semplicemente un buon "googler", per discutere con un candidato, che ne sa più di un intervistatore.

2) a causa dell'inconsapevolezza della complessità dei linguaggi moderni di alto livello e del loro API.

Quando chiedono algoritmi, pensano di "controllare come pensa un candidato".

Dopo 20 anni di programmazione, dimentichi naturalmente la maggior parte del materiale sugli algoritmi proveniente da un'università, perché è usato raramente a basso livello.

(Eccezione: programmatori C / Assembly in alcuni livelli, programmatori core del linguaggio, data mining)

Ti sei concentrato più frequentemente sulle API e strutture di dati di alto livello. Inoltre, le caratteristiche del linguaggio di concorrenza, i modelli di progettazione, gli angoli bui degli stili orientati agli oggetti e funzionali SONO molto più importanti nell'80% dei lavori dei programmatori, quindi li conservi naturalmente in memoria. L'80% dei programmatori inizia a richiamare / aggiornare la conoscenza degli algoritmi solo per le interviste. Questa è la realtà.

Quindi, hai chiesto "ciò che il tuo intervistatore sa o è in grado di cercare su Google", non "ciò che richiede il lavoro", i requisiti reali del lavoro potrebbero essere un segreto molto oscuro per il tuo intervistatore! !!

L'API moderna, i problemi di concorrenza e le strutture di dati di alto livello sono dieci / centinaia di volte più complessi degli algoritmi scolastici e il requisito di conoscere tutto ciò costantemente è folle.

Quindi, hai effettivamente chiesto "la parte più sicura", cose che il tuo intervistatore è in grado di grattare dalle pagine web,

la parte non algoritmica potrebbe essere 1000 volte più complessa, ma è per questo che raramente hai chiesto quella parte - l'intervistatore ha paura - qui è richiesta esperienza, non solo "googling".

A mio avviso, l'industria è paralizzata da quegli intervistatori, la maggior parte di loro sono capi di team che sono entrati nella loro posizione dopo una carriera di programmatore troppo breve.

Queste domande sono un marchio di ignoranza e di esperienza insufficiente.

Invece di porre 10 domande in ciascuna delle 10 aree di programmazione coinvolte da questa azienda / posizione, ad esempio, modelli di progettazione, concorrenza, protocolli, web, concorrenza, client, server, UML, framework, ecc ... (100 domande è un minimo per avere una visione ampia) per scoprire tutti i lati deboli e forti di un candidato, di solito iniziano il colloquio in questo modo:

"Di solito faccio solo due domande!". (È obbligatorio seguito da uno sguardo molto narcisistico - nota che - come questo ragazzo ha scoperto il segreto di una buona intervista e non si preoccupa mai di molte altre domande!) Una domanda sarà un puzzle, la seconda - algoritmo. È abbastanza! Questo è ciò che è veramente importante per un lavoro: risolvere enigmi e un ricordo dei tuoi giorni di scuola !!!

Ciò significa semplicemente: "Penso di essere intelligente, perché l'ho cercato su Google una settimana fa, leggi la soluzione e capito, ora tocca a te, hai 10 minuti, ma niente google ".

Puoi dire" non esagerare, la gente sa cosa chiede ". Davvero? Pensi davvero che se chiedessi un altro "puzzle" avrò una risposta chiara?

A mio avviso, l'intervistatore deve sforzarsi di chiedere cosa è in grado di fare da solo, non di meno, ma non di più. Altrimenti, è un circo, il cui unico scopo è costruire un altro ego per conto del candidato.

Ciò porta a un progresso di un nuovo amore per i puzzle, ma nella pratica debole il tipo, al contrario, il cavallo da lavoro che sa 1000 volte di più, ma meno concentrato su un aspetto sconcertante di solito fallisce - una buona memoria raramente mantiene l'impressione spazzatura, che puoi google, una buona memoria "operativa" mantiene giorno per giorno (Tranne, come ho detto, alcuni campi, in cui gli algoritmi sono affari quotidiani, non su di loro la domanda posta qui!)

Richiederei algoritmi solo nei campi in cui sono richiesti per un lavoro, non per ogni lavoro di programmatore.

A proposito, questa base di "due domande" è un Klondike per le società di outsourcing.

Di solito inviano un tipo "sonda" per scoprire quelle domande, e poi un "vero candidato", che finalmente risponderà (dopo aver cercato su Google).

Lo so per certo: in questo modo quelle domande divertenti di solito si risolvono e anche il lavoro vero e proprio viene svolto bene. Nel 99% dei casi puoi averne solo uno: un buon "algoritmista" O un buon "linguagista", non entrambi.

Questo è uno dei motivi per cui le società di outsourcing crescono e vivono eccezionalmente bene, sebbene dare valore 0 sia per i propri lavoratori che per le aziende in cui lavorano.

Questa è davvero un'ottima risposta.Personalmente non ho il tempo di sedermi tutti i giorni e di praticare algoritmi che dimenticherò la prossima settimana.Imparo meglio modelli, architettura, DDD e altre cose che hai menzionato.La cosa più importante che ho imparato cercando di memorizzare gli algoritmi è stata la complessità computazionale asintotica.
Solo per completare.La comprensione delle strutture dei dati è anche una buona abilità secondo me.Sapere quale usare ed ecc.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...