How to Prepare for a Firmware or Embedded Engineer Position at Amazon
Crushing the Firmware & Embedded Systems Interview
I have been working as a Firmware and Embedded Systems Engineer for almost a decade at present. I have worked at companies of all sizes with large corporations to fast moving startups to very pocket-size companies with less than 20 employees. I have gone through the interview process several times and given hundreds of individual interviews. During my preparations I rarely establish resources available specific for firmware/embedded systems interviews. In that location are really lots of resource available for general software engineer roles including coding do websites similar Leetcode and GeeksforGeeks merely nothing dedicated for firmware.
Over the years I have made syllabus and methods to gear up for firmware interviews for myself and it has worked well for me. I take worked at and got job offers from top startups similar Samsara, Roku, Argo, and large companies like Intel, Apple (I currently work at Apple). Since I had so much trouble finding good resource I decided to write this guide myself to assistance prospective firmware engineer candidates with their interview preparations.
Most of my interview experience has been in United States just from what I know the process is very similar in other places like Europe, India and many other countries.
I have divided firmware interviews preparation into 4 parts; Coding, Theory, Design and Behavioral. Coding probably is the most of import part of any technical interview followed by theory, merely the weightage of Design and Behavioral increases as well for senior level roles.
From my own experience the interviews go increasingly difficult equally you use for more senior positions, which besides makes logical sense. Entry levels jobs are by and large based on coding and bones firmware theory concepts. For more than senior positions you tin can look some deep design questions. E’er be prepared to write some code even for very senior positions. It’s best to check with recruiters what kinds of questions are expected before the interview.
Technical interviews accept become like sports these days. Y’all merely got to practise information technology better than the contest. It’s very hard to crack technical interviews without training. You don’t simply have to solve the coding questions, you take to solve it in under 25–30 mins. It’s very hard to practice it without do. Even so I believe with some practice and preparation information technology is not very hard to fissure those interviews.
How to prepare:
Getting the interview:
First steps get-go. You lot need to get interview calls earlier you lot tin do anything. You lot are non going to become a task if you lot do not become the interview. Hither are some of my tips to become the interview call:
-
Resume: Make certain your resume is updated and formatted properly. This link from
Careercup
(by the writer of Cracking the Coding Interview) has ane of the best tips I have seen on how to write a good resume. There is also a template which y’all tin can download for your resume. I highly recommend sticking to 1 page resume. Take your resume reviewed by few of your friends or colleagues. I would also recommend getting it reviewed by a professional. - Linkedin: Linkedin has go the de facto location for recruiters to find candidates and vice versa. Proceed your Linkedin profile updated even when y’all are not looking for positions. I always sign up for Linkedin premium whenever I am actively looking for jobs. Your profile gets listed higher in recruiter searches which makes a significant divergence. I always see lot more recruiter reach out to me when I accept premium (chore seekers plus) enabled. You also get to send in-mails directly to recruiters using premium. Again recruiter’south response rates are much higher for in-mails than by direct applying for chore postings.
- Referral: Referrals are the all-time way to go interviews. Have a friend or an acquaintance refer y’all to their visitor. Nearly companies pay cash bonuses to the person who makes the referral and then it’s actually in their all-time interest that y’all get the job. So don’t shy away from asking for referrals. If you lot tin get your resume in the hands of a hiring manager, that’s job already half done!
- Employ directly to company websites: lastly directly applying to open up positions at companies website works as well.
Study Routine:
It tin accept from few weeks to several months to fix for technical interviews depending on your level of preparation. Everyday solve at-least 2–3 coding bug completely. So if you are using Leetcode make sure your code passes all test cases with minimal retries.
Also practice solving coding questions on whiteboard, but these days most hiring is done remotely so you might but end up doing coding excercises on some digital tool like coderpad.
Mock Interviews:
I would highly recommend doing mock interviews during your preparations. Mock interviews are a great way to build confidence and also to get meaningful feedback. You should do both coding and behavioral interview practise. For coding mock interview y’all can practice writing on the board (or on some lawmaking sharing tool for remote interviews) as well as speaking at the aforementioned fourth dimension, which tin take a while to master.
If you can non find everyone to help y’all with mock interviews at that place are some services available online both paid as well as free where you tin can practice technical mock interviews.
I get these comments from candidates a lot that they are not adept at interviews or they really go nervous while interviewing. I get it, I am the same manner. I believe preparing well and doing mock interviews are the best ways to get over these fears and building conviction.
Coding:
Well-nigh interviewers do not really care about what programming language you are using. For firmware roles however C and C++ are by and large recommended. Especially for low level embedded software roles. C is a great linguistic communication for solving pointers and fleck manipulation questions. Noesis of assembly languages can likewise be helpful for some low level software roles. Python is likewise readily used these days especially for writing test scripts and automation. I was asked specific Python (very basic) questions in some interviews. Learning a fleck of Python can be helpful here.
Coding Syllabus:
Coding is definitely the well-nigh of import part of firmware interviews. This is as well the role nearly candidates are scared-of. But not to worry I accept narrowed downwardly the syllabus to the bare minimum which can help you lot succeed. You lot need to exist actually practiced at chip manipulations, arrays, strings, pointers, linked list, stacks and queues. Familiarity with binary copse, hash tables, DFS/BFS, sorting algorithms can be helpful as well. I would non worry too much about more than software focused areas like dynamic programming and graph theory if you are specifically targeting depression level embedded/firmware roles.
Arrays:
- binary search
- ii pointer search
- sliding window trouble
- kadane algorithm
Strings:
- Contrary cord
Linked Listing:
- Reverse Singly Linked Listing
- Reverse Doubly Linked List
- Merger two linked lists
- Add, Delete, Search element of Linked List
- Observe Middle of Listing
- Discover last nth chemical element of list
- Notice if at that place is loop in list
Stacks and Queue:
- Implement Stack (FIFO) using Arrays
- Implement Stack using Linked Listing
- Implement Queue using Linked List
- Implement Queue using Arrays
- Implement Circular buffer
Chip Manipulation:
- atoi, itoa, itob, bladder to bin (link), atof
- Add/Sub in binary (due west/o using + operator)
link - 2s complement (-ve numbers)
- endianness swap (link)
- range of 8 bit (-128 to 127
link) - represent float in binary (link)
Memory:
- implement aligned malloc/costless **
link - implement malloc/free using static buffers (arrays)
How to answer coding questions the Google way:
I got the follwing information while preapring for Google interview. Google is very specific about how they similar candidates to answer coding questions. I really like that approach and I remember you can apply information technology for other company interviews also. So here it goes:
-When asked to provide a solution, first define and frame the trouble as yous see it.
-If you don’t sympathise — ask for help or clarification.
-If you need to assume something — verbally check its a correct assumption!
-Ever let your interviewer know what you are thinking every bit he/she volition exist as interested in your process of idea as your solution.
-Also, if you’re stuck, they may provide hints if they know what yous’re doing.
-Finally, listen — don’t miss a hint if your interviewer is trying to assist you!
Interviewers will be looking at the approach to questions equally much as the reply:
Does the candidate listen carefully and embrace the question?
Are the correct questions asked before proceeding? (of import!)
Is animate being force used to solve a problem? (not good!)
Are things assumed without first checking? (not skillful!)
Are hints heard and needed?
Is the candidate boring to comprehend / solve problems? (non good!)
Does the candidate relish finding multiple solutions before choosing the best one?
Are new ideas and methods of tackling a trouble sought?
Is the candidate inventive and flexible in their solutions and open to new ideas?
Tin can questioning move upwardly to more complex problem solving?
Behavioral:
The behavioral part of the interview is equally as important as the coding part and I feel you should spend some time preparing for it as well. Dissimilar companies has different names for the behavioral part of interview. Amazon calls is the Leadership Master, Google call it ‘Googliness’ interview.
Some tips to prepare for this circular:
prepare, write downwardly and exercise list of common questions like:
- Tell me about yourself.
- Why practise you want to switch jobs?
- tell me nigh the hardest problem yous accept solved or your biggest achievement.
- Tell me about a fourth dimension you wish you’d handled a situation differently with a colleague.
- Tell me about a time when someone was wrong? How did you communicate?
- Have you handled a difficult situation with a coworker? How?
- Can y’all give a story about what you should have done differently in a by projection?
- What’s the most circuitous or niche thing you know a lot virtually? tin you explain it to me in 5 minutes or less?
- why should we hire you?
Prepare each question carefully and practice it several times.
-record your self
-do mock interviews
-pay attention to your voice
-general interview advice: speak slowly, loudly, clearly, practice!
-make sure people empathise what you are saying. Endeavor to explain a concept to someone and ask them if they understood.
-use SAR technique [link]
Theory:
Most firmware interviewers ask both coding besides every bit theory questions. Information technology could be in the aforementioned interview or you tin can have separate interviews focused on either coding or theory or design.
-Deviation between Serial Advice protocols like I2C, SPI and UART.
-Bones Electrical Engineering (transistors, diode, capacitors, motors)
-C++ (STL, inheritance, polymorphism, copy constructor, constructor vs destructor, overloading vs overriding operator, deep vs shallow re-create, virtual functions, handles) — this is assuming your primary coding language is C but you are still familiar with C++
-What happens when you boot
link
link
-UART/I2C/SPI (compare, pull-ups)
-DMA
-Security (digital signing, hash, encryption)
-Software/hardware break indicate, JTAG
-Math: probability, basic trigonometry
-Lawmaking testing methods (how will you exam this code)
-TCP/IP
Os Theory: (
link
)
-RTOS
-Task scheduling (FIFO, Round Robin, Priority-based)
-Threads (creation, joining, role pointer, spawn attributes)
-Mutex, semaphores, spin lock
-Context switching
-Scheduler
-Queues, FIFO, mailbox (multicore communication)
-G4G top Os questions, MCQs (link)
-Producer consumer problem (interviewers dearest asking this question! Very important, both theory and writing code example)
Book Recommendations:
-
The C programming Language by Brian Kernighan and Dennis Ritchie:
For firmware and embedded organization engineering, deep understanding of C programming is crucial. This is a small book just has everything you demand to know nearly the C. I would recommend going through the showtime half dozen chapters at-to the lowest degree and if possible besides solve all or almost of the exercise questions. I would have to say this book is not an piece of cake read but well worth the effort.
2. Nifty the Coding Interview by Gayle McDowell:
This is probably the best book available currently to prepare for coding interviews all the same this book is written for general Software Engineering interviews and then lot of the information may non be straight relevant for Firmware Technology positions. Experience costless to skip System Design, Graphs, Searching and Database section. Also if you decide to solve the exercise part, I would skip the hard questions.
Questions asked to me from my by interviews (embedded systems/firmware):
– merge ii sorted linked list
– types of interrupt in linux
– diff between SPI, UART, I2C
– questions on BLE
-when to use volatile const variable at aforementioned time (answer: read only hardware registers)
-write a device driver using given spec
-implement a grey code like system (HW interview)
-design system for packets substitution
-pattern a traffic lite system
-explain what happen in firmware update, how to uC loads new firmware
-diff betwixt mutex and semaphores
-design opAmp
-c++ basics
– what happens when embedded sys boot
– explain compilation chain
– diff between SPI/UART
-when to use RTOS vs baremetal
-discover a missing number (binary search, log n)
-observe if matrix is perfect sudoku (code)
-stack trouble, find if all braces opening has a corresponding closing brace
-unequal between TCP/IP
-how to make certain data integrity in a data transfer
– how to connect multiple I2C slaves, clk stretching, multi voltage system, pull up
– structure padding
– assortment coding question
-presentation on any topic to the team
-math problems (probability, memory size)
-implement queue
-basic OS questions
-write temp sensor device driver (2s complement) — how to examination
-design problem (automated door opening organization)
-find endianness
-graph search (find if 2 nodes connected)
-altitude between ii points (math)
-design a camera organization
-reverse endianness
-Bone: deadlock prevention, volatile, BLE
-how to sign firmware during update (code signing)
-how to overflow stack, what is PC, SP
-capacitors in parallel (what is final capacitance)
-add together 2 numbers without + — operation
-notice if number is multiple of two
-BLE questions, scheduler
-merge 2 sorted linked list
-assortment: notice data above a threshold in a data assortment
-blueprint a IoT calorie-free bulb
-notice bugs in a code
-assortment: find compatible elements (using API)
-HW timer: given HW timer build an API system which can ready whatever num of timers
-behavioral: give situation where y’all went out of your way, how did you lot solve a problem
-driver for reading a keyboard matrix
-how will you design hw, fw, sw for i2c like stream of information
-array: remove duplicates from sorted array
-discuss projects
-some trigonometry similar questions
-behavioral: how will you contact/bargain with external teams
-how to allocate read simply and write register variable
-questions on interrupt, write syntax for role pointer
-question on allocate 12 scrap ADC data in a buffer to 16 chip array elements
-boot-loader questions
-Implement malloc_align and malloc_free
-array question, move 0s to end
-lot of questions on RTOS/synchronization, mutex/semaphores
-cache coherency, virtual memory, paging, MMU, PCIe
-RTOS
– Os questions
– increment a hex string past 1 in place (no extra retention allocation)
-lot of questions on RTOS/synchronization, mutex/semaphores
-boot-loader questions
-implement ring buffer in C
-lot of questions on RTOS/synchronization, mutex/semaphores, priority inversion
-Implement malloc_align(size, alignment) and malloc_free
– find closest five number in a assortment to a given number
– fix $.25 in a 32 fleck number to a give range
– find number of set $.25 in a number, how volition y’all optimize (look up table, optimize further)
-atoi() with write your own INT_MAX, INT_MIN
-notice endianness
-find occurrence of 32 bit number in a buffer on equally find_occurence(char *buff, int buf_size, uint32_t num)
-EE related questions (review schematic, annals divider, ohm’s police force)
-how fast UART receiver need to sample?
-how SPI daisy chaining work?
-why SPI faster than I2C? what is clock stretching?
-how will you figure out if 2 save of aforementioned addresses are connected to I2C?
-why does loftier pullup increases rise fourth dimension?
– diff SPI/UART/I2C
-add/remove elements at position n at linked list
-circular queue implement without size (using array)
-implement malloc (with fixed size array)
-lots of flake manipulation (find set bits (efficiently), set bits in range, opposite endianness)
-review schematic/code reviews
-sort linked listing even/odd (maintain order)
-implement queue using linked list
-write timer function example with callback role [setTimer(*callback, elapsing, type …)]
-send double pointer to function
-align malloc
-implement thread safe queue
– copy UTF-8 encoding whole characters simply (bank check UTF-viii encoding)
– change nth scrap to x
– implement sizeof
– lots of fleck manipulation
– linked list seperate even/odd nodes
– elementary python code/crypto-security questions
-write UART device driver (given registers)
-discuss a CPU profiler
-write coulomb counter, design H/West
-design HW/FW for a system to read 8 unlike Sensor values (using Analog MUX)
-RTSO basics
-Electrical Applied science/Electronics basics
If you discover the commodity helpful, delight consider connecting on
Linkedin
!
Allow me know if at that place are more topics you want me to write about.