Programerji, pojdite na razgovore

Programerji, pojdite na razgovore
Slika je vzeta iz videa s kanala "Militantni ametisti»

Približno 10 let sem delal kot sistemski programer za Linux. To so moduli jedra (kernel space), razni demoni in delo s strojno opremo iz uporabniškega prostora (user space), razni zagonski nalagalniki (u-boot itd.), strojna programska oprema krmilnika in še marsikaj. Tudi včasih se je zgodilo, da je prerezal spletni vmesnik. Toda pogosteje se je zgodilo, da sem moral sedeti s spajkalnikom in komunicirati z oblikovalci tiskanih vezij. Ena od težav pri takem delu je, da je precej težko oceniti stopnjo svoje usposobljenosti, saj eno nalogo poznaš zelo globoko, druge pa sploh ne. Edini pravi način, da razumete, kam iti in kakšni tokovi so zdaj, je, da greste na razgovore.

V tem članku bi rad povzel svojo izkušnjo na razgovoru za prosto delovno mesto sistemskega programerja za Linux, specifike razgovora, delovno mesto ter kako oceniti svojo osebno raven znanja v komunikaciji z bodočim delodajalcem in česa ne smete pričakovati od tega.

Članek bo vključeval majhno tekmovanje z nagradami.

Značilnosti poklica

Sistemski programer je na specifičnem področju, na katerem sem delal, popoln generalist: moral sem pisati kodo in odpravljati napake v strojni opremi. In pogosto je bilo treba nekaj spajkati sami. Občasno se je zgodilo, da so moje prilagoditve strojne opreme potem prenesli na razvijalce. Zato za delo na tem področju potrebujete dokaj dobro bazo znanja, tako s področja digitalnega vezja kot s področja programiranja. Zaradi tega so razgovori za delovno mesto sistemskega programerja pogosto videti kot iskanje strokovnjaka za elektroniko.

Programerji, pojdite na razgovore
Tipična delovna postaja za sistemskega programerja.

Zgornja fotografija prikazuje moje tipično delovno mesto pri odpravljanju napak v gonilnikih. Logični analizator prikazuje pravilnost oddanih sporočil, osciloskop spremlja obliko robov signala. Prav tako v okvir ni bil vključen razhroščevalnik jtag, ki se uporablja, ko standardna orodja za odpravljanje napak niso več kos. In moraš biti sposoben delati z vso to opremo.

Pogosto se zgodi, da je hitreje in enostavneje nekatere elemente ponovno prispajkati in sam popraviti topološke napake, kot pa izdelek odnesti monterju. In potem se spajkalna postaja nastani tudi na vašem delovnem mestu.

Druga značilnost razvoja na ravni gonilnika in strojne opreme je, da Google ne pomaga. Pogosto moraš poiskati informacije o svoji težavi in ​​obstajajo tri povezave, od katerih sta dve tvoji vprašanji na kakšnem forumu. Ali še huje, ko naletite na vprašanje istega reveža, ki ga je zastavil pred 5 leti na poštnem seznamu jedra in nikoli ni prejel odgovora. Pri tem delu se poleg napak pri oblikovanju tako strojne kot programske opreme pogosto srečujemo z napakami v dokumentaciji – to so verjetno najhujše in najneprijetnejše težave. Včasih so registri napačno opisani ali pa opisa zanje sploh ni. Takšne probleme je mogoče rešiti le z znanstvenim vtikanjem naključnih števil v določene registre (nekakšno obratno). Pogosto se zgodi, da procesor vsebuje nekaj funkcionalnosti, vendar te funkcionalnosti ni implementiral nihče razen vas (še posebej, če je procesor nov). In to pomeni hoditi po igrišču z grabljami, 70% jih je namenjenih otrokom. Ko pa je dokumentacija, tudi z napakami, je to že napredek. Nemalokrat se zgodi, da dokumentacije sploh ni in takrat se začne hoja po minskih poljih, ko železo zagori. In ja, tudi take težave sem uspešno rešil.

Intervjuji

Moje mnenje je, da bi morali iti na razgovor vsaj enkrat na pol leta, tudi če obožujete svoje delo in ga ne želite zamenjati. Razgovor vam omogoča, da razumete svojo raven strokovnjaka. Verjamem, da so najbolj dragoceni intervjuji tisti, ki ne uspejo. Oni so tisti, ki najbolj natančno pokažejo, katera ozka grla v vašem znanju je treba izboljšati.

Druga zanimiva lastnost je kakovost intervjujev. To je moje opažanje in ni res, priznam, da sem imel samo srečo. Če bo intervju potekal po scenariju:

  • Povej nam o sebi;
  • Imamo take naloge;
  • rad imaš?

In če ste po tem dialogu všeč drug drugemu, greste na delo, potem se družba in naloge praviloma izkažejo za zelo prijetne in ustrezne. Če je intervju podoben prehodu skozi 12 krogov pekla: prvi razgovor s kadrovikom, nato razgovor s skupino programerjev, nato direktor, več domačih nalog itd., potem so bile to praviloma propadle organizacije, v katerih nisem delal. zelo dolgo. Tudi tokrat gre za osebno opažanje, a praviloma preveč birokracije in razvlečen proces zaposlovanja kažeta, da se znotraj podjetja odvijajo povsem enaki procesi. Odločitve se sprejemajo počasi in neučinkovito. Bile so tudi nasprotne situacije, ko so bili krogi intervjujevega pekla, pa se je družba izkazala za odlično, in ko se je po udarcu po zapestju družba izkazala za močvirje, a te so redke.

Če mislite, da scenarij: spoznal, povedal o sebi in se zaposlil, obstaja le v majhnih podjetjih, potem ne. To sem videl v zelo velikih podjetjih, ki zaposlujejo več kot sto ljudi in so zastopana na svetovnih trgih. To je normalen mehanizem, še posebej, če imate bogato zgodovino in imate možnost poklicati prejšnje delodajalce in povprašati o vas.

Zame je zelo dober pokazatelj podjetja, ko prosijo za prikaz primerov svojih projektov in kode. Takoj se prikaže stopnja usposobljenosti kandidata. In kar se mene tiče, je to z vidika izbire kandidatov najučinkovitejši način izbire kot intervjuji v oddaji. Pravzaprav lahko na razgovoru ne uspete zaradi navdušenja ali pa vas, nasprotno, požene adrenalin. Toda v resničnem delu se ne morete spoprijeti z resničnimi nalogami. In s tem sem se srečal tudi, ko sem sam intervjuval ljudi. Pride specialist, pokaže se kot odličen, on mi je bil všeč, on mi. In en mesec sem se boril z najpreprostejšim problemom in posledično ga je drugi programer rešil v nekaj dneh. Moral sem se ločiti od tega programerja.

Še posebej cenim programerske naloge na razgovorih. In tiste, ki jih je treba reševati kar med sestankom, pod stresom in domačo nalogo. Prvi kaže, kako pripravljeni ste na hitro in natančno reševanje težav v stresni situaciji in izrednih razmerah. Drugi prikazuje vašo stopnjo usposobljenosti in sposobnost iskanja informacij ter reševanja trenutnih problemov.

Najbolj zanimiva dela sem imel v obrambnem kompleksu naše države. V procesu dela sem moral rešiti preprosto fantastične probleme, o katerih komercialni programerji niso niti sanjali. Superračunalniki, načrtovanje usmerjevalnikov, različni bojni sistemi vozlišč - to je neverjetno razburljivo. Ko med parado vidiš kompleks, ki hrani tvojo kodo, je res lepo. Nenavadno je, da so razgovori s takšnimi podjetji običajno zelo preprosti, dobesedno pridejo, všeč, sprejeti (verjetno specifika vojske, ki ne mara preveč govoriti), se prekrivajo. Izzivi, s katerimi sem se tam srečal, so bili res zanimivi in ​​zahtevni. Z izkušnjami se je izkazalo, da so dobri za učenje za kakovostnega sistemskega programerja. Obstajajo tudi slabosti in to niso niti nizke plače. Trenutno je plača v obrambnem kompleksu precej spodobna, z dodatki in ugodnostmi. Praviloma je veliko birokracije, dolgi delovni časi, neskončna hitenja in delo pod velikim stresom. V določenih primerih ni mogoče izključiti tajnosti, kar predstavlja določene težave pri potovanju v tujino. Plus, seveda, tiranija šefov, in to se, žal, tudi dogaja. Čeprav je moja izkušnja dela s predstavnikom strank izjemno prijetna. To je skupni vtis treh različnih raziskovalnih inštitutov in podjetij, povezanih z državnimi obrambnimi naročili.

Naloge za intervjuje

Da bi se izognili nesporazumom in da ne bi razkrili podjetij, s katerimi sem se pogovarjal, ne bom izzival usode in navedel njihovih podrobnosti. Sem pa hvaležna za vsak intervju, za čas, ki so ga ljudje namenili zame, za priložnost, da se pogledam od zunaj. Lahko samo rečem, da so bile naloge za velika mednarodna podjetja, zastopana v različnih državah.

Povedal vam bom najbolj zanimivo: kakšne naloge so dane med razgovori. Na splošno so najpogostejša vprašanja za prosto delovno mesto sistemskega programerja in programerja mikrokontrolerjev bitne operacije, v vseh možnih različicah. Zato se na tem področju najbolje pripravite.

Druga najbolj polarizirajoča tema so kažipoti, to bi vam res moralo skočiti pod zob. Tako, da te zbudijo sredi noči in vse poveš in pokažeš.

V svoji glavi sem ukradla vprašanja iz več intervjujev, ki jih bom predstavila tukaj, saj se mi zdijo precej zanimiva. Na ta vprašanja namenoma ne odgovarjam, da si lahko bralci sami odgovorijo na ta vprašanja v komentarjih in se malce popudrajo ob pravem intervjuju.

Vprašanja št. 1

I. Poznavanje SI. Kaj pomenijo naslednji vnosi:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Ali so vsi vnosi pravilni?

II. Zakaj bo ta program povzročil napako segmentacije?

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

III. Biti pameten.

Tam je palica dolga en meter. Nanjo naključno pade deset mravelj, ki se plazijo v različne smeri. Hitrost gibanja ene mravlje je 1 m/s. Če mravlja sreča drugo mravljo, se obrne in odplazi v nasprotno smer. Koliko časa morate najdlje počakati, da vse mravlje odpadejo s palice?

Naslednji intervju je bil zame neuspešen in se mi zdi najbolj koristen v moji programski praksi. To je pokazalo globino moje nesposobnosti. Pred tem intervjujem sem bila seznanjena z vsakim od teh vprašanj in so se v moji praksi nenehno pojavljala, vendar jim nekako nisem pripisovala velikega pomena in jih posledično tudi slabo razumela. Zato sem na tem izpitu sramotno padel. In zelo sem hvaležen, da se je zgodil takšen neuspeh; to je name vplivalo najbolj streznitveno. Mislite, da ste kul specialist, poznate načrtovanje vezij, vmesnike in delo z jedrom. In potem imaš prava vprašanja in lebdiš. Pa poglejmo.

Vprašanja za intervju #2

Težave s strojno opremo.

  • Kako so sistemski klici linux urejeni v zbirnem jeziku na procesorju ARM na x86. Kakšna je razlika?
  • Katera orodja za sinhronizacijo obstajajo? Katera sinhronizacijska orodja je mogoče uporabiti znotraj prekinitvenega konteksta, katera ne in zakaj?
  • Kakšna je razlika med vodilom i2c in vodilom spi?
  • Zakaj so na vodilu i2c terminatorji in kakšna je njihova vrednost?
  • Ali lahko vmesnik RS-232 deluje SAMO na dveh žicah: RX in TX? Tukaj bom dal odgovor: Izkazalo se je, da je slabo, pri 9600, vendar lahko !!!
  • In zdaj drugo vprašanje: zakaj?
  • Kateri je najboljši način za razporeditev signalnih linij in napajanja v večplastnih ploščah in zakaj? Napajanje znotraj plasti ali signalne linije znotraj plasti? (Vprašanje se na splošno nanaša izključno na načrtovanje vezja).
  • Zakaj imajo diferencialne linije tirnice, ki gredo skupaj povsod?
  • RS-485 vodilo. Ponavadi so na takšni liniji terminatorji. Imamo pa zvezdno vezje s spremenljivim številom vtičnih modulov. Kakšna sredstva je treba uporabiti za izogibanje trkom in motnjam?
  • Kaj so rdeča in binarna drevesa?
  • Kako delati s cmake?
  • Vprašanja o gradnji yocto Linuxa.

Cilji tega intervjuja:

1. Napišite funkcijo, ki se obrača v uint32_t vse koščke. (delo z bitovi je zelo priljubljeno na razgovorih, priporočam)
2.

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

Kaj bo ta funkcija vrnila? (rešitev na papirju, brez računalnika)

3. Funkcija za izračun aritmetične sredine dveh števil int32_t.

4. Kakšne so izhodne metode v programih, vklj. v tok napak.

Tretji izbor je bil razmeroma nov in ne bi me presenetilo, če bi tam še obstajal takšen vprašalnik, zato ne bom razkril podjetja, da jih ne bi izpostavil ... Na splošno pa bom dal primer možnih vprašanj, in če prepoznate svoja vprašanja, potem vas pozdravljam :).

Vprašanja za intervju #3

  1. Podan je primer kode prečkanja drevesa, treba je povedati, kaj se v tej kodi počne in opozoriti na napake.
  2. Napišite primer pripomočka ls. Z najpreprostejšo možnostjo “-l”.
  3. Navedite primer, kako narediti statično in dinamično povezovanje. Kakšna je razlika?
  4. Kako deluje RS-232? Kakšna je razlika med RS-485 in RS-232? Kakšna je razlika med RS-232 in RS-485 z vidika programerja?
  5. Kako deluje USB (s programerskega vidika)?
  6. Prevod tehničnega besedila iz ruščine v angleščino.

Uspešen razgovor ni zagotovilo za uspešno delo

To poglavje verjetno niti ni za programerje (čeprav tudi zanje), ampak bolj za kadrovike. Najprimernejša podjetja ne gledajo natančno na rezultate intervjujev. Normalno je delati napake, največkrat gledajo na to, kako zna človek reševati težave in razum.

Eden od ključnih problemov je, da kandidat na razgovorih uspešno rešuje probleme, se izkaže kot odličen strokovnjak, pade pri prvi pravi nalogi. Ne bom lagal, tudi meni se je to zgodilo. Uspešno sem šel skozi vse kroge pekla, rešil vse testne naloge, v realnih razmerah pa se je delo zaradi preproste neizkušenosti izkazalo za pretežko. Priti na krov ni najtežja naloga. Najtežje je ostati na krovu tega podjetja.

Zato bolj zaupam podjetjem, ki s kandidatom opravijo preproste razgovore in rečejo: po prvem mesecu dela bo jasno, ali si primeren za nas ali ne. To je najprimernejši pristop, ja, morda malo drag, ampak takoj se vidi, kdo je kdo.

Obstaja še ena možnost za razgovore: ko ga uspešno opravite, vendar na podlagi rezultatov razgovora razumete, da je delodajalec popolnoma neustrezen. Takoj zavrnem delo, če mi ponudijo delo kot samostojni podjetnik posameznik, ki obljublja velike dohodke. To je oblika davčne utaje za delujočo organizacijo in zakaj bi morale težave delodajalca skrbeti mene kot programerja? Druga možnost so različne državne agencije. Imel sem razgovor, zaradi katerega so mi ponudili dobro plačo, vendar so rekli, da je prejšnji programer dal odpoved, zbolel, umrl, zaradi obremenitev šel v popivanje in vaš delovni dan se začne ob 8. uri zjutraj . S takega mesta je tudi stekel, da so se mu zaiskrile pete. Da, HR, upoštevajte, da so programerji pripravljeni zavrniti tudi najbolj okusno delo, če se mora delovni dan začeti zgodaj zjutraj.

Na koncu bom podal odličen video o izbiri programerja, katerega posnetek zaslona je na začetku tega članka. Tudi jaz sem imela več kot enkrat tak intervju. Če na stopnji vprašanj vidite tiranijo, se spoštujte, vstanite, vzemite svoje stvari in odidite - to je normalno. Če se kadrovik in vodja med razgovorom zagovarjata na vaš račun, to pomeni, da je podjetje strupeno in da tam ne bi smeli delati, razen če imate radi neprimerne šefe.

Ugotovitve

Programerji, pojdite na razgovore! In vedno poskušajte napredovati. Recimo, če dobite N denarja, pojdite na razgovor za vsaj N*1,2 ali bolje N*1,5. Tudi če tega prostega delovnega mesta ne sprejmete takoj, boste razumeli, kaj je potrebno za to raven plačila.
Moja opažanja so pokazala, da odločajo dobro znanje angleškega jezika, dovolj bogate izkušnje v panogi in samozavest. Slednje je glavna kvaliteta, kot povsod v življenju. Praviloma se samozavestnejši kandidat na razgovoru, tudi z več napakami, znajde bolje kot odličen, a bolj sramežljiv in proaktiven kandidat. Vso srečo pri intervjujih!

P/S Tekmovanje

Če imate zanimive primere problemov, ki vam jih je naložil HR, potem dobrodošli v komentarjih. Pripravili smo majhno tekmovanje - pogoji so preprosti: napišete najbolj nenavadno nalogo, ki ste jo imeli med intervjujem, bralci jo ocenijo (plus), po enem tednu pa seštejemo rezultate in zmagovalca nagradimo z zabavnimi dobrotami.

Programerji, pojdite na razgovore

Programerji, pojdite na razgovore

Vir: www.habr.com

Dodaj komentar