Inleiding

zoekt u een Python-taak? De kans is groot dat je moet bewijzen dat je weet hoe je met Python moet werken. Hier zijn een paar vragen die betrekking hebben op een brede basis van vaardigheden in verband met Python. De focus ligt op de taal zelf, en niet op een bepaald pakket of kader. Elke vraag zal worden gekoppeld aan een geschikte tutorial als er een is. Sommige vragen zullen meerdere onderwerpen afronden.,

Ik heb niet echt een interview test zo hard als deze, als je kunt krijgen om de antwoorden comfortabel dan ga je een baan.

wat deze Tutorial niet is

deze tutorial is niet bedoeld om elke beschikbare werkplekcultuur te behandelen – verschillende werkgevers zullen je verschillende vragen stellen op verschillende manieren; ze zullen verschillende conventies volgen; ze zullen verschillende dingen waarderen. Ze zullen je op verschillende manieren testen., Sommige werkgevers zullen u gaan zitten in van een computer en vragen u om eenvoudige problemen op te lossen; sommigen zullen u staan in de voorkant van een whiteboard en doen vergelijkbaar; sommigen zullen geven u een take home test op te lossen; sommigen zullen gewoon een gesprek met u.

de beste test voor een programmeur is eigenlijk programmeren. Dit is een moeilijk ding om te testen met een eenvoudige tutorial. Dus voor bonuspunten zorg ervoor dat u daadwerkelijk gebruik kunt maken van de functionaliteit aangetoond in de vragen., Als je echt begrijpt hoe je naar de antwoorden goed genoeg dat je daadwerkelijk gebruik kunt maken van de gedemonstreerde Concepten Dan ben je aan het winnen.

evenzo is de beste test voor een software engineer eigenlijk engineering. Deze tutorial gaat over Python als een taal. In staat zijn om efficiënte, effectieve, onderhoudbare klasse hiërarchieën te ontwerpen voor het oplossen van niche problemen is geweldig en prachtig en een vaardigheden die de moeite waard nastreven, maar ver buiten het bereik van deze tekst.

een ander ding dat deze tutorial niet is is pep8 compliant., Dit is opzettelijk omdat, zoals eerder vermeld, verschillende werkgevers verschillende conventies zullen volgen. U moet zich aanpassen aan de cultuur van de werkplek. Want bruikbaarheid verslaat zuiverheid.

een ander ding dat deze tutorial niet is, is beknopt. Ik wil je niet vragen en antwoorden geven en hopen dat er iets blijft hangen. Ik wil dat je het krijgt, of op zijn minst goed genoeg dat je in een positie bent om zelf te zoeken naar verdere uitleg voor eventuele probleemonderwerpen.

wilt u uw technisch interview winnen? Plan nu een technisch Interview training met een expert!,

Vraag 1

Wat is Python werkelijk? U kunt (en wordt aangemoedigd) vergelijkingen maken met andere technologieën in uw antwoord

antwoord

Hier zijn een paar belangrijke punten:

  • Python is een geïnterpreteerde taal. Dat betekent dat, in tegenstelling tot talen zoals C en zijn varianten, Python niet hoeft te worden gecompileerd voordat het wordt uitgevoerd. Andere geïnterpreteerde talen zijn PHP en Ruby.

  • Python wordt dynamisch getypt, dit betekent dat u de typen variabelen niet hoeft te vermelden wanneer u ze declareert of iets dergelijks., U kunt dingen doen als x=111 en dan x="I'm a string" zonder fout

  • Python is zeer geschikt voor objectgeoriënteerd programmeren in die zin dat het de definitie van klassen mogelijk maakt samen met compositie en overerving. Python heeft geen toegangsspecificaties (zoals C++’s public, private), de rechtvaardiging voor dit punt wordt gegeven als “we are all adults here”

  • in Python zijn functies eersteklas objecten., Dit betekent dat ze kunnen worden toegewezen aan variabelen, geretourneerd van andere functies en doorgegeven aan functies. Klassen zijn ook eersteklas objecten

  • Het schrijven van Python-code is snel, maar het uitvoeren ervan is vaak langzamer dan gecompileerde talen. Gelukkig, Python maakt de opname van C gebaseerde extensies zodat knelpunten kunnen worden geoptimaliseerd weg en vaak zijn., Hetnumpy pakket is een goed voorbeeld hiervan, het is echt heel snel omdat veel van het aantal kraken dat het doet niet echt wordt gedaan door Python

  • Python vindt gebruik in vele sferen – webapplicaties, automatisering, wetenschappelijke modellering, big data applicaties en nog veel meer. Het wordt ook vaak gebruikt als “lijm” code om andere talen en componenten leuk te spelen.

  • Python maakt moeilijke dingen gemakkelijk, zodat programmeurs zich kunnen concentreren op het overschrijven van algoritmen en structuren in plaats van nitty-gritty details op laag niveau.,

waarom dit belangrijk is:

als je solliciteert naar een Python-positie, moet je weten wat het is en waarom het zo gosh-darn cool is. En waarom het niet o.o

vraag 2

vul de ontbrekende code in:

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

antwoord

speciale aandacht besteden

  • wees consistent met uw naamgevingsconventies. Als er een naamgevingsconventie duidelijk in een voorbeeld code, vasthouden aan het. Zelfs als het niet de naamgevingsconventie is, gebruikt u gewoonlijk
  • recursieve functies moeten recurseren en beëindigen., Zorg ervoor dat u begrijpt hoe dit gebeurt, zodat u bodemloze callstacks
  • vermijdt we gebruiken deos module voor interactie met het besturingssysteem op een manier die platformoverschrijdend is. Je zou kunnen zeggen sChildPath = sPath + '/' + sChild maar dat zou niet werken op windows
  • vertrouwdheid met basispakketten is echt de moeite waard, maar breek je hoofd niet proberen om alles te onthouden, Google is je vriend op de werkplek!
  • stel vragen als je niet begrijpt wat de code moet doen
  • KISS! Hou het simpel, domkop!,

waarom dit belangrijk is:

  • geeft kennis van basisinteractie van het besturingssysteem weer
  • recursie is hella nuttig

vraag 3

Als u naar de onderstaande code kijkt, noteer dan de eindwaarden van A0, A1, …An.

Als u niet weet wat zip is maak je niet druk. Geen enkele gezonde werkgever verwacht dat je de standaard bibliotheek onthoudt. Hier is de uitvoer van help(zip).

als dat niet logisch is, neem dan een paar minuten om er achter te komen hoe je dat wilt.,

antwoord

waarom dit ertoe doet

  1. begrijpend overzicht is een geweldige tijdsbesparing en een groot struikelblok voor veel mensen
  2. als je ze kunt lezen, kun je ze waarschijnlijk opschrijven
  3. sommige van deze code is opzettelijk vreemd gemaakt. Het kan nodig zijn om met vreemde mensen te werken

opdracht 4

Python en multi-threading. Is het een goed idee? Maak een lijst van enkele manieren om wat Python code te laten draaien op een parallelle manier.

antwoord

Python staat multi-threading in de ware zin van het woord niet toe., Het heeft een multi-threading pakket, maar als u wilt multi-thread om uw code te versnellen, dan is het meestal niet een goed idee om het te gebruiken. Python heeft een constructie genaamd de Global Interpreter Lock (GIL). De GIL zorgt ervoor dat slechts één van je ‘threads’ op elk moment kan uitvoeren. Een draad verwerft de GIL, doet een beetje werk, dan geeft het GIL op de volgende draad. Dit gebeurt heel snel dus voor het menselijk oog kan het lijken alsof uw threads worden uitgevoerd in parallel, maar ze zijn eigenlijk gewoon om de beurt met behulp van dezelfde CPU-kern. Al die GIL passing voegt extra kosten toe aan de executie., Dit betekent dat als je je code sneller wilt laten draaien dan is het gebruik van het threading-pakket vaak geen goed idee.

Er zijn redenen om Python ‘ s threading pakket te gebruiken. Als je sommige dingen tegelijkertijd wilt uitvoeren, en efficiëntie is geen probleem, dan is het helemaal prima en handig. Of als je code draait die moet wachten op iets (zoals sommige IO) dan kan het veel zin hebben. Maar de threading bibliotheek laat je geen extra CPU-cores gebruiken.,

Multi-threading kan worden uitbesteed aan het besturingssysteem (door multi-processing te doen), een externe toepassing die uw Python-code aanroept (bijvoorbeeld Spark of Hadoop), of een code die uw Python-code aanroept (bijvoorbeeld: u kunt uw Python-code Een c-functie laten aanroepen die de dure multi-threaded dingen doet).

waarom dit belangrijk is

omdat de GIL een A-hole is. Veel mensen besteden veel tijd aan het vinden van knelpunten in hun fancy Python multi-threaded code voordat ze leren wat de GIL is.,

opdracht 5

hoe houdt u de verschillende versies van uw code bij?

antwoord:

versiebeheer! Op dit punt zou je opgewonden moeten handelen en hen vertellen hoe je Git gebruikt (of wat je favoriet is) om correspondentie met Granny bij te houden. Git is mijn favoriete versiebeheersysteem, maar er zijn er nog meer, bijvoorbeeld subversion.

waarom dit belangrijk is:

