Innledning
Leter du etter et Python jobb? Sjansene er at du må bevise at du vet hvordan du arbeider med Python. Her er et par spørsmål som dekker en bred base av ferdigheter som er forbundet med Python. Fokus er lagt på språket i seg selv, og ikke noen bestemt pakke eller rammeverk. Hvert spørsmål vil være knyttet til et egnet opplæringen hvis det er ett. Noen spørsmål vil bryte opp flere emner.,
jeg har faktisk ikke vært gitt et intervju test ganske så hardt som denne, hvis du kan få til svar komfortabelt deretter går du få deg en jobb.
Hva Denne Opplæringen Er Ikke
Denne opplæringen ikke sikte på å dekke alle tilgjengelige arbeidsplassen kultur – ulike arbeidsgivere vil be deg om forskjellige spørsmål på forskjellige måter; de vil følge ulike konvensjoner; de vil verdien forskjellige ting. De vil teste deg på forskjellige måter., Noen arbeidsgivere vil sitte deg ned i fra en datamaskin, og ber deg om å løse enkle problemer; noen vil stå opp i front av en hvit bord og gjøre lignende; noen vil gi deg en ta med hjem test for å løse, og noen vil bare ha en samtale med deg.
Den beste testen for en programmerer er faktisk programmering. Dette er en vanskelig ting å teste med en enkel tutorial. Så for bonus poeng må du kontrollere at du faktisk kan bruke funksjonaliteten vist i spørsmålene., Hvis du faktisk forstår hvordan de skal få til svar godt nok til at du kan faktisk gjøre bruk av demonstrert konsepter så du vinner.
på samme måte, den beste testen for en programvare ingeniør er faktisk engineering. Denne opplæringen handler om Python som et språk. Å være i stand til å utforme effektive, effektive, stabile klasse hierarkier for å løse nisje problemer er stor og flott og ferdigheter verdt å forfølge, men godt utenfor omfanget av denne teksten.
en Annen ting denne opplæringen ikke er PEP8 kompatibel., Dette er tilsiktet som, som nevnt før, ulike arbeidsgivere vil følge ulike konvensjoner. Du må tilpasses for å passe kultur på arbeidsplassen. Fordi praktiske beats renhet.
en Annen ting denne opplæringen ikke er det, er kortfattet. Jeg ønsker ikke å bare kaste spørsmål og svar i deg og håper at noe stikker. Jeg vil at du skal få det, eller i det minste få det godt nok at du er i en posisjon til å se for ytterligere forklaringer deg selv for noe problem emner.
Ønsker å ess din tekniske intervju? Planlegge en Teknisk Intervju treningsfase med en ekspert nå!,
Spørsmål 1
Hva er Python egentlig? Du kan (og oppfordres til) å gjøre sammenligninger til andre teknologier i ditt svar
Svar
Her er noen viktige punkter:
-
Python er et tolket språk. Det betyr at, i motsetning til språk som C og dens varianter, Python trenger ikke å være utarbeidet før det kjøres. Andre tolket språk inkluderer PHP og Ruby.
-
Python er dynamisk skrevet, dette betyr at du ikke trenger å oppgi hvilke typer variabler når du erklærer dem eller noe sånt., Du kan gjøre ting som
x=111
og deretterx="I'm a string"
uten feil -
Python er godt egnet til objekt-orientert programmering i at det tillater definisjon av klasser sammen med sammensetning og arv. Python har ikke tilgang specifiers (som C++’s
public
,private
), begrunnelsen for dette punktet er gitt som «vi er alle voksne her» -
I Python, funksjoner er første-klasse-objekter., Dette betyr at de kan være tilordnet til variabler, tilbake fra andre funksjoner og gått inn funksjoner. Klasser er også første klasse objekter
-
å Skrive Python-koden er rask, men kjører det er ofte tregere enn kompilert språk. Heldigvis, Python lar inkludering av C basert utvidelser så flaskehalser kan være optimalisert unna, og ofte er.,
numpy
pakken er et godt eksempel på dette, det er egentlig ganske raskt, fordi mye av antall knaser det gjør ikke egentlig gjort av Python –– >
-
Python finner du bruke i mange sfærer – web-applikasjoner, automatisering, vitenskapelige modellering, big data, applikasjoner og mange flere. Det er også ofte brukt som «lim» – kode for å få andre språk og komponenter for å spille fin.
-
Python gjør vanskelige ting enkelt så programmerere kan fokusere på overordnede algoritmer og strukturer snarere enn kjedelige lavt nivå av detaljer.,
Hvorfor Dette er viktig:
Hvis du søker etter en Python-posisjon, bør du vite hva det er og hvorfor det er så gosh-i hvert fall kult. Og hvorfor er det ikke o.O
Spørsmål 2
Fyll ut 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
Betale Spesiell Oppmerksomhet
- Være i samsvar med din navnekonvensjoner. Hvis det er en navnekonvensjon tydelig i noen eksempel kode, holde seg til det. Selv om det er ikke naming convention du bruker vanligvis
- Rekursive funksjonene må recurse og avslutte., Sørg for at du forstår hvordan dette skjer, slik at du unngår bunnløse callstacks
- Vi bruke
os
modulen for å kommunisere med operativsystemet på en måte som er kryss-plattform. Du kan sisChildPath = sPath + '/' + sChild
men det ville ikke fungere på windows - Kjennskap til grunnpakkene er virkelig verdt, men ikke bryte hodet prøver å huske alt, Google er din venn på arbeidsplassen!
- Stille spørsmål hvis du ikke forstår hva den koden er ment å gjøre
- KYSS! Keep it Simple, Stupid!,
Hvorfor Dette er viktig:
- Viser kunnskap om grunnleggende operativsystemet samhandling ting
- Recursion er hella nyttig
Spørsmål 3
Se på nedenfor kode, skriver du ned den endelige verdier av A0, A1, …En.
Hvis du ikke vet hva zip
er ikke stress ut. Ingen forstandig arbeidsgiver vil forvente deg å huske standard bibliotek. Her er resultatet av help(zip)
.
Hvis det ikke gir mening så ta noen minutter å finne det ut uansett hvordan du velger å.,
Svar
Hvorfor Dette er viktig
- Liste forståelse er en flott tid saver og en stor snublestein for mange mennesker
- Hvis du kan lese dem, du kan sikkert skrive dem ned
- Noen av denne koden er laget for å være bevisst merkelig. Du kan få behov for å arbeide med noen rare folk
Spørsmål 4 på
Python og multi-threading. Er det en god idé? Liste opp noen måter å få noen Python-koden for å kjøre på en parallell måte.
Svar
Python tillater ikke multi-threading i den sanneste forstand av ordet., Det har en multi-threading-pakke, men hvis du ønsker å multi-tråden for å øke hastigheten på koden opp, så det er vanligvis ikke en god idé å bruke det. Python har en konstruksjon som kalles den Globale Tolk Lås (GIL). Den GIL sørger for at bare en av dine ‘tråder’ kan utføre når som helst. En tråd kjøper GIL, gjør litt arbeid, så sender GIL på neste tråd. Dette skjer svært raskt, slik at det menneskelige øye kan det virke som din tråder er kjøring i parallelle, men de er egentlig bare å ta svinger med samme CPU-kjerne. Alt dette GIL passerer legger overhead til gjennomføring., Dette betyr at hvis du ønsker å gjøre din kode til å kjøre raskere og deretter bruke threading pakken ofte ikke er en god idé.
Det er grunner til å bruke Python ‘ s threading pakken. Hvis du ønsker å kjøre noen ting samtidig, og effektivitet er ikke en bekymring, så det er helt fint og praktisk. Eller hvis du kjører koden som trenger å vente på noe (som noen IO) så kan det gjøre mye fornuftig. Men threading bibliotek vil ikke la deg bruke ekstra CPU-kjerner.,
Multi-threading kan bli outsourcet til operativsystemet (ved å gjøre multi-prosessering), noen eksterne program som kaller det Python-kode (f.eks, Gnist eller Hadoop), eller noen kode som dine Python-kode samtaler (f.eks: du kan ha din Python-kode ringe en C-funksjon som gjør det dyrt multi-threaded ting).
Hvorfor Dette er viktig
Fordi GIL er En a-hull. Mange mennesker bruker mye tid på å prøve å finne flaskehalser i sine fancy Python multi-threaded koden før de lærer hva GIL.,
Spørsmål 5
Hvordan kan du holde oversikt over ulike versjoner av koden din?
Svar:
Versjon-kontroll! På dette punktet, bør du handle spent og fortelle dem hvordan du selv bruke Git (eller hva er din favoritt) for å holde oversikt over korrespondanse med Bestemor. Git er min foretrukne versjon kontrollsystem, men det er andre, for eksempel subversion.
Hvorfor Dette er viktig:
Fordi koden versjon uten kontroll er som kaffe uten en kopp., Noen ganger trenger vi å skrive en gang-off kaste bort skript og det er ok, men hvis du arbeider med noen betydelig mengde av kode, versjonskontroll system vil være en fordel. Versjon Control hjelper deg med å holde oversikt over hvem som gjorde hva bytt til koden base; å finne ut når feil ble introdusert til kode, holde oversikt over versjoner og utgaver av programvaren; distribuere kildekoden blant medlemmene i teamet; distribusjon og visse automations. Det tillater deg å rulle koden din tilbake til før du brøt det som er flott på sin egen. Massevis av ting. Det er bare flott.,
Spørsmål 6
Hva gjør denne koden utgang:
def f(x,l=): for i in range(x): l.append(i*i) print(l) f(2)f(3,)f(3)
Svar
Hu?
Den første funksjonen samtale bør være ganske åpenbart, løkken legger inn 0, og deretter 1 til tom liste, l
. l
er navnet på en variabel som peker til en liste som er lagret i minnet.
Den andre samtalen starter med å opprette en ny liste i en ny blokk med minne. l
viser til denne nye listen. Det så føyer 0, 1 og 4 til denne nye listen. Så det er flott.,
Den tredje funksjonen samtale er merkelig ett. Den bruker den opprinnelige listen som er lagret i det opprinnelige minnet blokk. Det er derfor det starter med 0 og 1.
Prøv ut dette dersom du ikke forstår:
Spørsmål 7
Hva er monkey lapp og er det aldri en god idé?
Svar
Monkey lapp er å endre adferd for en funksjon eller objekt etter det har allerede blitt definert. For eksempel:
import datetimedatetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)
de Fleste av den tid det er en ganske forferdelig idé – det er vanligvis best hvis ting handle på en veldefinert måte. En grunn til monkey patch ville være i testing., Mock-pakken er svært nyttig for dette formålet.
Hvorfor Dette er viktig
Det viser at du forstår litt om metoder i unit testing. Din omtale av monkey unngå å vise at du ikke er en av dem programmerere som favoriserer fancy koden over å vedlikeholde kode (de er der, og de suger til å jobbe med). Husk prinsippet om KYSS? Og det viser at du vet litt om hvordan Python fungerer på et lavere nivå, hvor funksjonene er faktisk lagret, og ringte og suchlike.
PS: det er virkelig verdt å lese litt om mock hvis du ennå ikke har. Det er ganske nyttig.,
Spørsmål 8
Hva betyr dette ting som betyr: *args
, **kwargs
? Og hvorfor skulle vi bruke det?
Svar
Bruk *args
når vi ikke er sikker på hvor mange argumenter kommer til å bli sendt til en funksjon, eller hvis vi ønsker å sende en lagret liste eller tuple av argumentene til en funksjon. **kwargs
brukes når vi vet ikke hvor mange søkeord argumenter vil bli sendt til en funksjon, eller den kan brukes til å sende verdiene av en ordbok som søkeord argumenter., Den identifikatorer args
og kwargs
er en konvensjon, kan du også bruke *bob
og **billy
men det ville ikke være lurt.
Her er en liten illustrasjon:
Hvorfor Bryr seg?
noen Ganger trenger vi å passere et ukjent antall argumenter eller søkeord argumenter i en funksjon. Noen ganger vil vi ønsker å lagre argumenter eller søkeord argumenter for senere bruk. Noen ganger er det bare en tid saver.,
Spørsmål 9
Hva disse betyr for deg: @classmethod
, @staticmethod
, @property
?
Svar bakgrunnskunnskap
Dette er dekoratører. En decorator er en spesiell type av funksjon som enten tar en funksjon og returnerer en funksjon, eller tar en klasse, og returnerer en klasse. @
symbolet er bare syntaktisk sukker som gir deg muligheten til å dekorere noe på en måte som er lett å lese.,
@my_decoratordef my_func(stuff): do_things
tilsvarer
def my_func(stuff): do_thingsmy_func = my_decorator(my_func)
Du kan finne en tutorial på hvordan dekoratører generelt arbeid her.
Faktisk Svar
dekoratører @classmethod
, @staticmethod
og @property
brukes på funksjoner som er definert i klasser. Her er hvordan de oppfører seg:
Spørsmål 10
bør du Vurdere følgende kode, hva vil det utgang?
Svar
output er angitt i kommentarene i segmentet nedenfor:
Hvorfor bryr vi oss?,
Fordi OO-programmering er veldig, veldig viktig. Virkelig. Å svare på dette spørsmålet viser din forståelse av arv og bruk av Python ‘ s super
funksjon. Mesteparten av tiden for oppløsning spiller ingen rolle. Noen ganger er det ikke, det kommer an på din søknad.
Spørsmål 11
bør du Vurdere følgende kode, hva vil det utgang?
Svar
oRoot.print_all_1()
skriver:
oRoot.print_all_2()
skriver:
Hvorfor bryr vi oss?
Fordi sammensetning og objekt konstruksjon er hva objekter er alle om., Gjenstander som er sammensatt av ting, og de trenger å bli initialisert eller annen måte. Dette knytter også opp noen ting om recursion og bruk av generatorer.
Generatorer er stor. Du kunne ha oppnådd lignende funksjonalitet til print_all_2
bare ved å bygge en stor lang liste og deretter skrive ut det innholdet. En av de fine ting om generatorer er at de ikke trenger å ta opp for mye plass i minnet.
Det er også verdt å peke på at print_all_1
beveger seg rundt i et tre i et dybde-først måte, mens print_all_2
er bredde-først., Sørg for at du forstår disse vilkårene. Noen ganger en slags traversal er mer riktig enn den andre. Men det avhenger veldig mye på din søknad.
Spørsmål 12
Beskrive Python ‘ s «garbage collection» – mekanismen i korte trekk.
Svar
mye kan sies her. Det er et par viktigste punktene som du bør nevne:
- Python opprettholder en opptelling av antall referanser til hvert objekt i minnet., Hvis en referanse count går til null og deretter de tilhørende objektet er ikke lenger leve og minne som er allokert til at objektet kan bli frigjort for noe annet
- noen ganger ting kalt «referanse-sykluser» skje. Garbage collector med jevne mellomrom ser ut for disse og renser dem opp. Et eksempel kan være hvis du har to objekter
o1
ogo2
slik ato1.x == o2
ogo2.x == o1
. Hviso1
ogo2
er ikke referert til av noe annet, så bør de ikke være i live., Men hver av dem har en referanse verdien 1. - Viss heuristikk er brukt til å fremskynde garbage collection. For eksempel nylig opprettet objekter er mer sannsynlig å være død. Som objekter som er opprettet, garbage collector tilordner dem til å generasjoner. Hvert objekt får en generasjon, og yngre generasjoner er delt ut med det første.
Denne forklaringen er CPython bestemt.
Spørsmål 13
Sted følgende funksjoner nedenfor for sin effektivitet. De alle tar i en liste av tall mellom 0 og 1. Listen kan bli ganske lang., Et eksempel input-listen ville være . Hvordan ville du bevise at svaret er riktig?
Svar
Mest til minst effektiv: f2
, f1
, f3
. For å bevise at dette er tilfelle, vil du ønsker å profilere din kode. Python har en nydelig profilering pakke som skal gjøre susen.
import cProfilelIn = cProfile.run('f1(lIn)')cProfile.run('f2(lIn)')cProfile.run('f3(lIn)')
For ferdigstillelse skyld, her er hva ovenfor profil utganger:
Hvorfor Bryr seg?
Finne og unngå flaskehalser er ofte ganske verdt., Mye av koding for effektivitet kommer ned til sunn fornuft – i eksemplet over, er det åpenbart raskere å sortere en liste hvis det er en mindre liste, så hvis du har valget av filtrering før en form det er ofte en god idé. De mindre åpenbare ting kan fortsatt bli plassert gjennom bruk av riktig verktøy. Det er godt å vite om disse verktøyene.
Spørsmål 14
Noe du ikke klarte på?
Feil svar
jeg aldri svikte!
Hvorfor Dette Er Viktig:
Viser at du er i stand til å innrømme feil, ta ansvar for dine feil, og lære av dine feil., Alle disse tingene er ganske darn viktig hvis du er kommer til å være nyttig. Hvis du er faktisk perfekt da altfor ille, du trenger for å få kreative her.
Spørsmål 15
har du noen personlige prosjekter?
Egentlig?
Dette viser at du er villig til å gjøre mer enn minimum i form av å holde din kompetanse opp til dags dato. Hvis du arbeider på personlige prosjekter og kode utenfor arbeidsplassen deretter arbeidsgivere er mer sannsynlig å se deg som en ressurs som vil vokse. Selv om de ikke spør dette spørsmålet finner jeg det nyttig å broach emnet.,
Konklusjon
Disse spørsmålene med vilje berørt på mange emner. Og svarene var med vilje detaljert. I en programmerings-intervju, vil du trenger for å demonstrere din forståelse og hvis du kan gjøre det på en konsis måte så for all del gjøre det. Jeg prøvde å gi nok informasjon i svarene at du kan fange opp noen mening fra dem, selv om du aldri hadde hørt om noen av disse temaene før. Jeg håper du finner dette nyttig i jobben din jakt.
Go get ’em tiger.