Que dois-je attendre d'une évaluation technique pour C ++? [fermé]


10

On m'a demandé de faire un test / évaluation technique pour un emploi de développeur junior, principalement en C ++. Ceci est mon premier test / évaluation et dure 2 heures.

Mon C ++ est un peu rouillé car j'ai fait des projets récemment sur PHP.

Il s'agit d'une entreprise britannique, mais je suppose que les tests techniques des candidats seront à peu près les mêmes partout.

À quoi dois-je m'attendre dans l'un de ces tests?


1
Cette question est pour PHP, mais les réponses s'appliquent: programmers.stackexchange.com/questions/73654/…
Eric Wilson

Réponses:


5

C'est C ++, donc vous pouvez vous attendre à n'importe quoi, je veux dire VRAIMENT n'importe quoi.

Habituellement, cela implique des questions pièges et une sorte de questions de polymorphisme.

Mais cela pourrait aussi être quelque chose de simple.

Soyez prêt à répondre à une question sur quelque chose comme "pourquoi voudriez-vous rendre un destructeur virtuel", ce qui est "volatile", "concevoir une classe" pour un problème irréaliste, "implémenter une liste chaînée", "inverser une chaîne", etc.


J'ajouterais "A quoi sert le mutablemot - clé?" à la catégorie quoi que ce soit.
Tom

5

S'il s'agit d'un test C ++ pur (c'est-à-dire pas un test Windows / MFC / Managed C ++), passez quelques heures ou une journée avec le C ++ efficace de Scott Meyer et vous devriez très bien faire. Il ne couvre pas les modèles et la STL, mais s'ils étaient intéressés par cela, ils ne vous donneraient probablement pas un test de deux heures. Cela fait quelques années, mais j'ai souvent interviewé des développeurs C ++. Même si les idées de C ++ efficace sont fondamentales pour la programmation C ++, seulement environ dix pour cent des candidats les connaissaient.


1
+1 pour la recommandation de livre - et ignorez le livre C ++ plus efficace de Scott Meyer. Quand j'interviewais des programmeurs, je regardais aussi l'honnêteté intellectuelle (essayez-vous de bluffer ou admettez-vous que vous ne savez pas), savez-vous ce que vous ne savez pas et savez-vous où trouver une réponse. (Si vous interviewiez quelqu'un prétendant avoir travaillé en C ++, les questions seraient beaucoup plus difficiles). S'il n'y avait rien suggérant des compétences en programmation dans d'autres langues dans votre CV, je vous demanderais également d'écrire un programme simple et de vérifier si vous avez correctement couvert les cas d'angle.
MZB

Je suis diplômé en informatique, on m'a appris à faire des programmes dans la console en C ++, j'ai appris à implémenter des arbres de tri binaires et des listes doublement liées, etc. comment les mettre en œuvre. Le poste est pour un diplômé, donc je ne sais pas ce qu'ils attendent de moi, car je n'ai pas vraiment d'expérience de C ++ dans la vie professionnelle.
bearbread

4

Eh bien, cela dépend de si oui ou non ils vous laisseront utiliser Google. : P

Je fais généralement assez bien dans les tests techniques, tant que je peux utiliser les outils autour de moi. Quand ils veulent que je code en aveugle, c'est quand j'ai des ennuis. Donc, le meilleur conseil que je puisse vous donner est le code aveugle à la maison ...

En outre, généralement, vérifiez les compétences spécifiques dont ils ont besoin, donc si vous savez sur quoi vous allez travailler, concentrez-vous sur cela.

(C'est dans mon expérience générale, je ne suis pas du Royaume-Uni)


Qu'en est-il de la théorie, du polymorphisme, de l'hérédité. Je ne connais que la théorie pour cela à peine diplômé mais je ne sais pas comment l'implémenter en C ++
bearbread

Leur mise en œuvre n'est pas si difficile, vous pouvez probablement les revoir très rapidement. L'important est de savoir quand il est approprié de les utiliser, quand vous en aurez besoin. Il s'agit davantage d'un modèle fonctionnel que d'une condition préalable réelle. Ce que je veux dire, c'est que vous pouvez vous en tirer sans les utiliser, mais on s'attendrait à ce que vous les connaissiez si besoin est.
AJC

@bearbread: la théorie elle-même ne vaut pas grand-chose. lire sur les modèles de conception et essayer de les mettre en œuvre.
Karoly Horvath

Je connais des modèles de conception comme MVC pour PHP, c'est ce que vous voulez dire?
bearbread

1

Pratiquer le kata de code Choisissez un algorithme simple (tampon en anneau, tour de Hanoi, recherche binaire, etc.) et codez-le à partir de zéro. Ensuite, recommencez la prochaine fois, et la prochaine fois, et la prochaine fois, et la prochaine fois, et ainsi de suite. Regardez comment vous pouvez les améliorer à chaque itération.


1
+1. Faites-le aussi avec un ami un peu plus expérimenté. À tour de rôle, vous apprendrez tous les deux quelque chose de nouveau.
Tom

0

C'est vrai qu'on peut s'attendre à tout.

Ils vous ont dit que le test était C ++ mais peut-être que c'est vraiment le sous-ensemble C de C ++ qu'ils utilisent dans leurs tests (vous utiliserez des tableaux de caractères au lieu des chaînes de bibliothèque standard). Ce sera difficile à savoir.

Si c'est vraiment du C ++, je vous conseille de voir les bases:

  • Classes, variables, tableaux
  • références, pointeurs (et pourquoi vous ne devriez pas les utiliser par défaut)
  • l'utilisation du mot clé const
  • Concepts d'objets orientés (héritage, polymorphisme ...)
  • Modèles

puis:

  • Utilisations standard des bibliothèques (std :: string, std :: vector, conteneurs, ...)

0

Ce qui a été publié a été génial jusqu'à présent, mais je vais ajouter quelque chose et une histoire! Je dirais de pratiquer l'application de ce que vous savez en C ++ à des problèmes dans le domaine de la société de logiciels. C'est génial si vous connaissez tous les tenants et aboutissants du C ++ mais si vous ne pouvez pas appliquer à un problème, vous êtes inutile pour l'entreprise. Étant donné qu'il s'agit d'un poste de développeur junior, je ne pense pas qu'ils s'attendraient à ce que vous sachiez tout sur C ++.

J'ai fait mon premier test technique pour mon premier emploi de développeur la semaine dernière et j'ai été surpris de ce que j'ai trouvé. Je m'attendais à quelque chose comme FizzBuzz ou quelque chose de plus sérieux (c'était pour Java, btw) mais ce que j'ai trouvé c'est qu'ils m'ont donné un fichier et m'ont fait analyser un nouveau format, ce qui faisait partie du travail. En plus de cela, ils m'ont laissé utiliser Google et leurs propres bibliothèques. En bout de ligne, vous devez connaître le C ++ mais si vous voulez savoir à quoi peut ressembler le test, jetez un œil au domaine du poste pour lequel vous postulez et travaillez sur l'implémentation du C ++ vers quelque chose dans ce domaine.


Je suppose que <1% des programmeurs C ++ connaissent tout du langage :) Prenez simplement tous les cas de comportement non défini / non spécifié / défini par la mise en œuvre comme exemple.

0

Es-tu:

  1. Écrire du code
  2. choix multiple
  3. Entretien en personne

Lors de l'écriture de code

Ils s'attendront à ce que vous sachiez (et utilisiez):

  • RAII
  • La règle des trois
  • Comprendre les pointeurs intelligents

Ils vous testeront probablement sur:

  • Héritage
  • Fonctions virtuelles
  • Sérialisation vers / depuis un flux
  • surcharger les opérateurs arithmétiques (pas souvent utilisé dans la vie réelle mais facile à écrire un test).

Si vous n'avez pas de chance, ils peuvent penser

  • Vous devez connaître l'héritage multiple et les classes de base virtuelles.
    • Ce n'est pas le cas, mais certaines personnes deviennent folles.

Lors de choix multiples

  • Comprendre toute la terminologie OO
  • Connaître les façons C ++ d'implémenter OO

Entrevue en personne

  • Tout ce qui précède.
  • Connaissance de la récursivité
  • Comment convertir la récursivité en boucle
  • Comment estimer la complexité de Big O ()
  • Les algorithmes de tri standard (pas seulement les bulles).

1
Je suis un programmeur C plutôt que C ++, donc je ne connais pas le discours ... mais je n'ai jamais entendu parler de RIAA et de la règle des trois. J'ai cependant entendu parler de RAII (l'acquisition de ressources est l'initialisation, c'est-à-dire que votre destructeur devrait nettoyer son propre gâchis) et je sais que si votre code a besoin d'une copie ctr, d'un opérateur d'affectation de surcharge ou d'un destructeur, il a besoin des trois. Il me semble qu'une interview qui est un trivial ringard dans la programmation de l'argot plutôt qu'un test de vos compétences, en dit long sur l'entreprise.

1
Et également, s'ils posent des questions sur l'héritage multiple et la récursivité, je suppose que leur base de code est un gros gâchis. S'ils s'attendent à ce que vous connaissiez tous les algorithmes de tri courants à l'improviste, comment effectuer le déroulement de la récursivité, la sérialisation des objets, etc., cela dit aussi quelque chose de mal à propos de l'entreprise. Ne s'attendent-ils pas à ce que leurs développeurs deviennent des robots? Dans le monde réel, vous recherchez de telles choses avant de les utiliser. Même si je connais la théorie derrière toutes ces choses, je les chercherais toujours, juste pour m'assurer que j'utilise la solution optimale plutôt que quelque chose comme ça donc je suis venu avec moi-même.

@Lundin: Vous n'avez pas besoin de connaître les noms soyeux mais vous avez besoin de connaître les principes, en les mentionnant ici, cela facilite la recherche. Vous devez connaître les algorithmes de tri, car vous devez savoir lequel utiliser et quand (et surtout pourquoi) (ce que les robots ne peuvent pas faire mais les humains le font très bien).
Martin York,

Il n'y a rien de fondamentalement mauvais avec la récursivité ou l'héritage multiple. Le problème est que les développeurs l'utilisent trop (et le font incorrectement). Certains problèmes ne peuvent être résolus (facilement) qu'en utilisant la récursivité (en analysant d'abord la profondeur d'une structure arborescente).
Martin York,


-1

J'ai eu dans ma dernière interview:

Différence entre le passage d'un objet à une fonction par valeur / référence / pointeur et où et pourquoi vous feriez cela.

Échangez les 2 derniers 8 bits d'un entier, par exemple RGBA à RGAB.

Qu'est-ce que RIAA?

Définissez la méta-programmation du modèle: vous pourriez obtenir une question en termes de "résoudre ce problème avec TMP .."

Que signifie mutable, volatile, const etc etc etc? connaître tous les mots clés.

héritage multiple .... encore et encore.

Multi-threading: consommateur consommateur et objets de mémoire partagée tamponnés.

Quelques questions supplémentaires sur la périphérie:

Agrégation UML et composition

Design patterns: implémentez un singleton ... Quels sont les composants communs de MVC?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.