OVH Cloud OVH Cloud

Question entretien C++ - doutes.

95 réponses
Avatar
David Fleury
Bonjour,

voici une des questions que je pose pour lors de mes entretiens pour des
développeurs avec expérience orienté C++

"Ecrire une fonction qui renverse une chaine (ex: ABC -> CBA, AE -> EA, ...)

Après avoir posé la question deux ou trois fois déjà, je suis surpris
des réponses (souvent fausses). Je laisse volontairement le choix au
candidat d'utiliser (char* ou std::string) et/ou une fonction modifiant
la chaine entrée ou retournant une nouvelle chaine, et l'utilisation de
la STL est autorisé.

A votre avis, est-ce que la question n'est pas trop mauvaise ?

David.

PS : Dans le même genre, il y a la fonction EstPalindrome qui semble
bloquer.

10 réponses

Avatar
Jean-Marc Bourguet
"Alex" writes:

"Jean-Marc Bourguet" wrote in message
>> Oui, à la limite aux débutants, et encore.
>> Quand tu as > ans d'expérience, tu ne codes plus "à la main" : tout se
>> fait en copier-coller.
>
> Tu vis dans un autre monde que le mien.

Oui, dans le monde réel, où tout est sur google ou google groups et où on
n'a pas de temps à perdre à réinventer la roue...



C'est peut-etre *un* monde reel, mais ce n'est pas le mien. J'ai la chance
de devoir faire quelque chose qui n'a pas deja ete fait et mis a la
disposition de tout le monde.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Mickaël Wolff
David Fleury a écrit :
A part une fonction au lieu de main, ça fait ce que ça demande.



Certes, c'est ce que je me suis dit après avoir envoyé le message.
Mais bon, l'idée est là : dire qu'on ne va pas se suer à écrire une
fonction qui risque d'être boguée alors que le standard fournit déjà les
outils qui vont bien.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
Luc Hermitte
Bonsoir,

On 28 oct, 09:59, Wykaaa wrote:
Des questions pertinentes pour voir si le développeur maîtrise le C/C ++
seraient plutôt du style :
- pt étant un pointeur sur tableau, puis-je écrire pt++



Est-ce trop évident pour qu'il y ait un truc qui m'échappe quant à ce
que cette question teste ?

- Pourquoi, quand on surcharge l'opérateur [], vaut-il mieux le
surcharger dans sa version const et non const ?
- Que signifie une dérivation virtuelle et à quoi cela sert-il ?
- Comment interdire l'utilisation de l'affectation entre instances d'une
classe ?
- Comment surcharge-t-on l'opérateur ++ dans sa version préfixe et da ns
sa version postfixe ?
- Quelles sont les différentes utilisations de l'opérateur de "scope" :: ?



Ce sont principalement des questions de cours dont la réponse se
trouve en peu de temps avec un navigateur internet. La surcharge de ++
me faisant à peu près le même genre d'effet que de mélanger virgule s
et points-virgules pour voir la réaction du candidat.

Dans de la "vieille" prose [1] sur le sujet j'estimais que :
- d'abord, il faut savoir ce que l'on cherche : un cador du C++,
quelqu'un qui saura développer en C++ ce qu'on lui demande, quelqu'un
qui saura l'apprendre et évoluer, etc ?

- ensuite, quitte à poser des questions, je préfère encore les
questions plus vicieuses qui testent si en face on a un initié qui va
voir les contre-idiomes d'un petit exemple simple, et qui permettent
malgré tout aux non initiés de montrer ce qu'ils ont vu en cours sans
être découragés. Après, on peut sélectionner aux nombres de contr e-
diomes détectés et autres WTF émis.


[1] http://www.developpez.net/forums/d354056/c-cpp/cpp/questionnaire-connai ssances-cpp/#post2163618

--
Luc Hermitte
Avatar
David Fleury
Alp Mestan a écrit :


Pour le PO : je dirais que les questions dépendent fortement du poste.
Si vous devez concevoir énormément de choses génériques et
réutilisables, peut-être plus poser des questions sur les spécificités
OO du C++, voir même sur les techniques de programmation générique,
plutôt que renverser une chaîne. Par contre, s'il s'agit de pondre un
code qui certes aura à être maintenu mais ne servira que dans le
logiciel en cours de réalisation, il faut peut-être plus s'orienter
vers des questions de C++ assez générales, et un peu d'algorithmique.
Enfin c'est mon point de vue.



Ca me va. Je prends ;)
Avatar
David Fleury
Luc Hermitte a écrit :


- ensuite, quitte à poser des questions, je préfère encore les
questions plus vicieuses qui testent si en face on a un initié qui va
voir les contre-idiomes d'un petit exemple simple, et qui permettent
malgré tout aux non initiés de montrer ce qu'ils ont vu en cours sans
être découragés. Après, on peut sélectionner aux nombres de contre-
diomes détectés et autres WTF émis.


[1] http://www.developpez.net/forums/d354056/c-cpp/cpp/questionnaire-connaissances-cpp/#post2163618




Merci pour le lien et ces infos.
Avatar
Wykaaa
Luc Hermitte a écrit :
Bonsoir,

On 28 oct, 09:59, Wykaaa wrote:
Des questions pertinentes pour voir si le développeur maîtrise le C/C++
seraient plutôt du style :
- pt étant un pointeur sur tableau, puis-je écrire pt++



Est-ce trop évident pour qu'il y ait un truc qui m'échappe quant à ce
que cette question teste ?



Un pointeur sur tableau est constant, il ne peut être modifié. Ca peut
paraître évident mais nombreux sont ceux qui se font piéger en entretien...

- Pourquoi, quand on surcharge l'opérateur [], vaut-il mieux le
surcharger dans sa version const et non const ?
- Que signifie une dérivation virtuelle et à quoi cela sert-il ?
- Comment interdire l'utilisation de l'affectation entre instances d'une
classe ?
- Comment surcharge-t-on l'opérateur ++ dans sa version préfixe et dans
sa version postfixe ?
- Quelles sont les différentes utilisations de l'opérateur de "scope" :: ?



Ce sont principalement des questions de cours dont la réponse se
trouve en peu de temps avec un navigateur internet. La surcharge de ++
me faisant à peu près le même genre d'effet que de mélanger virgules
et points-virgules pour voir la réaction du candidat.


Je suppose qu'un candidat au poste n'a pas à sa disposition un
navigateur lors de l'entretien !
On peut discuter (à l'infini) de la pertinence de ces questions mais je
donnais juste ces exemples pour montrer que tester les connaissances des
candidats à l'embauche pour programmer (en C++ ou autre) ne doit pas se
résumer à des questions sur l'algorithmique et, surtout, qu'on ne doit
pas tomber dans ce travers.

Dans de la "vieille" prose [1] sur le sujet j'estimais que :
- d'abord, il faut savoir ce que l'on cherche : un cador du C++,
quelqu'un qui saura développer en C++ ce qu'on lui demande, quelqu'un
qui saura l'apprendre et évoluer, etc ?



Exactement. Il faut tout d'abord définir ce que l'on cherche et les
objectifs.

- ensuite, quitte à poser des questions, je préfère encore les
questions plus vicieuses qui testent si en face on a un initié qui va
voir les contre-idiomes d'un petit exemple simple, et qui permettent
malgré tout aux non initiés de montrer ce qu'ils ont vu en cours sans
être découragés. Après, on peut sélectionner aux nombres de contre-
diomes détectés et autres WTF émis.



Je pense effectivement que le mieux est de donner à commenter,
améliorer, etc; des exemples de code. Ca permet, en plus, d'explorer
avec l'éventuel futur embauché des pistes pas forcément balisées à
l'avance. Mais ceci implique que le recruteur maîtrise parfaitement son
sujet...


[1] http://www.developpez.net/forums/d354056/c-cpp/cpp/questionnaire-connaissances-cpp/#post2163618

--
Luc Hermitte


Avatar
ld
On 28 oct, 19:13, David Fleury wrote:
Jean-Marc Bourguet a écrit :

> Non.  Mon experience d'interviewer est que la plupart des gens -- mem e avec
> un peu d'experience -- ne sont pas prepares a des questions pratiques.
> Meme quand ils sont avertis par avance et qu'on leur laisse le choix du
> langage.  Je laisse marinner un peu puis je guide.  J'agis pas mal a
> l'instinct et en reaction a ce que le candidat dit et fait (j'ai par
> exemple deja ete cherche des bouquins pour les donner au candidat, par
> malchance pour lui, cela a simplement montre qu'il ne savait pas retrou ver
> quelque chose dans un bouquin dont il pretendait qu'il etait sa referen ce
> principale).  J'ai une serie de questions (programmer, chercher un bu g,
> dire simplement ce que du code fait,...) et je pioche en fonction de ce que
> les candidats pretendent savoir *sur place* et ce qu'ils sont capables de
> faire reellement (je parts du CV pour les premieres questions ou quand il y
> a un trou).

Ok, ça me va. J'essaye à mon niveau de pratiquer comme ça.
Merci.



En particulier avec C++, la capacite a faire un bon design est
essentielle dans un "vrai" projet. Je trouve donc les questions
mentionnees ici pratiquement futiles. Elles ne devraient poser aucun
probleme aux candidats si on compte les impliquer dans un projet
serieux. Le C++ n'est que l'outil, il faut donc le maitriser avant de
pretendre l'utiliser de maniere professionnelle (on apprend a lire et
ecrire avant de d'ecrire des livres). Le probleme, c'est que les
recruteurs sont souvent dans le meme cas que les candidats avec une
maitrise approximative du sujet. Les criteres d'embauche sont donc
relativement aleatoire.

Dans le cas contraire, il faut environ deux ans de pratique intensive
pour maitriser C++ dans un contexte encadre, et encore 2-3 pour
maitriser le design avec C++. Alors si les questions que j'ai vu ici
pose probleme, autant chercher ailleurs ou envisager un formation
intensive des candidats choisis ou changer de langage.

Avec l'avenement des langages a fort marketing, le nombre de
developpeurs C++ diminue et le niveau moyen augmente. Personnellement,
je vois ca comme positif.

a+, ld.
Avatar
David Fleury
Wykaaa a écrit :
Luc Hermitte a écrit :
Bonsoir,

On 28 oct, 09:59, Wykaaa wrote:
Des questions pertinentes pour voir si le développeur maîtrise le C/C++
seraient plutôt du style :
- pt étant un pointeur sur tableau, puis-je écrire pt++



Est-ce trop évident pour qu'il y ait un truc qui m'échappe quant à ce
que cette question teste ?



Un pointeur sur tableau est constant, il ne peut être modifié. Ca peut
paraître évident mais nombreux sont ceux qui se font piéger en entretien...



Vu comment la question était posée, j'aurais clairement compris autre chose.

int tab[25] = { ... }; // un tableau
int* ptr = &tab[0]; // un pointeur sur le premier élément du tableau

++ptr; // élément suivant
Avatar
Michael DOUBEZ
Wykaaa a écrit :
Luc Hermitte a écrit :
On 28 oct, 09:59, Wykaaa wrote:
Des questions pertinentes pour voir si le développeur maîtrise le C/C++
seraient plutôt du style :
- pt étant un pointeur sur tableau, puis-je écrire pt++



Est-ce trop évident pour qu'il y ait un truc qui m'échappe quant à ce
que cette question teste ?



Un pointeur sur tableau est constant, il ne peut être modifié. Ca peut
paraître évident mais nombreux sont ceux qui se font piéger en entretien...



Est ce que piéger le candidat est le but ?
Dans ce cas, le standard regorge de cas ou d'aspect rarement explorés.
Je ne vois pas en quoi cela est révélateur de l'aptitude de la personne
à faire son travail. Ou alors pour tester sa franchise ... et encore.

[snip]
Ce sont principalement des questions de cours dont la réponse se
trouve en peu de temps avec un navigateur internet. La surcharge de ++
me faisant à peu près le même genre d'effet que de mélanger virgules
et points-virgules pour voir la réaction du candidat.


Je suppose qu'un candidat au poste n'a pas à sa disposition un
navigateur lors de l'entretien !



Mais il l'aura dans son travail. La capacité à (re)trouver une
information fait parti du travail.

On peut discuter (à l'infini) de la pertinence de ces questions mais je
donnais juste ces exemples pour montrer que tester les connaissances des
candidats à l'embauche pour programmer (en C++ ou autre) ne doit pas se
résumer à des questions sur l'algorithmique et, surtout, qu'on ne doit
pas tomber dans ce travers.



Je pense que ces test de connaissance sont une confusion entre le but et
le moyen. AMAle recruteur essaye d'évaluer l'expertise dans un langage
par la connaissance des alternatives et des tradoffs associés pour
résoudre un problème ou exprimer une solution.



Dans de la "vieille" prose [1] sur le sujet j'estimais que :
- d'abord, il faut savoir ce que l'on cherche : un cador du C++,





Un sénior (sans la fonction copier/coller SVP)

quelqu'un qui saura développer en C++ ce qu'on lui demande,





AMHA quelqu'un qui fait sont travail dans l'intervalle: "ne risque pas
de plomber l'équipe" pour la limite basse et "agit comme catalyseur sur
ses pairs" la limite haute. :)
Expertise mise à part.

quelqu'un qui saura l'apprendre et évoluer, etc ?





Un junior

Franchement, je ne sais pas si il est possible de poser une question
pertinente en C++. L'approche du PO me semble bien meilleure: poser un
problème simple ou requérant des point spécifiques du langage qui ouvre
la discussion sur les choix techniques.
Ça permet entre autre d'évaluer la capacité de communication du
candidat. Et puis ça permet de montrer le code qu'on fait et voir
l'autre s'intéresser à sa valeur; ça arrive pas si souvent dans ce métier :)

--
Michael
Avatar
Jean-Marc Bourguet
Wykaaa writes:

Luc Hermitte a écrit :
> Bonsoir,
> On 28 oct, 09:59, Wykaaa wrote:
>> Des questions pertinentes pour voir si le développeur maîtrise le C/C++
>> seraient plutôt du style :
>> - pt étant un pointeur sur tableau, puis-je écrire pt++
> Est-ce trop évident pour qu'il y ait un truc qui m'échappe quant à ce
> que cette question teste ?



Le mot "pointeur" designe d'abord une famille de types. Par catachrèse, le
mot designe aussi les objets de ces types, et les valeurs possibles pour
eux.

L'operateur ++ n'a de sens que pour des objets, on est donc dans une
situation comme:

typedef int tab[10];
tab* pt;

Reponse evidente, pt++ est possible dans les memes conditions que pour tous
les autres pointeurs.

Un pointeur sur tableau est constant, il ne peut être modifié. Ca peut
paraître évident mais nombreux sont ceux qui se font piéger en entretien...



Ouille, il me semble que tu confondes un pointeur vers un tableau et le
fait que les tableaux se convertisse automatiquement en un pointeur vers le
premier element dans pas mal de contextes. Mais le resultat de cette
conversion est une valeur donc ++ n'a pas plus de sens que dans

double d;

((int)d)++;

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org