omdat code zonder versiebeheer is als koffie zonder kop., Soms moeten we once-off weggooien scripts schrijven en dat is ok, maar als je te maken hebt met een significante hoeveelheid code, een versiebeheersysteem zal een voordeel zijn. Versiebeheer helpt bij het bijhouden van wie welke wijziging heeft aangebracht in de code base; Uitzoeken wanneer bugs werden geïntroduceerd in de code; het bijhouden van versies en releases van uw software; het verspreiden van de broncode onder teamleden; implementatie en bepaalde automatiseringen. Hiermee kunt u uw code terug te rollen naar voordat je brak het die is geweldig op zijn eigen. Veel dingen. Het is gewoon geweldig.,

Vraag 6

wat geeft deze code uit:

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

antwoord

Hu?

de eerste functie aanroep moet vrij duidelijk zijn, de lus voegt 0 en vervolgens 1 toe aan de lege lijst, l. l is een naam voor een variabele die verwijst naar een lijst die in het geheugen is opgeslagen.
De tweede aanroep begint met het aanmaken van een nieuwe lijst in een nieuw geheugenblok. l verwijst vervolgens naar deze nieuwe lijst. Het voegt dan 0, 1 en 4 toe aan deze nieuwe lijst. Dus dat is geweldig.,
De derde functie aanroep is de vreemde. Het gebruikt de originele lijst die is opgeslagen in het originele geheugenblok. Daarom begint het met 0 en 1.

probeer dit uit als je het niet begrijpt:

opdracht 7

Wat is monkey patching en is het ooit een goed idee?

antwoord

Monkey patching verandert het gedrag van een functie of object nadat het al gedefinieerd is. Bijvoorbeeld:

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

meestal is het een behoorlijk slecht idee – het is meestal het beste als dingen op een goed gedefinieerde manier werken. Een reden voor apenpatch is testen., Het modelpakket is hiervoor zeer nuttig.

waarom dit belangrijk is

Het laat zien dat u een beetje begrijpt over methodologieën in unit testing. Uw vermelding van monkey avoidance zal laten zien dat je niet een van die programmeurs die voorkeur fancy code over onderhoudbare code (ze zijn er, en ze zuigen om mee te werken). Herinner je je het principe van de kus? Het laat zien dat je een beetje weet over hoe Python werkt op een lager niveau, hoe functies daadwerkelijk worden opgeslagen en aangeroepen en dergelijke.

PS: Het is echt de moeite waard om een beetje over mock te lezen als je dat nog niet hebt gedaan. Het is vrij nuttig.,

opdracht 8

wat betekent dit: *args, **kwargs? En waarom zouden we het gebruiken?

antwoord

gebruik *args Als we niet zeker weten hoeveel argumenten aan een functie worden doorgegeven, of als we een opgeslagen lijst of een tupel van argumenten aan een functie willen doorgeven. **kwargs wordt gebruikt als we niet weten hoeveel trefwoordargumenten aan een functie worden doorgegeven, of het kan worden gebruikt om de waarden van een woordenboek door te geven als trefwoordargumenten., De identifiers args en kwargs zijn een conventie, u kunt ook *bob en **billy gebruiken, maar dat zou niet verstandig zijn.

Hier is een kleine illustratie:

waarom zorg?

soms moeten we een onbekend aantal argumenten of trefwoordargumenten doorgeven aan een functie. Soms willen we argumenten of trefwoordargumenten opslaan voor later gebruik. Soms is het gewoon een tijdsbesparing.,

Opdracht 9

Wat betekenen deze voor u: @classmethod, @staticmethod, @property?

antwoord achtergrondkennis

Dit zijn decorateurs. Een decorateur is een speciaal soort functie die ofwel een functie neemt en een functie retourneert, of een klasse neemt en een klasse retourneert. Het @ symbool is gewoon syntactische suiker waarmee je iets kunt versieren op een manier die gemakkelijk te lezen is.,

@my_decoratordef my_func(stuff): do_things

Is gelijk aan

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

u kunt hier een tutorial vinden over hoe decorateurs in het algemeen werken.

feitelijk antwoord

de decorateurs @classmethod, @staticmethod en @property worden gebruikt voor functies die binnen klassen zijn gedefinieerd. Hier is hoe ze zich gedragen:

opdracht 10

overweeg de volgende code, wat zal het uitvoeren?

antwoord

De uitvoer wordt gespecificeerd in de commentaren in het onderstaande segment:

wat maakt het uit?,

omdat OO programmeren heel, heel belangrijk is. Echt. Het beantwoorden van deze vraag toont uw begrip van overerving en het gebruik van Python ‘ s super functie. Meestal doet de volgorde van resolutie er niet toe. Soms wel, het hangt af van uw toepassing.

opdracht 11

overweeg de volgende code, wat zal het uitvoeren?

antwoord

oRoot.print_all_1() prints:

oRoot.print_all_2() prints:

Why do we care?

omdat compositie en objectconstructie is waar objecten over gaan., Objecten zijn samengesteld uit spullen en ze moeten op een of andere manier geïnitialiseerd worden. Dit verbindt ook wat dingen over recursie en het gebruik van generatoren.

generatoren zijn geweldig. U had dezelfde functionaliteit kunnen bereiken als print_all_2 door gewoon een grote lange lijst te maken en vervolgens de inhoud ervan af te drukken. Een van de leuke dingen aan generatoren is dat ze niet veel geheugenruimte nodig hebben.

Het is ook de moeite waard erop te wijzen dat print_all_1 de boom op een depth-first manier doorkruist, terwijl print_all_2 width-first is., Zorg ervoor dat je die termen begrijpt. Soms is de ene soort traversal meer geschikt dan de andere. Maar dat hangt sterk af van uw aanvraag.

opdracht 12

Beschrijf Python ‘ s garbage collection mechanism in het kort.

antwoord

Hier kan veel gezegd worden. Er zijn een paar belangrijke punten die je moet vermelden:

  • Python houdt een telling bij van het aantal verwijzingen naar elk object in het geheugen., Als een referentie Aantal naar nul gaat dan is het geassocieerde object niet meer live en het geheugen toegewezen aan dat object kan worden vrijgemaakt voor iets anders
  • soms gebeuren er dingen die “referentie cycli” worden genoemd. De garbage collector zoekt regelmatig naar deze en ruimt ze op. Een voorbeeld zou zijn als u twee objecten o1 en o2 hebt, zodat o1.x == o2 en o2.x == o1. Als o1 en o2 nergens anders naar worden verwezen, moeten ze niet live zijn., Maar elk van hen heeft een referentietelling van 1.
  • bepaalde heuristieken worden gebruikt om het ophalen van afval te versnellen. Bijvoorbeeld, recent gemaakte objecten hebben meer kans om dood te zijn. Als objecten worden gemaakt, wijst de garbage collector ze toe aan generaties. Elk object krijgt één generatie, en jongere generaties worden eerst behandeld.

deze verklaring is CPython-specifiek.

opdracht 13

plaats de volgende functies hieronder in volgorde van hun efficiëntie. Ze hebben allemaal een lijst met getallen tussen 0 en 1. De lijst kan vrij lang zijn., Een voorbeeld van een invoerlijst is . Hoe kunt u bewijzen dat uw antwoord juist is?

antwoord

meest tot minst efficiënt: f2, f1, f3. Om te bewijzen dat dit het geval is, zou je je code willen profileren. Python heeft een mooie profilering pakket dat de truc zou moeten doen.

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

omwille van de voltooiing, hier is wat het bovenstaande profiel outputs:

Why Care?

het opsporen en vermijden van knelpunten is vaak de moeite waard., Veel codering voor efficiëntie komt neer op gezond verstand – in het bovenstaande voorbeeld is het duidelijk sneller om een lijst te sorteren als het een kleinere lijst is, dus als je de keuze hebt om te filteren voor een soort is het vaak een goed idee. De minder voor de hand liggende spullen kunnen nog steeds worden gelokaliseerd door het gebruik van de juiste gereedschappen. Het is goed om te weten over deze tools.

opdracht 14

iets waar u niet in geslaagd bent?

fout antwoord

ik faal nooit!

waarom dit belangrijk is:

laat zien dat je in staat bent om fouten toe te geven, verantwoordelijkheid te nemen voor je fouten en van je fouten te leren., Al deze dingen zijn behoorlijk verdomd belangrijk als je gaat om nuttig te zijn. Als je eigenlijk perfect dan jammer, je misschien nodig hebt om creatief hier.

opdracht 15

heeft u persoonlijke projecten?

echt?

Dit toont aan dat u bereid bent om meer te doen dan het absolute minimum in termen van het up-to-date houden van uw vaardigheden. Als je werkt aan persoonlijke projecten en code buiten de werkplek dan werkgevers zijn meer kans om u te zien als een troef die zal groeien. Zelfs als ze deze vraag niet Stellen vind ik het nuttig om het onderwerp aan te snijden.,

conclusie

deze vragen hebben opzettelijk veel onderwerpen geraakt. En de antwoorden waren opzettelijk uitgebreid. In een programmeerinterview moet je je begrip tonen en als je het op een bondige manier kunt doen, doe dat dan met alle middelen. Ik probeerde genoeg informatie te geven in de antwoorden dat je enige betekenis van hen kon krijgen, zelfs als je nog nooit van sommige van deze onderwerpen eerder had gehoord. Ik hoop dat je dit nuttig vindt bij je werk zoeken.

go get ‘ em tiger.

Articles

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *