Bonjour Ă tous!
Brièvement sur vous-même. Je suis mathématicien de formation, mais programmeur de profession. Dans le domaine du développement depuis 2006. Bien que, depuis qu'ils ont commencé à étudier la programmation à l'école, j'ai commencé à écrire mes premiers programmes et jeux à l'école (environ, depuis 2003). Il se trouve que j'ai dû apprendre et travailler dans plusieurs langues. Si vous ne prenez pas en compte les cours universitaires sur C, C ++, BASIC, Pascal et Fortran, alors j'ai vraiment travaillé avec Delphi (plus de 6 ans), PHP (plus de 5 ans), Embedded (Atmel + PIC pendant environ 2,5 ans) et la dernière fois Python + un peu de Scala. Bien sûr, vous ne pouvez pas non plus vous passer de bases de données.
À qui s'adresse cet article? Pour tous ceux qui, comme moi, voulaient (ou veulent) trouver un emploi décent et bien rémunéré avec un projet intéressant, une équipe sympa et toutes sortes de goodies. Et aussi pour ceux qui veulent élever leur niveau de connaissances et de compétences.
Comment est né cet article? Après 3 semaines d'entretiens, de recherches, d'études, de nuits blanches (je passais souvent par des tournants d'événements possibles dans ma tête, des réponses possibles, etc.), j'ai reçu beaucoup d'offres. Les deux premiers ont dû être rejetés, car le délai de prise de décision était expiré et j'attendais des offres d'autres bureaux. En conséquence, j'ai pris une journée spécifique pour moi de décider et j'ai attendu les résultats des entretiens actuels et passés. Honnêtement, mon choix a été assez compliqué, car les options entre lesquelles j'ai choisi étaient généralement très attractives. En général, j'ai décidé de prioriser la direction du développement, plutôt que les conditions et le projet. Même après que la décision (et la proposition) a été prise, d'autres ont continué à venir (mais pour moi, c'était déjà sans importance).
Avant chaque entretien, j'ai assez bien préparé + compté ces endroits, les réponses aux questions sur lesquelles je ne savais pas, ou je ne me souvenais pas, ou je ne les ai pas compris jusqu'à la fin.
J'ai apprécié les questions qui pouvaient vraiment montrer ma compréhension (ou malentendu) de certains concepts fondamentaux. Malheureusement, de telles questions ont pu être comptées sur les doigts des deux mains.
En fin de compte, j'ai décidé qu'il valait la peine de collecter toute cette expérience et de la partager avec les autres.
Bien entendu, ces questions n'épuisent pas les connaissances que tout développeur expérimenté devrait posséder. Il me semble que certaines choses dans la pratique sont très rarement utilisées pour poser constamment des questions à leur sujet. De plus, je ne me trompe probablement pas si je dis que 90 +% des questions sont googlé de manière élémentaire pendant 10-30 secondes.
J'ai combiné quelques questions en une seule - pour gagner du temps et de l'espace.
Toujours à la fin de l'article, je donnerai des liens qui me paraissent les plus intéressants.
Table des matières
Théorie généraleLa première question dans la plupart des interviews est: "Qu'est-ce que SOLID?" Honnêtement, je ne me souvenais jamais du décodage complet de cette abréviation, alors j'ai soit expliqué dans mes propres mots, soit demandé à mon interlocuteur de suggérer au moins des noms anglais, puis je peux déchiffrer. Au début, il me semblait que l'interlocuteur me comprendrait et accepterait une telle variante de réponses, mais pour une raison quelconque, dans deux cas, les gars ont décidé que je ne connaissais pas la réponse à cette question (je ferais mieux de ne pas commenter davantage à ce sujet (un petit rouble)). Personnellement, j'ai confondu une fois l'injection de dépendance avec l'inversion de dépendance.
La deuxième question typique: "Qu'est-ce que REST?" puis après "Qu'est-ce que Restfull?" ou "Quelles sont les conditions de base".
Vous pouvez trouver votre réponse. Personnellement, je préfère cette option .
Qu'est-ce que HTTP? De quelles méthodes dispose-t-il?
Quelles méthodes HTTP sont idempotentes et lesquelles ne le sont pas?
J'ai aimé une question sur HTTP que je n'avais jamais rencontrée dans la pratique et que je ne connaissais donc pas. Supposons que vous ayez une assez grande liste de pages URL (telles que audio ou vidéo) qui doivent être téléchargées sur le disque. Mais pour chacun d'eux, vous devez vérifier s'il y a suffisamment d'espace sur l'ordinateur pour ces fichiers. Comment utiliser HTTP (quelles méthodes)?
La bonne réponse est la méthode HEAD (lire à ce sujet). Personnellement, j'ai donné une réponse dont l'interlocuteur n'a même pas entendu parler (ou oublié) et une recherche rapide a montré que j'avais également raison (en option). J'ai indiqué que j'utiliserais la méthode GET, mais afin de ne pas télécharger le fichier entier, j'indiquerais le paramètre Range avec un pas minimum. Bien que cela ne fonctionne que si le serveur envoie un paramètre Accept-Ranges différent de zéro dans la réponse. J'écris ceci au fait que cette question montre seulement si j'ai travaillé avec une telle tâche ou non. Une deuxième recherche donnera une réponse exhaustive.
Quelle est la différence entre l'authentification et l'autorisation? Honnêtement, j'ai immédiatement posé une question rhétorique: "pourquoi avez-vous raté une autre identification?". Par cela, j'ai soigneusement essayé de faire comprendre à l'interlocuteur que j'étais au courant de ces problèmes.
Quelle est la différence entre HTTP et HTTPS?
Qu'est-ce qu'un jeton CSRF?
Quels formats de données connaissez-vous autre que JSON, XML?
Ils sont trop nombreux, je ne me limiterai donc pas à une liste spécifique.
Qu'est-ce que SOAP?
Question farfelue. Je n'aime pas ça. Pourquoi demander à quoi sert une fois en jamais, ou certainement pas sur mon projet?
Quels modèles de conception connaissez-vous?
Google pour vous aider;)
Lors d'une des entrevues sur le développement de bas niveau, beaucoup de questions ont été posées sur les algorithmes.
En général, il est souhaitable de comprendre au moins approximativement ce qu'est l'O-big lors de l'évaluation de la complexité des algorithmes. Il est aussi probablement souhaitable de connaître les algorithmes de base: recherche simple, recherche binaire, tri, tri rapide, travail avec des arbres (largeur et profondeur traversées). Une connaissance m'a conseillé de lire le merveilleux livre "Algorithmes de Grokay. Aditya Bhargava." Je ne pensais pas qu'il était possible d'expliquer des choses assez compliquées de manière aussi belle et simple. C'est lu d'un seul souffle (honnêtement)! Je le recommande vivement à tous ceux qui, comme moi, ne se considèrent pas comme un algorithme. Pas de mots!
PythonQu'est-ce que PEP8? Que pensez-vous de lui?
Quels modèles de programmation connaissez-vous et comment peuvent-ils être mis en œuvre?
Quelles sont les options pour implémenter le modèle Singleton en python?
Je vous conseille également de comprendre les inconvénients de la mise en œuvre via le décorateur (notamment pour les tests). La manière la plus élégante et la plus polyvalente, bien sûr, à travers les métaclasses.
Décorateurs.
Je pense qu'il sera utile de lire et de comprendre:
Comment python implémente-t-il des méthodes publiques, privées et statiques?
Que sont les métaclasses?
Je vous conseille de lire entièrement ceci ou cela .
Ils ne l'ont pas demandé, mais je conseille de lire sur les différences fondamentales entre les 2e et 3e versions (au moins 2.7 et 3.4).
Quoi de neuf ()? Et en quoi est-ce différent de init ()? Dans quel ordre sont-ils exécutés?
Quels programmes connaissez-vous pour vérifier le style de code? Quels sont leurs avantages et inconvénients?
Personnellement, j'ai travaillé avec pylint, pychecker, mais j'en ai nommé trois principaux: pychecker, pylint, pyflakes, parce que j'avais déjà lu à leur sujet avant =) En passant, voici la dernière version, qui détaille les outils d'analyse du code Python .
Comment testez-vous le code? Qu'est-ce que la moquerie?
Personnellement, j'utilise tox, unittest, nose, ou regarde ce que dit Travis. Mock google mieux.
Concernant les tests, j'ai aimé les questions suivantes:
- que faire si la fonction testée utilise une connexion à distance à des services externes, qui voit parfois une erreur de temporisation, 404 et similaires?
- Que faire si la fonction testée prend beaucoup de temps pour effectuer des opérations répétées à l'intérieur? Par exemple, à l'intérieur du cycle va de 1 à 1000000, où quelque chose est lu, écrit, calculé.
Je vous conseille de lire sur les correctifs.
Que savez-vous des structures de données en python? Lesquels sont mutables / immuables?
Personnellement, je sais maintenant qu'il y en a beaucoup. En plus de ceux typiques (dict, list, set, tuple), assurez-vous de lire Ă propos de freez_set, default_dict, order_dict (ce n'est plus pertinent pour les nouvelles versions) et quoi d'autre sera au bureau. Dock (oui, commencez par cela).
Comment fonctionne une table de hachage (dictionnaire)? Que sont les collisions et comment y faire face?
Je pense que pour les postes élevés, il est logique de savoir.
OĂą la recherche sera-t-elle plus rapide, oĂą est-elle et pourquoi: dict, list, set, tuple?
Comment les valeurs d'argument sont-elles transmises à une fonction ou une méthode?
Qu'est-ce qu'un générateur? En quoi est-il différent d'un itérateur?
Il y a des articles plus courts, mais j'ai aimé celui-ci . Il y a beaucoup de choses qui ne peuvent pas être entièrement révélées dans les réponses de stackoverflow courtes.
Qu'est-ce que la compréhension de liste / dict?
Je ne peux pas formuler une question spécifique, je vous conseille donc de lire sur l'introspection (en utilisant dir (), dir , hasattr (), getattr ()), le changement de nom.
Quelle est la différence entre des traits de soulignement simples (_) et doubles (__)?
Une réponse exhaustive est ici .
Qu'est-ce qu'un GIL? Quels problèmes a-t-il?
Qu'est-ce que le MRO? Quelle est la différence entre MRO2 et MR3 (problème diamant)?
Démarrez Google et vous comprendrez tout vous-même.
Quelle est et quelle est la différence entre les classes de style ancien et nouveau?
Que savez-vous sur le filetage. Threading vs Multiprocessing?
Je vous conseille de le lire et de l'essayer vous-même - http://effbot.org/zone/thread-synchronization.htm . L'article est un peu ancien, mais il donne une bonne compréhension.
Avez-vous travaillé avec asyncio? Quelle est sa caractéristique?
Je recommande de lire des articles sur Python asynchrone et de le ressentir vous-mĂŞme.
Qu'est-ce que le ramasse-miettes (GC)? Quels sont ses avantages et ses inconvénients?
Je pense que tout ce qui est nécessaire pour une réponse est décrit ici .
Pourquoi avez-vous besoin de céleri?
Qu'est-ce que l'async / wait, Ă quoi servent-ils et comment les utiliser?
Il y a une fonction:
def f(sum, l=[]): l.append(sum) print(l)
Ce qui sera affiché à l'écran:
l = [1] f(10) // [10] f(10) // [10, 10] f(10, l) // [1, 10] f(10) // [10, 10, 10] print(l) // [1, 10]
Django / flacon- Comment fonctionne le sérialiseur dans le framework Django REST?
- De quoi Meta est-il responsable dans le sérialiseur?
- Quelle est la différence de performances entre Django et Flask (et pourquoi)?
- Quel est le but de ces cadres?
- Comment fonctionne l'authentification dans Django?
- Comment django gère (et génère) un token CSRF?
Frontend- Que sont les cookies? Pourquoi sont-ils, comment travailler avec eux et où sont-ils stockés?
- Un serveur peut-il modifier (ajouter, supprimer) des cookies?
- Qu'est-ce que JWT (JSON Web Token)?
SDLC- Agile \ scrum: tout ce que vous devez savoir
- Quelle est la différence entre CI et CD? Pour ceux dans le réservoir: CI - intégration continue, CD - livraison continue
- Quelle est la différence entre Scrum et Kanban?
- Quels types de tests connaissez-vous?
Côté Google: tests unitaires, tests d'intégration, tests d'acceptation, etc. - Question pour les chefs d'équipe (le plus probable): que ferez-vous s'il n'y a pas de tests sur le projet et que le client ne veut pas consacrer temps et argent à son développement?
Personnellement, je lance un appel à la rentabilité pour l’entreprise du client. - Qu'est-ce que la dette code et comment y faire face (vivre, aimer, se battre)?
Git, versioning, refactoring- Quels systèmes de contrôle de version connaissez-vous (utilisez-vous)?
- Qu'est-ce que Git Flow?
Je vous conseille de le lire , car c'est une chose documentée. - Qu'est-ce que git rebase?
- Qu'est-ce qu'un pic cerise?
- Quels outils utilisez-vous pour la révision du code?
Personnellement, je suis fan du client web github (il regorge de goodies intéressants et pratiques). Mais mon interlocuteur a décidé que j'étais une bardane et m'a mis un moins. J'ai fait des recherches sur Google à la maison et j'ai vu qu'il y a beaucoup de logiciels spécialisés qui sont trop similaires à ce que j'ai utilisé pendant plus de 3 ans. Logiciel comme logiciel - pour un amateur.
P.S. Je n'aimais pas ce moment, car j'avais une expérience de révision de code assez longue + je devais constamment lire les validations de 500 à 3000 changements de longueur (oui, sur l'un de mes projets majeurs, ces validations étaient normales), et les gens ont décidé que depuis Je ne connais pas d'autres utilitaires - cela signifie bardane. - Qu'est-ce que la poussée forcée?
- Qu'est-ce que la vérification préalable à l'engagement?
- Qu'est-ce que la cohésion et le couplage de code?
Bases de donnéesÀ ma grande surprise, les questions sur ce sujet me semblaient trop simples (comme pour l'école), sauf littéralement 2-3.
- Qu'est-ce qu'une transaction? Quelles propriétés a-t-elle?
- Quels sont les niveaux d'isolement des transactions? À quoi ressemblent-ils?
Je vous conseille de lire ceci attentivement, car ce sont des choses fondamentales . - Que sont les transactions imbriquées?
- Qu'est-ce qu'un curseur et pourquoi est-il nécessaire?
- Quelle est la différence entre PostgreSQL et MySQL?
- Qu'est-ce que VACUUM dans PostgreSQL?
- Qu'est-ce que EXPLAIN? Quelle est la différence entre celui-ci et EXPLAIN ANALYZE?
Big dataMalheureusement, je me suis souvenu de quelques questions, car mon expérience précédente dans le développement de logiciels et le travail avec des bases de données était importante pour mon interlocuteur (je pense que c'est très intelligent).
- Qu'est-ce que Hadoop? ... et HDFS?
- Qu'est-ce que MapReduce et comment ça marche?
- Est-il possible de créer de nombreux mappeurs et réducteurs (ou d'indiquer leur nombre)?
- Quelle est la différence entre Hive et HBase
- Est-il possible de créer un index dans HBase?
- Qu'est-ce que la répartition?
- Quelle est la difference entre repartition et coalesce?
Très simple et abordable décrit ici . - Qu'est-ce que l'élection des maîtres dans Zookeeper?
Les tâchesÉtonnamment, seulement lors d'une des douze interviews, on m'a demandé d'écrire du code. Probablement parce que tout le monde voulait vérifier le code après la partie théorique. Et comme les entretiens ont duré au moins une heure (la plus longue - trois heures!), Et que toutes les questions n'ont jamais été posées, les gars n'ont tout simplement pas eu physiquement le temps de vérifier le code.
En plus de la pratique, je ne conseillerai rien d'autre.
- Il existe un fichier contenant des mots séparés par un espace. Par exemple: "abba com mother bill mother com abba dog abba mother com". Il faut trouver et déduire les trois mots qui se produisent le plus souvent ensemble (l'ordre n'a pas d'importance). Autrement dit, dans mon exemple, les trois mots sont "abba com mother", "com mother bill", "mother bill mother", etc. La bonne réponse devrait être "abba com mother" (fréquence - 3 fois).
- Écrivez une fonction pour parcourir l'arbre en profondeur (en largeur).
Pour que vous ne perdiez pas de temps - je vais vous donner un lien où les deux fonctions sont très belles et simples.
Il y avait une autre tâche simple: écrire un générateur.
Questions et liens de ma partÀ des fins pédagogiques générales, il vaut la peine de lire les articles suivants:
- "Questions d'entrevue Python." J'en ai lu différents, mais pour une raison quelconque, j'ai ajouté seulement ces deux-là aux signets - 1 et 2 . Mais je vous conseille de google plus.
- Likbez sur la saisie dans les langages de programmation .
- Il est dommage que lors de la discussion des bases de données, il n'y ait eu aucune question sur le théorème de la PAC. En savoir plus ici .
- Je ne sais pas pourquoi le sujet des microservices n’a pas été abordé. Je peux seulement supposer que ceux qui m'ont interviewé ont peu travaillé avec eux ou y ont accordé toute l'attention voulue. Cependant, si vous êtes intéressé, voici un bon article .
- À ma grande surprise, personne n'a même posé de questions sur la virtualisation, le docker, les conteneurs, Kubernetes. Je vous conseille au moins de traiter avec le docker, car il existe maintenant de nombreuses instructions simples et détaillées avec des explications.
- Liens Python super utiles .
- Zen Python dans les exemples .
- Je pense que tous ceux qui travaillent avec Python devraient connaître les innovations intéressantes .
- Peu d'interlocuteurs connaissaient les dictionnaires en python que le co-auteur lui-mĂŞme raconte ici .
- Personne n'a posé de questions sur Lambda en python, mais il vaut mieux comprendre de quoi il s'agit et avec quoi il est mangé.
- Types et astuces en python. L'article est ancien, mais la plupart des "trucs" sont pertinents aujourd'hui .
- Soit dit en passant, pour les amateurs de python - un résumé des dernières nouvelles et autres matériaux .
- Sur le front, je vous conseille de regarder une courte conférence sur la boucle d'événements en JavaScript. Je ne pense pas que vous sachiez comment cela fonctionne vraiment. Je le recommande vivement .
- Concernant le côté serveur, il est conseillé de comprendre la différence entre nginx et apache. Internet regorge d'articles. Si c'est vraiment intéressant, quelle est la différence sous le capot - voici un article avec des exemples .
Conseils à tous ceux qui veulent vraiment atteindre la maîtrise - ne soyez pas paresseux pour répéter le code dans la console (que ce soit en python, DB ou autre). NE PAS copier, à savoir répéter. Bien sûr, cela signifie du nouveau matériel, et non pas celui que vous écrivez aveuglément depuis longtemps.
En fait, il y avait 3-4 fois plus de questions. Quelque chose est oublié. Mais j'ai apporté les plus importants.
Vous avez probablement remarqué qu'il n'y avait pratiquement pas de questions sur le front. C'est parce que soit nous n'avons pas eu le temps de les atteindre, soit il y en avait si peu que je les ai oubliés.
Soit dit en passant, voici une bonne matrice de compétences dans divers domaines de l'informatique. Si vous avez la possibilité de mener une entrevue, je vous conseille au moins de comprendre ce que vous devez demander et à quel niveau, et de ne pas ramer tout le monde sous la même barre (comme c'est souvent le cas maintenant) - trop de domaines différents se sont accumulés. Personnellement, je ne comprends pas pourquoi exiger du front-end senior une excellente compréhension de la base de données, ou de la compréhension profonde du back-end senior du moteur de navigateur ou de l'interaction de la boucle d'événement avec le moteur de rendu du navigateur, ou du testeur - la capacité de trouver le chemin le plus court de manière équilibrée graphique, etc. J'espère qu'en regardant cette matrice, vous comprenez ce que je veux dire.
Je souhaite sincèrement le succès à tous ceux qui décident de se consolider et de démontrer aux autres leurs connaissances afin d'obtenir une bonne offre intéressante!
UPD:
Ici, vous pouvez pratiquer l'interview, si 4to - pramp.com. Merci Ă non_smile pour le lien.