introduktion

Leder du efter en Python job? Chancerne er du bliver nødt til at bevise, at du ved, hvordan man arbejder med Python. Her er et par spørgsmål, der dækker en bred base af færdigheder forbundet med Python. Fokus er placeret på selve sproget, og ikke nogen bestemt pakke eller ramme. Hvert spørgsmål vil blive knyttet til en passende tutorial, hvis der er en. Nogle spørgsmål vil afslutte flere emner.,

Jeg har faktisk ikke fået en intervie .test lige så hård som denne, hvis du kan komme til svarene komfortabelt, så gå få dig et job.

hvad denne vejledning ikke er

denne vejledning sigter ikke mod at dække enhver tilgængelig arbejdspladskultur – forskellige arbejdsgivere vil stille dig forskellige spørgsmål på forskellige måder; de vil følge forskellige konventioner; de vil værdsætte forskellige ting. De vil teste dig på forskellige måder., Nogle arbejdsgivere vil sætte dig ned fra en computer og bede dig om at løse enkle problemer; nogle vil stå dig op foran en hvid tavle og gøre lignende; nogle vil give dig en tage hjem test for at løse; nogle vil bare have en samtale med dig.

den bedste test for en programmør er faktisk programmering. Dette er en vanskelig ting at teste med en simpel tutorial. Så for bonuspoint skal du sørge for, at du faktisk kan bruge den funktionalitet, der er demonstreret i spørgsmålene., Hvis du rent faktisk forstår at komme til svarene godt nok, at du rent faktisk kan gøre brug af de demonstrerede begreber, så vinder du.

tilsvarende er den bedste test for en soft .areingeniør faktisk engineering. Denne tutorial handler om Python som et sprog. At være i stand til at designe effektive, effektive, vedligeholdelige klassehierarkier til løsning af nicheproblemer er stort og vidunderligt og et færdighedssæt værd at forfølge, men langt ud over denne tekst.

en anden ting, denne tutorial ikke er, er PEP8-kompatibel., Dette er tilsigtet som, som nævnt før, forskellige arbejdsgivere vil følge forskellige konventioner. Du bliver nødt til at tilpasse sig til at passe kulturen på arbejdspladsen. Fordi praktisk slår renhed.

en anden ting, denne tutorial ikke er, er kortfattet. Jeg vil ikke bare kaste spørgsmål og svar på dig og håbe, at noget stikker. Jeg vil have dig til at få det, eller i det mindste få det godt nok, at du er i stand til selv at søge yderligere forklaringer på eventuelle problememner.

vil du ace din tekniske intervie?? Planlæg en teknisk Intervie!praksis Session med en ekspert nu!,

spørgsmål 1

Hvad er Python virkelig? Du kan (og opfordres til) at foretage sammenligninger med andre teknologier i dit svar

Svar

Her er et par vigtige punkter:

  • Python er et fortolket sprog. Det betyder, at Python i modsætning til sprog som C og dens varianter ikke behøver at blive kompileret, før den køres. Andre tolkede sprog omfatter PHP og Ruby.

  • Python er dynamisk indtastet, det betyder, at du ikke behøver at angive typerne af variabler, når du erklærer dem eller noget lignende., Du kan gøre ting som x=111 og derefter x="I'm a string" uden fejl

  • Python er velegnet til objekt orienteret programmering i, at det giver mulighed for definition af klasser sammen med komposition og arv. Python ikke har adgang beregnere (som C++’s public private), begrundelsen for dette punkt er angivet som “vi er alle voksne her”

  • I Python, funktioner, der er første klasses objekter., Dette betyder, at de kan tildeles variabler, returneres fra andre funktioner og overføres til funktioner. Klasser er også førsteklasses objekter

  • skrivning Python kode er hurtig, men kører det er ofte langsommere end kompilerede sprog. Heldigvis pyth Python tillader optagelse af C-baserede udvidelser, så flaskehalse kan optimeres væk og ofte er., numpy pakke er et godt eksempel på dette, det er virkelig ganske hurtigt, fordi en masse af de talknusning det gør faktisk ikke gjort af Python

  • Python finder anvendelse i mange områder – web-applikationer, automatisering, videnskabelig modellering, big data, applikationer og mange flere. Det bruges også ofte som” lim ” kode for at få andre sprog og komponenter til at spille godt.

  • Python gør vanskelige ting let, så programmører kan fokusere på overordnede algoritmer og strukturer i stedet for nitty-gritty detaljer på lavt niveau.,

hvorfor dette betyder noget:

Hvis du ansøger om en Python-stilling, skal du vide, hvad det er, og hvorfor det er så gosh-darn cool. Og hvorfor er det ikke o.O

Spørgsmål 2

Udfyld de manglende kode:

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

Svar

vær Særlig Opmærksom

  • Være i overensstemmelse med din navngivning. Hvis der er en navnekonvention, der er tydelig i en prøvekode, skal du holde dig til den. Selvom det ikke er den navnekonvention, du normalt bruger
  • rekursive funktioner, skal rekursere og afslutte., Sørg for, at du forstår, hvordan dette sker, så du undgår bundløse callstacks
  • Vi bruger os – modulet til at interagere med operativsystemet på en måde, der er tværplatform. Man kan sige sChildPath = sPath + '/' + sChild men det ville ikke arbejde på windows
  • Fortrolighed med base pakker er virkelig umagen værd, men ikke bryde dit hoved forsøger at huske alt, Google er din ven på arbejdspladsen!
  • Stil spørgsmål, Hvis du ikke forstår, hvad koden skal gøre
  • kys! Hold det simpelt, dumt!,

Hvorfor Dette Spørgsmål:

  • Viser kendskab til grundlæggende operativsystem interaktion ting
  • Rekursion er hella nyttige

Spørgsmål 3

Kigger på nedenstående kode, kan du skrive den endelige værdier af A0, A1, …An.

Hvis du ikke ved, hvad zip er ikke stress ud. Ingen fornuftig arbejdsgiver forventer, at du husker standardbiblioteket. Her er output fra help(zip).

Hvis det ikke giver mening, så tag et par minutter at finde ud af det, men du vælger det.,

Svar

Hvorfor Dette Spørgsmål

  1. Liste forståelse er en vidunderlig tid pauseskærm og en stor anstødssten for mange mennesker
  2. Hvis du kan læse dem, kan du nok skrive dem ned
  3. Nogle af denne kode er lavet til at være bevidst underligt. Du skal muligvis arbejde med nogle underlige mennesker

spørgsmål 4

Python og multi-threading. Er det en god id?? Liste nogle måder at få nogle Python kode til at køre på en parallel måde.

svar

Python tillader ikke multi-threading i ordets rigtige forstand., Den har en multi-threading-pakke, men hvis du vil multi-thread for at fremskynde din kode, er det normalt ikke en god ide at bruge den. Python har en konstruktion kaldet Global Interpreter Lock (GIL). GIL sørger for, at kun en af dine ‘tråde’ kan udføre på et hvilket som helst tidspunkt. En tråd køber GIL, gør lidt arbejde, så passerer GIL på den næste tråd. Dette sker meget hurtigt, så for det menneskelige øje kan det virke som om dine tråde udføres parallelt, men de skifter virkelig bare ved hjælp af den samme CPU-kerne. Alt dette GIL passerer tilføjer overhead til henrettelse., Det betyder, at hvis du ønsker at gøre din kode køre hurtigere derefter bruge threading pakke ofte er ikke en god id..

Der er grunde til at bruge Pythons threading-pakke. Hvis du vil køre nogle ting samtidigt, og effektivitet ikke er en bekymring, så er det helt fint og praktisk. Eller hvis du kører kode, der skal vente på noget (som nogle IO), så kan det give meget mening. Men trådbiblioteket lader dig ikke bruge ekstra CPU-kerner.,

Multi-threading kan outsources til operativsystemet (ved at gøre multi-processing), nogle eksterne program, der opfordrer dine Python-kode (f.eks, en Gnist eller Hadoop), eller noget kode, som dine Python-kode opkald (f.eks: du kunne have dine Python-kode kalde en C-funktion, der gør det dyrt multi-threaded ting).

hvorfor dette betyder noget

fordi GIL er et A-hul. Masser af mennesker bruger en masse tid på at forsøge at finde flaskehalse i deres fancy Python multi-threaded kode, før de lærer, hvad GIL er.,

spørgsmål 5

hvordan holder du styr på forskellige versioner af din kode?

svar:

versionskontrol! På dette tidspunkt skal du handle ophidset og fortælle dem, hvordan du endda bruger Git (eller hvad der er din favorit) til at holde styr på korrespondance med bedstemor. Git er mit foretrukne versionsstyringssystem, men der er andre, for eksempel subversion.

hvorfor dette betyder noget:

fordi kode uden versionskontrol er som kaffe uden kop., Nogle gange er vi nødt til at skrive en gang-off smide scripts, og det er ok, men hvis du har at gøre med en betydelig mængde kode, vil et versionsstyringssystem være en fordel. Versionskontrol hjælper med at holde styr på, hvem der har foretaget en ændring af kodebasen; finde ud af, hvornår fejl blev introduceret til koden; holde styr på versioner og udgivelser af din Soft .are; distribuere kildekoden blandt teammedlemmer; implementering og visse automatiseringer. Det giver dig mulighed for at rulle din kode tilbage til, før du brød den, hvilket er fantastisk på egen hånd. Masser af ting. Det er bare fantastisk.,

Spørgsmål 6

Hvad betyder denne kode output:

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

Svar

Hu?

det første funktionsopkald skal være ret indlysende, sløjfen tilføjer 0 og derefter 1 til den tomme liste, l. l er et navn på en variabel, der peger på en liste, der er gemt i hukommelsen.
det andet opkald starter ved at oprette en ny liste i en ny hukommelsesblok. l henviser derefter til denne nye liste. Det tilføjer derefter 0, 1 og 4 til denne nye liste. Så det er godt.,
det tredje funktionskald er det underlige. Den bruger den originale liste, der er gemt i den originale hukommelsesblok. Derfor starter det med 0 og 1.

prøv dette, hvis du ikke forstår:

spørgsmål 7

Hvad er monkey patching og er det nogensinde en god ide?

svar

Monkey patching ændrer en funktions eller objekts adfærd, efter at den allerede er defineret. For eksempel:

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

det meste af tiden er det en temmelig forfærdelig ID. – det er normalt bedst, hvis tingene fungerer på en veldefineret måde. En grund til at abe patch ville være i test., Mock-pakken er meget nyttig til dette formål.

hvorfor dette betyder noget

det viser, at du forstår lidt om metoder i enhedstest. Din omtale af monkey undgåelse vil vise, at du ikke er en af de kodere, der favoriserer fancy kode over vedligeholdelig kode (de er derude, og de sutter at arbejde med). Husk princippet om kys? Og det viser, at du ved lidt om, hvordan Python fungerer på et lavere niveau, hvordan funktioner faktisk gemmes og kaldes og lignende.

PS: Det er virkelig værd at læse lidt om mock, hvis du endnu ikke har gjort det. Det er ret nyttigt.,

spørgsmål 8

Hvad betyder dette: *args, **kwargs? Og hvorfor skulle vi bruge det?

svar

brug *args når vi ikke er sikre på, hvor mange argumenter der skal overføres til en funktion, eller hvis vi vil videregive en gemt liste eller tuple af argumenter til en funktion. **kwargs bruges, når vi ikke ved, hvor mange søgeordsargumenter der vil blive videregivet til en funktion, eller det kan bruges til at videregive værdierne i en ordbog som søgeordsargumenter., Den identifikatorer args og kwargs er en konvention, kan du også bruge *bob og **billy, men det ville ikke være klogt.

Her er en lille illustration:

hvorfor pleje?

Nogle gange bliver vi nødt til at overføre et ukendt antal argumenter eller søgeordsargumenter til en funktion. Nogle gange vil vi gerne gemme argumenter eller nøgleordsargumenter til senere brug. Nogle gange er det bare en tidsbesparelse.,

Spørgsmål 9

Hvad disse betyder for dig: @classmethod @staticmethod @property?

svar baggrund viden

disse er dekoratører. En dekoratør er en særlig form for funktion, der enten tager en funktion og returnerer en funktion, eller tager en klasse og returnerer en klasse. @ symbolet er bare syntaktisk sukker, der giver dig mulighed for at dekorere noget på en måde, der er let at læse.,

@my_decoratordef my_func(stuff): do_things

svarer til

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

Du kan finde en vejledning om, hvordan dekoratører i generelle arbejde her.

faktisk svar

dekoratørerne@classmethod,@staticmethodog@property bruges på funktioner defineret inden for klasser. Her er hvordan de opfører sig:

spørgsmål 10

overvej følgende kode, hvad vil den udsende?

svar

udgangen er angivet i kommentarerne i segmentet nedenfor:

Hvorfor er vi interesserede?,

fordi oo programmering er virkelig, virkelig vigtigt. Virkelig. Besvarelse af dette spørgsmål viser din forståelse af arv og brugen af Pythons super funktion. Det meste af tiden er rækkefølgen af opløsning ligegyldigt. Nogle gange gør det, det afhænger af din ansøgning.

spørgsmål 11

overvej følgende kode, hvad vil den udsende?

Svar

oRoot.print_all_1() udskriver:

oRoot.print_all_2() udskriver:

Hvorfor skal vi bekymre os?

fordi sammensætning og objekt konstruktion er, hvad objekter handler om., Objekter er sammensat af ting, og de skal initialiseres på en eller anden måde. Dette binder også nogle ting om rekursion og brug af generatorer.generatorer er gode. Du kunne have opnået lignende funktionalitet til print_all_2 ved blot at konstruere en stor lang liste og derefter udskrive dens indhold. En af de gode ting ved generatorer er, at de ikke behøver at tage meget plads i hukommelsen.

Det er også værd at påpege, at print_all_1 krydser træet i dybde-først-måde, samtidig med print_all_2 er bredde-først., Sørg for at du forstår disse vilkår. Nogle gange er en slags traversal mere passende end den anden. Men det afhænger meget af din ansøgning.

spørgsmål 12

beskriv Pythons affaldsindsamlingsmekanisme kort.

svar

meget kan siges her. Der er et par hovedpunkter, som du bør nævne:

  • Python opretholder en optælling af antallet af referencer til hvert objekt i hukommelsen., Hvis et referencetælling går til nul, er det tilknyttede objekt ikke længere levende, og hukommelsen, der er tildelt det objekt, kan frigøres for noget andet
  • lejlighedsvis sker ting, der kaldes “referencecyklusser”. Affaldsopsamleren ser regelmæssigt efter disse og renser dem op. Et eksempel ville være, hvis du har to objekter o1 og o2 sådan, at o1.x == o2 og o2.x == o1. Hvis o1 ogo2 ikke refereres til af noget andet, bør de ikke være live., Men hver af dem har et referencetal på 1.
  • visse heuristikker bruges til at fremskynde affaldssamling. For eksempel er nyligt oprettede objekter mere tilbøjelige til at være døde. Når objekter oprettes, tildeler affaldsopsamleren dem til generationer. Hvert objekt får en generation, og yngre generationer behandles først.

denne forklaring er CPython specifik.

spørgsmål 13

Placer følgende funktioner nedenfor i rækkefølge efter deres effektivitet. De tager alle en liste over tal mellem 0 og 1. Listen kan være ret lang., Et eksempel input liste ville være . Hvordan vil du bevise, at dit svar er korrekt?

Svar

Mest til de mindst effektive: f2 f1 f3. For at bevise, at dette er tilfældet, du ønsker at profilere din kode. Python har en dejlig profilering pakke, der skal gøre det trick.

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

for færdiggørelse skyld, Her er hvad ovenstående profil udgange:

hvorfor pleje?

lokalisering og undgå flaskehalse er ofte ret umagen værd., En masse kodning for effektivitet kommer til fornuft – i eksemplet ovenfor er det naturligvis hurtigere at sortere en liste, hvis det er en mindre liste, så hvis du har mulighed for filtrering, før en slags, er det ofte en god idé. De mindre indlysende ting kan stadig være placeret ved brug af de rigtige værktøjer. Det er godt at vide om disse værktøjer.

spørgsmål 14

noget du mislykkedes på?

forkert svar

jeg fejler aldrig!

Hvorfor Dette Er Vigtigt:

Viser, at du er i stand til at indrømme fejl, at tage ansvar for dine fejl, og lære af dine fejl., Alle disse ting er temmelig darn vigtigt, hvis du vil være nyttigt. Hvis du er faktisk perfekt derefter alt for dårlig, du måske nødt til at få kreative her.

spørgsmål 15

har du nogen personlige projekter?

virkelig?

Dette viser, at du er villig til at gøre mere end det blotte minimum med hensyn til at holde din færdighed opdateret. Hvis du arbejder på personlige projekter og kode uden for arbejdspladsen, er det mere sandsynligt, at arbejdsgivere ser dig som et aktiv, der vil vokse. Selvom de ikke stiller dette spørgsmål, finder jeg det nyttigt at drøfte emnet.,

konklusion

disse spørgsmål berørte med vilje mange emner. Og svarene var bevidst verbose. I et programmeringsintervie.skal du demonstrere din forståelse, og hvis du kan gøre det på en kortfattet måde, så gør det på alle måder. Jeg forsøgte at give nok information i svarene, at du kunne hente en mening fra dem, selvom du aldrig havde hørt om nogle af disse emner før. Jeg håber du finder dette nyttigt i din jobjagt.

go get ‘ em tiger.

Articles

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *