Le domande di base includono:
Penso che di solito sia utile chiedere ai candidati di completare un semplice esercizio di codifica come:
- Scrivi la tua classe di elenco collegata senza utilizzare le classi integrate.
- Scrivi la tua classe hashtable senza usare le classi integrate.
- Scrivi una classe che rappresenta un albero binario. Scrivi un metodo che attraversa tutti i nodi dell'albero.
- Scrivi un metodo per eseguire una ricerca binaria su un array senza usare i metodi integrati.
- Disegna uno schema di database per un blog. Ogni utente ha un solo blog, ogni blog ha molte categorie, ogni categoria ha molti post e ogni post può appartenere a più di una categoria. Chiedere al richiedente di scrivere domande per estrarre informazioni specifiche.
Successivamente, cerca il know-how tecnico specifico:
- (Gestori eventi) Crea una classe con un gestore eventi personalizzato, crea un'altra classe che si aggancia al gestore eventi personalizzato.
- (XML) Carica un documento XML e seleziona tutti i nodi con le proprietà x, ye z.
- (Programmazione funzionale) Creare una funzione che accetta un'altra funzione come parametro. Una funzione Mappa o Piega funziona davvero bene per questo.
- (Riflessione) Scrivi una funzione che determina se una classe ha un attributo particolare.
- (Regex) Scrivi un'espressione regolare che rimuove tutti i tag da un blocco di HTML.
Nessuna di queste sono domande particolarmente difficili a cui un abile programmatore C # può rispondere e dovrebbero darti una buona idea dei punti di forza dei tuoi candidati. Potresti anche voler lavorare su alcune domande / esempi di codice che fanno uso di schemi di progettazione specifici.
[Modifica per chiarimenti] :
Sembra che molte persone non capiscano perché dovrei fare questo tipo di domande. Permettetemi di toccare alcuni commenti di alcuni popoli (non sto citando direttamente, ma parafrasando):
D: Quando è stata l'ultima volta che qualcuno ha usato volatili o riferimenti deboli?
A: Quando do interviste tecniche, cerco di capire se una persona comprende le funzionalità di alto e basso livello di .NET. Volatili e riferimenti deboli sono due funzionalità di basso livello fornite da .NET - anche se queste funzionalità non vengono utilizzate spesso in pratica, le risposte a queste domande sono estremamente rivelatrici:
Una buona conoscenza dei volatili dimostra che una persona comprende come le ottimizzazioni del compilatore cambiano la correttezza del codice, in che modo i thread mantengono copie locali dello stato condiviso che possono non essere sincronizzate in un dato momento ed è minimamente consapevole di alcune complessità del codice multithread .
Una buona comprensione dei riferimenti deboli dimostra che una persona conosce i dettagli intimi del Garbage Collector e come decide quando liberare memoria. Certo, potresti chiedere ai candidati "come funziona un garbage collector", ma chiedere riferimenti deboli ottiene una risposta molto migliore e più ponderata.
.NET è un linguaggio abbastanza astratto, ma gli sviluppatori stellari hanno quasi sempre una conoscenza approfondita del CLR e dei dettagli di basso livello del runtime di .NET.
D: Perché qualcuno dovrebbe implementare la propria lista hash o collegata?
A: Non sto insinuando che la classe del Dizionario sia inferiore o che le persone debbano tirare la propria tabella hash. Questa è una domanda di base che verifica se una persona ha una conoscenza minima delle strutture dati. Ecco a cosa servono queste domande: comprensione minima.
Apprendi questi hashtable e questi elenchi collegati il primo giorno di Data Structures 101. Se qualcuno non può scrivere da zero un elenco hashtable o collegato, allora ha un enorme divario nelle loro conoscenze tecniche.
D: Perché queste domande sono così orientate al greggio?
A: Perché il titolo di questo thread è "domande che ogni buon sviluppatore .NET dovrebbe conoscere". Ogni sviluppatore .NET inizia la propria carriera scrivendo app crude e il 90% di tutte le persone che si occupano dello sviluppo di applicazioni si occupa di applicazioni line-of-business.
Penso che nella maggior parte dei casi le domande che testano una conoscenza delle app line-of-business siano appropriate, a meno che tu non stia cercando sviluppatori in nicchie molto specifiche, come sviluppo di compilatori, sviluppo di motori di gioco, dimostrazione di teoremi, elaborazione di immagini, ecc. .