IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez C++ Discussion :

test dev cpp senior


Sujet :

Contribuez C++

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut test dev cpp senior
    Bonjour,

    nous recherchons un dev cpp senior. Je suis donc en train de préparer un test technique, auquel la personne devra répondre à l'oral. C'est de l'oral, donc les questions sont vagues, le but étant de laisser parler le candidat afin de juger de son niveau.

    J'aurais aimé savoir ce que vous pensez de ces questions. Sont-elles pertinentes? Le test est-il trop facile, trop difficile? Bref, avoir votre avis général sur le test:

    1. Les bases
    Différence entre struct et class.
    Qu’est-ce que la const-conformité ?
    Qu’est-ce qu’un pointeur intelligent ? Donner des exemples (boost, STL,…).
    Quel est l’impact de l’utilisation d’exceptions sur les performances (au runtime) ?

    2. Poo en c++
    Différence entre héritage privé et public.
    Qu'est-ce que la forme canonique orthodoxe de Coplien ?
    Que coûte un héritage (en termes de perf au runtime) ?
    Que se passe-t-il si on appelle une fonction virtuelle dans un constructeur ?

    3. Templates
    Que sont des classes de Trait et de Policy ?
    Qu’est-ce que CRTP ?
    Qu’est-ce qu’une liste de types ? A quoi ça peut servir ?

    4. C++11
    Qu’est-ce que la move semantic (principe, syntaxe)?
    Qu’est-ce le default destructor ? Quel est l’intérêt ?
    Que devient la forme canonique de Coplien en c++11 ?
    Quand est-ce qu’un lambda peut-être utile ?
    auto vs typedef

    5. Patterns & idioms
    Cheshire cat (pimpl).
    NVI / clone idiom
    RAII
    LSP
    SRP

    6. Méthodologie
    Que fait un « svn reverse » ?
    Qu’est-ce que l’unit testing ?
    Qu’est-ce que le profiling ?


    Commenter le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    template <typename ContainerType, typename FillFonctorType>
    void FillContainer(ContainerType & container, size_t size)
    {
    	ContainerType(size).swap(container);
    	std::for_each(container.begin(), container.end(), FillFonctorType());
    }
     
     
    template <typename ContainerType, typename PredicateType>
    void RemoveIf(ContainerType & container, const PredicateType & predicate)
    {
    	for (auto it = container.begin(); it != container.end();++it)
    		container.erase(std::remove_if(container.begin(), container.end(), predicate), container.end());
    }
     
     
    struct RandomIntGeneratorFonctor
    {
    	RandomIntGeneratorFonctor(int min=-10, int max=10) : distribution(std::uniform_int_distribution<int>(min, max)) {}
    	int operator () () { return distribution(random_int_generator); }
    	void operator () (int & value ) { value = distribution(random_int_generator); }
    private: std::uniform_int_distribution<int> distribution;
    };
     
     
    template <typename T>
    struct LazyComparePredicate
    {
    	LazyComparePredicate(const T & compared_element) : compared_element(compared_element) {}
    	bool operator () (const T & to_compare) { return (to_compare == compared_element); }
    private: T compared_element;
    };
     
     
    main()
    {
    	typedef std::vector<int> IntVector;
    	IntVector my_vector(10);
    	std::generate(my_vector.begin(), my_vector.end(), RandomIntGeneratorFonctor(0, 10));
    	FillContainer<IntVector, RandomIntGeneratorFonctor>(my_vector, 10);
    	RemoveIf<IntVector, LazyComparePredicate<int>>(my_vector, LazyComparePredicate<int>(5));
    }
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  2. #2
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    Je ne suis pas dev-cpp, encore moins senior, mais quelques remarques.

    La forme canonique orthodoxe de Coplien est utile dans le projet pour lequel vous recrutez ? (je ne sais pas ce que c'est)
    Est-ce que ça ne devrait pas rentrer dans la catégorie 5 (enfin plus ou moins) ?
    Est-ce que la question sur son devenir en c++11 est pertinente ? Est-ce qu'un simple rappel "au fait, en c++11 ça devient ça" ne serait pas suffisant, ou c'est trop complexe ?

    Pour les 1 et 2, peut-être préciser à l'entretien que c'est juste pour la mise en jambe, à passer rapidement, à moins qu'il y ait des subtilités très importantes pour votre projet, je pourrais répondre aux 3/4 des questions sur ces points, alors que je n'ai aucune expérience professionnelle de la POO (du Java et un peu de C++ en stage).
    En tout cas ne pas les mettre au même niveau que les autres, car sinon certains candidats pourraient être vexés, c'est vraiment des questions auxquelles un jeune diplômé peut répondre.

    Sur un pas-de-bol, le candidat voudra prendre 1H pour ré-expliquer la POO en détail et avec toutes les subtilités, histoire d'être sûr qu'il passe pas pour un incompétent
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Le niveau et l'approche me paraissent bien .

    Tes exemples de code soulèvent des problèmes classiques et ca c'est bien.

    On ne rentre pas dans le piège du test classique
    que va faire ce code <<Mettre ici un code tordu>> et ou la seule réponse acceptable est pour moi de le compiler et de voir ...

    Ce site pose des questions pas encore trop tordues mais rentre déjà dans le cadre du compil'& see ..



    Tu peux rajouter :

    • Qu'est ce qu'un pointeur brut ?
    • Quand tu utiliser des pointeurs bruts/intelligents, références ?
    • Quand utiliser la STL ?
    • Qu'est ce que l'ABI ? Comment cela peut il poser des soucis dans un développement ?
    • Les différents types de cast et a quoi ils servent ? Quand est il acceptable d'utiliser un dynamic_cast ?

    Et en Méthodologie:

    • Quand doit on optimiser du code ? Comment ?


    PS : Par curiosité, tu bosses ou ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ManusDei Voir le message
    La forme canonique orthodoxe de Coplien est utile dans le projet pour lequel vous recrutez ?
    Est-ce que ça ne devrait pas rentrer dans la catégorie 5 (enfin plus ou moins) ?
    C'est utile dans tout projet c++ à mon avis. C'est donc un basique, c'est pour ça que je l'ai mis dans la catégorie 1.

    Citation Envoyé par ManusDei Voir le message
    Est-ce que la question sur son devenir en c++11 est pertinente ? Est-ce qu'un simple rappel "au fait, en c++11 ça devient ça" ne serait pas suffisant, ou c'est trop complexe ?
    Je ne comprend pas trop ce que tu veux dire. Mais le standard c++11 apporte d'importantes modifications à ce principe, et aussi, permet de tester si le candidat s'est intéressé des questions qui me semblent importantes comme la "move sémantics" ou le "default destructor".

    Citation Envoyé par ManusDei Voir le message
    Pour les 1 et 2, peut-être préciser à l'entretien que c'est juste pour la mise en jambe, à passer rapidement.
    Là je suis d'accord.

    Citation Envoyé par Davidbrcz Voir le message
    Qu'est ce qu'un pointeur brut ?
    J'ai hésité à la mettre, mais j'ai pensé que pour un dev senior, ça serait limite insultant.

    Citation Envoyé par Davidbrcz Voir le message
    Quand tu utiliser des pointeurs bruts/intelligents, références ?
    Je pourrais peut-être essayer d'intégrer ça dans la question sur les pointeurs intelligents. Le problème c'est qu'il faut faire attention à ne pas avoir 50.000 questions non plus

    Citation Envoyé par Davidbrcz Voir le message
    Quand utiliser la STL ?
    Je ne vois pas trop l'intérêt de cette question

    Citation Envoyé par Davidbrcz Voir le message
    Qu'est ce que l'ABI ? Comment cela peut il poser des soucis dans un développement ?
    Oui alors tu met le doigt sur un problème que j'ai: je n'y connais pas grand-chose en bas niveau, et pourtant ce serait une compétence complémentaire qui serait la bienvenue. Mais du coup, si je pose des questions sur ce genre de trucs, je risque de ne pas comprendre la réponse du candidat s'il s'y connait vraiment

    Citation Envoyé par Davidbrcz Voir le message
    Les différents types de cast et a quoi ils servent ? Quand est il acceptable d'utiliser un dynamic_cast ?
    Quand doit on optimiser du code ? Comment ?
    Bonnes propositions, je retiens.

    merci à vous

    Citation Envoyé par Davidbrcz Voir le message
    PS : Par curiosité, tu bosses ou ?
    Bruxelles.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par r0d Voir le message
    Qu’est-ce que la const-conformité ?
    Je crois deviner à quoi tu fais référence, mais je n'ai jamais lu/entendu cette expression. Ne pas hésiter à paraphraser la question.

    Citation Envoyé par r0d Voir le message
    Quel est l’impact de l’utilisation d’exceptions sur les performances (au runtime) ?
    La formulation laisse supposer qu'il y a forcément un coût. Je formulerais plutôt : "Les exceptions ont-elles un coût ?". Avec comme réponse attendue : "Ça dépend". Et demander de développer...

    Citation Envoyé par r0d Voir le message
    Que coûte un héritage (en termes de perf au runtime) ?
    Il ne me semble pas qu'il y ait un coût s'il n'y a pas de virtualité. je te renvoie donc à l'item précédent. Après, on peut disserter pour savoir si on doit impérativement mettre un destructeur virtuel... Mais ce choix n'est pas lié au langage, mais à des pratiques.

    Citation Envoyé par r0d Voir le message
    Cheshire cat (pimpl) ?
    Il me semble que le terme pimpl est beaucoup plus usité (jamais vu/lu "Cheshire cat"). Ne faudrait-il pas inverser les deux ?

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    J'ai hésité à la mettre, mais j'ai pensé que pour un dev senior, ça serait limite insultant.
    ya senior -vrai senior- et senior sur le papier. Ca peut permettre de faire un peu de tri en cas de doute

    Je pourrais peut-être essayer d'intégrer ça dans la question sur les pointeurs intelligents. Le problème c'est qu'il faut faire attention à ne pas avoir 50.000 questions non plus
    T'es pas oblige de tout poser, tu peux aussi varier les questions en fonction des entretiens. Je pense que c'est bien d'avoir des questions en rab.

    Je ne vois pas trop l'intérêt de cette question
    Mon but cest de voir si la personne va repondre tout le temps, ca depend ou "Jamais du STL, que du fais maison". Ya pas de bonne reponse, ca va dépendre du contexte de ton application.


    Oui alors tu met le doigt sur un problème que j'ai: je n'y connais pas grand-chose en bas niveau, et pourtant ce serait une compétence complémentaire qui serait la bienvenue. Mais du coup, si je pose des questions sur ce genre de trucs, je risque de ne pas comprendre la réponse du candidat s'il s'y connait vraiment
    Cest pas encore très bas niveau et ca fait parti du bagage commun pour moi. Un premier pas pour se renseigner.

    En gros, la réponse que j'attendrais, c'est que si tu essayes d'utiliser un .a compilé avec g++ dans un programme que tu vas compiler avec MSVC par exemple, tu vas au devant de plusieurs soucis car justement, les ABI sont différentes.


    Bruxelles.
    Je pensais a la boite, pas le lieu ^^
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    À noter que pour C++11, on peut s'y intéresser, sans avoir l'occasion de faire ses armes dessus par ce que la boîte où on bosser est sur un compilateur qui ne supporte pas cette version. Il ne faut donc pas poser des questions trop précises si le gars aspire à bosser sur C++11 et n'a fait que lire des articles (dont on oublie vite les détails si on n'a pas pu les coder derrière).

  8. #8
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par oodini Voir le message
    À noter que pour C++11, on peut s'y intéresser, sans avoir l'occasion de faire ses armes dessus par ce que la boîte où on bosser est sur un compilateur qui ne supporte pas cette version. Il ne faut donc pas poser des questions trop précises si le gars aspire à bosser sur C++11 et n'a fait que lire des articles (dont on oublie vite les détails si on n'a pas pu les coder derrière).
    C'est pas faux. Comme ton autre message d'ailleurs. Merci.
    Mais là ça me pose un problème parce qu'il y a beaucoup de c++11 dans le bout de code que je propose de commenter :/
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  9. #9
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    Citation Envoyé par r0d Voir le message
    Je ne comprend pas trop ce que tu veux dire. Mais le standard c++11 apporte d'importantes modifications à ce principe, et aussi, permet de tester si le candidat s'est intéressé des questions qui me semblent importantes comme la "move sémantics" ou le "default destructor".
    Est-ce qu'un dev senior en c++ peut comprendre les différences avec le c++11 sur ce point en 10 minutes d'explications et un post-it ?

    Est-ce que cette question te permet de faire la différence entre le mauvais dev et le bon dev (pour ce projet), ou le bon dev et le bon dev++

    Edit : Je viens de regarder ce qu'était la forme de Coplien, je connaissais mais sans le nom.
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    J'ai fait passer à une époque des tests de ce genre pour des candidats à un poste d'expert... Et les questions que tu poses me semblent bien pour un véritable expert.

    Mais je ne crois pas qu'un seul candidat soit allé au delà du niveau 1... Après quelques tentatives, mon chef m'a plutôt demandé de prévoir des tests pour un confirmé, mais pas expert... Alors soit on n'a pas eu de chance, soit l'agence de recrutement utilisée n'était pas douée, soit on n'a pas été patients, soit...


    Quelques remarques :

    J'éviterais dans mes tests tout point de vocabulaire. Plutôt que de dire : "Qu'est-ce que le RAII ?", je dirais plutôt "Comment gère-t-on des ressources en C++", et j’expliciterais ressource par un exemple.

    En plus de questions, je ferais faire quelques petits exercices (éventuellement à domicile). Un orienté algo (mais où je demanderais du code complet, et je noterais aussi les commentaires, les tests unitaires...) et un orienté conception (pas facile à trouver un énoncé assez simple mais quand même intéressant).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    J'éviterais dans mes tests tout point de vocabulaire. Plutôt que de dire : "Qu'est-ce que le RAII ?", je dirais plutôt "Comment gère-t-on des ressources en C++", et j’expliciterais ressource par un exemple.
    Pas d'accord. Le vocabulaire existe et est la pour qu'on puisse justement être sur de parler de la même chose grâce a la définition du vocabulaire.
    De plus, si quelqu'un se dit expert, je m'attendrais a ce qu'il maitrise une bonne partie du vocabulaire.

    Enfin, pour l'exemple, les questions ne sont pas les memes selon moi. Comment gérer les ressources, c'est la STL, les pointeurs intelligents,...
    Le RAII n'est que l'aspect technique.

    En plus de questions, je ferais faire quelques petits exercices (éventuellement à domicile). Un orienté algo (mais où je demanderais du code complet, et je noterais aussi les commentaires, les tests unitaires...) et un orienté conception (pas facile à trouver un énoncé assez simple mais quand même intéressant).
    Faut prévoir du temps, car par sur que tu ais le droit du point de vu legal de faire ca en dehors du lieu de travail potentiel.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  12. #12
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Cest pas encore très bas niveau et ca fait parti du bagage commun pour moi. Un premier pas pour se renseigner.

    En gros, la réponse que j'attendrais, c'est que si tu essayes d'utiliser un .a compilé avec g++ dans un programme que tu vas compiler avec MSVC par exemple, tu vas au devant de plusieurs soucis car justement, les ABI sont différentes.
    Perso, sur l’ABI, j’attendrais plus une réponse concernant les évolutions de code, et notamment, les techniques qui permettent de rajouter des fonctionnalités à ton code sans casser l’ABI (et donc l’intérêt des structures opaques à ce niveau), les problèmes qu’introduisent les templates sur la conservation de l’ABI, la différence entre la compatibilité source et binaire (et notamment le fait qu’on peut indifféremment casser l’une sans l’autre), etc.

    Le fait que tous les compilateurs n’utilisent pas la même abi, ça me semble accessoire à côté de ça.

    Sinon, pour les exceptions, je rajouterai éventuellement dans la première partie les constructeurs / destructeurs et notamment pourquoi un destructeur doit de manière générale être noexcept.

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Pour les histoires de vocabulaires, je me poserai la question suivante : "Quels livres un dev expert C++ est-il impérativement supposé avoir lu ?".

    Si il y a du Meyers, il devrai connaître RAII et PImpl.
    Si il y du Josuttis/Vandevoorde ou de l'Alexandrescu, il devra connaître CRTP.
    Pour le NVI, je ne me souviens pas de l'avoir lu dans un bouquin...

  14. #14
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Seuls les devs qui trainent leur guêtres ici vont connaitre tout le vocabulaire par coeur. Un gars expérimenté mais qui ne court pas après l'expertise ne connaitra aucun des termes.
    Comme Loic, je suis pour les questions plus ouvertes.

    Sinon, j'ai fait cet exercice il y a peu. Les questions que j'ai retenues sont en gros:

    1- Le parcours (on parle de sénior => expérimenté)
    - choses réalisées
    - avec quoi
    - pourquoi ces choix
    - l'outillage (chaines de compil, tests, gestion de conf)
    - comment la personne s'évalue, et ce qu'elle sait ne pas savoir (c'est toujours un bon endroit pour voir où elle est en)
    - une question perso dont je n'ai pas encore évalué la pertinence: avec quoi elle a appris (cours, fac, livres, lesquels, etc)
    - une question sournoise : "qu'est-ce qui a changé dans sa pratique du C++ depuis sa formation?" (c'est un endroit où RAII peut apparaitre)
    - comment elle traque des bugs (question hyper ouverte -> définissions du type d'erreur, ouverture sur les corruptions de mémoire, les erreurs mathématiques, d'algo, la PpC, le débuggueur, l'instrumentation (manuelle (printf ... cout), valgrind, clang-sanatize, ...) l'analyse statique de code, les TUs, le RAII, ...)

    2- questions théoriques
    - [dans la continuité de la précédente question] qu'est-ce qu'une fuite de mémoire et comment ça se règle? (oui je préfère donner 15 opportunités de dire RAII (entre autres choses), que de demander ce que c'est)
    - différence pointeur/référence et comment les choisir -- déviations possibles sur les unique_ptr<> et la sémantique de déplacement avec des experts
    - des questions/exo simples en apparence: comment disposer d'un tableau 1D, 2D, une chaine ? (plein de façons de répondre encore une fois)
    - Et comment les implémenter si le candidat n'a pas répondu ainsi.
    - qu'est-ce qu'une classe de base doit contenir ? (je préfère à "pourquoi un destructeur virtuel?")
    - ont-ils déjà été confrontés à des classes non copiables ? Comment on les met en œuvre et pourquoi ? [cette série de questions sur les sémantiques ne me plait que très moyennement]
    - Qu'ils parlent du polymorphisme avec leurs propres mots (vous verrez s'ils ont une approche syntaxique ou sémantique, si le LSP est compris, s'ils ont la vision chapeau (point de variation/zones communes), dynamisme, templates, ...)
    - Pareil, qu'ils parlent des templates (pas de question précise, il faut discuter et creuser -> utilisation, définition, méta-prog/generative-programming, traits, politiques, C++11 (vous pouvez même dévier depuis ici vers constexpr si c'est pertinent pour vos projets))

    3- des algos simples
    - en gros j'ai pris 3 algos du plus simple au plus compliqué de <algorithm> ou assimilé. Et je leur demande comment ils résoudraient le problème résolu par ces algos. Plusieurs niveaux de réponses ici: de celui où on répond n_element, à sort + accès (médiane). Etc, etc. ; comment compter des mots/lettres ; les jolies questions de Sean Parent dans GN13 (-> stable_partition)...



    Et vous savez quoi? Mes collègues, compétents, à qui j'avais soumis mon premier jets de questions (de la série théorique) les avaient trouvées complexes. Il faut dire aussi, qu'ils voyaient les divers niveaux de réponses que j'avais imaginés.
    Quand vos questions sont trop pointues, vous ciblez directement un public à tendance expert -- et ceux qui ont appris des théories et qui savent blablater sans forcément appliquer quoique ce soit (après une lecture de la FAQ la veille de l'entretien). En laissant la question ouverte, vous pourrez voir l'expert donner la réponse qui va bien, et les autres s'en sortir plus ou moins facilement.
    Retournez les questions : au lieu de demander ce qu'est le RAII, posez des questions où "j'utilise le RAII/vector/shared_ptr" est une bonne réponse.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  15. #15
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par oodini Voir le message
    Pour le NVI, je ne me souviens pas de l'avoir lu dans un bouquin...
    C++ Coding Standards de Sutter & Alexandrescu.
    Sinon, plein de posts de James Kanze sur Usenet dans les années 2000 je dirai. Mais je n'ai pas souvenir que l'on employait le terme NVI alors. A l'époque je l'avais avant tout perçu comme un outil pour faire de la PpC et qui n'était pas le DP Template Method. La séparation d'interfaces du NVI (public pour le code client, privé virtuel pour les gars qui vont spécialiser les classes) ne m'est apparue que dans le C++CS.

    PS: à la question quels livres, je répondrais d'abord Addisson-Wesley. Et que je suis loin d'avoir tout lu tellement il y en a.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. [Débutant] Problème avec Dev-Cpp 4.9.9.0
    Par P4Pi dans le forum Dev-C++
    Réponses: 7
    Dernier message: 16/01/2010, 16h48
  2. [dev-cpp] probleme de link
    Par alex1er dans le forum Dev-C++
    Réponses: 5
    Dernier message: 20/01/2005, 17h41
  3. Mysql++ et dev-cpp..
    Par MrPomme dans le forum Windows
    Réponses: 4
    Dernier message: 03/08/2004, 14h50
  4. compilation directx dev-cpp
    Par gaut dans le forum DirectX
    Réponses: 3
    Dernier message: 11/02/2004, 04h16
  5. creation DLL dev-cpp
    Par gaut dans le forum Dev-C++
    Réponses: 4
    Dernier message: 29/01/2004, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo