Sådan lander du dit drømmeindlejrede softwarejob

Guider til forberedelse til softwareinterviews er rigelige. Indlejrede softwareinterviews er noget ens, men det er stadig et andet spil, du skal spille.

Der er noget nyttigt materiale på Internettet, og noget indhold til forberedelse af softwareinterview overføres. Men generelt kunne jeg ikke finde en omfattende guide til at komme mig i gang.

Rekruttering og udførelse af interviewpræparat til integreret software i løbet af de sidste 4 måneder lærte mig meget om, hvordan jeg skulle nærme mig processen. Jeg modtog for nylig tilbud fra et par store teknologiske virksomheder. I dette indlæg vil jeg dele nogle indsigter, jeg har fået undervejs.

Jeg deler dette indlæg i et par sektioner, så er du velkommen til at hoppe rundt! Der er allerede masser af indhold på smarte måder at rekruttere på, så jeg vil ikke gå ind på, hvordan man får interviews her.

  • Indhold til forberedelse og gennemgang
  • Selve interviewet!

Valg af sprog

Integreret softwareudvikling udføres som standard i C, selvom C ++ bliver mere populært for nylig. Hvis du har taget nogen computerarkitektur eller indlejrede systemkurser, har du sandsynligvis brugt det ene eller det andet. Sørg for, at du ved, hvilket sprog virksomheden du interviewer med, bruger. Hvis du er mere fortrolig med C ++, men de bruger C, skal du være på forhånd om det - hvis du kender en, kan du skifte mellem de to ret let.

Da jeg er mest fortrolig med C ++, har virksomheder tilladt mig at skrive kode i C ++. Om nødvendigt hjalp de mig med at overføre denne kode til C. For det meste gør det ikke rigtig en forskel. Dette er medmindre du arbejder med nogle specifikke C ++ - standardbiblioteksfunktioner og containere.

Verilog bruges mest til FPGA-udvikling. Python bruges en hel del til at kommunikere mellem brugeren og det integrerede system, de arbejder på. Chancerne er, at du ikke bliver stillet spørgsmål om dem.

Det samme gælder monteringssprog (heldigvis !!?).

Det grundlæggende er det grundlæggende

Jeg begyndte rejsen på samme måde som de fleste datalogstuderende - ved at gennemgå mine datastrukturer og algoritmer. Men snart indså jeg, at indhold til integreret software delte sig på et bestemt tidspunkt. Det er meget mere fokuseret på computerarkitektur, operativsystemer og nogle grundlæggende hardware end højere datastrukturer som træer eller sorteringsalgoritmer.

Du beskæftiger dig med lavere niveau kode og hardware i indlejrede softwareroller. Men fra et programmeringsmæssigt synspunkt er dine datastrukturer og algoritmer stadig meget relevante. I lighed med softwareinterviews er der masser af ressourcer, der hjælper dig med at forberede dig på det grundlæggende! At lave et par problemer fra hvert afsnit i Cracking the Coding Interview var et godt udgangspunkt.

Hurtigt derefter foretrak jeg at bruge LeetCode på grund af evnen til at køre og teste med det samme. LeetCode er en utrolig platform med et stort samfund. Efter min mening har spørgsmål, der mest ligner dem, du vil støde på i interviews. Det gemmer alle dine indsendte løsninger og beregner også driftstider. Gør det meste af "Easy" og en anstændig del af "Medium" spørgsmålene, og du skal være okay :)

Derudover er Geeks For Geeks en stor ressource med meget grundige forklaringer på hundredvis af problemer.

Overførsel fra softwareinterviews

De følgende få emner ligner meget begreberne fra softwareinterviews, og disse testes tungt, så sørg for at kende dem godt!

  • Algoritmisk kompleksitet (både tid og hukommelse)
  • Markører
  • Arrays
  • Tilknyttede lister
  • Strenge (og C-strenge)
  • Stakke og køer

Følgende emner testes ikke rigtig, men vær fortrolige med dem konceptuelt. Ved hvordan de arbejder, deres kompleksitet og hvordan man løser dem på et grundlæggende niveau.

  • Rekursion
  • Træer
  • Dynger
  • Hashing
  • Sortering

Ud over softwaren

Det er her, de rigtige indlejrede ting starter!

Bit manipulation !!

Kend dette som bagsiden af ​​din hånd.

Det er muligvis det vigtigste emne i dine interviews. Udfør alle spørgsmålene om LeetCode om dette specifikke emne .

  • Ved, hvordan negative tal er repræsenteret i binær
  • Kend forskellene mellem ens og to's komplement
  • Kunne konvertere mellem binær, decimal og hexadecimal
  • XOR-operationen er kraftig . Ved hvad alt det kan gøre.

Her er en god ressource, jeg brugte til nyttige tip og tricks

Computerarkitektur

Et tæt sekund på bitmanipulation.

Du bliver sandsynligvis ikke bedt om at implementere nogen af ​​disse, men du vil helt sikkert blive spurgt om, hvordan ting fungerer under emhætten. Nogle emner at læse om inkluderer ...

  • Vigtige registre og hvordan de fungerer
  • Forskel mellem caller-save og callee-save
  • Sådan fungerer afbrydelser
  • En grundlæggende forståelse af instruktionsrørledninger
  • Cacher, TLB'er og hvordan virtuel hukommelse implementeres
  • Forskellige typer hukommelse (ROM vs RAM, DDR, EEPROM, Flash osv.)
  • Hukommelsespolstring (instruktioner og klasser)
  • Hvad sker der, når du starter et system

Operativsystemer

Afhængigt af virksomheden og rollen kan operativsystemer være et meget vigtigt emne. Du bliver ikke bedt om at implementere nogen af ​​disse, men ved hvordan ting fungerer på et konceptuelt niveau!

  • Proces vs. tråd
  • Sådan fungerer multi-threading
  • Realtidsoperativsystemer versus traditionelt operativsystem
  • Opgaveplanlægning (FIFO, Round Robin, Prioritetsbaseret)
  • Hvordan semaforer og mutexer beskytter data
  • Prioritetsinversion, prioritetsarv, spinlocks og deadlocks
  • Hvad gør en funktion til 'reentrant'?
  • Kritiske sektioner
  • Prioriterede niveauer i mikrokontrollere (EL0 - EL3)

Kommunikationsprotokoller

Kend fordelene og fordelene ved at bruge følgende protokoller:

  • UART
  • SPI
  • I2C

Baseret på dine tidligere erfaringer, den rolle du ansøger om og virksomheden, kan du også blive spurgt om andre. Normalt forventer virksomheder ikke, at du kender til disse specifikke protokoller, og træner dig i jobbet. Men at have en grundlæggende forståelse kan altid hjælpe wow intervieweren!

  • Automotive: CAN, LIN
  • Trådløs: 3G, 4G LTE, grundlæggende om 5G, 802.11 (Wifi), Bluetooth
  • Netværk: HTTP, TCP / UDP, IP, 802.11 (Wifi), Ethernet

Grundlæggende hardware

Hardware er ikke testet meget for integreret software, men afhængigt af rollen kan dit interaktionsniveau variere. Tjek jobbeskrivelserne og tal med folk, der arbejder der for en bedre idé!

  • Watchdog-timere
  • Timere generelt
  • Detaljer om eventuelle eksterne enheder, du måske har brugt i dine projekter (accelerometre, eventuelle sensorer, LiDAR, motorer osv)

Øver sig

Øvelse er nøglen - der er virkelig ingen vej uden om det. Sørg for at dedikere mindst 2 timer om dagen til forberedelse af interviewet, inklusive ansøgning om job og kontakt til rekrutterere.

Mens du træner på LeetCode, skal du kommentere din kode. Forklar din algoritme og runtime-kompleksiteten. Gennemgå de problemer, du arbejdede den foregående dag, hver dag inden du begynder at kode. Gennemgå hvert uge i slutningen af ​​ugen. Dette hjælper dig med at huske algoritmerne bedre og lidt efter lidt, du bliver en professionel til mønstermatchning.

Indlejrede interviews har tendens til at være mere konceptuelle end dine typiske softwareinterviews på grund af arten af ​​nogle af de testede emner. For disse områder opretholdte jeg et Google-dokument med alle de spørgsmål, jeg måtte blive stillet, men også alle deres svar. Jeg inkluderede også et link til hvor jeg kan læse flere oplysninger for at være nyttige. Det hjalp mig med at holde mig organiseret og gennemgå hurtigere.

Mange mennesker har bedt mig om linket til Google-dokumentet, så her er det: Embedded Interview Questions

Ved interviewet

Du klarede det - godt stykke arbejde!

Tag en dyb indånding. Det er tid til at bruge alt dit hårde arbejde til god brug. Normalt vil du og intervieweren gennemgå et par konceptuelle spørgsmål. Du vil også diskutere dine tidligere erfaringer og projekter. Sørg for, at du er i stand til at besvare spørgsmål om dine bidrag og forskellige udfordringer, du stod overfor i detaljer.

Hvis dette er et interview, der foregår eksternt, bliver du sandsynligvis bedt om at kode i et delt dokument. Har noget papir klar til at notere vigtige punkter og diagrammer. Hvis det hjælper, kan du også have nogle noter, som du kan henvise til under interviewet. Jeg holder altid et ark med grundlæggende algoritmiske kompleksiteter praktisk.

