Quali domande chiederebbero a un candidato con esperienza principalmente in Java / .NET (10 anni +) in un'intervista per una posizione in C ++?
Per prima cosa, assicurati che possano pensare in modo algoritmico, indipendentemente dal linguaggio di programmazione. Quindi, fagli risolvere alcuni semplici problemi nel codice C ++ sulla lavagna. Quindi, chiedi quali sono le caratteristiche distintive del C ++ che effettivamente usi nel tuo progetto . Possibili argomenti sono gestione della memoria, RAII, modelli, riferimenti, sovraccarico dell'operatore. Forse boost e metaprogramming, se lo usi. La programmazione in stile OO è simile in C ++ e Java / .NET (basata su classi, invio singolo), tranne per il fatto che supporta anche l'ereditarietà multipla e l'ereditarietà virtuale. Comprendere ciò che costituisce un comportamento definito dall'implementazione, non specificato e indefinito è anche un vantaggio.
Il problema principale che ho riscontrato con i programmatori di .Net e Java che usano C ++ è la gestione della memoria. Hanno una grande tendenza ad allocare sempre gli oggetti nell'heap invece di usare lo stack, quindi fai attenzione.
Ogni sviluppatore che inizia un nuovo lavoro deve imparare gli idiomi usati in quel progetto e team. Imparare gli idiomi del particolare linguaggio di implementazione è solo un aspetto di questo, in realtà - un problema di curva di apprendimento in più, ma per C ++ relativo a C # o Java, probabilmente non è un grosso problema. L'eccezione può essere quando ci sono forti opinioni religiose che la persona potrebbe non essere disposta a rinunciare come punto di principio.
La natura non-raccolta dei rifiuti del C ++ è un'area ovvia per le questioni religiose. Potrei preoccuparmi di qualcuno che afferma con forza che tutto il software non GC è bacato senza riconoscere che l'uso di GC può portare a complicazioni e bug di gestione delle risorse diversi piuttosto che completare l'eliminazione solo al rialzo di un'intera classe di problemi. Un vero estremista in quella posizione può rifiutare gli idiomi di gestione delle risorse del C ++ in modo abbastanza fuori controllo, insistendo sul fatto che i problemi risultanti sono comunque inevitabili e che qualsiasi codice C ++ funzionante prodotto da altri è il risultato di una bizzarra intelligenza sovrumana o un colpo di fortuna. Una visione che GC è generalmente un approccio migliore non mi preoccuperebbe necessariamente, purché ci sia flessibilità e disponibilità ad adottare idiomi appropriati al C ++.
Una domanda per rivelare quel punto di vista? Senza dare un'impressione fuorviante di persone che attualmente hanno per lo più esperienza specifica di GC, ma si adatterebbero rapidamente? Dubito che ne venga fuori uno, e penso che il vero problema sarebbe con le persone il cui pregiudizio è evidente dappertutto, e indipendentemente dalla particolare domanda, comunque. Ciò presuppone che sia possibile rilevare in modo affidabile il problema in una situazione di colloquio, supponendo che il richiedente sappia che il ruolo coinvolge il C ++.
Uso corretto di puntatori e riferimenti:
I puntatori sono variabili che contengono un indirizzo in un blocco di memoria di dimensioni uguali al tipo di puntatore.
int * test = new int(5); // on 32-bit OSs, test would be 4 bytes
*test = 6; // access the value (dereferencing)
delete test; // free the memory
I riferimenti sono puntatori che non possono essere modificati - invece, qualsiasi operazione eseguita su di essi influisce sulla memoria puntata a.
int target = 1; // target now holds a value of 1
int& ref = target; // ref points to target
ref = 2; // modifications to ref modify target
// notice that we do not dereference ref
Leggi altre domande sui tag interview