de Rohan Dasika

Cum să obțineți un loc de muncă în software încorporat de vis

Cum sa obtineti un loc de munca in software incorporat

Ghidurile pentru pregătirea interviurilor software sunt numeroase. Interviurile cu software încorporat sunt oarecum similare, dar totuși trebuie să joci un joc diferit.

Există unele materiale utile pe Internet și un anumit conținut pentru pregătirea interviurilor software este preluat. Dar, în general, nu am reușit să găsesc un ghid cuprinzător care să mă înceapă.

Recrutarea și pregătirea interviurilor pentru software încorporat în ultimele 4 luni m-au învățat foarte multe despre cum să abordez procesul. Am primit recent oferte de la câteva companii mari de tehnologie. În această postare, vă voi împărtăși câteva informații acumulate pe parcurs.

Voi împărți acest post în câteva secțiuni, așa că nu ezitați să săriți! Există deja o mulțime de conținut despre modalități inteligente de recrutare, așa că nu voi analiza cum să obțin interviuri aici.

  • Conținut de pregătit și revizuit
  • Interviul în sine!

Alegerea unei limbi

Ca standard, dezvoltarea de software încorporat se face în cea mai mare parte în C, deși C ++ devine din ce în ce mai popular în ultima perioadă. Dacă ați urmat cursuri de arhitectură de computer sau sisteme încorporate, probabil că ați folosit unul sau altul. Asigurați-vă că știți în ce limbă utilizează compania pe care o intervievați. Dacă sunteți mai familiarizați cu C ++, dar aceștia folosesc C, fiți sinceri în acest sens – dacă cunoașteți unul, veți putea comuta între cele două destul de ușor.

Din moment ce sunt cel mai familiarizat cu C ++, companiile mi-au permis să scriu cod în C ++. Dacă este necesar, m-au ajutat să trec codul respectiv la C. În cea mai mare parte, nu prea face diferența. Acest lucru se întâmplă dacă nu lucrați cu anumite funcții și containere standard de bibliotecă standard C ++.

Verilog este utilizat mai ales pentru dezvoltarea FPGA. Python este utilizat o cantitate echitabilă pentru a comunica între utilizator și sistemul încorporat la care lucrează. Șansele sunt că nu vi se vor pune întrebări cu privire la acestea.

Același lucru este valabil și cu limbajul asamblării (din fericire !!?).

Elementele de bază sunt elementele de bază

Am început călătoria într-un mod similar cu majoritatea studenților în informatică – prin revizuirea structurilor și algoritmilor mei de date. Dar, în curând, mi-am dat seama că conținutul pentru software-ul încorporat se desparte la un moment dat. este mult mai concentrat pe arhitectura computerelor, sistemele de operare și unele elemente fundamentale hardware decât structurile de date de nivel superior, cum ar fi copacii sau algoritmii de sortare.

Vă ocupați de codul și hardware-ul de nivel inferior în rolurile software încorporate. Dar, din punct de vedere al programării, structurile și algoritmii dvs. de date sunt încă foarte relevante. Similar cu interviurile software, există o mulțime de resurse pentru a vă ajuta să vă pregătiți pentru elementele de bază! Efectuând câteva probleme din fiecare secțiune din Cracking Interviu de codare a fost un bun punct de plecare.

Rapid după aceea, am preferat să folosesc LeetCode datorită capacității de a rula și testa instantaneu. LeetCode este o platformă incredibilă, cu o comunitate excelentă. În opinia mea, are întrebări cele mai asemănătoare celor pe care îi veți întâlni în interviuri. Vă salvează toate soluțiile trimise și calculează și timpul de rulare. Faceți majoritatea întrebărilor „ușoare” și o parte decentă a întrebărilor „medii” și ar trebui să fiți bine 🙂

În plus, Geeks For Geeks este o resursă excelentă, cu explicații foarte amănunțite pentru sute de probleme.

Reluare de la interviuri software

Următoarele câteva subiecte sunt foarte asemănătoare cu conceptele din interviurile software, iar acestea sunt testate intens, așa că asigurați-vă că le cunoașteți bine!

  • Complexitate algoritmică (atât timp cât și memorie)
  • Indicatori
  • Matrice
  • Liste conectate
  • Corzi (și corzi C)
  • Stive și cozi

Următoarele subiecte nu sunt cu adevărat testate, dar să le cunoașteți conceptual. Aflați cum funcționează, complexitatea lor și cum să le rezolvați la un nivel de bază.

  • Recursivitate
  • Copaci
  • Grămezi
  • Hashing
  • Triere

Dincolo de software

Aici începe adevăratul lucru încorporat!

1611235991 356 Cum sa obtineti un loc de munca in software incorporat

Manipulare de biți !!

Știți acest lucru ca pe dosul mâinii.

Este posibil cel mai important subiectul interviurilor dvs. Cu privire la acest subiect specific, faceți toate întrebările de pe LeetCode.

  • Știți cum sunt reprezentate numerele negative în binar
  • Cunoașteți diferențele dintre complementele unuia și ale celor doi
  • Poți face conversia între binar, zecimal și hexadecimal
  • Operația XOR este puternic. Știți ce poate face.

Iată o resursă excelentă Am folosit pentru sfaturi și trucuri utile

Arhitectura calculatorului

O secundă aproape de manipularea biților.

Probabil că nu vi se va cere să implementați niciuna dintre acestea, dar cu siguranță veți fi întrebat despre cum funcționează lucrurile sub capotă. Unele subiecte de citit includ …

  • Registre importante și modul lor de funcționare
  • Diferența dintre salvarea apelantului și salvarea apelantului
  • Cum întrerupe munca
  • O înțelegere de bază a conductelor de instrucțiuni
  • Cachete, TLB-uri și modul în care este implementată memoria virtuală
  • Diferite tipuri de memorie (ROM vs RAM, DDR, EEPROM, Flash etc.)
  • Umplerea memoriei (instrucțiuni și cursuri)
  • Ce se întâmplă când porniți un sistem

Sisteme de operare

În funcție de companie și de rol, sistemele de operare pot fi a foarte subiect important. Nu vi se va cere să implementați niciuna dintre acestea, dar să știți cum funcționează lucrurile la nivel conceptual!

  • Proces vs. Fil
  • Cum funcționează multi-threading
  • Sisteme de operare în timp real față de sistemul de operare tradițional
  • Programarea sarcinilor (FIFO, Round Robin, bazat pe prioritate)
  • Cum protejează semaforele și mutele de date
  • Inversie prioritară, moștenire prioritară, blocaje și blocaje
  • Ce face ca o funcție să fie „reentrantă”?
  • Secțiuni critice
  • Niveluri prioritare în microcontrolere (EL0 – EL3)

Protocoale de comunicare

Cunoașteți avantajele și compromisurile utilizării următoarelor protocoale:

  • UART
  • SPI
  • I2C

Pe baza experiențelor dvs. anterioare, a rolului pentru care solicitați și a companiei, este posibil să fiți întrebat și despre ceilalți. De obicei, companiile nu se așteaptă să știți despre aceste protocoale specifice și vă vor instrui la locul de muncă. Dar a avea o înțelegere de bază poate ajuta întotdeauna la surprinderea intervievatorului!

  • Automobile: CAN, LIN
  • Fără fir: 3G, 4G LTE, elementele de bază ale 5G, 802.11 (Wifi), Bluetooth
  • Rețele: HTTP, TCP / UDP, IP, 802.11 (Wifi), Ethernet

Bazele hardware

Hardware-ul nu este testat foarte mult pentru software încorporat, dar în funcție de rol, nivelul dvs. de interacțiune poate varia. Verificați fișele postului și discutați cu oamenii care lucrează acolo pentru o idee mai bună!

  • Cronometre de supraveghere
  • Cronometre în general
  • Detalii despre orice periferice pe care le-ați folosit în proiectele dvs. (accelerometre, senzori, LiDAR, motoare etc.)

Exersând

Practica este cheia – nu există nici o cale de a evita asta. Asigurați-vă că vă dedicați macar 2 ore pe zi pentru pregătirea interviului, fără a include solicitarea de locuri de muncă și contactarea recrutorilor.

1611235992 526 Cum sa obtineti un loc de munca in software incorporat

În timp ce exersezi pe LeetCode, comentează codul tău. Explicați algoritmul și complexitatea timpului de rulare. În fiecare zi înainte de a începe codarea, examinați problemele pe care le-ați lucrat în ziua precedentă. La sfârșitul săptămânii, examinați fiecare problemă la care ați lucrat în acea săptămână. Acest lucru vă va ajuta să vă amintiți algoritmii mai bine și puțin câte puțin, veți deveni un profesionist în potrivirea tiparelor.

Interviurile încorporate tind să fie mai conceptuale decât interviurile dvs. tipice cu software, datorită naturii unor subiecte testate. Pentru aceste domenii, am menținut un document Google cu toate întrebările pe care mi le-aș putea pune, dar și toate răspunsurile lor. Am inclus și un link către care pot citi mai multe informații pentru a fi de ajutor. M-a ajutat să rămân organizat și să revizuiesc mai repede.

Mulți oameni mi-au cerut linkul către documentul Google, așa că iată-l: Întrebări de interviu încorporate

La interviu

Ai reușit – o treabă grozavă!

Respiră adânc. Este timpul să vă folosiți toată munca grea. De obicei, tu și intervievatorul veți trece prin câteva întrebări conceptuale. De asemenea, veți discuta despre experiențele și proiectele anterioare. Asigurați-vă că puteți răspunde în detaliu la întrebările despre contribuțiile dvs. și diversele provocări cu care v-ați confruntat.

Dacă acesta este un interviu care are loc de la distanță, probabil că vi se va cere să codați într-un document comun. Pregătiți niște hârtie pentru a nota puncte și diagrame importante. Dacă vă ajută, puteți avea și câteva note la care vă puteți referi în timpul interviului. Țin întotdeauna la îndemână o foaie de complexități algoritmice de bază.

Verificați fusurile orare. Verificați-le de două ori. Nu uitați să folosiți căști. Fiți într-un mediu liniștit, astfel încât să nu existe perturbări. Problemele de comunicare vor face doar interviul mai dificil.

Cum sa obtineti un loc de munca in software incorporat

Când ai întrebarea

Nu începeți niciodată codificarea imediat. Pe cât de important este să ajungi la soluția corectă, intervievatorul se uită într-adevăr la abordarea ta.

Luați o secundă și repetați întrebarea la intervievator, doar pentru a vă asigura că amândoi sunteți pe aceeași pagină. Și dacă există neînțelegeri, intervievatorul poate repeta și clarifica întotdeauna orice îndoieli.

Apoi, înțelegeți scopul problemei

  • Cât de mare este intrarea?
  • Este sortat?
  • Există o anumită complexitate de timp sau de memorie pe care ar trebui să o întâlnești?
  • Există duplicate? Valori negative? Valori goale?
  • Trebuie să efectuați verificarea erorilor?

Apoi, parcurgeți algoritmul. Începeți cu cea mai de bază abordare cu forță brută. Poate fi super ineficient și menționează că îl folosești ca punct de plecare. Explicați complexitatea timpului și a memoriei și de ce este o soluție slabă.

De acolo, este timpul să optimizăm. În general, căutați locuri în care este posibil să stocați cantități inutile de date sau să repetați secțiuni de cod. Pentru aplicațiile încorporate, memoria este importantă! În loc să utilizați o matrice sau un vector, luați în considerare utilizarea unui set de biți. Dacă aveți doar de-a face cu valori cuprinse între 0 și 31, comutați biții într-un număr întreg! Aici este utilă manipularea biților.

Este important să te gândești cu voce tare în timp ce faci brainstorming. Dacă sunteți blocat sau vă îndreptați în direcția greșită, intervievatorul vă poate ajuta să vă readuceți pe drumul cel bun. După ce amândoi ați fost de acord asupra unei soluții, atunci este în sfârșit timpul să începeți codarea.

Scrierea codului

Citirea codului altora nu este întotdeauna cel mai plăcut lucru. Faceți munca puțin mai ușoară pentru intervievatorul dvs. folosind un stil bun. Asta nu înseamnă că trebuie să renunți fiecare punct și virgulă sau paranteză, dar indentați bine și utilizați nume variabile semnificative. Încercați să scrieți frumos și utilizați bine spațiul de pe tablă.

În timp ce scrieți cod, continuați să verificați algoritmul pe care l-ați conceput. Similar fazei de brainstorming, gandeste-te cu voce tare. Furnizați comentarii verbale codului dvs. La fiecare pas, explicați ce verificați, ce sperați să realizați și orice decizie de proiectare pe care o luați.

După ce ați terminat de scris codul, nu spuneți că ați terminat încă. Faceți un pas înapoi și analizați-vă codul dintr-o perspectivă la nivel înalt. Verificați intrările, ieșirile și logica dvs. pentru eventuale erori. Asigurați-vă că detectați orice erori off-by-one! Apoi, parcurgeți codul cu câteva cazuri de testare. Dacă apar probleme, revizuiți și refaceți codul după cum este necesar.

În funcție de interviu, este posibil să aveți o întrebare mare sau câteva mai mici. Dar odată ce intervievatorul a fost de acord cu soluția dvs., există șansa ca acesta să extindă parametrii diferiți. Probabil că nu va trebui să refaceți codul, dar poate că va trebui să discutați cum să schimbați părți din abordarea dvs. Așa cum am menționat anterior, memoria este importantă în aplicațiile încorporate. Deci, o întrebare comună de urmărire este de obicei despre optimizarea memoriei.

Gânduri finale

Natura interviurilor cu software încorporat depinde în mare măsură de companie și de munca pe care o acordă prioritate. Companiile care lucrează la un protocol de comunicare specific vor căuta lucruri diferite decât o companie care dezvoltă un sistem de operare în timp real sau o companie care lucrează la un produs IoT.

Am vrut să folosesc acest articol ca un loc pentru a împărtăși câteva teme comune în interviurile pe care le-am avut, dar acest lucru nu este deloc cuprinzător. Acesta este destinat să fie folosit ca punct de plecare. Dar vă rugăm să contactați angajații actuali și să verificați Usa de sticla pentru mai multe sfaturi de interviu specifice companiei.

Interviurile sunt dure, dar pregătirea bună și munca grea acum vă pot ajuta să obțineți un loc de muncă pe care îl iubiți 🙂

Sper că acest articol a ajutat și vă doresc mult succes!

Dacă v-a plăcut acest articol, vă rugăm să nu uitați să lăsați un?. Poți să mă urmărești și pe Twitter sau Quora:)