Introduction

Vous cherchez un emploi Python? Il y a de fortes Chances que vous deviez prouver que vous savez travailler avec Python. Voici quelques questions qui couvrent une large base de compétences associées à Python. L’accent est mis sur le langage lui-même, et non sur un package ou un cadre particulier. Chaque question sera liée à un tutoriel approprié s’il y en a un. Certaines questions concluront plusieurs sujets.,

en fait, je n’ai pas reçu de test d’entrevue aussi dur que celui-ci, si vous pouvez obtenir les réponses confortablement, allez vous chercher un emploi.

ce que ce tutoriel n’est pas

Ce tutoriel ne vise pas à couvrir toutes les cultures de travail disponibles – différents employeurs vous poseront différentes questions de différentes manières; ils suivront différentes conventions; ils valoriseront différentes choses. Ils vous testeront de différentes manières., Certains employeurs vont vous asseoir à partir d’un ordinateur et vous demander de résoudre des problèmes simples; certains vont vous tenir debout devant un tableau blanc et faire de même; certains vous donneront un test à domicile à résoudre; certains auront juste une conversation avec vous.

Le meilleur test pour un programmeur est en fait la programmation. C’est une chose difficile à tester avec un simple tutoriel. Donc, pour les points bonus, assurez-vous que vous pouvez réellement utiliser les fonctionnalités démontrées dans les questions., Si vous comprenez réellement comment obtenir les réponses assez bien que vous pouvez réellement faire usage des concepts démontrés alors vous gagnez.

de même, le meilleur test pour un ingénieur logiciel est en fait l’ingénierie. Ce tutoriel concerne Python en tant que langage. Être capable de concevoir des hiérarchies de classe efficientes, efficaces et maintenables pour résoudre des problèmes de niche est formidable et merveilleux et un ensemble de compétences qui mérite d’être poursuivi, mais bien au-delà de la portée de ce texte.

Une autre chose que ce tutoriel n’est pas est conforme PEP8., Ceci est intentionnel car, comme mentionné précédemment, différents employeurs suivront différentes conventions. Vous devrez vous adapter à la culture du lieu de travail. Parce que la praticité bat la pureté.

Une autre chose que ce tutoriel n’est pas est concise. Je ne veux pas simplement vous lancer des questions et des réponses et espérer que quelque chose colle. Je veux que vous l’obteniez, ou du moins l’obteniez assez bien pour que vous soyez en mesure de chercher vous-même des explications supplémentaires pour tout sujet problématique.

vous voulez réussir votre entretien technique? Planifiez une séance de pratique D’entretien technique avec un expert maintenant!,

Question 1

qu’est-Ce que Python vraiment? Vous pouvez (et sont encouragés à) faire des comparaisons avec d’autres technologies dans votre réponse

Réponse

Voici quelques points clés:

  • Python est un langage interprété. Cela signifie que, contrairement à des langages comme le C et ses variantes, Python n’a pas besoin d’être compilé avant d’être exécuté. D’autres langages interprétés incluent PHP et Ruby.

  • Python est dynamiquement typé, ce qui signifie que vous n’avez pas besoin d’indiquer les types de variables lorsque vous les déclarez ou quelque chose comme ça., Vous pouvez faire des choses comme x=111 puis x="I'm a string" sans erreur

  • Python est bien adapté à la programmation orientée objet en ce qu’il permet la définition de classes ainsi que la composition et l’héritage. Python n’a pas de spécificateurs d’accès (comme C++’s , private), la justification de ce point est donnée comme « nous sommes tous des adultes ici »

  • en Python, les fonctions sont des objets de première classe., Cela signifie qu’ils peuvent être affectés à des variables, renvoyés par d’autres fonctions et passés dans des fonctions. Les Classes sont également des objets de première classe

  • écrire du code Python est rapide mais son exécution est souvent plus lente que les langages compilés. Heureusement, Python permet l’inclusion D’extensions basées sur C afin que les goulots d’étranglement puissent être optimisés et le sont souvent., Le package numpy en est un bon exemple, il est vraiment assez rapide car une grande partie du calcul des nombres qu’il fait n’est pas réellement fait par Python

  • Python trouve une utilisation dans de nombreux domaines – applications web, automatisation, modélisation scientifique, applications big data et bien d’autres. Il est également souvent utilisé comme code « colle » pour que d’autres langues et composants jouent bien.

  • Python facilite les choses difficiles afin que les programmeurs puissent se concentrer sur les algorithmes et les structures de remplacement plutôt que sur les détails de bas niveau.,

pourquoi cela compte:

Si vous postulez pour un poste Python, vous devez savoir ce que c’est et pourquoi c’est si cool. Et pourquoi ce n’est pas o. o

Question 2

remplissez le code manquant:

def print_directory_contents(sPath): """ This function takes the name of a directory and prints out the paths files within that directory as well as any files contained in contained directories. This function is similar to os.walk. Please don't use os.walk in your answer. We are interested in your ability to work with nested structures. """ fill_this_in

réponse

faites particulièrement Attention

  • soyez cohérent avec vos conventions de nommage. S’il existe une convention de dénomination évidente dans un exemple de code, respectez-la. Même si ce n’est pas la convention de nommage que vous utilisez habituellement
  • Les fonctions récursives doivent récurser et se terminer., Assurez-vous de comprendre comment cela se produit afin d’éviter les callstacks sans fond
  • nous utilisons le module os pour interagir avec le système d’exploitation d’une manière multiplateforme. Vous pourriez dire sChildPath = sPath + '/' + sChild mais cela ne fonctionnerait pas sous windows
  • la familiarité avec les paquets de base en vaut vraiment la peine, mais ne vous cassez pas la tête en essayant de tout mémoriser, Google est votre ami sur le lieu de travail!
  • Poser des questions si vous ne comprenez pas ce que le code est censé faire
  • BAISER! Keep it Simple, Stupid!,

pourquoi cela compte:

  • affiche la connaissance des éléments d’interaction de base du système d’exploitation
  • la récursivité est-elle utile à hella

Question 3

en regardant le code ci-dessous, notez les valeurs finales de A0, A1, An An.

Si vous c’est ne pas stresser. Aucun employeur sain d’esprit ne s’attend à ce que vous mémorisiez la bibliothèque standard. Voici la sortie de help(zip).

Si cela n’a pas de sens, prenez quelques minutes pour le comprendre comme vous le souhaitez.,

Réponse

Pourquoi C’est important

  1. compréhension de Liste est un formidable gain de temps et une grosse pierre d’achoppement pour beaucoup de gens,
  2. Si vous pouvez les lire, vous pouvez probablement écrire
  3. une partie de ce code a été fait délibérément bizarre. Vous devrez peut-être travailler avec des personnes étranges

Question 4

Python et multi-threading. Est-ce une bonne idée? Énumérez quelques façons d’exécuter du code Python de manière parallèle.

Réponse

Python ne permet pas le multi-threading dans le vrai sens du mot., Il a un paquet multi-threading mais si vous voulez multi-thread pour accélérer votre code, ce n’est généralement pas une bonne idée de l’utiliser. Python a une construction appelée Global Interpreter Lock (Gil). Le GIL s’assure qu’un seul de vos « threads » peut s’exécuter à tout moment. Un fil acquiert le GIL, fait un peu de travail, puis passe le GIL sur le fil suivant. Cela se produit très rapidement, donc à l’œil humain, il peut sembler que vos threads s’exécutent en parallèle, mais ils ne font que se relayer en utilisant le même cœur de processeur. Tout ce passage de GIL ajoute des frais généraux à l’exécution., Cela signifie que si vous voulez faire fonctionner votre code plus rapidement, l’utilisation du package de threading n’est souvent pas une bonne idée.

Il y a des raisons d’utiliser le paquet de threads de Python. Si vous voulez exécuter certaines choses simultanément, et l’efficacité n’est pas un problème, alors c’est tout à fait bien et pratique. Ou si vous exécutez du code qui doit attendre quelque chose (comme des E / S), cela pourrait avoir beaucoup de sens. Mais la bibliothèque de threads ne vous permettra pas d’utiliser des cœurs de processeur supplémentaires.,

Le multi-threading peut être externalisé vers le système d’exploitation (en faisant le multi-traitement), une application externe qui appelle votre code Python (par exemple, Spark ou Hadoop), ou un code que votre code Python appelle (par exemple: vous pourriez avoir votre code Python appeler une fonction C qui fait les choses multi-thread coûteuses).

pourquoi cela compte

parce que le GIL est un trou A. Beaucoup de gens passent beaucoup de temps à essayer de trouver des goulots d’étranglement dans leur code multithread Python avant d’apprendre ce qu’est le GIL.,

Question 5

Comment voulez-vous garder une trace des différentes versions de votre code?

Réponse:

de contrôle de Version! À ce stade, vous devez agir excité et leur dire comment vous utilisez même Git (ou tout ce qui est votre favori) pour garder une trace de la correspondance avec Granny. Git est mon système de contrôle de version préféré, mais il y en a d’autres, par exemple subversion.

pourquoi cela compte:

parce que le code sans contrôle de version est comme du café sans tasse., Parfois, nous devons écrire des scripts à jeter une fois et c’est ok, mais si vous avez affaire à une quantité importante de code, un système de contrôle de version sera un avantage. Le contrôle de Version permet de garder une trace de qui a apporté quel changement à la base de code; savoir quand des bogues ont été introduits dans le code; garder une trace des versions et des versions de votre logiciel; distribuer le code source entre les membres de l’équipe; déploiement et certaines automatisations. Il vous permet de revenir à votre code avant de le casser, ce qui est génial en soi. Beaucoup de choses. C’est tout simplement génial.,

la Question 6

Qu’est-ce code de sortie:

def f(x,l=): for i in range(x): l.append(i*i) print(l) f(2)f(3,)f(3)

Réponse

Hu?

le premier appel de fonction doit être assez évident, la boucle ajoute 0 puis 1 à la liste vide, l. l est un nom pour une variable qui pointe vers une liste stockée dans la mémoire.
Le deuxième appel commence par créer une nouvelle liste dans un nouveau bloc de mémoire. l fait alors référence à cette nouvelle liste. Il ajoute ensuite 0, 1 et 4 à cette nouvelle liste. Donc c’est génial.,
Le troisième appel de fonction est l’étrange. Il utilise la liste d’origine stockée dans le bloc de mémoire d’origine. C’est pourquoi il commence par 0 et 1.

Essayez ceci si vous ne comprenez pas:

la Question 7

qu’est-Ce que monkey patching et c’est jamais une bonne idée?

réponse

Le patch de singe modifie le comportement d’une fonction ou d’un objet après qu’il a déjà été défini. Par exemple:

import datetimedatetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)

La plupart du temps, c’est une idée assez terrible – il est généralement préférable que les choses agissent de manière bien définie. Une raison de singe patch serait dans les tests., Le paquet simulé est très utile à cette fin.

pourquoi cela compte

cela montre que vous comprenez un peu les méthodologies dans les tests unitaires. Votre mention de monkey avoidance montrera que vous n’êtes pas l’un de ces codeurs qui privilégient le code Fantaisie au code maintenable (ils sont là-bas, et ils sucent de travailler avec). Rappelez-vous le principe de la BAISER? Et cela montre que vous savez un peu comment Python fonctionne à un niveau inférieur, comment les fonctions sont réellement stockées et appelées, etc.

PS: cela vaut vraiment la peine de lire un peu mock si vous ne l’avez pas encore fait. C’est assez utile.,

la Question 8

Qu’est-ce genre de choses à dire: *args, **kwargs? Et pourquoi l’utiliserions-nous?

Answer

utilisez*args lorsque nous ne savons pas combien d’arguments vont être passés à une fonction, ou si nous voulons passer une liste stockée ou un tuple d’arguments à une fonction. **kwargs est utilisé lorsque nous ne savons pas combien d’arguments de mots clés seront passés à une fonction, ou il peut être utilisé pour passer les valeurs d’un dictionnaire en tant qu’arguments de mots clés., Les identificateurs args et kwargs sont une convention, vous pouvez également utiliser *bob et **billy mais ce ne serait pas sage.

Voici une petite illustration:

Pourquoi s’en faire?

parfois, nous devrons passer un nombre inconnu d’arguments ou d’arguments de mots clés dans une fonction. Parfois, nous voudrons stocker des arguments ou des arguments de mots clés pour une utilisation ultérieure. Parfois, c’est juste un gain de temps.,

la Question 9

Que faire de ces signifie pour vous: @classmethod, @staticmethod, @property?

réponse connaissances de base

Ce sont des décorateurs. Un décorateur est un type spécial de fonction qui prend soit une fonction et retourne une fonction, ou prend une classe et retourne une classe. Le symbole @ n’est que du sucre syntaxique qui vous permet de décorer quelque chose d’une manière facile à lire.,

@my_decoratordef my_func(stuff): do_things

Est équivalent à

def my_func(stuff): do_thingsmy_func = my_decorator(my_func)

Vous pouvez trouver un tutoriel sur la façon décorateurs travaillent, en général ici.

la Réponse

Les décorateurs @classmethod, @staticmethod et @property sont utilisés sur les fonctions définies dans les classes. Voici comment ils se comportent:

Question 10

considérez le code suivant, que va-t-il sortir?

Réponse

La sortie est spécifié dans les commentaires dans le segment ci-dessous:

Pourquoi faisons-nous des soins?,

parce que la programmation OO est vraiment, vraiment importante. Vraiment. Répondre à cette question montre votre compréhension de l’héritage et de l’utilisation de la fonction super de Python. La plupart du temps, l’ordre de résolution n’a pas d’importance. Parfois il le fait, cela dépend de votre application.

Question 11

considérez le code suivant, que va-t-il sortir?

Réponse

oRoot.print_all_1() imprime:

oRoot.print_all_2() imprime:

Pourquoi faisons-nous des soins?

parce que la composition et la construction des objets sont ce que sont les objets., Les objets sont composés de choses et ils doivent être initialisés d’une manière ou d’une autre. Cela lie également des choses sur la récursivité et l’utilisation des générateurs.

Générateurs sont grands. Vous auriez pu obtenir des fonctionnalités similaires à print_all_2 en construisant simplement une longue liste, puis en imprimant son contenu. L’une des bonnes choses à propos des générateurs est qu’ils n’ont pas besoin de prendre beaucoup de place dans la mémoire.

Il convient également de souligner queprint_all_1traverse l’arbre d’une manière en profondeur, tandis queprint_all_2 est en largeur., Assurez-vous de comprendre ces termes. Parfois, un type de traversée est plus approprié que l’autre. Mais cela dépend beaucoup de votre application.

Question 12

décrivez le mécanisme de garbage collection de Python en bref.

Réponse

beaucoup peut être dit ici. Il y a quelques points principaux que vous devriez mentionner:

  • Python maintient un compte du nombre de références à chaque objet en mémoire., Si un nombre de références passe à zéro, l’objet associé n’est plus actif et la mémoire allouée à cet objet peut être libérée pour autre chose
  • parfois, des choses appelées « cycles de référence » se produisent. Le garbage collector les Recherche périodiquement et les nettoie. Un exemple serait si vous avez deux objets o1 et o2 tels que o1.x == o2 et o2.x == o1. Si o1 Et o2 ne sont référencés par rien d’autre, ils ne devraient pas être en direct., Mais chacun d’eux a un nombre de référence de 1.
  • Certaines heuristiques sont utilisées pour accélérer la collecte des ordures. Par exemple, les objets récemment créés sont plus susceptibles d’être morts. Au fur et à mesure que les objets sont créés, le garbage collector les attribue à des générations. Chaque objet reçoit une génération, et les jeunes générations sont traitées en premier.

Cette explication est Disponible spécifiques.

la Question 13

Placez les fonctions suivantes ci-dessous dans l’ordre de leur efficacité. Ils prennent tous dans une liste de nombres entre 0 et 1. La liste peut être très longue., Un exemple de liste d’entrée serait . Comment prouveriez-vous que votre réponse est correcte?

Réponse

la Plus à la moins efficace: f2, f1, f3. Pour prouver que c’est le cas, vous souhaitez profiler votre code. Python a un joli paquet de profilage qui devrait faire l’affaire.

import cProfilelIn = cProfile.run('f1(lIn)')cProfile.run('f2(lIn)')cProfile.run('f3(lIn)')

pour des raisons d’achèvement, voici ce que le profil ci-dessus produit:

pourquoi S’en soucier?

localiser et éviter les goulots d’étranglement est souvent assez intéressant., Beaucoup de codage pour l’efficacité se résume au bon sens-dans l’exemple ci-dessus, il est évidemment plus rapide de trier une liste si c’est une liste plus petite, donc si vous avez le choix de filtrer avant un tri, c’est souvent une bonne idée. Les choses moins évidentes peuvent toujours être localisées grâce à l’utilisation des outils appropriés. Il est bon de savoir au sujet de ces outils.

la Question 14

quelque Chose que vous avez échoué à?

Mauvaise réponse

je n’échoue jamais!

Pourquoi C’Est Important:

Montre que vous êtes capable d’admettre des erreurs, de prendre la responsabilité de vos erreurs et apprendre de vos erreurs., Toutes ces choses sont sacrément importantes Si vous allez être utile. Si vous êtes réellement parfait alors tant pis, vous devrez peut-être faire preuve de créativité ici.

la Question 15

avez-vous des projets personnels?

Vraiment?

cela montre que vous êtes prêt à faire plus que le strict minimum en termes de maintien de vos compétences à jour. Si vous travaillez sur des projets personnels et codez en dehors du lieu de travail, les employeurs sont plus susceptibles de vous voir comme un atout qui va croître. Même s’ils ne posent pas cette question, je trouve qu’il est utile d’aborder le sujet.,

Conclusion

ces questions ont intentionnellement abordé de nombreux sujets. Et les réponses étaient intentionnellement verbeuses. Dans une entrevue de programmation, vous devrez démontrer votre compréhension et si vous pouvez le faire de manière concise, faites-le par tous les moyens. J’ai essayé de donner suffisamment d’informations dans les réponses pour que vous puissiez en tirer un sens même si vous n’aviez jamais entendu parler de certains de ces sujets auparavant. J’espère que vous trouverez ce utile dans votre recherche d’emploi.

Go get ’em tigre.

Articles

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *