Mon historique d'entretiens chez IB IT (développeur Java, banque d'investissement) à Londres avec des exemples de tâches typiques

Il se trouve que j'ai voulu devenir programmeur tout en étudiant dans une université à Moscou, mais je suis devenu déjà en dehors de la Russie et pas immédiatement - le chemin était long et épineux. Je suis allé à de nombreuses interviews (au début je cherchais, puis ils me cherchaient déjà), je me suis plongé dans les subtilités du travail et j'ai réfléchi à comment devenir un bon programmeur.


L'un des aspects qui a été pertinent tout au long de ma carrière est de trouver un emploi et de passer des entretiens. J'ai moi-même mené très peu d'entretiens (4-5), mais j'en ai visité un grand nombre (> 100). J'ai eu 3-4 périodes pour trouver un emploi au cours des ~ 7 dernières années, quand je suis allé pour une entrevue un mois ou deux, parfois 1-2-3 par jour.


Dans cet article, je voudrais partager l'expérience de la réussite de l'entretien, pour donner une sorte de systématisation de ce à quoi cela ressemble et ce qui se passe, à quoi se préparer.


Que serais-je intéressé de savoir dans les commentaires - comme cela arrive avec d'autres, en particulier à Moscou / Russie, il y a probablement des différences avec l'Europe.


Basé sur mon expérience personnelle, parler avec des collègues, lire des forums, des livres, etc. Je dirais ceci - c'est mon opinion subjective sur la situation dans son ensemble, ce post prétend être une information complète et qu'il couvre, sinon tous, la plupart des aspects. Où est mon opinion, j'écris dans mon opinion. Sinon, je fais semblant d'être objectif.


Presque toute mon expérience a consisté à interviewer l'informatique dans des sociétés financières européennes pour le poste de développeur Java (senior), principalement à Londres. Il n'y a pas de web (sous quelque forme que ce soit, front / end-backend), pas d'intégration, pas de travail pour le client (par type - il y a du CRM et l'entreprise l'implémente dans les banques), Amazon, Facebook, Google ne sont pas non plus représentés - je ne sais pas comment Je ne m'efforce pas vraiment là-bas, je suppose. Mon expérience commence par un simple programmeur et se termine par un développeur senior. Équipe / chef d'équipe / gestionnaire - non.


À propos de l'entretien en général


Le processus d'entretien est statistique, c'est-à-dire - nous servons partout où cela est intéressant, quelque chose ne fonctionnera pas simplement parce que nous n'avons pas de chance, nous l'avons déjà embauché, il n'y a pas suffisamment d'autres considérations ou expériences de marché, ou tout simplement un meilleur candidat a été trouvé. C'est-à-dire il est très difficile de passer un entretien s'il ne s'agit que d'un seul poste d'entreprise. En ce sens, Google me semble problématique - il est si seul. Il y a beaucoup de banques impliquées dans des choses similaires, pas dans une, donc dans une autre il y a un projet intéressant, la journée sera couronnée de succès, etc.


Un entretien est un jeu selon ses propres règles, qui sont habituelles à suivre, la connaissance de ces règles permet de fixer les attentes et le processus de préparation, de passage. En fin de compte, cela montre que vous êtes capable de respecter les règles et de les accepter, de prendre en compte les coutumes de l'équipe. Personne n'écrit les tris manuellement, et même synchronisé est peu susceptible d'avoir à écrire, sans parler de notifier / notifier tous. Tout comme il est peu probable qu'une connaissance détaillée du périphérique interne hashmap soit nécessaire - mais c'est l'une des questions les plus populaires - 70% des entretiens ne peuvent pas s'en passer, seul le contrat entre égaux et hashcode peut contester cette question. D'un autre côté, cela indique la préparation générale du candidat, la façon dont il aborde la tâche (et la recherche d'emploi est également une sorte de petit projet).


De problèmes administratifs


Oubliez d'attendre une réponse. Pas de réponse - la réponse est non.
Parfois, il me semblait que c'était leur règle de bon goût - ils ne répondaient pas s'ils n'étaient pas intéressés. Ceci est un exemple avec les recruteurs - si vous lui avez répondu que le travail n'est pas nécessaire maintenant, alors c'est comme une mauviette. Pour eux-mêmes, bien sûr, ne se mutilent pas, si nous n'en avons pas besoin, la logique est que le temps devrait être perdu. En général, les recruteurs sont des gens incroyables, une fois que j'ai commencé à penser qu'ils étaient comme des sirènes - ça vaut la peine de répondre et c'est tout, vous êtes déjà à une interview à laquelle vous n'iriez pas. La capacité de dire clairement non ou de formuler ce dont j'ai besoin est une bonne compétence. Je crois aux agents, mais je n'ai jamais confiance. Je ne prends que les faits, et ceux qui peuvent être prouvés, dans la catégorie "c'est un nouveau projet, tout y est très bien" - c'est le choc aérien. Et si "ils sont prêts à augmenter leurs salaires de 10 000" - alors c'est déjà quelque chose :-)


Quelques informations intéressantes - un agent (agence) reçoit une bonne partie du salaire annuel d'un candidat retenu (et après la période probatoire). Il semble que l'entreprise dispose d'un budget distinct pour les agents, c'est-à-dire si vous trouvez le même emploi sans agent, alors, très probablement, vous pouvez difficilement compter sur un salaire plus élevé. Je ne comprends pas très bien pourquoi il en est ainsi, peut-être que dans les petites entreprises, c'est différent.


Bien sûr, il y a un sens des agents, parfois ils sont utiles et bons. Le fait est que certains postes vacants très intéressants ne m'ont été fournis que par des agents. Mais l'inverse est vrai, malgré la croyance répandue que le travail sans agent peut et doit être trouvé. Surtout si vous êtes intéressé à travailler dans un domaine moins clair - nous prenons les 20 meilleures entreprises du monde / pays dans cette industrie et visitons leurs sites. J'ai donc trouvé mon premier emploi à Londres, ce dont j'ai été très satisfait.


Il convient également de mentionner que vous devez vous préparer à l'entretien, le formulaire au début de la course diffère considérablement après un mois de passage à l'entretien. Les questions sont répétées, les tâches simples sont écrites simplement, immédiatement et rapidement. L'histoire de son expérience, de ses forces, de ses projets et de ses plans pour l'avenir rebondit de ses dents. À un moment donné, j'ai voulu porter une affiche avec l'architecture de notre système, afin qu'il soit plus pratique de dire ce que je faisais.


En général, toujours et partout - le niveau intermédiaire n'est pas intéressé, vous devez être au-dessus de la moyenne, y compris et au-dessus de vos capacités, dans le sens où vous devez donner le meilleur de vous-même.
L'informatique financière est une énorme bureaucratie, et nous devons pouvoir y exister, oui, les ressources y sont dépensées et tout est inefficace, mais ce sont les règles et parfois il n'y a tout simplement pas de meilleure option. Parmi les avantages - il y a des projets intéressants, très intéressants, la bureaucratie et les analystes commerciaux ne reçoivent pas beaucoup et très bon argent.


Je ne considérerai pas du tout les préparatifs de l'entretien. Nous pensons qu'il s'agit d'une étape terminée, qu'il y a les connaissances nécessaires et qu'il y a des invitations à des entretiens.


Étapes de l'entretien


L'étape préliminaire est un entretien téléphonique.


Souvent avec un agent - ils vous demanderont des informations de base sur le CV que vous travaillez vraiment maintenant où vous travaillez, les attentes salariales et le salaire actuel (c'est un sujet distinct - je le dirai ci-dessous), le statut de visa et la rapidité avec laquelle vous pouvez vous rendre au travail. L'agent, en règle générale, parlera de l'entreprise et du poste vacant (mais hélas, seulement des informations générales) et demandera si c'est intéressant pour moi et en général ce que je recherche. Ils s'interrogent sérieusement sur la motivation, pourquoi cherchez-vous, changer d'emploi.


Si la conversation est directement avec un représentant de l'entreprise, la première conversation téléphonique peut être avec les RH ou immédiatement avec un représentant de l'équipe dans laquelle ils sont embauchés, en règle générale, par un responsable du recrutement, c'est-à-dire quelqu'un est assez franc, qui identifie et filtre les bons candidats, et cela vaut-il la peine de passer un entretien technique.


L'avantage est que vous pouvez immédiatement obtenir plus d'informations sur le projet et refuser, car ce n'est pas intéressant, ou vice versa, encore plus intéressé, sachant que c'est très intéressant.


Il y a eu peu de cas (mais ils étaient stables), quand tout commence de façon rigide dès la première interview - bonjour, bonjour, bien, passons par java, algorithmes, etc. Juste 40-50 minutes de ces questions dans l'esprit d'un examen informatique.


À propos de l'argent


Pendant longtemps, j'avais un tabou sur ce sujet - je ne voulais pas savoir combien mes collègues gagnaient - cela me démotiverait et diminuerait mon estime de soi. Puis il a changé son point de vue pour le contraire - cachant le salaire entre les mains de l'employeur, par conséquent, parmi les collègues, cela ne dérange pas d'échanger des chiffres, mais parmi de simples connaissances - non. Pour Londres - vous pouvez regarder glassdoor et multiplier par 1,5. pour une raison quelconque, la partie supérieure des salaires n'y est pas représentée, bien que ce soit la partie la plus douce et, ce qui est important, tout à fait réalisable. En tout cas, le programmeur à Londres à la banque est très, très bon argent et le niveau de vie est plus élevé qu'à Moscou (c'est mon opinion subjective, basée sur mes idées sur le niveau de vie et les besoins, les villes elles-mêmes imposent également des restrictions, à Moscou, je Je pense que je ne penserais même pas à une hypothèque, à Londres, en Europe, 2% par an est normal, un acompte de 20-25% est déjà suffisant).


Revenons à l'entrevue, si je comprends bien, l'employeur veut voir un candidat avec un certain montant. Je dirais qu'il vaut mieux répondre à un certain intervalle, mais vous devez le régler raisonnablement pour qu'il ne se produise pas plus tard, tout va bien, mais je veux plus d'argent. En général, je dirais que + 10-15% du salaire actuel est une option moyenne. Une augmentation presque double des salaires est également possible, et une augmentation annuelle de 10% à la place actuelle est également possible, quoi qu'en disent les agents. Je vais expliquer, d'une part, plus un agent vendra cher, plus il recevra, mais la priorité est de vous vendre en général, et pour combien, comment cela se passe, 5-10% de la différence de salaire pour un agent n'est pas une si grande différence l'agent l'aura sous la main (c'est une hypothèse).


Formats d'entrevue


Questions d'organisation


J'ai eu une observation intéressante sur la façon dont l'interview elle-même a été organisée, où elle se déroule, le bureau lui-même et la salle de réunion. Confirmation de la date, de l'heure, du lieu - rarement, seulement par téléphone, mais c'était le cas. En règle générale, une lettre. Souvent d'un agent avec un minimum d'informations. La chose la plus agréable est une lettre bien formatée, avec des noms et des postes, avec qui la réunion est et ce qui est intéressant - indiquant la salle de réunion (ce qui signifie qu'ils peuvent planifier à l'avance et ne pas chercher une salle de réunion gratuite 5 minutes avant l'entretien), les agents envoient souvent l'intervieweur linkedin - sauvez-moi parce que je regarde toujours le profil de celui avec qui je dois potentiellement travailler. S'il y a ses articles, je les lirai.
Soit dit en passant, si plusieurs personnes ont été annoncées, il est normal de s'attendre à ce qu'elles ne viennent pas toutes si le plus important d'entre elles délègue cela à quelqu'un. Mais, à mon humble avis, c'est bien quand tous les invités déclarés viennent.


Alors tout était normal, il est venu, s'est présenté à la réception, est descendu pour vous ou en a envoyé un à la salle de réunion. En règle générale, un employé descend derrière vous et vous conduit seul. Le temps passé dans l'ascenseur et sur la route peut également être utilisé pour les négociations.


Et au fait - comment une entreprise ressemble à un ensemble de candidats, c'est aussi un indicateur. Les entretiens sont un processus à double sens, en tant qu'entreprise, les individus abordent ce processus, la qualité de leur entretien, c'est aussi une caractéristique de l'entreprise / de l'équipe. Ceci est, bien sûr, subjectif, il me semble que ce n'est pas le meilleur choix pour demander toutes les interfaces Collections au niveau, vous savez / ne savez pas, c'est beaucoup plus intéressant de choisir un sujet et de le développer davantage, la même carte de hachage préférée - quelles sont les différences avec CHM, comment puis-je le stocker du tout Mapu en mémoire, renseignez-vous sur le temps d'accès, ce qui se passe pendant la remise en cache et développez davantage le sujet de la façon dont les éléments sont stockés dans les listes de collisions (liste, arbre, quel arbre, etc.))


De plus, si l'entretien a échoué, ils ont refusé, et il vous semble que vous avez bien performé - ce n'est pas non plus une raison d'être bouleversé, si vous ne montez pas et qu'il n'y a pas d'étincelle, alors il vaut mieux ne pas commencer. En ce sens, j'aime l'idée que si ça ne marche pas, je n'ai peut-être pas besoin d'y aller. J'aime aussi l'approche (Google soit dit en passant) - il vaut mieux ne pas embaucher un bon employé plutôt que d'embaucher un mauvais. La même chose pour un candidat - il vaut mieux ne pas entrer dans une bonne entreprise que dans une mauvaise.


J'étais curieux de savoir deux choses - l'heure réelle du début de l'interview (j'arrivais toujours 10 minutes avant le début) et les peintures accrochées aux murs, la conception des salles de réunion - en règle générale, ce sont des salles de réunion pour les clients des banques et investissent beaucoup d'argent dans leur conception.


Il y a un tel moment - une interview est annoncée pour 2 heures avec 4 personnes, et après une heure, ils disent merci. Il est clair que vous n'avez pas réussi. Je ne sais pas comment m'identifier à ça, ce n'est pas ça - ça m'offense, je me préparais, laissez-les écouter (enfin, ou laissez-moi au moins me faire interviewer) - tout est clair et oui, difficile; il est plus probable qu'il s'agissait probablement d'une performance infructueuse et si vous continuez, tout ira mieux. Mais ici, alors la logique est de nouveau - il vaut mieux ne pas embaucher le bien, que d'embaucher le mauvais.


Numéro de téléphone


Le plus élémentaire, comme je l'ai décrit, est une conversation téléphonique. Il peut y avoir des questions techniques, mais quelque chose de très difficile ou complexe est évidemment difficile à poser. Il est peu probable que les détails de la mise en œuvre dans des lieux de tri rapide soient demandés, et s'ils le sont, ils doivent être exécutés car, à mon humble avis, cela est insuffisant.


En ligne


De plus, un favori récent (ce n'était pas il y a 5-7 ans ou moins) - la programmation en ligne comme le hackerrank ou les tests en ligne.


Les tests avec le choix de la réponse dans la liste sont rares et, à mon avis, rarement le test reflète adéquatement la préparation du candidat, bien que je sois tombé sur une, tout simplement magnifique, 12 minutes, 12 questions assez intelligibles. Par conséquent, je pense que c'est un filtre tellement grossier.


La programmation en ligne avec un intervieweur ressemble à ceci - allez sur le site, connectez-vous et devant vous est un IDE en ligne qui est visible pour vous et l'intervieweur. Il vous donne des tâches, et vous écrivez immédiatement du code, l'exécutez, etc. Ce n'est qu'une fois que je me suis rencontré alors qu'il ne s'agissait que d'un Google Dock, que tout le reste est un simple IDE en ligne.


Devoirs


Bonnes et anciennes tâches de test, lorsque la tâche est simplement décrite et que vous devez envoyer une solution - parfois pendant un certain temps, parfois juste pendant 1-2-3-4 jours.


Selon le format des tâches - les devoirs, en règle générale, sont très intelligibles et significatifs. C'est quelque chose algorithmiquement (quelque chose comme trouver un chemin dans le labyrinthe, ou un petit système pour calculer la valeur moyenne du flux de prix et stocker le tout dernier, vous devez concevoir un peu les classes et tout écrire en mettant l'accent sur une faible latence) ou, comme je le dis J'appelle, sur OOP - il y a un sujet simple, il vous suffit d'écrire un programme qui affiche la tâche. Par exemple, nous avons un hôpital, il y a des patients, chaque patient reçoit une liste spécifique de médicaments, les médicaments selon certaines règles interagissent les uns avec les autres, provoquant un effet différent (si vous prenez A et B, alors le patient tombera malade de la maladie X, si les patients atteints de la maladie D ne recevaient pas drogue et il va mourir). Il faut écrire un programme qui, selon une liste donnée de médicaments, donne le résultat de leur application à la liste des patients (chacun ayant sa propre maladie initiale). Un autre exemple est d'écrire un ATM (attention à l'atomicité des transactions). Une autre consiste à écrire un jeu de ciseaux en pierre de papier.


