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 ja x="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ä

  1. Luettelo ymmärtäminen on ihana aikaa säästyy ja iso kompastuskivi on paljon ihmisiä
  2. Jos et voi lukea niitä, voit ehkä kirjoittaa ne ylös
  3. 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 ja o2 siten, että o1.x == o2 ja o2.x == o1. Jos o1 ja o2 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.

Articles

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *