Programeri, idite na razgovore

Programeri, idite na razgovore
Slika je preuzeta iz videa sa kanala "Militantni ametisti»

Radio sam kao sistemski programer za Linux oko 10 godina. To su kernel moduli (kernel space), razni demoni i rad s hardverom iz korisničkog prostora (user space), razni bootloaderi (u-boot itd.), firmware kontrolera i još mnogo toga. Čak se ponekad dogodilo da presječe web sučelje. Ali češće se događalo da sam morao sjediti s lemilom i komunicirati s dizajnerima tiskanih ploča. Jedan od problema s takvim radom je što je prilično teško procijeniti razinu vaše kompetentnosti, budući da jedan zadatak možete vrlo dobro poznavati, ali drugi možda uopće ne poznajete. Jedini adekvatan način da shvatite kamo ići i kakve struje sada postoje je odlazak na intervjue.

U ovom članku želim sažeti svoje iskustvo razgovora za natječaj za programera Linux sustava, specifičnosti razgovora, posao, te kako procijeniti svoju osobnu razinu znanja u komunikaciji s budućim poslodavcem te što ne smijete očekivati ​​od toga.

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

Značajke struke

Sistemski programer, u specifičnom području u kojem sam ja radio, potpuni je generalist: morao sam i pisati kod i ispravljati pogreške u hardveru. I često je postojala potreba da sami nešto zalemite. S vremena na vrijeme se događalo da su moje prilagodbe hardvera potom bile prenesene na programere. Dakle, za rad u ovom području potrebna vam je prilično dobra baza znanja, kako u području digitalnih sklopova tako iu programiranju. Zbog toga razgovori za poziciju sistemskog programera često izgledaju kao potraga za stručnjakom za elektroniku.

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

Gornja fotografija prikazuje moje tipično radno mjesto prilikom otklanjanja pogrešaka u upravljačkim programima. Logički analizator pokazuje ispravnost odaslanih poruka, osciloskop prati oblik rubova signala. Također, jtag debugger nije uključen u okvir, koji se koristi kada standardni alati za ispravljanje pogrešaka više ne rade. I morate znati raditi sa svom ovom opremom.

Često se događa da je brže i lakše neke elemente ponovno zalemiti i sami ispraviti topološke pogreške nego odnijeti proizvod instalateru. Zatim se stanica za lemljenje također udomljava na vašem radnom mjestu.

Još jedna značajka razvoja na razini upravljačkog programa 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 mailing listi kernela i nikad nije dobio odgovor. U ovom radu, osim grešaka u dizajnu hardvera i softvera, često se susreću dokumentacijske greške - to su vjerojatno najteži i najneugodniji problemi. Ponekad su registri netočno opisani ili za njih uopće nema opisa. Takvi se problemi mogu riješiti samo znanstvenim ubacivanjem nasumičnih brojeva u određene registre (neka vrsta obrnutog). Često se događa da procesor sadrži neku funkcionalnost, ali nitko osim vas nije implementirao tu funkcionalnost (pogotovo ako je procesor nov). A to znači hodanje po terenu s grabljama, od kojih je 70% za djecu. Ali kad postoji dokumentacija, čak i s greškama, to je već napredak. Nerijetko se dogodi da nema nikakve dokumentacije i tada počinje hodanje po minskim poljima kad željezo gori. I da, uspješno sam riješio i takve probleme.

Intervjui

Moje mišljenje je da biste trebali ići na razgovore barem jednom u šest mjeseci, čak i ako obožavate svoj posao i ne želite ga mijenjati. Intervju vam omogućuje da shvatite svoju razinu stručnjaka. Vjerujem da su najvrjedniji intervjui oni koji propadnu. Oni su ti koji najpreciznije pokazuju koja uska grla u vašem znanju treba poboljšati.

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

  • reci nam o sebi;
  • Imamo takve zadatke;
  • tebi se sviđa?

A ako se nakon ovog dijaloga sviđate jedno drugome, idete na posao, tada se društvo i zadaci u pravilu pokažu vrlo ugodnim i primjerenim. Ako intervju nalikuje prolasku kroz 12 krugova pakla: prvi razgovor s HR-om, zatim razgovor s grupom programera, pa direktorom, još domaćih zadaća itd., onda su to u pravilu bile propale organizacije u kojima nisam radio jako dugo. Opet, ovo je osobno opažanje, ali u pravilu previše birokracije i dugotrajan proces zapošljavanja pokazuju da se isti procesi odvijaju unutar tvrtke. Odluke se donose sporo i neučinkovito. Bilo je i obrnutih situacija, kad su bili krugovi intervjuskog pakla, a društvo je ispalo odlično, i kad je nakon lupka društvo ispadalo kao močvara, ali takve su rijetke.

Ako mislite da scenarij: upoznao si, ispričao o sebi i zaposlio se postoji samo u malim tvrtkama, onda ne. To sam vidio u vrlo velikim tvrtkama koje zapošljavaju više od stotine ljudi i zastupljene su na svjetskim tržištima. To je normalan mehanizam, pogotovo ako imate bogato iskustvo i imate priliku nazvati prijašnje poslodavce i raspitati se o vama.

Za mene je vrlo dobar pokazatelj tvrtke kada traže da pokažu primjere svojih projekata i koda. Razina obuke kandidata se odmah prikazuje. A što se mene tiče, sa stajališta selekcije kandidata, ovo je najučinkovitiji način selekcije od intervjua u emisiji. Zapravo, možete pasti na intervjuu od uzbuđenja ili, naprotiv, izbaciti se na adrenalin. Ali u stvarnom poslu ne možete se nositi sa stvarnim zadacima. S tim sam se također susreo kad sam sam intervjuirao ljude. Dođe stručnjak, pokaže se izvrsnim, on se meni svidio, on mi. I borio sam se s najjednostavnijim problemom mjesec dana, i kao rezultat, drugi programer ga je riješio za nekoliko dana. Morao sam se rastati od tog programera.

Posebno cijenim programerske zadatke na razgovorima. I to one koje treba riješiti odmah na sastanku, pod stresom i domaćom zadaćom. Prvi pokazuje koliko ste spremni brzo i točno riješiti probleme u stresnoj i hitnoj situaciji. Drugi pokazuje vašu razinu kompetentnosti i sposobnost traženja informacija i rješavanja trenutnih problema.

Najzanimljivije poslove imao sam u obrambenom kompleksu naše zemlje. U procesu rada morao sam rješavati jednostavno fantastične probleme o kojima komercijalni programeri nisu ni sanjali. Superračunala, projektiranje usmjerivača, razni sustavi borbe s čvorovima - ovo je nevjerojatno uzbudljivo. Kad tijekom parade vidite kompleks koji pohranjuje vaš kod, to je stvarno lijepo. Začudo, intervjui s takvim tvrtkama obično su vrlo jednostavni, doslovno dolaze, sviđaju se, prihvaćaju se (vjerojatno specifičnosti vojske, koja ne voli previše pričati), superponiraju se. Izazovi s kojima sam se ondje suočila bili su uistinu zanimljivi i zahtjevni. S iskustvom se pokazalo da su dobri za učenje kvalitetnog sistemskog programera. Ima tu i nedostataka, a to čak nisu ni niske plaće. Trenutačno je plaća u obrambenom kompleksu sasvim pristojna, s bonusima i beneficijama. U pravilu je puno birokracije, dugo radno vrijeme, beskonačna žurba i rad pod velikim stresom. U određenim slučajevima ne može se isključiti tajnost, što stvara određene probleme pri putovanju u inozemstvo. Plus, naravno, tiranija šefova, a to se, nažalost, također događa. Iako je moje iskustvo rada s predstavnikom kupaca iznimno ugodno. Ovo je zajednički dojam triju različitih istraživačkih instituta i tvrtki vezanih uz državne obrambene narudžbe.

Zadaci intervjua

Kako bih izbjegao nesporazume i kako ne bih razotkrio tvrtke s kojima sam razgovarao, neću iskušavati sudbinu i navoditi njihove podatke. Ali zahvalan sam na svakom intervjuu, na vremenu koje su ljudi posvetili meni, na prilici da sebe pogledam izvana. Mogu samo reći da su zadaci bili za velike međunarodne tvrtke zastupljene u različitim zemljama.