Kontroller tidszoner. Dobbeltkontrol dem. Glem ikke at bruge hovedtelefoner. Vær i et stille miljø, så der ikke er forstyrrelser. Kommunikationsspørgsmål vil kun gøre interviewet vanskeligere.

Når du får spørgsmålet

Start aldrig med kodning med det samme. Så vigtigt som at nå frem til den rigtige løsning er, intervieweren ser virkelig på din tilgang.

Tag et sekund og gentag spørgsmålet tilbage til intervieweren, bare for at sikre, at I begge er på samme side. Og hvis der er misforståelser, kan intervieweren altid gentage og afklare enhver tvivl.

Forstå derefter omfanget af problemet

  • Hvor stor er input?
  • Er det sorteret?
  • Er der en vis tid eller hukommelseskompleksitet, som du skal møde?
  • Er der dubletter? Negative værdier? Tomme værdier?
  • Skal du udføre fejlkontrol?

Gå derefter gennem din algoritme. Start med den mest basale, brute-force tilgang. Det kan være super ineffektivt og nævne, at du bruger dette som udgangspunkt. Forklar tid og hukommelseskompleksitet, og hvorfor det er en dårlig løsning.

Derfra er det tid til at optimere. Se generelt efter steder, hvor du muligvis gemmer unødvendige mængder data eller gentager sektioner med kode. For indlejrede applikationer er hukommelse vigtig! I stedet for at bruge et array eller en vektor skal du overveje at bruge en bitset. Hvis du bare har at gøre med værdier mellem 0 og 31, skal du skifte bit i et heltal! Dette er hvor bitmanipulation er praktisk.

Det er vigtigt at tænke højt, mens du brainstormer. Hvis du sidder fast eller går i den forkerte retning, kan intervieweren hjælpe dig med at bringe dig tilbage på sporet. Når du begge er blevet enige om en løsning, er det endelig tid til at begynde at kode.

Skrivekode

At læse andres kode er ikke altid den mest behagelige ting. Gør jobbet lidt lettere for din interviewer ved at bruge god stil. Det betyder ikke, at du skal lægge hvert semikolon eller parentes ned, men indrykke godt og bruge meningsfulde variabelnavne. Prøv at skrive pænt og brug tavleområdet godt.

Mens du skriver kode, skal du fortsætte med at kontrollere den algoritme, du har udtænkt. I lighed med brainstormfasen skal du tænke højt . Giv verbale kommentarer til din kode. Forklar ved hvert trin, hvad du kontrollerer, hvad du håber at opnå og eventuelle designbeslutninger, du tager.

Når du er færdig med at skrive kode, skal du ikke sige, at du er færdig endnu. Tag et skridt tilbage, og analyser din kode fra et højt perspektiv. Kontroller indgangene, udgangene og din logik for eventuelle fejl. Sørg for at få øje på eventuelle off-by-one fejl! Gå derefter gennem koden med et par testsager. Hvis der er problemer, du ser, skal du gennemgå og omarbejde din kode efter behov.

Afhængigt af interviewet har du måske et stort spørgsmål eller et par mindre. Men når intervieweren har aftalt din løsning, er der en chance for, at han eller hun udvider den til forskellige parametre. Du bliver sandsynligvis ikke nødt til at omarbejde koden, men du bliver muligvis nødt til at diskutere, hvordan du ændrer dele af din tilgang. Som jeg nævnte før, er hukommelse vigtig i indlejrede applikationer. Så et almindeligt opfølgningsspørgsmål handler normalt om yderligere hukommelsesoptimering.

Afsluttende tanker

Arten af ​​indlejrede softwareinterviews er stærkt afhængig af virksomheden og det arbejde, de prioriterer. Virksomheder, der arbejder på en bestemt kommunikationsprotokol, vil se efter forskellige ting end en virksomhed, der udvikler et operativsystem i realtid eller en virksomhed, der arbejder på et IoT-produkt.

Jeg ville bruge denne artikel som et sted at dele nogle almindelige temaer i de interviews, jeg har haft, men dette er på ingen måde omfattende. Dette er beregnet til at blive brugt som udgangspunkt. Men bedes du kontakte de nuværende medarbejdere og tjekke Glassdoor for at få flere virksomhedsspecifikke interviewtip.

Interview er hårde, men at forberede sig godt og arbejde hårdt nu kan hjælpe dig med at få et job, du elsker :)

Jeg håber, at denne artikel hjalp, og ønsker dig held og lykke!

Hvis du nød denne artikel, så glem ikke at efterlade en?. Du kan også følge mig på Twitter eller Quora :)