Programeri, idite na intervjue

Programeri, idite na intervjue
Slika je preuzeta sa videa sa kanala “Militantni ametisti»

Radio sam kao sistemski programer za Linux oko 10 godina. To su moduli kernela (kernel space), razni demoni i rad sa hardverom iz korisničkog prostora (user space), razni bootloaderi (u-boot itd.), firmware kontrolera i još mnogo toga. Čak se ponekad dešavalo da se iseče web interfejs. Ali češće se dešavalo da sam morao sjediti s lemilom i komunicirati s dizajnerima tiskanih ploča. Jedan od problema kod ovakvog rada je i to što je prilično teško procijeniti nivo svoje kompetencije, jer jedan zadatak možete poznavati vrlo duboko, a drugi uopće ne znate. Jedini adekvatan način da shvatite kuda ići i kakve struje sada postoje jeste da idete na intervjue.

U ovom članku želim sumirati svoje iskustvo intervjuiranja za radno mjesto programera Linux sistema, specifičnosti intervjua, posla, te kako procijeniti svoj lični nivo znanja kroz komunikaciju sa budućim poslodavcem i šta ne bi trebalo očekujte od toga.

Članak će uključivati ​​malo takmičenje s nagradama.

Karakteristike profesije

Sistemski programer, u specifičnoj oblasti u kojoj sam radio, je potpuni generalista: morao sam i da pišem kod i da otklanjam greške na hardveru. I često je postojala potreba da sami zalemite nešto. S vremena na vrijeme se dešavalo da se moja prilagođavanja hardvera prenesu na programere. Dakle, za rad u ovoj oblasti potrebna vam je prilično dobra baza znanja, kako iz oblasti digitalnih kola, tako i iz programiranja. Zbog toga, intervjui za poziciju sistemskog programera često izgledaju kao potraga za specijalistom za elektroniku.

Programeri, idite na intervjue
Tipična radna stanica za sistemskog programera.

Fotografija iznad prikazuje moje tipično radno mjesto prilikom otklanjanja grešaka u drajverima. Logički analizator pokazuje ispravnost poslanih poruka, osciloskop prati oblik ivica signala. Takođe, jtag debugger nije uključen u okvir, koji se koristi kada standardni alati za otklanjanje grešaka više ne rade. I morate biti u mogućnosti da radite sa svom ovom opremom.

Često se dešava da je brže i lakše sami ponovo zalemiti neke elemente i ispraviti topološke greške nego odnijeti proizvod instalateru. I tada se stanica za lemljenje također nalazi na vašem radnom mjestu.

Još jedna karakteristika razvoja na nivou drajvera i hardvera je da Google ne pomaže. Često morate tražiti informacije o svom problemu, a postoje tri linka, od kojih su dva vaša pitanja na nekom forumu. Ili još gore, kada naiđete na pitanje od istog jadnika koji ga je postavio prije 5 godina na kernel mailing listi i nikada nije dobio odgovor. U ovom radu, pored grešaka u dizajnu i hardvera i softvera, često se susreću i greške u dokumentaciji – to su verovatno najozbiljniji i najneugodniji problemi. Ponekad su registri pogrešno opisani, ili uopšte ne postoji opis za njih. Takvi problemi se mogu riješiti samo naučnim ubacivanjem slučajnih brojeva u određene registre (neka vrsta obrnutog). Često se dešava da procesor sadrži neku funkcionalnost, ali tu funkcionalnost niko osim vas nije implementirao (naročito ako je procesor nov). A to znači hodanje po polju sa grabljama, od kojih je 70% za djecu. Ali kada postoji dokumentacija, čak i sa greškama, to je već napredak. Nerijetko se dešava da uopće nema dokumentacije, a tada počinje hodanje po minskim poljima kada gori željezo. I da, uspješno sam rješavao takve probleme.

Intervjui

Moje mišljenje je da treba ići na razgovore barem jednom u šest mjeseci, čak i ako obožavate svoj posao i ne želite da ga mijenjate. Intervju vam omogućava da shvatite svoj nivo specijaliste. Verujem da su najvredniji intervjui oni koji ne uspeju. Oni su ti koji najpreciznije pokazuju koja uska grla u vašem znanju treba poboljšati.

Još jedna zanimljiva karakteristika je kvalitet intervjua. Ovo je moje zapažanje, i nije istina, priznajem da sam samo imao sreće. Ako intervju ide po scenariju:

  • recite nam o sebi;
  • Mi imamo takve zadatke;
  • sviđa ti se?

A ako se nakon ovog dijaloga svidite jedno drugome, krenete na posao, onda se, po pravilu, društvo i zadaci ispostavljaju vrlo ugodni i adekvatni. Ako intervju liči na prolazak kroz 12 krugova pakla: prvi intervju sa HR-om, pa intervju sa grupom programera, pa direktorom, još domaćim itd., onda su to po pravilu bile propale organizacije u kojima nisam radio veoma dugo. Opet, ovo je lično zapažanje, ali u pravilu previše birokratije i razvučen proces zapošljavanja pokazuju da se isti procesi odvijaju unutar kompanije. Odluke se donose sporo i neefikasno. Bilo je i suprotnih situacija, kada su bili krugovi pakla intervjua, a društvo je ispalo sjajno, i kada je nakon udarca po zglobu društvo ispalo kao močvara, ali takve su rijetke.

Ako mislite da scenario: upoznali, ispričali o sebi i zaposlili, postoji samo u malim kompanijama, onda ne. To sam vidio u vrlo velikim kompanijama koje zapošljavaju više od stotine ljudi i koje su zastupljene na svjetskim tržištima. Ovo je normalan mehanizam, posebno ako imate bogato iskustvo i imate priliku da pozovete svoje prethodne poslodavce i raspitate se o vama.

Za mene je to vrlo dobar pokazatelj kompanije kada traže da pokažu primjere svojih projekata i koda. Odmah se prikazuje stepen obučenosti kandidata. A što se mene tiče, sa stanovišta selekcije kandidata, ovo je najefikasniji metod selekcije od emisijskih intervjua. Zapravo, možete propasti na intervjuu od uzbuđenja, ili, naprotiv, izaći na adrenalin. Ali u stvarnom radu, ne možete se nositi sa stvarnim zadacima. S tim sam se susreo i kada sam lično intervjuisao ljude. Dođe specijalista, pokaže se kao odličan, on mi se dopao, njemu smo mi. I sa najjednostavnijim problemom sam se mučio mjesec dana, a kao rezultat toga, drugi programer ga je riješio za par dana. Morao sam da se rastanem sa tim programerom.

Posebno cijenim programske zadatke na intervjuima. I one koje se moraju rješavati upravo na sastanku, pod stresom i domaćim zadacima. Prvi pokazuje koliko ste spremni da brzo i precizno riješite probleme u stresnoj situaciji i hitnoj situaciji. Drugi pokazuje vaš nivo kompetencije i sposobnosti traženja informacija i rješavanja tekućih problema.

Najzanimljiviji poslovi koje sam imao bili su u odbrambenom kompleksu naše zemlje. U procesu rada morao sam rješavati jednostavno fantastične probleme o kojima komercijalni programeri nisu ni sanjali. Superkompjuteri, dizajniranje rutera, različiti borbeni sistemi čvorova - ovo je nevjerovatno uzbudljivo. Kada tokom parade vidite kompleks koji pohranjuje vaš kod, to je zaista lijepo. Čudno je da su intervjui s takvim kompanijama obično vrlo jednostavni, bukvalno dođu, sviđaju se, prihvaćeni (vjerovatno su specifičnosti vojske, koja ne voli previše da priča), preklapaju se. Izazovi s kojima sam se tamo suočio bili su zaista zanimljivi i izazovni. Sa iskustvom se pokazalo da su dobri za učenje da budu kvalitetni sistemski programeri. Ima i nedostataka, a to nisu čak ni niske plate. Trenutno su plate u kompleksu odbrane prilično pristojne, sa bonusima i beneficijama. Po pravilu, ima mnogo birokratije, dugog radnog vremena, beskrajne žurbe i rada pod velikim stresom. U pojedinim slučajevima ne može se isključiti tajnost, što dodaje određene probleme za putovanje u inostranstvo. Plus, naravno, tiranija šefova, a to se, nažalost, takođe dešava. Iako je moje iskustvo rada sa predstavnikom kupaca izuzetno ugodno. Ovo je zbirni utisak tri različita istraživačka instituta i preduzeća vezana za državne odbrambene narudžbe.

Zadaci intervjua

Da ne bi došlo do nesporazuma i da ne bih razotkrio kompanije sa kojima sam razgovarao, neću iskušavati sudbinu i navoditi njihove detalje. Ali zahvalna sam na svakom intervjuu, na vremenu koje su ljudi potrošili na mene, na prilici da se sagledam spolja. Mogu samo reći da su zadaci bili za velike međunarodne kompanije zastupljene u različitim zemljama.

Reći ću vam najzanimljiviju stvar: koji zadaci se daju tokom intervjua. Generalno, najčešća pitanja za upražnjeno radno mjesto sistemskog programera i programera mikrokontrolera su bitne operacije, u svim mogućim varijacijama. Stoga se najbolje pripremite u ovoj oblasti.

Druga najpolarizirajuća tema su putokazi, ovo bi vam zaista trebalo skočiti iz zuba. Pa da te probude u sred noći i da sve ispričaš i pokažeš.

U glavi sam ukrao pitanja iz nekoliko intervjua, a iznijet ću ih ovdje, jer su mi vrlo zanimljiva. Namerno ne dajem odgovore na ova pitanja kako bi čitaoci sami odgovorili na ova pitanja u komentarima i imali malo pudera kada prolaze kroz pravi intervju.

Pitanja br. 1

I. Poznavanje SI. Šta znače sljedeći unosi:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Da li su svi unosi tačni?

II. Zašto će ovaj program dati grešku segmentacije?

int main ()
{
       fprintf(0,"hellon");
       fork();
       return(0);
}

III. Da budem pametan.

Postoji štap dužine jedan metar. Deset mrava nasumce pada na nju, puzeći u različitim smjerovima. Brzina kretanja jednog mrava je 1 m/s. Ako mrav naiđe na drugog mrava, on se okreće i puzi u suprotnom smjeru. Koliko je maksimalno vremena potrebno da sačekate da svi mravi padnu sa štapa?

Sljedeći intervju je za mene bio neuspješan i smatram ga najkorisnijim u svojoj programskoj praksi. To je pokazalo dubinu moje nesposobnosti. Prije ovog intervjua bila sam upoznata sa svakim od ovih pitanja i stalno su mi se javljala u praksi, ali im nekako nisam pridavao veliki značaj, pa sam ih prema tome ni dobro razumio. Stoga sam sramotno pao na ovom ispitu. I veoma sam zahvalan što se desio takav neuspjeh, to je na mene najviše utjecalo. Mislite da ste kul specijalista, da znate dizajn kola, interfejse i rad sa kernelom. A onda imate prava pitanja i plutate. Pa da vidimo.

Pitanja za intervju #2

Problemi sa hardverom.

  • Kako su linux sistemski pozivi raspoređeni u asemblerskom jeziku na ARM procesoru, na x86. Koja je razlika?
  • Koji alati za sinhronizaciju postoje? Koji alati za sinhronizaciju se mogu koristiti u kontekstu prekida, a koji ne i zašto?
  • Koja je razlika između i2c sabirnice i spi magistrale?
  • Zašto postoje terminatori na i2c magistrali i koja je njihova vrijednost?
  • Može li RS-232 interfejs raditi SAMO na dvije žice: RX i TX? Evo ja ću dati odgovor: Ispada da je loše, na 9600, ali može!!!
  • A sada drugo pitanje: zašto?
  • Koji je najbolji način uređivanja signalnih vodova i napajanja u višeslojnim pločama i zašto? Snaga unutar slojeva ili signalne linije unutar slojeva? (Pitanje je općenito čisto o dizajnu kola).
  • Zašto diferencijalne linije imaju staze koje idu zajedno svuda?
  • RS-485 autobus. Obično postoje terminatori na takvoj liniji. Međutim, imamo zvjezdasto kolo, s promjenjivim brojem priključnih modula. Koja sredstva za izbjegavanje sudara i smetnji treba koristiti?
  • Šta su crveno i binarno drveće?
  • Kako raditi sa cmakeom?
  • Pitanja o izgradnji yocto Linuxa.

Ciljevi ovog intervjua:

1. Napišite funkciju koja invertuje u uint32_t sve bitove. (rad sa bitovima je veoma popularan na intervjuima, preporučujem ga)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

Šta će ova funkcija vratiti? (rešenje na papiru, bez kompjutera)

3. Funkcija za izračunavanje aritmetičke sredine dva broja int32_t.

4. Koje su metode izlaza u programima, uklj. u tok grešaka.

Treći izbor je bio relativno skorašnji, i ne bi me čudilo da još postoji takav upitnik, pa neću otkrivati ​​kompaniju da ih ne otkrivam... Ali generalno daću primjer mogućih pitanja, a ako prepoznate svoja pitanja, onda vas pozdravljam :).

Pitanja za intervju #3

  1. Dat je primjer koda za prelazak stabla, potrebno je reći šta se radi u ovom kodu i ukazati na greške.
  2. Napišite primjer uslužnog programa ls. Sa najjednostavnijom opcijom “-l”.
  3. Navedite primjer kako napraviti statičko i dinamičko povezivanje. Koja je razlika?
  4. Kako radi RS-232? Koja je razlika između RS-485 i RS-232? Koja je razlika između RS-232 i RS-485 sa stanovišta programera?
  5. Kako USB funkcionira (sa stanovišta programera)?
  6. Prevod tehničkog teksta sa ruskog na engleski.

Uspješan intervju nije garancija uspješnog rada

Ovo poglavlje vjerovatno nije ni za programere (iako i za njih), već više za HR. Najadekvatnije kompanije ne sagledavaju pedantno rezultate intervjua. Normalno je griješiti, najčešće gledaju kako čovjek zna rješavati probleme i rasuđivati.

Jedan od ključnih problema je to što kandidat uspješno rješava probleme tokom intervjua, pokazuje se kao odličan stručnjak, ali ne uspijeva na prvom pravom zadatku. Neću da lažem, i meni se ovo desilo. Uspješno sam prošao sve krugove pakla, riješio sve testne zadatke, ali se u realnim uvjetima posao pokazao pretežkim zbog jednostavnog neiskustva. Ukrcavanje nije najteži zadatak. Najteže je ostati u ovoj kompaniji.

Stoga vjerujem više kompanija koje s kandidatom sprovode jednostavne razgovore i kažu: nakon prvog mjeseca rada bit će jasno da li nam odgovaraš ili ne. Ovo je najadekvatniji pristup, da, možda malo skuplji, ali se odmah vidi ko je ko.

Postoji još jedna opcija za intervjue: kada ga uspješno položite, ali na osnovu rezultata intervjua shvatite da je poslodavac potpuno neadekvatan. Odmah odbijam posao ako mi se ponudi da radim kao samostalni preduzetnik, obećavajući velike prihode. Ovo je oblik utaje poreza za operativnu organizaciju i zašto bi mene kao programera zabrinjavali problemi poslodavca? Druga opcija su razne vladine agencije. Imao sam intervju, zbog čega mi je ponuđena dobra plata, ali su mi rekli da je prethodni programer dao otkaz, da se razbolio, umro, otišao u pijanku zbog preopterećenosti, a tvoj radni dan počinje u 8 ujutro . Sa takvog mjesta je i trčao tako da su mu pete svjetlucale. Da, HR, imajte na umu da su programeri spremni odbiti čak i najukusniji posao ako radni dan mora početi rano ujutro.

Na kraju ću dati odličan video o odabiru programera, čiji je snimak ekrana dat na početku ovog članka. I ja sam više puta imao takav intervju. Ako vidite tiraniju u fazi pitanja, onda poštujte sebe, ustanite, uzmite svoje stvari i idite - to je normalno. Ako se HR i menadžer tokom intervjua nametnu na vaš račun, to ukazuje da je kompanija toksična i da tamo ne biste trebali raditi osim ako ne volite neadekvatne šefove.

nalazi

Programeri, idite na intervjue! I uvijek se trudite da budete unapređeni. Recimo ako dobijete N novca, onda idite na intervju za najmanje N*1,2, ili bolje N*1,5. Čak i ako odmah ne prihvatite ovo radno mjesto, shvatit ćete šta je potrebno za ovaj nivo plate.
Moja zapažanja su pokazala da odlučuju dobro poznavanje engleskog jezika, dovoljno bogato iskustvo u industriji i samopouzdanje. Ovo drugo je glavna kvaliteta, kao i svugdje u životu. Po pravilu, kandidat sa većim samopouzdanjem može bolje proći na intervjuu, čak i sa više grešaka, nego odličan, ali stidljiviji i proaktivniji kandidat. Sretno sa vašim intervjuima!

P/S konkurencija

Ako imate zanimljive primjere problema kojima vas je HR opteretio, dobrodošli u komentare. Pripremili smo mali konkurs - uslovi su jednostavni: napišete najneobičniji zadatak koji ste imali tokom intervjua, čitaoci ga ocjenjuju (plus), a nakon nedelju dana sumiramo rezultate i nagrađujemo pobednika zabavnim poslasticama.

Programeri, idite na intervjue

Programeri, idite na intervjue

izvor: www.habr.com

Dodajte komentar