[C++] QCM Recrutement ?

QCM Recrutement ? [C++] - C++ - Programmation

Marsh Posté le 23-11-2004 à 17:37:04    

Bonjour à tous,
Mon chef d'équipe cherche un developpeur C++ et je dois pondre un QCM technique mais je n'ai aucune connaissance en C++. Je cherche donc quelques questions à réponses multiples de niveaux progressifs pour tester les connaissances. Bien évidement, tout cela doit être le plus constructif possible :
1) Detecter les enfumeurs qui ont écrits 3 lignes de C++ dans leur vie.
2) Ne pas être trop typé (par exemple sur les GUI, pasqu'on peut avoir fait du C++ et ne pas avoir developper de GUI)
 
 
Toutes les idées sont les bienvenues !!!

Reply

Marsh Posté le 23-11-2004 à 17:37:04   

Reply

Marsh Posté le 23-11-2004 à 17:40:59    

Demande à Taz, comme ça, dans 10 ans, la place sera toujours libre... :o

Reply

Marsh Posté le 23-11-2004 à 17:46:57    

Reply

Marsh Posté le 23-11-2004 à 17:49:33    

Reply

Marsh Posté le 23-11-2004 à 18:03:06    

Et épluche les FAQ aussi, y'a matière à en sortir des questions.
 
Sinon j'ai quelques questions vicieuses du genre:

Code :
  1. #include <string>
  2. using namespace std;
  3. int main()
  4. {
  5.    std:string s; // : et pas ::
  6. }


est-ce que ce code compile ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 23-11-2004 à 18:46:13    

Hermes le Messager a écrit :

Demande à Taz, comme ça, dans 10 ans, la place sera toujours libre... :o

n'empêche, je suis sur que j'arriverais à faire un sacré bon test pour détecter les bidouilleurs de CV

Reply

Marsh Posté le 23-11-2004 à 18:51:15    

J'imagine le genre. :lol:  
 
Combien de permutations de modifieurs sont légales et raisonnables en C++, en considérant static, auto, register, const, long, extern, unsigned et _gc (ça c'est pour disqualifier les linuxiens).
 
Ecrivez le prototype d'une fonction f qui prend comme argument un pointeur sur fonction, de telle sorte que l'on puisse écrire f(f);

Reply

Marsh Posté le 23-11-2004 à 19:02:48    

tu peux t'aider de cette page aussi :o
 
genre "bonjour monsieur, que fait la fonction f?"

Code :
  1. int f (int(*a)(int(*)(int(*)()), int(*)(int(*)(int**))), int(*b)(int(*)(int(*)()), int*, int(*)(int(*)()))){ return (int)((((int(*)(int(*)(int(*)()), int(*)(int(*)())))a)> ((int(*)(int(*)(int(*)()), int(*)(int(*)())))b))? ((int(*)(int(*)(int(*)()), int(*)(int(*)())))a): ((int(*)(int(*)(int(*)()), int(*)(int(*)())))b));??>


 [:matleflou]


Message édité par masklinn le 23-11-2004 à 19:04:17

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-11-2004 à 19:03:15    

Citation :

_gc


__gc
[:aloy]


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 23-11-2004 à 19:05:04    

-La virtualité comme valeur contredisant les droits de l'homme ? commentez

Reply

Marsh Posté le 23-11-2004 à 19:05:04   

Reply

Marsh Posté le 23-11-2004 à 19:05:34    

moi je ferais des questions assez simples genre (à pondérer):
- combien vaut l'expression 'sizeof(char)' ?
- quel est le mode d'héritage par défaut d'une 'struct' ?
- 'while(!stream.eof()) { getline(stream, line; }' est il un usage correct de la fonction membre 'eof()' ?  
- un destructeur peut-il être virtual pure ?
- à quoi servent les mots clef 'mutable' et 'explicit' ?
- quelle est la différence entre une 'std::map<>' et une 'std::multimap<>' ?
- a-t-on toujours la propriété 's.size() == strlen(s.c_str())' où 's' est une instance de 'std::string' ?
- quel est le type de la constante '3.14' ?
 
 
après, selon le niveau, on peut pousser un peu :
question subsidiaire (pour départager si vraiment serré):
- écrire une fonction déterminant le nombre d'éléments d'un tableau à la compilation
 
 
le tout, ça serait de faire des question attendant des réponses très courtes (moins d'une phrase) puis de demander l'écriture d'un petit programme (en 15 minutes, sans  que le candidat ait a recherché l'algorithme (comme la question subsidiaire par exemple))

Reply

Marsh Posté le 23-11-2004 à 19:07:00    

Taz a écrit :


- à quoi servent les mots clef 'mutable'?
- quelle est la différence entre une 'std::map<>' et une 'std::multimap<>' ?


 
jsaurais meme pas dire tiens [:petrus75]


Message édité par chrisbk le 23-11-2004 à 19:07:19
Reply

Marsh Posté le 23-11-2004 à 19:07:07    

Masklinn a écrit :

tu peux t'aider de cette page aussi :o
 
genre "bonjour monsieur, que fait la fonction f?"

Code :
  1. int f (int(*a)(int(*)(int(*)()), int(*)(int(*)(int**))), int(*b)(int(*)(int(*)()), int*, int(*)(int(*)()))){ return (int)((((int(*)(int(*)(int(*)()), int(*)(int(*)())))a)> ((int(*)(int(*)(int(*)()), int(*)(int(*)())))b))? ((int(*)(int(*)(int(*)()), int(*)(int(*)())))a): ((int(*)(int(*)(int(*)()), int(*)(int(*)())))b));??>


 [:matleflou]

mieux

Code :
  1. int (*f)();

que vaut

Code :
  1. (********************************f)()

?

Reply

Marsh Posté le 23-11-2004 à 19:09:00    

deja je poserais une question con : comment represente t'on une chaine de caractere en c++ ?
 
ca devrait deja bien faire le tri

Reply

Marsh Posté le 23-11-2004 à 19:12:47    

+1
J'opterais pour un programme tout simple : saisir 10 entiers et les trier. Aucune autre info. Il rend son code, tu vois vite s'il est soucieux des vérifs, s'il réinvente la roue, s'il fait du C, s'il obfusque, s'il est lent...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 23-11-2004 à 19:16:35    

Je rajouterais une question comme:  
Ecrivez un programme qui donne les arguments passés en ligne de commande dans leur ordre alphabétique.  
 
Ca permet de voir si les bases de string et set/multiset sont comprises.
 
 
Ecrivez le même si vous souhaitez stocker représentation entière des données passées en argument, et pouvoir réutiliser ces données ordonnées un grand nombre de fois de la façon la plus optimale possible (et argumentez).  
 
Ca permet de voir les malins qui savent se servir de stringstream, et de sort et vector.

Reply

Marsh Posté le 23-11-2004 à 20:45:25    

un exemple de ce que j'ai eu a affronter pour ma part :
Rien d'exeptionnel, mais parfois il vaut mieux s'assurer que les bases sont la et bien la plutot que de taper dans le folklorique.
Le niveau du test depend aussi du niveau du gars qui est vise (etudiant fraichement diplome ou serial programmer)
 

Code :
  1. ***************
  2. What special considerations must be given, if any, to throwing exceptions from within a destructor?
  3. ***************
  4. Assume that an xalloc exception is thrown when a heap allocation failure occurs. Write a piece of code that illustrates how you would use exception handling to trap such a situation and display an error message to the user of the code.
  5. ***************
  6. Write a templatized version of the following class so that it can hold objects of an arbitrary type. In addition, indicate areas of the class that could be improved.
  7. class array
  8. {
  9. public:
  10.  array  (int size)  {data_ = new int [size];}
  11.  ~array  ()   {delete data_;}
  12. int&  operator[]  (int n)   {return data_[n];}
  13. private:
  14. int* data_;
  15. };
  16. ***************
  17. Why would you declare something as extern "C"?
  18. ***************
  19. When and why would you declare a member as protected?
  20. ***************
  21. Describe when and why you would make a destructor virtual.


Reply

Marsh Posté le 23-11-2004 à 23:49:59    

Moi je regarderais aussi si le mec fait du C en pensant faire du C++.


---------------
Un matin je me lèverai et il fera beau.
Reply

Marsh Posté le 24-11-2004 à 00:45:12    

Citation :

combien vaut l'expression 'sizeof(char)' ? la taille d'un char


:lol:
Il veut connaitre la teille d'un char...;)
 
Batailler sur 3.14 ou 3.14f je sais pas si c'est une bonne idée. Un mec qui a 2 ans d'exp en C++ mais une autre activité depuis quelques mois a le droit d'avoir du flou sur la syntaxe du langage. La syntaxe ça revient en quelques jours. Par contre des trucs comme le destructeur virtuel, le réflexe STL, etc... c'est un vrai critère AMHA.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-11-2004 à 01:04:16    

recalé, dès la première question

Reply

Marsh Posté le 24-11-2004 à 09:01:57    

Au suivant ! :lol

Reply

Marsh Posté le 24-11-2004 à 09:07:20    

Moi je poserais aussi 2-3 questions sur quelques design patterns de base, histoire de savoir si le candidat est sensibilisé aux problèmes de design, genre, "A quoi sert un singleton ? Comment le coderiez-vous ? Dans quel cas utiliser un object factory ? Donnez un exemple." Ou bien : "Dans quels cas utiliseriez-vous un pointeur de fonction ? Dans quels cas vous pouvez éviter de les utiliser (discutez des avantages et des inconvénients) ? Comment raffiner le concept de callback ?".
Le gars qui répond correctement à toutes ces questions et à quelques-unes de Taz, moi je le prends !  :lol:


Message édité par el muchacho le 24-11-2004 à 09:18:55
Reply

Marsh Posté le 24-11-2004 à 13:07:37    

"Comment faire un delegate en C++" [:petrus75]

Reply

Marsh Posté le 24-11-2004 à 13:19:02    

non mais bon, bonjour la précision :D

Reply

Marsh Posté le 24-11-2004 à 13:23:24    

Roob a écrit :

En même temps la taille d'un char peut varier d'un compilo à l autre. Je ne sais pas si la norme C++ spécifie que la taille d'un char est forcement 1 octet quel que soit la plateforme.
Enfin tout ca pour dire que ce genre de détail technique ne vaut pas grand chose AMA

tu t'enfonces là ... on aurait bien fait de pas de prendre

Reply

Marsh Posté le 24-11-2004 à 13:25:49    

perso ca me parait pas si vital que ca

Reply

Marsh Posté le 24-11-2004 à 13:27:54    

mais le questionnaire, c'est pas pour fait si c'est vital ou pas. C'est fait pour juger de la connaissance globale. Moi je vois la (les) réponses de Roob, je vois qu'il n'a jamais lu quoi que ce soit. Ça ressemble à du 'ça compile, c'est bon'

Reply

Marsh Posté le 24-11-2004 à 13:33:31    

ben tu vois, sur ce point, je trouve que c'est tout sauf du C++. En théorie objet, le cycle de vie d'un objet se termine par un destructeur/finaliseur. En C++, une fonction virtuelle pure n'a pas d'implémentation. Or un objet, même instanciable, à toujours un destructeur. Donc définir un destructeur virtuel pure est un non-sens.

Reply

Marsh Posté le 24-11-2004 à 13:34:15    

(à ce rythme, je crois que je peux rayer tout langage de mon CV...ça va être sympa le jour où je devrai chercher un taf...[:petrus75])


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-11-2004 à 13:36:38    

Taz a écrit :

Donc définir un destructeur virtuel pure est un non-sens.


C'est marrant, moi je suis pas d'accord.  
 
D'ailleurs, ça a été évoqué il n'y a pas longtemps. Si tu veux faire une classe abstraite, c'est très pratique de pouvoir faire:

Code :
  1. class Foo {
  2.   virtual ~Foo() {} =0;
  3. };

Reply

Marsh Posté le 24-11-2004 à 13:40:44    

Disons que ça ne sert à rien d'avoir un questionnaire ou c'est tout ou rien. Le plus important, c'est de mettre un poids à chaque question, de regarder la note globale, et de regarder si la personne a le niveau nécessaire.  
 
En plus, suivant le poste (junior ou guru), le niveau attendu n'est pas le même... Donc un mec qui n'a jamais entendu parler de std::string, je ne le prends pas. Mais un mec qui n'est pas capable de m'écrire un pointeur sur fonction membre de tête, il n'est pas éliminé d'office.

Reply

Marsh Posté le 24-11-2004 à 13:41:26    

Lam's a écrit :

Disons que ça ne sert à rien d'avoir un questionnaire ou c'est tout ou rien. Le plus important, c'est de mettre un poids à chaque question, de regarder la note globale, et de regarder si la personne a le niveau nécessaire.  
 
En plus, suivant le poste (junior ou guru), le niveau attendu n'est pas le même... Donc un mec qui n'a jamais entendu parler de std::string, je ne le prends pas. Mais un mec qui n'est pas capable de m'écrire un pointeur sur fonction membre de tête, il n'est pas éliminé d'office.


\o/
Tout n'est pas perdu...[:petrus75]


Message édité par skeye le 24-11-2004 à 13:41:36

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-11-2004 à 13:46:06    

Roob a écrit :

ouais mais la il n'est pas virtuel pure (oul alors j'dois me gourrer quand à cette notion)


Citation :

An abstract class contains at least one pure virtual function. Specify a virtual function as pure by placing = 0 at the end of its declaration. You don't have to supply a definition for a pure virtual function.


 
Ne pas confondre "don't have to" avec "cannot".

Reply

Marsh Posté le 24-11-2004 à 14:23:50    

Chapeau !

Reply

Marsh Posté le 24-11-2004 à 14:26:15    


 
[:chapi]
 


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 24-11-2004 à 15:20:27    

Bonjour à tous et merci pour vos nombreuses remarques/suggestions.
Je dégage quelques voies :
-Pas d'obfuscating code.
-Pas de question de trop générale, qui peuvent être posées pour n'importe quel language (elle font l'objet d'un autre QCM)
-Considérer le QCM comme un outil, pas une fin en soit (ce qui était déjà le cas).
Merci encore à tous.

Reply

Marsh Posté le 24-11-2004 à 15:31:19    

Pour info, M. Serge a combien de pratique de C++ ?
J'avais lu qu'il fallait au bas mot 18 mois de pratique (quotidienne) de C++ pour maîtriser le langage.
Pour plus d'explications l'histoire du destructeur virtuel [pur] est traitée ici:
http://c.developpez.com/faq/cpp/?p [...] UR_virtuel
http://c.developpez.com/faq/cpp/?p [...] n_vituelle


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-11-2004 à 16:16:02    

un destructeur virtuel pur ... le concept me turlupine
 
ca peut servir dans le cadre d'un design factory ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 24-11-2004 à 16:56:01    

Ca sert à rendre une classe abstraite, donc là on a besoin d'une classe abstraite ça peut servir.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-11-2004 à 17:10:52    

Lam's a écrit :

C'est marrant, moi je suis pas d'accord.  
 
D'ailleurs, ça a été évoqué il n'y a pas longtemps. Si tu veux faire une classe abstraite, c'est très pratique de pouvoir faire:

Code :
  1. class Foo {
  2.   virtual ~Foo() {} =0;
  3. };



oui et comme tu vois, c'est la du laxisme, puisque le destructeur n'est pas virtuel pure : il a bien une définition !
edit : je viens de lire le reste


Message édité par Taz le 24-11-2004 à 17:12:46
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed