Cosa devo aspettarmi da una valutazione tecnica per C ++? [chiuso]


10

Mi è stato chiesto di fare un test tecnico / valutazione per un lavoro come sviluppatore junior, usando principalmente C ++. Questo è il mio primo test / valutazione ed è lungo 2 ore.

Il mio C ++ è un po 'arrugginito perché ho fatto progetti di recente su PHP.

Questa è una società del Regno Unito, tuttavia immagino che i test tecnici sui candidati saranno praticamente gli stessi ovunque.

Cosa devo aspettarmi da uno di questi test?


1
Questa domanda è per PHP, ma le risposte si applicano: programmers.stackexchange.com/questions/73654/…
Eric Wilson

Risposte:


5

È C ++, quindi puoi aspettarti qualsiasi cosa, intendo DAVVERO qualsiasi cosa.

Solitamente si tratta di domande trabocchetto e di una sorta di domande sul polimorfismo.

Ma potrebbe anche essere qualcosa di semplice.

Siate pronti a rispondere a una domanda su qualcosa come "perché dovresti rendere virtuale un distruttore", cos'è "volatile", "progettare una classe" per qualche problema non realistico, "implementare un elenco collegato", "invertire una stringa", ecc.


Aggiungo "A cosa serve la mutableparola chiave?" alla categoria nulla.
Tom,

5

Se questo è un test C ++ puro (cioè non un test Windows / MFC / Managed C ++), trascorri qualche ora o un giorno con il C ++ efficace di Scott Meyer e dovresti fare molto bene. Non copre modelli e STL, ma se fossero interessati a questo, probabilmente non ti darebbero un test di due ore. Sono passati alcuni anni, ma intervistavo spesso gli sviluppatori C ++. Anche se le idee in Effective C ++ sono fondamentali per la programmazione C ++, solo circa il dieci percento dei candidati le conosceva.


1
+1 per la raccomandazione del libro - e salta il libro C ++ più efficace di Scott Meyer. Quando intervistavo i programmatori, guardavo anche all'onestà intellettuale (provi a bluffare o ammetti di non sapere), sai cosa non sai e sai dove trovare una domanda. (Se intervistassi qualcuno che afferma di aver lavorato in C ++, le domande sarebbero molto più difficili). Se non ci fosse nulla che suggerisse capacità di programmazione in altre lingue nel tuo CV, ti avrei anche chiesto di scrivere un semplice programma e vedere se hai coperto correttamente i casi d'angolo.
MZB,

Sono laureato in informatica, mi è stato insegnato come fare programmi nella console in C ++, mi hanno insegnato a implementare alberi di ordinamento binari e liste doppiamente collegate ecc. Poi ci hanno anche insegnato su Classi astratte, Ereditarietà e Polimorfismo, ma non come implementarli. Il ruolo del lavoro è per un laureato, quindi non so cosa si aspettano da me, perché non ho una vera esperienza di vita lavorativa con il C ++.
bearbread

4

Beh, dipende dal tempo o meno che ti lasceranno usare Google. : P

Di solito faccio abbastanza bene nei test tecnici, purché possa usare gli strumenti che mi circondano. Quando vogliono che io cieco il codice è quando mi trovo nei guai. Quindi il miglior consiglio che posso darti è il codice cieco a casa ... Assicurati di ricordare cose banali che diamo per scontate perché possiamo controllarle facilmente se non ricordiamo.

Inoltre, di solito controlla le competenze specifiche di cui hanno bisogno, quindi se sai su cosa lavorerai, concentrati su quello.

(Questa è la mia esperienza generale, non vengo dal Regno Unito)


Che dire di teoria, polimorfismo, ereditarietà. Conosco la teoria solo per il solo fatto di
laurearmi,

La loro implementazione non è così difficile, probabilmente puoi rivederli molto rapidamente. La parte importante è sapere quando è opportuno usarli, quando ne avrai bisogno. Sono più un modello funzionale che un prerequisito reale. Quello che voglio dire è che puoi scappare senza usarli, ma ci si aspetta che tu li conosca se necessario.
AJC,

@bearbread: la teoria in sé non vale molto. leggi i modelli di progettazione e prova a implementarli.
Karoly Horvath,

Conosco modelli di progettazione come MVC per PHP, è questo che intendi?
bearbread

1

Pratica codice kata Scegli un semplice algoritmo (ring buffer, torre di Hanoi, ricerca binaria, qualunque cosa) e codificalo da zero. Quindi fallo di nuovo la prossima volta, e la prossima volta, e la prossima volta, e la prossima volta e così via. Guarda come puoi migliorarli ad ogni iterazione.


1
+1. Fallo anche con un amico un po 'più esperto. A turno per programmare, entrambi imparerai qualcosa di nuovo.
Tom,

0

È vero che puoi aspettarti qualsiasi cosa.

Ti hanno detto che il test era C ++ ma forse è proprio il sottoinsieme C di C ++ che usano nei loro test (userai array di caratteri anziché stringhe di libreria standard). Questo sarà difficile da sapere.

Se è davvero C ++, ti consiglierei di vedere le basi:

  • Classi, variabili, matrici
  • riferimenti, puntatori (e perché non dovresti usarli per impostazione predefinita)
  • l'uso della parola chiave const
  • Concetti di oggetti orientati (eredità, polimorfismo ...)
  • Modelli

poi:

  • Usi di libreria standard (std :: string, std :: vector, containers, ...)

0

Ciò che è stato pubblicato è stato fantastico finora, ma aggiungerò qualcosa e una storia! Direi pratica applicando ciò che sai in C ++ ai problemi nel dominio della società di software. È fantastico se conosci tutti i dettagli e fuori dal C ++ ma se non riesci ad applicare un problema, sei inutile per l'azienda. Visto che si tratta di una posizione di sviluppo junior, non penso che si aspetterebbero che tu sappia tutto sul C ++.

Ho fatto il mio primo test tecnico per il mio primo lavoro di sviluppatore la scorsa settimana e sono rimasto sorpreso da quello che ho trovato. Mi aspettavo qualcosa di simile a FizzBuzz o qualcosa di più grintoso (questo era per Java, a proposito) ma quello che ho scoperto è che mi hanno dato un file e l'ho fatto analizzare in un nuovo formato, che è parte del lavoro. Inoltre, mi hanno permesso di utilizzare Google e le loro librerie. In conclusione, devi conoscere il C ++ ma se vuoi sapere come potrebbe essere il test, dai un'occhiata al dominio della posizione per cui ti stai candidando e lavora sull'implementazione del C ++ verso qualcosa in quel dominio.


Immagino che <1% dei programmatori C ++ conosca tutto il linguaggio :) Prendiamo come esempio tutti i casi di comportamento indefinito / non specificato / definito dall'implementazione.

0

Tu sei:

  1. Codice di scrittura
  2. prendere una scelta multipla
  3. Intervista di persona

Quando si scrive il codice

Si aspetteranno che tu sappia (e usi):

  • RAII
  • La regola del tre
  • Comprendi i puntatori intelligenti

Probabilmente ti metteranno alla prova su:

  • Eredità
  • Funzioni virtuali
  • Serializzazione verso / da un flusso
  • sovraccaricare gli operatori aritmetici (non usati spesso nella vita reale ma facili da scrivere in giro).

Se sei sfortunato potrebbero pensare

  • L'ereditarietà multipla e le classi di base virtuali sono qualcosa che dovresti sapere.
    • Non è, ma alcune persone impazziscono.

Quando si fa una scelta multipla

  • Comprendi tutta la terminologia OO
  • Conoscere i modi C ++ per implementare OO

Intervista di persona

  • Tutto quanto sopra.
  • Conoscenza della ricorsione
  • Come convertire la ricorsione in un ciclo
  • Come stimare la complessità di Big O ()
  • Gli algoritmi di ordinamento standard (non solo bolla).

1
Sono un programmatore C piuttosto che C ++, quindi non conosco i discorsi ... ma non ho mai sentito parlare di RIAA e della regola dei tre. Ho comunque sentito parlare di RAII (l'acquisizione delle risorse è l'inizializzazione, cioè il tuo distruttore dovrebbe ripulire il suo stesso casino) e so che se il tuo codice ha bisogno di un ctr di copia, di un operatore di assegnazione di sovraccarico o di un distruttore, ne ha bisogno tutti e tre. Mi sembra che un'intervista che è una banale banalità nel gergo di programmazione piuttosto che un test delle tue capacità, dica qualcosa di negativo sull'azienda.

1
E allo stesso modo, se chiedono ereditarietà e ricorsione multiple, suppongo che la loro base di codice sia un gran casino. Se si aspettano che tu conosca tutti gli algoritmi di ordinamento più comuni, come eseguire lo srotolamento ricorsivo, la serializzazione degli oggetti ecc., Si dice anche qualcosa di negativo sull'azienda. Non si aspettano che i loro sviluppatori siano robot? Nel mondo reale guardi queste cose prima di usarle. Anche se conosco la teoria alla base di tutte queste cose, continuerei a cercarle, solo per assicurarmi di usare la soluzione ottimale piuttosto che qualcosa di così, così mi sono inventato.

@Lundin: Non è necessario conoscere i nomi setosi ma è necessario conoscere i principi, citandoli qui è facile cercare. Devi conoscere gli algoritmi di ordinamento perché devi sapere quale utilizzare e quando (e soprattutto perché) (cose che i robot non possono fare ma che gli umani fanno molto bene).
Martin York,

Non c'è nulla di intrinsecamente sbagliato nella ricorsione o nell'ereditarietà multipla. Il problema è con gli sviluppatori che lo usano (e lo fanno in modo errato). Alcuni problemi possono essere risolti (facilmente) solo usando la ricorsione (analizzando prima una profondità della struttura ad albero).
Martin York,


-1

Ho ottenuto nella mia ultima intervista:

Differenza tra il passaggio di un oggetto a una funzione per valore / riferimento / puntatore e dove e perché lo faresti.

Scambia gli ultimi 8 bit di un numero intero, ad esempio RGBA su RGAB.

Che cos'è la RIAA?

Definisci la meta programmazione dei template: potresti avere una domanda in termini di "risolvere questo problema con TMP .."

Cosa significa mutevole, volatile, const ecc ecc ecc? conoscere tutte le parole chiave.

eredità multipla .... ancora e ancora.

Multi threading: produttore consumer e oggetti di memoria condivisa bufferizzati.

Qualche altra domanda sulla periferia:

Aggregazione e composizione di UML

Modelli di progettazione: implementare un singleton ... Quali sono i componenti comuni di MVC?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.