Introduction
Looking for a Python job? Mahdollisuudet ovat sinun täytyy todistaa, että osaat työskennellä Python. Tässä pari kysymystä, jotka kattavat laajan Pythoniin liittyvän taitopohjan. Keskitytään itse kieleen, eikä mihinkään tiettyyn pakettiin tai kehykseen. Jokainen kysymys liittyy sopiva opetusohjelma, jos on yksi. Jotkut kysymykset käärivät useita aiheita.,
– en ole itse ollut antanut haastattelun testi aivan yhtä kovaa kuin tämä yksi, jos voit saada vastauksia mukavasti sitten hae itsellesi työpaikka.
Mitä Tämä Opetusohjelma ei Ole
Tämä opetusohjelma ei ole tarkoitus kattaa kaikki saatavilla työpaikan kulttuuri – eri työnantajien kysyy eri kysymyksiä eri tavoin; he seuraavat eri yleissopimukset; he arvostavat eri asioita. He testaavat sinua eri tavoin., Jotkut työnantajat istuvat sinut alas alkaen tietokoneen ja pyytää sinua ratkaisemaan yksinkertaisia ongelmia; joku seisoo edessä valkoinen lauta ja tehdä samanlaisia; jotkut antaa sinulle kotiin testi ratkaisemiseksi; jotkut vain keskustella kanssasi.
ohjelmoijan paras testi on oikeastaan ohjelmointi. Tämä on vaikea asia testata yksinkertaisella opetusohjelma. Joten bonuspisteitä varmista, että voit todella käyttää toiminnallisuutta osoitettu kysymyksissä., Jos todella ymmärtää, miten saada vastauksia tarpeeksi hyvin, että voit itse käyttää osoittaneet käsitteitä, sitten olet voittanut.
vastaavasti ohjelmistoinsinöörin paras testi on itse asiassa tekniikka. Tämä opetusohjelma kertoo Pythonista kielenä. Kyky suunnitella tehokkaita, tehokkaita, ylläpidettävissä luokan hierarkiat ratkaista kapealla ongelmia on suuri ja ihana ja taito asettaa tavoittelemisen arvoinen, mutta paljon soveltamisalan ulkopuolella tämän tekstin.
toinen asia tämä opetusohjelma ei ole PEP8-yhteensopiva., Tämä on tarkoituksellista, sillä kuten edellä mainittiin, eri työnantajat noudattavat erilaisia sopimuksia. Sinun on sopeuduttava vastaamaan työpaikan kulttuuria. Käytännöllisyys voittaa puhtauden.
toinen asia tämä opetusohjelma ei ole ytimekäs. En halua vain heittää kysymyksiä ja vastauksia ja toivoa, että jokin tarttuu. Haluan, että saat sen, tai ainakin saada sitä tarpeeksi hyvin, että olet voinut etsiä lisäselvityksiä itse mitään ongelmaa aiheita.
Haluatko ässän tekniseen haastatteluun? Järjestä tekninen Haastattelutunti asiantuntijan kanssa nyt!,
kysymys 1
mikä Python oikeasti on? Voit (ja on suositeltavaa) tehdä vertailuja muiden teknologioiden vastaus
Vastaus
Tässä on muutamia keskeisiä kohtia:
-
Python on tulkittava kieli. Tämä tarkoittaa sitä, että toisin kuin C: n ja sen varianttien kaltaiset kielet, Pythonia ei tarvitse koota ennen sen ajamista. Muita tulkittuja kieliä ovat muun muassa PHP ja Ruby.
-
Python kirjoitetaan dynaamisesti, mikä tarkoittaa, että muuttujien tyyppejä ei tarvitse ilmoittaa, kun ne ilmoittaa tai mitään vastaavaa., Voit tehdä asioita, kuten
x=111
jax="I'm a string"
ilman virhe -
Python sopii hyvin oliopohjaiset ohjelmointi siinä, että se mahdollistaa määritelmä luokat yhdessä koostumus ja perintö. Python ei ole pääsyä suunnittelijat (kuten C++’s
public
,private
), perustelu tämä kohta on esitetty seuraavasti: ”olemme kaikki aikuisia täällä” -
Python, toiminnot ovat ensimmäisen luokan esineitä., Tämä tarkoittaa, että ne voidaan määrittää muuttujat, palasi muut toiminnot ja siirtyi toimintoja. Luokat ovat myös ensimmäisen luokan objekteja
-
Python-koodin kirjoittaminen on nopeaa, mutta sen juokseminen on usein hitaampaa kuin kootut kielet. Onneksi healthy Python mahdollistaa C-pohjaisten laajennusten sisällyttämisen, joten pullonkaulat voidaan optimoida pois ja usein ovat.,
numpy
paketti on hyvä esimerkki tästä, se on todella melko nopeasti, koska paljon määrä murskaukseen se ei ole oikeastaan tehnyt Python -
Python saa käyttää monilla aloilla – web-sovelluksia, automaatio -, tieteellinen mallintaminen, big data sovelluksia ja paljon muuta. Sitä käytetään myös usein ”liima” – koodina, jotta muut kielet ja komponentit voivat pelata mukavia.
-
Python tekee vaikeita asioita helppoa, joten ohjelmoijat voivat keskittyä ensisijainen algoritmit ja rakenteet sijaan nitty-gritty alhainen yksityiskohtia.,
Miksi Tämä on Väliä:
Jos haet Python-asennossa, sinun pitäisi tietää, mitä se on ja miksi se on niin himputin hienoja. Ja miksi se ei o.O
Kysymys 2
Täyttää puuttuvat koodi:
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
Vastaus
Kiinnitä Erityistä Huomiota
- Ole johdonmukainen teidän nimeämiskäytäntöjä. Jos jossakin näytekoodissa näkyy nimeämistapa, pitäydy siinä. Vaikka kyseessä ei olisikaan nimeämiskäytäntö, sinun tulee yleensä käyttää
- rekursiivisia funktioita rekursiivisesti ja lopettaa ne., Varmista, että olet ymmärtää, miten tämä tapahtuu niin, että voit välttää pohjaton callstacks
- käytämme
os
moduuli vuorovaikutuksessa käyttöjärjestelmän kanssa tavalla, joka on cross platform. Voisi sanoa,sChildPath = sPath + '/' + sChild
mutta se ei toimi windows - Perehtyneisyys pohja paketteja on todella arvokas, mutta älä rikkoa pään yrittää muistaa kaiken, Google on ystäväsi työpaikalla!
- kysy kysymyksiä, Jos et ymmärrä, mitä koodin kuuluu tehdä
- KISS! Pidä se yksinkertaisena, typerys!,
Miksi Tämä on Väliä:
- Näyttää perustiedot käyttöjärjestelmän vuorovaikutus juttuja
- Rekursio on hella hyödyllisiä
3. Kysymys
Katsomalla alla oleva koodi, kirjoita lopulliset arvot A0, A1, …An.
Jos et tiedä mitä zip
älä stressi pois. Yksikään tervejärkinen työnantaja ei odota sinun muistavan tavallista kirjastoa ulkoa. Tässä on tuotos help(zip)
.
Jos siinä ei ole järkeä, niin kestää muutaman minuutin selvittää se miten päätät.,
Vastaus
Miksi Tällä on Väliä
- Luettelo ymmärtäminen on ihana aikaa säästyy ja iso kompastuskivi on paljon ihmisiä
- Jos et voi lukea niitä, voit ehkä kirjoittaa ne ylös
- tästä koodista tehtiin tarkoituksella outoa. Saatat joutua työskentelemään joidenkin outojen ihmisten kanssa
kysymys 4
Python ja multi-threading. Onko se hyvä idea? Luettele joitakin tapoja saada jokin Python-koodi toimimaan rinnakkain.
Vastaus
Python ei salli multi-threading-sanan varsinaisessa merkityksessä., Siinä on multi-threading paketti, mutta jos haluat multi-thread nopeuttaa koodin, niin se ei yleensä ole hyvä idea käyttää sitä. Pythonilla on konstruktio nimeltä Global Interpreter Lock (GIL). GIL varmistaa, että vain yksi ”langoista” voi suorittaa milloin tahansa. Lanka hankkii GIL, tekee hieman työtä, sitten siirtää GIL seuraavalle langalle. Tämä tapahtuu hyvin nopeasti, joten ihmissilmälle voi tuntua siltä, että langat suoritetaan rinnakkain, mutta ne ovat todella vain vuorotellen käyttäen samaa CPU-ydintä. Kaikki tämä GIL kulkee lisää yläpuolella teloitus., Tämä tarkoittaa, että jos haluat saada koodin toimimaan nopeammin sitten käyttämällä kierteityspaketti usein ei ole hyvä idea.
Pythonin kierteityspakettia on syytä käyttää. Jos haluat suorittaa joitakin asioita samanaikaisesti, ja tehokkuus ei ole huolta, niin se on täysin hieno ja kätevä. Tai jos olet käynnissä koodi, joka täytyy odottaa jotain (kuten jotkut IO) niin se voisi olla paljon järkeä. Mutta threading kirjasto ei anna sinun käyttää ylimääräisiä CPU ydintä.,
Multi-ketjuttaminen voi olla ulkoistettu käyttöjärjestelmän (tekemällä multi-processing), jokin ulkoinen sovellus, joka kutsuu Python-koodi (esim. Kipinä tai Hadoop), tai joitakin koodi, joka teidän Python-koodin puhelut (esim: sinulla voisi olla teidän Python-koodin soittaa C-toiminto, joka tekee kalliita multi-kierteitetyt tavarat).
miksi tällä on merkitystä
koska GIL on A-Reikä. Monet ihmiset viettävät paljon aikaa yrittää löytää pullonkaulat niiden fancy Python monisäikeinen koodi, ennen kuin he oppivat, mitä GIL on.,
kysymys 5
miten koodisi eri versioita seurataan?
vastaus:
versionhallinta! Tässä vaiheessa, sinun pitäisi toimia innoissaan ja kerro, miten voit jopa käyttää Git (tai mikä on suosikki) seurata kirjeenvaihto Mummo. Git on ensisijainen versionhallintajärjestelmäni, mutta on muitakin, esimerkiksi subversion.
Miksi Tämä on Väliä:
Koska koodi ilman versionhallinta on kuin kahvi ilman kuppi., Joskus meidän täytyy kirjoittaa kerran-pois heittää pois skriptit ja se on ok, mutta jos olet tekemisissä mitään merkittäviä määrä koodia, version control system on hyötyä. Versionhallinta auttaa pitämään kirjaa siitä, kuka teki mitä muutoksia koodiin; selvittää, kun vikoja on otettu käyttöön, jotta koodi; pitää kirjaa versioita ja julkaisuja oman ohjelmisto; jakaa lähdekoodia keskuudessa tiimin jäsenet, käyttöönotto ja tiettyjen automations. Sen avulla voit vierittää koodin takaisin ennen kuin mursit sen, mikä on hienoa itsestään. Paljon tavaraa. Se on mahtavaa.,
Kysymys 6
Mitä tämä koodi output:
def f(x,l=): for i in range(x): l.append(i*i) print(l) f(2)f(3,)f(3)
Vastaus
Hu?
ensimmäinen toiminto puhelun pitäisi olla melko selvää, silmukka liittää 0 ja 1 tyhjä lista, l
. l
on muuttujan nimi, joka viittaa muistiin tallennettuun luetteloon.
toinen puhelu alkaa luomalla uutta listaa uuteen muistilohkoon. l
viittaa sitten tähän uuteen luetteloon. Sen jälkeen se liittää 0, 1 ja 4 tähän uuteen luetteloon. Sehän on hienoa.,
kolmas funktiokutsu on the weird one. Se käyttää alkuperäiseen muistilohkoon tallennettua alkuperäistä listaa. Siksi se alkaa numeroilla 0 ja 1.
Yritä tätä, jos et ymmärrä:
Kysymys 7
Mikä on apina paikkaus ja se on koskaan hyvä idea?
Vastaus
Apina kauneuspilkku on muuttumassa käyttäytymistä toiminto tai objekti, kun se on jo määritelty. Esimerkiksi:
import datetimedatetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)
Suurimman osan ajasta se on aika kauhea ajatus, se on yleensä parasta, jos asiat toimivat hyvin määritelty tavalla. Yksi syy Monkey patchiin olisi testeissä., Mock-paketti on erittäin hyödyllinen tätä varten.
miksi tällä on merkitystä
se osoittaa, että ymmärrät hieman yksikkötestauksen menetelmiä. Mainita apina välttäminen näyttää, että et ole yksi niistä, kooderit jotka suosivat fancy koodi yli ylläpidettävät koodi (ne ovat siellä, ja ne imevät työskennellä). Muistatko suudelman periaatteen? Ja se osoittaa, että tiedät hieman siitä, miten Python toimii alemmalla tasolla, miten toiminnot ovat todella tallennetaan ja kutsui ja niin edelleen.
PS: kannattaa todella lukea vähän mockista, jos ei ole vielä. Siitä on hyötyä.,
Kysymys 8
Mitä tämä tarkoittaa: *args
, **kwargs
? Miksi käyttäisimme sitä?
Vastaus
Käyttö *args
kun emme ole varmoja, miten monet argumentit ovat menossa olla siirtynyt toiminto, tai jos haluamme siirtää tallennetut lista tai monikko argumentit toiminnon. **kwargs
käytetään, kun emme tiedä, kuinka monta avainsana-argumentit välitetään toiminnon, tai se voidaan siirtää arvoja sanakirja, kuten avainsanan argumentteja., Tunnisteiden args
ja kwargs
ovat yleissopimuksen, voit myös käyttää *bob
ja **billy
mutta se ei olisi viisasta.
tässä pieni kuvitus:
miksi hoito?
Joskus meidän täytyy siirtää tuntematon määrä argumentteja tai avainsanan argumentteja osaksi toimintaa. Joskus haluamme tallentaa argumentteja tai avainsanoja myöhempää käyttöä varten. Joskus se on vain ajansäästö.,
Kysymys 9
Mitä nämä tarkoittaa: @classmethod
, @staticmethod
, @property
?
Vastaus Taustatiedot
Nämä ovat sisustussuunnittelijan. Sisustaja on erityinen funktio, joka joko ottaa funktion ja palauttaa funktion, tai ottaa luokan ja palauttaa luokan. @
symboli on vain syntaktista sokeria, jolla voit koristella jotain tavalla, joka on helppo lukea.,
@my_decoratordef my_func(stuff): do_things
vastaa
def my_func(stuff): do_thingsmy_func = my_decorator(my_func)
löydät opetusohjelma miten sisustussuunnittelijan yleensä täällä töissä.
Todellinen Vastaus
sisustussuunnittelijan @classmethod
, @staticmethod
ja @property
käytetään toimintoja määritellyissä luokissa. Tässä on, miten he käyttäytyvät:
Kysymys 10
Harkitse seuraavia koodi, mitä se lähtö?
Vastaus
lähtö on määritetty kommentteja segmentin alla:
Miksi me välitämme?,
koska OO-ohjelmointi on todella, todella tärkeää. Todella. Tähän kysymykseen vastaaminen osoittaa ymmärryksesi perinnöstä ja Pythonin super
– funktion käytöstä. Useimmiten ratkaisujärjestyksellä ei ole väliä. Joskus se on, se riippuu hakemuksen.
Kysymys 11
Harkitse seuraavia koodi, mitä se lähtö?
Vastaus
oRoot.print_all_1()
tulostaa:
oRoot.print_all_2()
tulostaa:
Miksi me välitämme?
koska sävellys ja esinerakenne on se, mistä esineissä on kyse., Esineet koostuvat tavaroista ja ne pitää alustaa jotenkin. Tämä sitoo myös joitakin juttuja rekursiosta ja generaattorien käytöstä.
generaattorit ovat loistavia. Olisit voinut saavuttaa samanlaisia toimintoja print_all_2
vain rakentaa iso, pitkä lista ja sitten tulostaa sen sisällön. Generaattoreissa on hienoa se, että niiden ei tarvitse viedä paljon tilaa muistissa.
Se on myös syytä huomauttaa, että print_all_1
kulkee puu syvyys-ensin tavalla, kun print_all_2
on leveys-ensin., Muista ymmärtää ne ehdot. Joskus yhdenlainen läpimeno on toista sopivampaa. Mutta se riippuu hyvin paljon hakemuksestasi.
Kysymys 12
Kuvaile Python on roskien keräys mekanismi lyhyesti.
vastaus
paljon voi sanoa tästä. On muutamia pääkohtia, jotka sinun tulisi mainita:
- Python ylläpitää lukumäärää viittauksia jokaiseen objektiin muistissa., Jos viite määrä menee nollaan sitten liitetään esine ei ole enää elää ja muistin osoitettu, että objekti voidaan vapautuvat jotain muuta
- joskus asioita kutsutaan ”viite sykliä” tapahtua. Roskien kerääjä etsii näitä aika ajoin ja siivoaa ne. Esimerkki voisi olla, jos sinulla on kaksi esineitä
o1
jao2
siten, ettäo1.x == o2
jao2.x == o1
. Joso1
jao2
ei viitattu mitään muuta niin ne ei pitäisi elää., Mutta jokaisella niistä on viiteluku 1. - tiettyjä heuristiikkoja käytetään roskien keruun nopeuttamiseen. Esimerkiksi hiljattain luodut esineet ovat todennäköisemmin kuolleita. Kun esineitä syntyy, jätteenkerääjä antaa ne sukupolville. Jokainen esine saa yhden sukupolven, ja nuoremmat sukupolvet käsitellään ensin.
tämä selitys on CPython-spesifinen.
Kysymys 13
Aseta seuraavat toiminnot alla, jotta niiden tehokkuutta. He kaikki ottavat luettelon numeroista välillä 0 ja 1. Lista voi olla aika pitkä., Esimerkkiluettelo olisi . Miten todistaisit vastauksesi oikeaksi?
Vastaus
Kaikkein vähiten tehokas: f2
, f1
, f3
. Todistaaksesi, että näin on, haluaisit profiloida koodisi. Pythonilla on ihana profilointipaketti, jonka pitäisi tehdä temppu.
import cProfilelIn = cProfile.run('f1(lIn)')cProfile.run('f2(lIn)')cProfile.run('f3(lIn)')
loppuun tähden, tässä on mitä edellä profiili lähdöt:
Miksi Hoito?
pullonkaulojen paikantaminen ja välttäminen kannattaa usein., Paljon koodaus tehokkuus tulee alas järkeä – yllä olevassa esimerkissä se on selvästi nopeampaa lajitella luettelon, jos se on pienempi lista, joten jos sinulla on valita suodatus ennen kuin tavallaan se on usein hyvä idea. Vähemmän ilmiselvää tavaraa voi vielä paikantaa oikeiden työkalujen avulla. Näistä työkaluista on hyvä tietää.
Kysymys 14
Jotain olet epäonnistunut?
väärä vastaus
I never fail!
Miksi Tämä On Tärkeää:
Osoittaa, että olet pystyy tunnustamaan virheitä, vastuun ottaminen virheitä ja oppia virheistään., Kaikki nämä asiat ovat aika pirun tärkeitä, jos aiot olla hyödyllinen. Jos olet todella täydellinen niin harmi, sinun täytyy ehkä saada luova täällä.
kysymys 15
onko sinulla henkilökohtaisia projekteja?
Really?
Tämä osoittaa, että olet valmis tekemään enemmän kuin minimiin pitää skillset ajan tasalla. Jos työskentelet henkilökohtaisissa projekteissa ja koodeissa työpaikan ulkopuolella, työnantajat näkevät sinut todennäköisemmin voimavarana, joka kasvaa. Vaikka he eivät kysykään tätä, minusta on hyödyllistä ottaa asia puheeksi.,
Johtopäätös
Nämä kysymykset tarkoituksella käsitelleet monia aiheita. Vastaukset olivat tarkoituksellisesti sanallisia. Ohjelmointihaastattelussa sinun on osoitettava ymmärtäväisyytesi ja jos pystyt siihen tiiviillä tavalla, tee se kaikin keinoin. Yritin antaa vastauksissa niin paljon tietoa, että niistä voisi poimia jotain merkitystä, vaikka ei olisi aiemmin kuullut joistakin näistä aiheista. Toivottavasti tästä on hyötyä työnjaossa.
go get ’em tiger.