Programmation en ligne pendant un certain temps (sans intervention humaine de l'autre côté) - en règle générale, c'est quelque chose d'algorithmique de la catégorie de la traversée des arbres, travaillez avec des tableaux - tout ce qui se passe sur geelforgeeks, et les tâches plus furieuses ne sont pas rares. Malheureusement, la solution à de nombreux problèmes dépend si elle s'est rencontrée avant ou non, souvent les tâches sont complexes et prises (et formulées) dans des sources ouvertes, il me semble que ce n'est pas un très bon choix de tâches, il est peu probable que les enquêteurs veuillent tester leurs compétences Google.


La programmation en ligne avec un intervieweur est également une vue intéressante, les tâches sont beaucoup plus simples, mais le stress et la méconnaissance de l'IDE sont ajoutés, l'essentiel ici n'est pas de se taire, de raisonner et de ne pas se précipiter pour écrire une solution tout de suite. Pensez et réfléchissez. Un exemple de tâche qui peut être - un ensemble de valeurs est donné, chaque valeur reçoit une probabilité. Il est nécessaire d'écrire un programme qui produit ces valeurs avec une probabilité donnée. À mon avis, c'est compliqué, mais faisable.
Un autre exemple - il existe une opération longue qui prend un argument en entrée, il existe de nombreux threads qui appellent et effectuent cette opération. Écrivez un wrapper qui optimiserait les appels (vous devez faire de la mise en cache en mettant l'accent sur le multithreading, de sorte que si le deuxième thread appelle une opération avec la même valeur et que l'opération est en cours de calcul, vous n'avez pas besoin d'exécuter à nouveau le calcul, attendez simplement). Le diable est connu pour être dans les détails et les cas extrêmes.


Plus d'informations sur les agents - il arrive parfois que les agents semblent savoir qu'ils vont demander et peuvent en quelque sorte le décrire. Il s'agit d'une zone grise, d'une part il est bon de savoir si l'entretien sera purement technique ou juste des conversations attendues de vous, etc. C'est bon. Mais en parlant de tâches spécifiques, je pense que ce n'est pas très bon, surtout en ce qui concerne l'entreprise, aussi, le candidat aura l'air très mauvais s'il a écrit par magie la solution au problème tout de suite, mais ne pouvait pas l'expliquer. Par conséquent, je préférerais ne pas utiliser de tels conseils.


Entretien sur place


  • la programmation en binôme, essentiellement la même que la programmation en ligne, seul l'intervieweur n'est pas au téléphone, mais sur une chaise à proximité.
  • devoirs - donner une tâche, une maquette, une heure, écrire - appeler.
  • Codage, dessin sur papier / carton.

Juste une conversation.


Selon la conversation elle-même - 50/50 il y aura 1 / beaucoup d'intervieweurs, en général, c'est pas mal quand il y en a plusieurs à la fois, et c'est intéressant quand ça ressemble à un contre-interrogatoire, ils demandent à tout le monde et beaucoup.


Exemple de tâches / questions typiques


Connaître la solution ne garantit rien, ainsi que les inexactitudes, l'incomplétude de la solution, réponse.
La tâche elle-même, la question, est le début d'une conversation sur le sujet. Par exemple, comment contenir deux tableaux triés. Ensuite, si nous avons plus de 2 tableaux. Quelle complexité, comment optimiser, et si nous changeons ceci et cela. À mon avis, c'est une très bonne approche - vous n'êtes pas menacé par un algorithme complexe, mais quelque chose de simple est donné, puis une conversation commence sur le sujet, la complication.


Spécification Java


  • equals et hashcode contract, que se passera-t-il si vous cassez
  • comment fonctionne hahsmap. Avec plus ou moins de détails? à partir de la façon dont le code de hachage est utilisé (ce qui se passera si vous rompez le contact avec des égaux) à - CHM, copie sur le tableau d'écriture, comme organisé en interne, blocage de la lecture / écriture, verrous de segments, niveau concurrent
  • volatile (mémoire barrière), se produit avant la sémantique
  • java 7 - chm, atomics, nio (?)
  • java 8 - ruisseaux, lambda
  • GC (il me semble que je peux déjà faire des présentations sur ce sujet)
  • question sur tableau volatile, volatile int [] arr; arr [2] = 2; int j = arr [2];
  • double vérification du verrouillage (et pourquoi vous ne devriez pas l'utiliser)
  • Je ne comprenais pas ce qui était intéressant, mais quelque part je l'ai vu comme un exemple d'une question intéressante:
    Object [] o = new Object [10] (); VS Object b = new Object [10] (); (ici je ne connais pas la réponse elle-même, si quelqu'un lit - aide pour cette question)
  • notifier notifier tout, producteur consommateur et quand vous pouvez \ ne pouvez pas utiliser notifier au lieu de notifier

Des algorithmes


normal dur


  • vérification de l'équilibre parental ({[- recherche de parenthèses équilibrées dans une expression
  • calcul d'expression (donné une chaîne avec des nombres, + - * / calculer la valeur entre parenthèses) - expression-évaluation
  • BFS / DFS - bfs-vs-dfs-binary-tree
  • trouver le chemin dans le graphique du haut vers tous, le plus petit entre 2 sommets - trouver-s'il-y-a-un-chemin-entre-deux-sommets-dans-un-graphique donné
  • trier la pile - trier la pile en utilisant une pile temporaire
  • mélanger un tableau de nombres au hasard

difficile


  • rechercher la plus grande sous-chaîne identique sur deux lignes - plus longue-sous-chaîne-commune-java
  • trouver le plus petit suffixe d'un mot, l'ajouter à un mot se traduira par un palindrome - Préfixe de palindrome le plus long
  • (union find)



  • , (, , tail recursion c )
  • , N
  • fuzz buzz ( 2 )


  • ring buffer, thread (non)safe, (non)blocking.
  • producer consumer, notify/notifyAll, .
  • queue -> blocking queue wait notify
  • thread safe
  • calculate VWAP (with sliding window, global)
  • sliding mean/avg
  • ,
  • ( - )
  • — , .
  • ( , ).
  • - ( 1 , N ) —
  • — check-for-string-rotation-in-java/

( , )


  • — maze
  • — Knight's tour, i,j
  • — leetcode-word-search-java
  • ( , , ).

— . , , , - , .


  • — leetcode-paint-house-java
  • . , .
  • throthler , — , , 1 . throttling vs conflation.
  • .
  • 2 ( 1GB), . <1000 , 99% ( — 99% , 99% ). , .. — , 1-epsilon — ( , ).


  • ,
  • ATM ()
  • — , , , X Y .
    ( ). , .


  • , \.
  • ,
  • ( 3 \)
  • . . , — , — ?..
  • /
  • , . () .


  • ,
  • TDD
  • SOLID
  • — .


  • leetcode
  • hackerrank
  • interviewbit
  • geeksforgeeks
  • ( )
  • glassdoor
  • google
  • practice-practice-practice and have fun!

, , , .

Source: https://habr.com/ru/post/fr430788/


All Articles