Reći ću vam najzanimljiviju stvar: koji se zadaci daju tijekom intervjua. Općenito, najčešća pitanja za natječaj za sistemskog programera i programera mikrokontrolera su bit operacije, u svim mogućim varijantama. Stoga se najbolje pripremite na ovom području.

Druga najpolarizirajuća tema su putokazi, ovo bi vam stvarno trebalo zaskočiti. Pa da te probude usred noći i sve ispričaš i pokažeš.

Pitanja sam ukrao iz nekoliko intervjua u svojoj glavi, a ovdje ću ih iznijeti jer su mi prilično zanimljiva. Namjerno ne dajem odgovore na ova pitanja kako bi si čitatelji mogli sami odgovoriti na ta pitanja u komentarima i malo pudera kad prolaze kroz pravi intervju.

Pitanja br. 1

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

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Jesu li svi unosi točni?

II. Zašto će ovaj program izbaciti pogrešku segmentacije?

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

III. Biti pametan.

Postoji štap dugačak jedan metar. Deset mrava nasumično pada na nju, puzeći u različitim smjerovima. Brzina kretanja jednog mrava je 1 m/s. Ako mrav naiđe na drugog mrava, okreće se i puzi u suprotnom smjeru. Koliko vam je maksimalno potrebno čekati da svi mravi padnu sa štapića?

Sljedeći intervju mi ​​je bio neuspjeh i smatram ga najkorisnijim u svojoj programerskoj praksi. To je pokazalo dubinu moje nesposobnosti. Prije ovog intervjua bila sam upoznata sa svakim od ovih pitanja i stalno su se pojavljivala u mojoj praksi, ali nekako im nisam pridavala veliku važnost, samim tim nisam ih dobro razumjela. Stoga sam ovaj ispit sramotno pao. I jako sam zahvalan što se takav neuspjeh dogodio; to je na mene djelovalo najotrežnjujuće. Mislite da ste cool stručnjak, poznajete dizajn sklopova, sučelja i rad s kernelom. A onda imate prava pitanja i lebdite. Pa da vidimo.

Pitanja za intervju #2

Problemi s hardverom.

  • Kako su sistemski pozivi Linuxa raspoređeni u asemblerskom jeziku na ARM procesoru, na x86. Koja je razlika?
  • Koji alati za sinkronizaciju postoje? Koji alati za sinkronizaciju se mogu koristiti unutar konteksta prekida, koji ne mogu i zašto?
  • Koja je razlika između i2c sabirnice i spi sabirnice?
  • Zašto postoje terminatori na i2c sabirnici i koja je njihova vrijednost?
  • Može li RS-232 sučelje raditi SAMO na dvije žice: RX i TX? Ovdje ću dati odgovor: Ispada da je loše, na 9600, ali može!!!
  • A sad drugo pitanje: zašto?
  • Koji je najbolji način za raspored signalnih linija i napajanja u višeslojnim pločama i zašto? Napajanje unutar slojeva ili signalne linije unutar slojeva? (Pitanje se općenito odnosi isključivo na dizajn strujnog kruga).
  • Zašto diferencijalne linije imaju tračnice koje posvuda idu zajedno?
  • RS-485 sabirnica. Obično na takvoj liniji postoje terminatori. Međutim, imamo zvjezdasti krug, s promjenjivim brojem utičnih modula. Koja sredstva za izbjegavanje sudara i smetnji treba koristiti?
  • Što su crvena i binarna stabla?
  • Kako raditi sa cmakeom?
  • Pitanja o izgradnji yocto Linuxa.

Ciljevi ovog intervjua:

1. Napišite funkciju koja invertira na uint32_t svi bitovi. (rad s bitovima je vrlo popularan na intervjuima, preporučam ga)
2.

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

Što će ova funkcija vratiti? (rješenje na papiru, bez računala)

3. Funkcija za izračunavanje aritmetičke sredine dvaju brojeva int32_t.

4. Koje su izlazne metode u programima, uklj. u bujicu grešaka.

Treći odabir je bio relativno novi i ne bi me iznenadilo da još uvijek postoji takav upitnik, pa neću otkriti tvrtku da ih ne razotkrijem... Ali općenito ću dati primjer mogućih pitanja, a ako prepoznajete svoja pitanja, onda vas pozdravljam :).

