Programmeurs, allez aux interviews

Programmeurs, allez aux interviews
La photo est tirée d'une vidéo de la chaîne "Améthystes militantes»

J'ai travaillé comme programmeur système pour Linux pendant environ 10 ans. Il s'agit de modules de noyau (espace noyau), de divers démons et fonctionnant avec du matériel de l'espace utilisateur (espace utilisateur), de divers chargeurs de démarrage (u-boot, etc.), du micrologiciel du contrôleur et bien plus encore. Il arrivait même parfois de couper l'interface web. Mais le plus souvent, je devais m'asseoir avec un fer à souder et interagir avec les concepteurs de circuits imprimés. L'un des problèmes d'un tel travail est qu'il est assez difficile d'évaluer votre niveau de compétence, car vous pouvez connaître très profondément une tâche, mais vous n'en connaissez peut-être pas du tout une autre. La seule façon adéquate de comprendre où aller et quels sont les courants actuels est de se rendre à des entretiens.

Dans cet article, je voudrais résumer mon expérience d'entretien pour un poste vacant en tant que programmeur système Linux, les spécificités de l'entretien, le poste et comment évaluer votre niveau personnel de connaissances en communiquant avec un futur employeur et ce que vous ne devriez pas en attendre.

L'article comprendra un petit concours avec des prix.

Caractéristiques de la profession

Un programmeur système, dans le domaine spécifique dans lequel j'ai travaillé, est un généraliste complet : je devais à la fois écrire du code et déboguer du matériel. Et il était souvent nécessaire de souder quelque chose soi-même. De temps en temps, il arrivait que mes ajustements matériels soient ensuite transférés aux développeurs. Par conséquent, pour travailler dans ce domaine, vous avez besoin d’une assez bonne base de connaissances, tant dans le domaine des circuits numériques qu’en programmation. Pour cette raison, les entretiens pour un poste de programmeur système ressemblent souvent à une recherche d’un spécialiste en électronique.

Programmeurs, allez aux interviews
Un poste de travail typique pour un programmeur système.

La photo ci-dessus montre mon lieu de travail typique lors du débogage des pilotes. L'analyseur logique montre l'exactitude des messages transmis, l'oscilloscope surveille la forme des fronts du signal. De plus, le débogueur jtag n'était pas inclus dans le cadre, qui est utilisé lorsque les outils de débogage standard ne fonctionnent plus. Et il faut être capable de travailler avec tout cet équipement.

Il arrive souvent qu'il soit plus rapide et plus facile de ressouder certains éléments et de corriger soi-même les erreurs de topologie que de confier le produit à un installateur. Et puis une station de soudage s'installe également sur votre lieu de travail.

Une autre caractéristique du développement au niveau des pilotes et du matériel est que Google n'aide pas. Souvent, vous devez rechercher des informations sur votre problème, et il existe trois liens, dont deux sont vos propres questions sur un forum. Ou pire encore, lorsque vous tombez sur une question du même pauvre gars qui l'a posée il y a 5 ans sur la liste de diffusion du noyau et qui n'a jamais reçu de réponse. Dans ce travail, outre les erreurs de conception du matériel et des logiciels, des erreurs de documentation sont souvent rencontrées - ce sont probablement les problèmes les plus graves et les plus désagréables. Parfois, les registres sont mal décrits, ou il n’y a aucune description pour eux. De tels problèmes ne peuvent être résolus qu’en insérant scientifiquement des nombres aléatoires dans certains registres (une sorte d’inverse). Il arrive souvent que le processeur contienne certaines fonctionnalités, mais personne, à part vous, n'a implémenté cette fonctionnalité (surtout si le processeur est neuf). Et cela implique de parcourir le champ avec un râteau, dont 70 % sont destinés aux enfants. Mais quand il y a de la documentation, même avec des erreurs, c'est déjà un progrès. Il arrive très souvent qu’il n’y ait aucune documentation, et c’est à ce moment-là que commence la marche à travers les champs de mines, lorsque le fer brûle. Et oui, j’ai également réussi à résoudre de tels problèmes.

Entretiens

Mon avis est que vous devriez vous présenter à des entretiens au moins une fois tous les six mois, même si vous adorez votre travail et ne souhaitez pas en changer. Un entretien vous permet de comprendre votre niveau de spécialiste. Je crois que les entretiens les plus précieux sont ceux qui échouent. Ce sont eux qui montrent le plus précisément quels goulots d’étranglement dans vos connaissances doivent être améliorés.

Une autre caractéristique intéressante est la qualité des entretiens. C'est mon constat, et ce n'est pas la vérité, j'avoue que j'ai juste eu de la chance. Si l'entretien se déroule selon le scénario :

  • Parlez nous de vous;
  • Nous avons de telles tâches ;
  • Tu aimes?

Et si après ce dialogue vous vous aimez, vous allez travailler, alors, en règle générale, l'entreprise et les tâches s'avèrent très agréables et adéquates. Si un entretien ressemble à 12 cercles de l'enfer : le premier entretien avec les RH, puis un entretien avec un groupe de programmeurs, puis le directeur, encore des devoirs, etc., alors en règle générale, il s'agissait d'organisations en faillite dans lesquelles je n'ai pas travaillé pour très longtemps. Encore une fois, il s’agit d’une observation personnelle, mais en règle générale, trop de bureaucratie et un processus de recrutement interminable montrent que les mêmes processus se déroulent exactement au sein de l’entreprise. Les décisions sont prises lentement et de manière inefficace. Il y a eu aussi des situations inverses, quand il y avait des cercles d'enfer des entretiens, et que l'entreprise s'est avérée géniale, et quand, après une tape sur les doigts, l'entreprise s'est avérée être un marécage, mais celles-ci sont rares.

Si vous pensez que le scénario : se rencontrer, parler de soi et être embauché, n'existe que dans les petites entreprises, alors non. J'ai pu le constater dans de très grandes entreprises qui emploient plus de centaines de personnes et sont représentées sur les marchés mondiaux. Il s'agit d'un mécanisme normal, surtout si vous avez un riche parcours et avez la possibilité d'appeler vos anciens employeurs et de vous renseigner sur vous.

Pour moi, c'est un très bon indicateur d'une entreprise lorsqu'elle demande à montrer des exemples de ses projets et de son code. Le niveau de formation du candidat est immédiatement indiqué. Et, pour moi, du point de vue de la sélection des candidats, c'est la méthode de sélection la plus efficace que les entretiens-spectacles. En effet, on peut échouer à un entretien par enthousiasme, ou, au contraire, sortir sous l'effet de l'adrénaline. Mais dans le vrai travail, vous ne pouvez pas accomplir de vraies tâches. Et j’ai également rencontré cela lorsque j’ai moi-même interviewé des gens. Un spécialiste vient, se montre excellent, je l'ai aimé, il nous a aimé. Et j'ai lutté contre le problème le plus simple pendant un mois et, par conséquent, un autre programmeur l'a résolu en quelques jours. J'ai dû me séparer de ce programmeur.

J'apprécie particulièrement les tâches de programmation lors des entretiens. Et ceux qui doivent être résolus directement pendant la réunion, sous le stress et les devoirs. Le premier montre à quel point vous êtes prêt à résoudre rapidement et avec précision les problèmes dans une situation stressante et d'urgence. La seconde montre votre niveau de compétence et votre capacité à rechercher des informations et à résoudre des problèmes actuels.

Les emplois les plus intéressants que j’ai occupés étaient dans le complexe de défense de notre pays. Au cours du travail, j'ai dû résoudre des problèmes tout simplement fantastiques dont les programmeurs commerciaux n'avaient même jamais rêvé. Supercalculateurs, conception de routeurs, divers systèmes de combat de nœuds - c'est incroyablement excitant. Quand pendant le défilé vous voyez un complexe qui stocke votre code, c’est vraiment sympa. Curieusement, les entretiens avec de telles entreprises sont généralement très simples, littéralement acceptés (probablement les spécificités des militaires, qui n'aiment pas trop parler), se superposent. Les défis auxquels j'ai été confronté là-bas étaient vraiment intéressants et stimulants. Avec l'expérience, il s'est avéré qu'ils étaient bons pour apprendre à devenir un programmeur système de haute qualité. Il y a aussi des inconvénients, et ce ne sont même pas les bas salaires. À l'heure actuelle, le salaire dans le complexe de défense est tout à fait correct, avec des primes et des avantages sociaux. En règle générale, il y a beaucoup de bureaucratie, de longues heures de travail, des tâches urgentes sans fin et un travail très stressant. Dans certains cas, le secret ne peut être exclu, ce qui ajoute certains problèmes pour voyager à l'étranger. À cela s’ajoute, bien sûr, la tyrannie des patrons, et cela arrive aussi, hélas. Bien que mon expérience de travail avec un représentant client soit extrêmement agréable. Il s’agit d’une impression collective de trois instituts de recherche et entreprises différents liés aux ordres de défense de l’État.

Tâches d'entretien

Pour éviter tout malentendu et pour ne pas dévoiler les entreprises que j'ai interviewées, je ne tenterai pas le destin en indiquant leurs coordonnées. Mais je suis reconnaissant pour chaque entretien, pour le temps que les gens m'ont consacré, pour l'opportunité de me regarder de l'extérieur. Je peux seulement dire que les tâches étaient confiées à de grandes entreprises internationales représentées dans différents pays.

Je vais vous dire la chose la plus intéressante : quelles tâches sont confiées lors des entretiens. En général, les questions les plus courantes pour le poste vacant de programmeur système et de programmeur de microcontrôleur concernent les opérations sur bits, dans toutes les variantes possibles. Par conséquent, préparez-vous au mieux dans ce domaine.

Le deuxième sujet le plus polarisant est celui des panneaux indicateurs, cela devrait vraiment vous sauter aux dents. Pour qu'ils vous réveillent au milieu de la nuit et que vous puissiez tout raconter et tout montrer.

J'ai volé dans ma tête des questions de plusieurs interviews, et je vais les présenter ici, car je les trouve assez intéressantes. Je ne donne volontairement pas de réponses à ces questions afin que les lecteurs puissent répondre eux-mêmes à ces questions dans les commentaires et avoir un peu de poudre lorsqu'ils traversent une véritable interview.

Questions n°1

I. Connaissance du SI. Que signifient les entrées suivantes :

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Toutes les entrées sont-elles correctes ?

II. Pourquoi ce programme générera-t-il une erreur de segmentation ?

int main ()
{
       fprintf(0,"hellon");
       fork();
       return(0);
}

III. Être intelligent.

Il y a un bâton d'un mètre de long. Dix fourmis lui tombent dessus au hasard, rampant dans des directions différentes. La vitesse de déplacement d'une fourmi est de 1 m/s. Si une fourmi en rencontre une autre, elle se retourne et rampe dans la direction opposée. Quel est le temps maximum dont vous avez besoin pour attendre que toutes les fourmis tombent du bâton ?

L'entretien suivant a été un échec pour moi et je le considère comme le plus utile dans ma pratique de la programmation. Cela montrait la profondeur de mon incompétence. Avant cet entretien, je connaissais chacune de ces questions et elles revenaient constamment dans ma pratique, mais d'une manière ou d'une autre, je n'y attachais pas beaucoup d'importance et, par conséquent, je ne les comprenais pas bien. C’est pourquoi j’ai échoué à cet examen, ce qui est honteux. Et je suis très reconnaissant qu’un tel échec se soit produit ; cela m’a fait réfléchir. Vous pensez que vous êtes un spécialiste sympa, que vous connaissez la conception de circuits, les interfaces et le travail avec le noyau. Et puis tu as de vraies questions et tu flottes. Alors voyons.

Questions d'entretien n°2

Problèmes matériels.

  • Comment les appels système Linux sont organisés en langage assembleur sur un processeur ARM, sur x86. Quelle est la différence?
  • Quels sont les outils de synchronisation ? Quels outils de synchronisation peuvent être utilisés dans un contexte d'interruption, lesquels ne le peuvent pas, et pourquoi ?
  • Quelle est la différence entre le bus i2c et le bus spi ?
  • Pourquoi y a-t-il des terminateurs sur le bus i2c et quelle est leur valeur ?
  • L'interface RS-232 peut-elle fonctionner UNIQUEMENT sur deux fils : RX et TX ? Ici, je vais donner la réponse : il s'avère que c'est mauvais, à 9600, mais c'est possible !!!
  • Et maintenant la deuxième question : pourquoi ?
  • Quelle est la meilleure façon d’organiser les lignes de signal et l’alimentation dans les cartes multicouches et pourquoi ? Alimentation à l’intérieur des couches, ou lignes de signal à l’intérieur des couches ? (La question concerne généralement uniquement la conception des circuits).
  • Pourquoi les lignes différentielles ont-elles des voies qui se rejoignent partout ?
  • Bus RS-485. Il y a généralement des terminateurs sur une telle ligne. Nous avons cependant un circuit en étoile, avec un nombre variable de modules enfichables. Quels moyens utiliser pour éviter les collisions et les interférences ?
  • Que sont les arbres rouges et binaires ?
  • Comment travailler avec cmake ?
  • Questions sur la construction de yocto Linux.

Objectifs de cet entretien :

1. Écrivez une fonction qui s'inverse en uint32_t tous les morceaux. (travailler avec des bits est très apprécié lors des entretiens, je le recommande)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

Que retournera cette fonction ? (solution sur papier, sans ordinateur)

3. Fonction de calcul de la moyenne arithmétique de deux nombres int32_t.

4. Quelles sont les méthodes de sortie dans les programmes, incl. dans un flot d'erreurs.

La troisième sélection était relativement récente, et je ne serais pas surpris s'il y avait encore un tel questionnaire, donc je ne révélerai pas l'entreprise pour ne pas les exposer... Mais de manière générale je vais donner un exemple de questions possibles, et si vous reconnaissez vos questions, alors je vous dis bonjour :).

Questions d'entretien n°3

  1. Un exemple de code de parcours d'arbre est donné ; il faut dire ce qui se fait dans ce code et signaler les erreurs.
  2. Écrivez un exemple de l'utilitaire ls. Avec l’option la plus simple « -l ».
  3. Donnez un exemple de la façon de créer des liens statiques et dynamiques. Quelle est la différence?
  4. Comment fonctionne le RS-232 ? Quelle est la différence entre RS-485 et RS-232 ? Quelle est la différence entre RS-232 et RS-485 du point de vue d'un programmeur ?
  5. Comment fonctionne l'USB (du point de vue d'un programmeur) ?
  6. Traduction de textes techniques du russe vers l'anglais.

Un entretien réussi n'est pas une garantie de travail réussi

Ce chapitre n'est probablement même pas destiné aux programmeurs (bien que pour eux aussi), mais plutôt aux RH. Les entreprises les plus adéquates n’examinent pas méticuleusement les résultats des entretiens. Il est normal de faire des erreurs ; le plus souvent, on regarde comment une personne sait résoudre des problèmes et raisonner.

L'un des problèmes clés est qu'un candidat résout avec succès les problèmes lors des entretiens, se révèle être un excellent spécialiste, mais échoue à la première vraie tâche. Je ne vais pas mentir, cela m'est arrivé aussi. J'ai parcouru avec succès tous les cercles de l'enfer, résolu toutes les tâches de test, mais dans des conditions réelles, le travail s'est avéré trop difficile en raison d'une simple inexpérience. Monter à bord n’est pas la tâche la plus difficile. Le plus difficile est de rester au sein de cette entreprise.

Par conséquent, je fais davantage confiance aux entreprises qui mènent des entretiens simples avec le candidat et disent : après le premier mois de travail, il sera clair si vous nous convenez ou non. C'est l'approche la plus adéquate, certes, peut-être un peu coûteuse, mais on voit immédiatement qui est qui.

Il existe une autre option pour les entretiens : lorsque vous le réussissez, mais sur la base des résultats de l'entretien, vous comprenez que l'employeur est totalement inadéquat. Je refuse immédiatement le travail si on me propose de travailler en tant qu'entrepreneur individuel, promettant des revenus importants. Il s'agit d'une forme d'évasion fiscale pour une organisation exploitante, et pourquoi les problèmes de l'employeur devraient-ils m'inquiéter en tant que programmeur ? Une autre option consiste à utiliser diverses agences gouvernementales. J'ai eu un entretien, à la suite duquel on m'a proposé un bon salaire, mais ils ont dit que le programmeur précédent avait démissionné, était tombé malade, était décédé, s'était gave à cause de la charge de travail et que votre journée de travail commençait à 8 heures du matin. . D'un tel endroit, il a également couru pour que ses talons brillent. Oui, RH, sachez que les programmeurs sont prêts à refuser même le travail le plus délicieux si la journée de travail doit commencer tôt le matin.

A la fin, je donnerai une excellente vidéo de sélection des programmeurs, dont une capture d'écran est donnée au début de cet article. J'ai également eu une telle interview plus d'une fois. Si vous voyez de la tyrannie au stade des questions, alors respectez-vous, levez-vous, prenez vos affaires et partez - c'est normal. Si les RH et le manager s'affirment à vos dépens lors de l'entretien, cela indique que l'entreprise est toxique et vous ne devriez pas y travailler à moins d'aimer les patrons inadéquats.

résultats

Programmeurs, rendez-vous aux interviews ! Et essayez toujours d’être promu. Disons que si vous recevez N argent, alors passez un entretien pour au moins N*1,2, ou mieux N*1,5. Même si vous n'acceptez pas ce poste tout de suite, vous comprendrez ce qu'il faut pour ce niveau de salaire.
Mes observations ont montré qu'une bonne connaissance de la langue anglaise, une expérience suffisamment riche dans le secteur et la confiance en soi sont déterminantes. Cette dernière est la qualité principale, comme partout dans la vie. En règle générale, un candidat plus confiant peut obtenir de meilleurs résultats lors d'un entretien, même avec plus d'erreurs, qu'un candidat excellent, mais plus timide et proactif. Bonne chance pour vos entretiens !

Concurrence P/S

Si vous avez des exemples intéressants de problèmes que les RH vous ont posés, alors bienvenue dans les commentaires. Nous avons préparé un petit concours - les conditions sont simples : vous écrivez la tâche la plus inhabituelle que vous avez eue lors d'un entretien, les lecteurs l'évaluent (plus), et après une semaine, nous résumons les résultats et récompensons le gagnant avec des cadeaux amusants.

Programmeurs, allez aux interviews

Programmeurs, allez aux interviews

Source: habr.com

Ajouter un commentaire