Bevezetés
Python munkát keres? Esélye van, akkor be kell bizonyítania, hogy tudja, hogyan kell dolgozni Python. Íme néhány kérdés, amely a Python-hoz kapcsolódó készségek széles körét fedi le. A hangsúlyt magára a nyelvre helyezik, nem pedig egy adott csomagra vagy keretre. Minden kérdés kapcsolódik egy megfelelő oktatóanyaghoz, ha van ilyen. Néhány kérdés lezárja több téma.,
valójában még nem kaptam interjútesztet olyan keményen, mint ez, ha kényelmesen eljuthat a válaszokhoz, akkor szerezzen magának munkát.
mi ez a bemutató nem
Ez a bemutató nem célja, hogy minden rendelkezésre álló munkahelyi kultúrát lefedjen – a különböző munkáltatók különböző kérdéseket tesznek fel különböző módon; különböző egyezményeket követnek; különböző dolgokat fognak értékelni. Különböző módon tesztelik Önt., Egyes munkaadók ül le a számítógép, majd kéri, hogy megoldja egyszerű problémák; pár fog állni, hogy elöl egy fehér táblát, hasonló; egy kapsz egy házi tesztet kell megoldani; egyesek csak egy beszélgetés.
a programozó számára a legjobb teszt a programozás. Ez egy nehéz dolog, hogy teszteljék egy egyszerű bemutató. Tehát a bónuszpontoknál győződjön meg róla, hogy valóban használhatja a kérdésekben bemutatott funkciókat., Ha valóban megérti, hogyan juthat el a válaszokhoz elég jól ahhoz, hogy ténylegesen felhasználhassa a bemutatott fogalmakat, akkor nyer.
Hasonlóképpen, a szoftvermérnök legjobb tesztje valójában a mérnöki munka. Ez a bemutató a Python nyelvről szól. A hiánypótló problémák megoldására hatékony, hatékony, karbantartható osztályhierarchiák kialakítása nagyszerű és csodálatos, és egy olyan készségkészlet, amelyet érdemes folytatni, de jóval túlmutat a szöveg hatókörén.
egy másik dolog, ez a bemutató nem PEP8 kompatibilis., Ez szándékos, mivel, amint azt korábban említettük, a különböző munkáltatók különböző egyezményeket követnek. Alkalmazkodnia kell a munkahely kultúrájához. Mert a gyakorlatiasság legyőzi a tisztaságot.
egy másik dolog, ez a bemutató nem tömör. Nem akarok csak kérdéseket és válaszokat dobni rád, és reménykedni, hogy valami ragad. Azt akarom, hogy megkapja, vagy legalább elég jól kapja meg, hogy abban a helyzetben van, hogy további magyarázatokat keressen magának bármilyen problémás témához.
szeretné ász a technikai interjú? Ütemezze be a technikai interjú gyakorlati ülését egy szakértővel most!,
1. kérdés
mi a Python valójában? A válaszban összehasonlíthatja (és ösztönözheti) más technológiákkal a
válasz
itt van néhány kulcsfontosságú pont:
-
A Python egy értelmezett nyelv. Ez azt jelenti, hogy az olyan nyelvekkel ellentétben, mint a C és annak változatai, a Python-t nem kell összeállítani a futtatása előtt. Más értelmezett nyelvek közé tartozik a PHP és a Ruby.
-
a Python dinamikusan gépelt, ez azt jelenti, hogy nem kell megadnia a változók típusát, amikor deklarálja őket, vagy ilyesmi., Meg lehet csinálni a dolgokat, mint a
x=111
majdx="I'm a string"
hiba nélkül -
p > Python jól alkalmas arra, hogy objektum orientált programozás, hogy lehetővé teszi a meghatározása osztályok mellett összetétele és öröklés. A Python nem rendelkezik hozzáférési specifikátorokkal (mint például a C++ ‘S
public
,private
), ennek a pontnak az indoklása:”mindannyian felnőttek vagyunk itt” -
p > Python, a funkciók első osztályú objektumok., Ez azt jelenti, hogy hozzárendelhetők változókhoz, visszaadhatók más függvényekből, és átkerülhetnek függvényekbe. Az osztályok szintén első osztályú objektumok
-
A Python kód írása gyors, de futása gyakran lassabb, mint az összeállított nyelvek. Szerencsére a Python lehetővé teszi a C alapú kiterjesztések beillesztését, így a szűk keresztmetszetek optimalizálhatók, gyakran pedig vannak., A
numpy
csomag egy jó példa erre, ez tényleg elég gyors, mert sok a szám ropogó ez valójában nem történik Python -
p > python találja használni sok területen-webes alkalmazások, automatizálás, tudományos modellezés, nagy adat alkalmazások és még sok más. Azt is gyakran használják, mint “ragasztó” kódot, hogy más nyelveken, komponenseket játszani szép.
-
A Python egyszerűvé teszi a nehéz dolgokat, így a programozók inkább a kényszerítő algoritmusokra és struktúrákra összpontosíthatnak, nem pedig az alacsony szintű részletekre.,
miért fontos ez:
Ha Python pozícióra pályázol, tudnod kell, mi az, és miért olyan jó. És miért nem O.O
2.kérdés
töltse ki a hiányzó kódot:
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
válasz
különös figyelmet kell fordítani
- összhangban kell lennie az elnevezési konvenciókkal. Ha van egy elnevezési egyezmény nyilvánvaló bármely minta kód, ragaszkodni hozzá. Még ha nem is az elnevezési konvencióról van szó, akkor általában a
- rekurzív függvényeket kell rekurzív módon használni., Ügyeljen arra, hogy megértse, hogyan történik ez, hogy elkerülje a feneketlen híváscsomagokat
- a
os
modult használjuk az operációs rendszerrel való interakcióhoz olyan módon, amely platformközi. Mondhatjuk, hogysChildPath = sPath + '/' + sChild
de ez nem működik a windows rendszeren - az alapcsomagok ismerete valóban érdemes, de ne törje meg a fejét, hogy mindent megjegyezzen, a Google a barátja a munkahelyen!
- tegyen fel kérdéseket, ha nem érti, mit kell tennie a kódnak
- csók! Tartsd egyszerű, hülye!,
Ez Miért Számít:
- Megjeleníti a tudás alapvető operációs rendszer kölcsönhatás cucc
- Rekurzió nagyon hasznos
3. Kérdés
Keres az alábbi kódot írja le a végső értékek A0, A1, …An.
Ha nem tudod, hogy mi az a zip
nem hangsúlyozzák ki. Egyetlen épelméjű munkáltató sem fogja elvárni, hogy memorizálja a standard könyvtárat. Itt található a help(zip)
kimenete.
ha ennek nincs értelme, akkor néhány percet vesz igénybe, hogy kitalálja, bár úgy dönt.,
válasz
miért fontos ez
- a lista megértése csodálatos időmegtakarító és nagy akadályt jelent sok ember számára
- Ha el tudja olvasni őket, valószínűleg leírhatja őket
- néhány ilyen kód szándékosan furcsa volt. Lehet, hogy néhány fura emberrel kell dolgoznia
4. kérdés
Python és multi-threading. Jó ötlet? Soroljon fel néhány módot arra, hogy néhány Python kódot párhuzamosan futtasson.
válasz
Python nem teszi lehetővé a multi-threading a legigazibb értelemben vett., Ez egy multi-threading csomag, de ha azt szeretnénk, hogy több szál, hogy gyorsítsák fel a kódot, akkor ez általában nem egy jó ötlet, hogy használja. A Python rendelkezik a Global Interpreter Lock (Gil) nevű konstrukcióval. A GIL gondoskodik arról, hogy a “szálak” közül csak egy hajtható végre egyszerre. A szál megszerzi a GIL-t, egy kis munkát végez, majd átadja a GIL-t a következő szálra. Ez nagyon gyorsan történik, így az emberi szem számára úgy tűnhet, hogy a szálak párhuzamosan futnak, de valójában csak felváltva ugyanazt a CPU magot használják. Ez az egész GIL áthaladás növeli a végrehajtást., Ez azt jelenti, hogy ha gyorsabban szeretné futtatni a kódot, akkor a menetvágó csomag használata gyakran nem jó ötlet.
a Python menetvágó csomagjának használatának okai vannak. Ha egyszerre akarsz futtatni néhány dolgot, és a hatékonyság nem jelent gondot, akkor teljesen rendben van és kényelmes. Vagy ha olyan kódot futtat, amelynek meg kell várnia valamit (mint például néhány IO), akkor sok értelme lehet. De a threading könyvtár nem engedi, hogy extra CPU magokat használjon.,
Multi-threading lehet kiszervezni az operációs rendszer (ezzel multi-processing), néhány külső alkalmazás, amely felhívja a Python kódot (pl Spark vagy Hadoop), vagy néhány kódot, hogy a Python kódot hív (pl: lehet, hogy a Python kódot hívja a C funkció, amely nem a drága többszálas cucc).
miért fontos ez
mert a GIL egy a-lyuk. Sok ember sok időt tölt azzal, hogy szűk keresztmetszeteket találjon a divatos Python többszálú kódjában, mielőtt megtudnák, mi a GIL.,
5. kérdés
hogyan lehet nyomon követni a kód különböző verzióit?
válasz:
Verzióvezérlés! Ezen a ponton izgatottan kell cselekednie, és el kell mondania nekik, hogyan is használja a Git-et (vagy bármi is a kedvenc), hogy nyomon kövesse a nagyi levelezését. A GIT az én preferált verzióvezérlő rendszerem, de vannak mások is, például a subversion.
miért fontos ez:
mert a verzióvezérlés nélküli kód olyan, mint egy csésze nélküli kávé., Néha le kell írnunk egyszer eldobott szkripteket, ez rendben van, de ha jelentős mennyiségű kóddal foglalkozik, akkor a verziókezelő rendszer előnyös lesz. A verzióvezérlés segít nyomon követni, hogy ki változtatta meg a kódbázist; megtudja, mikor vezették be a hibákat a kódba; nyomon követi a szoftver verzióit és kiadásait; a forráskód terjesztése a csapat tagjai között; telepítés és bizonyos automatikák. Ez lehetővé teszi, hogy roll a kódot vissza, mielőtt eltörte, ami nagy a saját. Sok minden. Ez nagyszerű.,
6. kérdés
mit jelent ez a kód kimenet:
def f(x,l=): for i in range(x): l.append(i*i) print(l) f(2)f(3,)f(3)
válasz
Hu?
az első függvényhívásnak meglehetősen nyilvánvalónak kell lennie, a hurok 0, majd 1-et csatol az üres listához, l
. l
egy változó neve, amely a memóriában tárolt listára mutat.
a második hívás elindul egy új lista létrehozásával egy új memóriablokkban. l
ezután utal erre az új listára. Ezután 0, 1 és 4-et csatol ehhez az új listához. Szóval ez nagyszerű.,
a harmadik függvényhívás a furcsa. Az eredeti memóriablokkban tárolt eredeti listát használja. Ezért kezdődik 0-val és 1-gyel.
próbálja ki ezt, ha nem érti:
7. kérdés
mi a majom folt, és ez valaha is egy jó ötlet?
válasz
A Monkey patching megváltoztatja egy függvény vagy objektum viselkedését, miután már meghatározták. Például:
import datetimedatetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)
Az idő nagy részében ez egy nagyon szörnyű ötlet – általában a legjobb, ha a dolgok jól meghatározott módon járnak el. Ennek egyik oka, hogy majom folt lenne a tesztelés., A mock csomag nagyon hasznos erre a célra.
miért fontos ez
Ez azt mutatja, hogy egy kicsit megérted az egységtesztelés módszertanait. A majomkikerülés említése azt mutatja, hogy nem vagy egyike azoknak a kódolóknak, akik a divatos kódot részesítik előnyben a karbantartható kód felett(odakint vannak ,és szopni kell dolgozni). Emlékszel a csók elvére? Ez azt mutatja, hogy egy kicsit tudsz arról, hogyan működik a Python alacsonyabb szinten, hogyan tárolják a funkciókat, hívják őket, és hasonlók.
PS: tényleg érdemes elolvasni egy kicsit a mock-ról, ha még nem. Nagyon hasznos.,
8. kérdés
mit jelent ez a cucc: *args
, **kwargs
? És miért használnánk?
válasz
Use *args
amikor nem vagyunk biztosak abban, hogy hány érvet fognak átadni egy függvénynek, vagy ha egy tárolt listát vagy egy argumentumot akarunk átadni egy függvénynek. **kwargs
akkor használatos, ha nem tudjuk, hogy hány kulcsszó argumentum kerül átadásra egy függvénynek, vagy használható a szótár értékeinek kulcsszó argumentumokként történő átadására., Az azonosítók args
és kwargs
egy egyezmény, akkor is használhatja *bob
és **billy
de ez nem lenne bölcs dolog.
itt van egy kis illusztráció:
miért érdekel?
néha ismeretlen számú argumentumot vagy kulcsszó argumentumot kell átadnunk egy függvénynek. Néha argumentumokat vagy kulcsszó érveket akarunk tárolni a későbbi felhasználásra. Néha csak időmegtakarító.,
9. kérdés
mit jelentenek ezek Önnek: @classmethod
, @staticmethod
, @property
?
válasz Háttérismeretek
ezek dekorátorok. A lakberendező egy speciális funkció, amely vagy elveszi a függvényt és visszaad egy függvényt, vagy vesz egy osztályt és visszaad egy osztályt. A@
szimbólum csak szintaktikai cukor, amely lehetővé teszi, hogy díszítse valamit oly módon, hogy könnyen olvasható.,
@my_decoratordef my_func(stuff): do_things
egyenértékű
def my_func(stuff): do_thingsmy_func = my_decorator(my_func)
itt található egy bemutató arról, hogy az Általános dekorátorok hogyan működnek itt.
tényleges válasz
a lakberendezők @classmethod
, @staticmethod
és @property
az osztályokon belül meghatározott függvényeken használatosak. Így viselkednek:
kérdés 10
fontolja meg a következő kódot, mit fog kiadni?
válasz
a kimenetet az alábbi szegmens megjegyzései határozzák meg:
miért érdekel?,
mert az OO programozás valóban, nagyon fontos. Tényleg. A kérdés megválaszolása megmutatja az öröklés megértését és a Python super
funkciójának használatát. Legtöbbször a felbontás sorrendje nem számít. Néha igen, az alkalmazásától függ.
11. kérdés
fontolja meg a következő kódot, mit fog kiadni?
válasz
oRoot.print_all_1()
nyomatok:
oRoot.print_all_2()
nyomatok:
miért érdekel?
mert a kompozíció és az objektumszerkezet az, amiről az objektumok szólnak., Az objektumok cuccokból állnak, és valahogy inicializálni kell őket. Ez is összeköti néhány dolgot a rekurzióval és a generátorok használatával kapcsolatban.
a generátorok nagyszerűek. Hasonló funkciókat lehetett volna elérni a print_all_2
– hoz, ha csak egy nagy hosszú listát készít, majd kinyomtatja annak tartalmát. A generátorok egyik szép dolog az, hogy nem kell sok helyet foglalniuk a memóriában.
érdemes rámutatni arra is, hogy a print_all_1
először mélyrehatóan halad át a fán, míg a print_all_2
a szélesség-első., Győződjön meg róla, hogy érti ezeket a feltételeket. Néha az egyik fajta áthaladás megfelelőbb, mint a másik. De ez nagyon függ az alkalmazásától.
12. kérdés
röviden írja le a Python szemétgyűjtő mechanizmusát.
válasz
sokat lehet mondani itt. Van néhány fő pont, hogy meg kell említeni:
- Python fenntartja száma hivatkozások száma minden objektum a memóriában., Ha egy hivatkozási szám nullára megy, akkor a társított objektum már nem él, és az objektumhoz rendelt memória felszabadítható valami más
- esetenként “referencia ciklusoknak” nevezett dolgok történnek. A szemétgyűjtő ezeket rendszeresen megkeresi és megtisztítja. Példa erre, ha két objektum van
o1
éso2
úgy, hogyo1.x == o2
éso2.x == o1
. Hao1
éso2
semmi más nem hivatkozik rájuk, akkor nem szabad élniük., De mindegyiknek van egy hivatkozási száma 1. - bizonyos heurisztikákat használnak a szemétgyűjtés felgyorsítására. Például a közelmúltban létrehozott objektumok nagyobb valószínűséggel halottak. Mivel a tárgyak jönnek létre, a szemétgyűjtő hozzárendeli őket generációk. Minden objektum egy generációt kap, a fiatalabb generációkat pedig először kezelik.
Ez a magyarázat cpython specifikus.
13. kérdés
helyezze az alábbi funkciókat hatékonyságuk sorrendjébe. Mind a 0 és 1 közötti számokat veszik fel. A lista elég hosszú lehet., Egy példa beviteli lista lenne . Hogyan bizonyítaná, hogy a válasz helyes?
válasz
leginkább a legkevésbé hatékony: f2
, f1
, f3
. Annak bizonyítására, hogy ez a helyzet, szeretné profilozni a kódot. Python van egy szép profilalkotás csomagot, hogy meg kell csinálni a trükk.
import cProfilelIn = cProfile.run('f1(lIn)')cProfile.run('f2(lIn)')cProfile.run('f3(lIn)')
A Befejezés kedvéért itt van, amit a fenti profil kimenetek:
miért érdekel?
a szűk keresztmetszetek megtalálása és elkerülése gyakran nagyon érdemes., Sok kódolási hatékonyság jön le, hogy a józan ész – a fenti példában ez nyilvánvalóan gyorsabb rendezni egy listát, ha ez egy kisebb lista, így ha a választás a szűrés előtt egyfajta ez gyakran egy jó ötlet. A kevésbé nyilvánvaló dolgok továbbra is megtalálhatók a megfelelő eszközök használatával. Jó tudni ezeket az eszközöket.
14. kérdés
valami, amiben kudarcot vallott?
rossz válasz
soha nem bukom el!
miért fontos ez:
azt mutatja, hogy képes vagy beismerni a hibákat, felelősséget vállalni a hibáidért, és tanulni a hibáidból., Mindezek a dolgok nagyon rohadt fontos, ha lesz hasznos. Ha valóban tökéletes, akkor túl rossz, lehet, hogy itt kreatívnak kell lennie.
15. kérdés
van személyes projektje?
tényleg?
Ez azt mutatja,hogy hajlandó többet tenni, mint a minimális, ami a skillset naprakész. Ha a munka a személyes projektek kód kívül a munkahelyen, majd a munkáltatók nagyobb valószínűséggel látni, mint egy eszköz, amely növekedni fog. Még ha nem is teszik fel ezt a kérdést, hasznosnak találom a téma megvitatását.,
következtetés
ezek a kérdések szándékosan sok témát érintettek. A válaszok pedig szándékosan verbóztak. Egy programozási interjúban meg kell mutatnia megértését, és ha tömören meg tudja csinálni, akkor minden eszközzel tegye ezt. Megpróbáltam elegendő információt adni a válaszokban, hogy valamilyen jelentést szerezhetsz tőlük, még akkor is, ha még soha nem hallottál ezekről a témákról. Remélem, hasznosnak találja ezt az álláskeresésben.
Go get ’em tiger.