Pitanja za intervju #3

  1. Dat je primjer koda obilaska stabla, potrebno je reći što se radi u tom kodu i ukazati na pogreške.
  2. Napišite primjer pomoćnog programa ls. S 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 s programerskog stajališta?
  5. Kako radi USB (iz programerskog gledišta)?
  6. Prijevod tehničkog teksta s ruskog na engleski.

Uspješan intervju nije garancija uspješnog rada

Ovo poglavlje vjerojatno nije ni za programere (iako ni za njih), već više za HR. Najadekvatnije tvrtke ne gledaju pedantno rezultate intervjua. Normalno je griješiti, najčešće gledaju kako osoba zna riješiti probleme i razumjeti.

Jedan od ključnih problema je što kandidat uspješno rješava probleme na razgovorima, pokazuje se kao odličan stručnjak, ali ne uspijeva na prvom pravom zadatku. Neću lagati, i meni se to dogodilo. Uspješno sam prošao sve krugove pakla, riješio sve testne zadatke, ali u stvarnim uvjetima posao se pokazao preteškim zbog običnog neiskustva. Ukrcati se nije najteži zadatak. Najteže je ostati u ovoj tvrtki.

Stoga više vjerujem tvrtkama koje obave jednostavne razgovore s kandidatom i kažu: nakon prvih mjesec dana rada bit će jasno jeste li nam prikladan ili ne. To je najadekvatniji pristup, da, možda malo skup, ali odmah se vidi tko je tko.

Postoji još jedna opcija za intervjue: kada ga uspješno položite, ali na temelju rezultata intervjua shvatite da je poslodavac potpuno neadekvatan. Odmah odbijam posao ako mi ponude da radim kao samostalni poduzetnik, obećavajući velike prihode. Ovo je oblik utaje poreza za operativnu organizaciju, a zašto bi problemi poslodavca trebali brinuti mene kao programera? Druga opcija su razne državne agencije. Bio sam na razgovoru, nakon čega su mi ponudili dobru plaću, ali rekli su da je prethodni programer dao otkaz, razbolio se, umro, propinjao zbog opterećenja, a radni dan ti počinje u 8 ujutro. . S takvog je mjesta i on potrčao da su mu pete zaiskrile. Da, HR, imajte na umu da su programeri spremni odbiti i najukusniji posao ako radni dan mora početi rano ujutro.

Na kraju ću dati izvrstan video o odabiru programera, čiji screenshot je dan na početku ovog članka. I ja sam više puta imao takav intervju. Ako vidite tiraniju u fazi pitanja, poštujte sebe, ustanite, uzmite svoje stvari i otiđite - to je normalno. Ako se HR i voditelj tijekom intervjua izjašnjavaju na vaš račun, to znači da je tvrtka toksična i da ne biste trebali raditi u njoj osim ako volite neadekvatne šefove.

Zaključci

Programeri, idite na razgovore! I uvijek se trudite biti promaknuti. Recimo, ako dobijete N novca, onda idite na intervju za najmanje N*1,2, ili bolje N*1,5. Čak i ako ne prihvatite ovo slobodno mjesto odmah, shvatit ćete što je potrebno za ovu razinu plaće.
Moja zapažanja su pokazala da presuđuju dobro poznavanje engleskog jezika, dovoljno bogato iskustvo u branši i samopouzdanje. Ovo posljednje je glavna kvaliteta, kao i svugdje u životu. U pravilu, samouvjereniji kandidat može biti bolji na intervjuu, čak i s više pogrešaka, od izvrsnog, ali sramežljivijeg i proaktivnijeg kandidata. Sretno s intervjuima!

P/S Natjecanje

Ako imate zanimljive primjere problema kojima vas je HR natovario, dobrodošli u komentare. Pripremili smo mali natječaj - uvjeti su jednostavni: napišete najneobičniji zadatak koji ste imali tijekom intervjua, čitatelji ga ocjenjuju (plus), a nakon tjedan dana zbrajamo rezultate i nagrađujemo pobjednika zabavnim poklončićima.

Programeri, idite na razgovore

Programeri, idite na razgovore

Izvor: www.habr.com

Dodajte komentar