Un aperçu complet des interviews Python. Trucs et astuces

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érale
  • La 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!



Python
  • Qu'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 data

Malheureusement, 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.


  1. 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).
  2. É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.

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


All Articles