Saturday 12 October 2013

Embedded Enginner interview questions

    In this post I will give details of how I evaluate a candidate for embedded engineer post. I will mention the question that I ask, reason for asking a particular question and my selection criteria to short list an individual.

    I partition my interview in four topics; programming, operating systems, computer architecture and concepts regarding debugging an embedded target.



Programming
I normally start an interview by asking questions related to programming
  •     I start this topic by asking if the candidate is comfortable with java, c++ or c. I ask this to give a fair chance to the candidate, I don't want to drop a potential java candidate only because he is not good at c/c++. However if the job asks for c/c++ expertise, I make sure that he is good at this. This question also helps me figure out if this person is aware of the major differences between java and c/c++. I normally expect them to know that java is not structural, has no pointers, platform independent, has an automatic garbage collector, on the other hand c/c++ are not platform independent, painful when garbage collector is considered and gives great freedom with pointers. If candidate is showing comprehensive knowledge regarding java and c/c++ I get in to liberty of asking questions like how to call c/c++ function from java ( I want them to be aware of JNI). I also ask questions why java code can be run on Windows, Linux or MAC OS with no need to recompile the output file and why this can't be done for c/c++. 
  •     I ask regarding the differences between c and c++. I expect to get answers like no classes in c, no new and delete operators in C, unavailability of templates in C, C is procedural while C++ is multi-paradigm ( procedural and object oriented). I normally follow these type of questions by asking to change a C++ object based program in to C. I expect them to change the classes to structures, member data to structure data and member functions to function pointer, I normally observe that anyone who is good at this conversion is a great candidate.
  •     Bitwise Operations. I love this topic, because it not only depicts their ability to do bit level operations using a language which is quite essential for embedded domain, but also opens up a window to ask regarding some tricky and fast operations using bitwise operations like 1 line statement to figure out if a number is power of 2 or not ( I was also asked this question ). If they answer  the last questions with ease I give them a rather difficult task of converting big endian number to small endian using bitwise operations, I bet you only a person with detailed knowledge of embedded domain will be able to pull it off.
  •     Pointer arithmetic is also a great topic to figure if an individual is good in C/C++ as he is claiming to be. I also ask regarding pointer to pointer and difference between pointer to a constant object, constant pointer to non constant object and the other variations.
  •       Concept of memory mapped registers and how they can be accessed in C/C++
  •     Difference between volatile and non volatile variables. I usually follow this by asking can we have a volatile variable which is also const.
  •     Difference between storage classes auto, register, static and extern.
  •     Difference between member access specifiers public, protected and private.
  •     I ask some other questions like implementation of sizeof operator in c, figuring out non duplicate element from an array with odd number of elements using O(n) operations. Of course I give hints where necessary.






Debuggers
I have more than 8 years of experience in development and testing of various debuggers including EDGE, EDGE for FlexASIC and CodeSourcery. However in these type of questions my aim is not to figure out if a person is a good debugger developer or tester, but I just make sure that candidate is aware of how to effectively use a debugger to debug an embedded target.
  •     I ask regarding types of breakpoints (software and hardware). If they know the types I ask if they know how they are implemented by the debugger. I normally follow these by asking regarding breakpoint hit count, thread filters, conditions, enabling and disabling etc.
  •     I expect that the candidates are aware of various debug connectors like JTAG, JLink, ULink etc.
  •     I ask regarding difference between baremetal and agent based debugging (gdb server is also an agent).
    However for jobs which involve debugger development or testing, I ask questions regarding following topics.
  • Types of debugging interfaces like MDI, RDI, XDM, BDI etc
  • How stepping is implemented by debugger.
  • Purpose of Debug probes while debugging.
  • Debug information. DWARF etc.
If they had already worked with embedded debugger it is definitely a plus for them.

Architecture
  • Different types of RAMs, their advantages and disadvantages and selection criteria.
  • Types of caches. I normally follow this by asking which is fast RAM, ROM, cache, hard disk etc.
  • Difference between Nand and Nor Flash. I only ask this one if they are showing great understanding of the topic.
  • Direct Memory Access. Why do we need this?
  • Interrupt Vector Table and processing of interrupts
  • Difference between Instruction set simulator and Emulator.
  • WatchDog timers 
  • What is program counter or instruction pointer
  • Interrupt vs Polling
Operating Systems
  • Types of operating systems like RTOS, Hard RTOS, Soft RTOS, single processing, multiprocessing etc.
  • DeadLock. Prevention and Detection.
  • Difference between multithreading and multiprocessing.
  • How multiprocessing is implemented by Operating System. These types of questions are followed by types of schedulers.
  • Virtual Memory. Why do we need this and how this is implemented by operating system. I move to the next topic the moment I heard them say Virtual Memory is created on hard disk. I feel sorry for them when they say its created on RAM.
  • Difference between Paging and Segmentation.
  • What is Fragmentation. What is difference between internal and external fragmentation.
  • What kind of OS is Windows?







1 comment: