<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Interview on Rishav's Digital Garden</title><link>https://blog.rishavs.in/tags/interview/</link><description>Recent content in Interview on Rishav's Digital Garden</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 23 Jan 2026 19:53:00 +0000</lastBuildDate><atom:link href="https://blog.rishavs.in/tags/interview/index.xml" rel="self" type="application/rss+xml"/><item><title>Embedded Interview Questions</title><link>https://blog.rishavs.in/posts/embedded-interview-questions/</link><pubDate>Fri, 23 Jan 2026 19:53:00 +0000</pubDate><guid>https://blog.rishavs.in/posts/embedded-interview-questions/</guid><description>&lt;h2 id="linux-theory">Linux Theory&lt;/h2>
&lt;h3 id="user-space---kernel-space--driver-interface">User space &amp;lt;-&amp;gt; Kernel space &amp;amp; Driver Interface&lt;/h3>
&lt;ul>
&lt;li>What communication method i use to communicating between User space to Kernel space.&lt;/li>
&lt;li>How do the driver/device know which application is communicating with it.&lt;/li>
&lt;li>&lt;code>write()&lt;/code> api in user and kernel space, what are difference in arguments. From which header &lt;code>write()&lt;/code> is included.&lt;/li>
&lt;li>Explain ioctl calls and its handling in kernel and user space. What are the things application is dependent on to call a particular ioctl.&lt;/li>
&lt;li>What is systemcall table&lt;/li>
&lt;/ul>
&lt;h3 id="device-tree--platform">Device Tree &amp;amp; Platform&lt;/h3>
&lt;ul>
&lt;li>Why and How is Devise Tree used.&lt;/li>
&lt;li>How is the device tree actually passed or accessed by the drivers.&lt;/li>
&lt;li>How is the physical device be mapped to the driver device.&lt;/li>
&lt;li>How is the platform bringup done? And what do we mean by platform devices.&lt;/li>
&lt;/ul>
&lt;h3 id="interrupts--deferred-processing">Interrupts &amp;amp; Deferred Processing&lt;/h3>
&lt;ul>
&lt;li>How does interrupt is managed by the kernel? Describe each modules called which are done before calling isr and what are the propagation delay while interrupt is called.&lt;/li>
&lt;li>How are interrupts managed by the kernel&lt;/li>
&lt;li>What are arguments to a particular interrupt regestering function&lt;/li>
&lt;li>Top half and bottom halfs, how are the complex isr managed.&lt;/li>
&lt;li>Top halves and bottom halves&lt;/li>
&lt;/ul>
&lt;h3 id="memory-management--dma">Memory Management &amp;amp; DMA&lt;/h3>
&lt;ul>
&lt;li>How kernel manages memory, like how malloc works&lt;/li>
&lt;li>How is the TLD used to manage physical and virtual addresses? What exactly kernel does?&lt;/li>
&lt;li>What is DMA and how does the driver handels it.&lt;/li>
&lt;li>What is DMA and how it works?&lt;/li>
&lt;/ul>
&lt;h3 id="kernel-debugging--virtual-fs">Kernel Debugging &amp;amp; Virtual FS&lt;/h3>
&lt;ul>
&lt;li>How will you debug kernel crash or panic?&lt;/li>
&lt;li>What is procfs and sysfs&lt;/li>
&lt;/ul>
&lt;h3 id="synchronization--concurrency">Synchronization &amp;amp; Concurrency&lt;/h3>
&lt;ul>
&lt;li>Mutex semaphor explanation and difference&lt;/li>
&lt;li>Race and deadlock conditions&lt;/li>
&lt;/ul>
&lt;h3 id="boot--init">Boot &amp;amp; Init&lt;/h3>
&lt;ul>
&lt;li>Linux boot process&lt;/li>
&lt;li>What are init systems? Example systemd or any other init system&lt;/li>
&lt;/ul>
&lt;h3 id="misc-kernel--language-concepts">Misc Kernel / Language Concepts&lt;/h3>
&lt;ul>
&lt;li>Describe static and auto&lt;/li>
&lt;li>What is volatile used for? Can const be volatile?&lt;/li>
&lt;li>Write sudo code for character device driver&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="embedded">Embedded&lt;/h2>
&lt;h3 id="communication-protocols">Communication Protocols&lt;/h3>
&lt;ul>
&lt;li>I2C Start and stop bits, the data and clock config at start and stop&lt;/li>
&lt;li>SPI lines&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="programming-theory">Programming Theory&lt;/h2>
&lt;h3 id="concurrency--os-concepts">Concurrency &amp;amp; OS Concepts&lt;/h3>
&lt;ul>
&lt;li>What is the difference between Mutex and SpinLock&lt;/li>
&lt;li>What are mutex, threads, spinlocks&lt;/li>
&lt;/ul>
&lt;h3 id="data-structures">Data Structures&lt;/h3>
&lt;ul>
&lt;li>LinkList&lt;/li>
&lt;li>Data Structures: Stack, Queues, Heap&lt;/li>
&lt;/ul>
&lt;h3 id="c-language--memory-model">C Language &amp;amp; Memory Model&lt;/h3>
&lt;ul>
&lt;li>C Concepts: BSS, Data Segment, ReadOnly segment.&lt;/li>
&lt;li>Diff between structure and union and their sizes&lt;/li>
&lt;li>What is pass by value and pass by reference look like?&lt;/li>
&lt;li>Calculate the no. of elements inside of array if the array pointer is passed to a function.&lt;/li>
&lt;/ul>
&lt;h3 id="function-pointers--declarations">Function Pointers &amp;amp; Declarations&lt;/h3>
&lt;ul>
&lt;li>Write declaration of An array of 5 pointers to a fucction. These functions are taking int arg and return int&lt;/li>
&lt;/ul>
&lt;h3 id="program-execution--memory-layout">Program Execution &amp;amp; Memory Layout&lt;/h3>
&lt;ul>
&lt;li>What exactly happens, what would be loaded in memory and which segments&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>main(){printf(&amp;#34;Hello World&amp;#34;)};
cc main.c
./a.out
&lt;/code>&lt;/pre>&lt;hr>
&lt;h2 id="data-structures--algorithms-dsa">Data Structures &amp;amp; Algorithms (DSA)&lt;/h2>
&lt;h3 id="arrays--searching">Arrays &amp;amp; Searching&lt;/h3>
&lt;ol>
&lt;li>Get the highest and 2nd most highest number from unsorted array without sorting it. &lt;code>int arr[10] = {5, 10, 15, 3, 9, 21, 7, 12, 2, 16}&lt;/code>&lt;/li>
&lt;li>Write a program to search inside of the array in 0(n/2) time complexity. Get a number from user and count the no. of times that number is present inside the array.&lt;/li>
&lt;/ol>
&lt;h3 id="bit-manipulation">Bit Manipulation&lt;/h3>
&lt;ol>
&lt;li>Convert &lt;code>0x12345678&lt;/code> to &lt;code>0x34127856&lt;/code> using bit operators&lt;/li>
&lt;li>Write a macro to toggle a given bit&lt;/li>
&lt;li>Get a number in hex and start and end range number from user. Write a function which sets the number from the start till the end bit. The program should be independent from the machine architecture.&lt;/li>
&lt;li>Count no of set bits in a number&lt;/li>
&lt;/ol>
&lt;h3 id="linked-list-problems">Linked List Problems&lt;/h3>
&lt;ol>
&lt;li>Reverse a link list&lt;/li>
&lt;li>Solve the error occured(sig. fault) in the last question of 1st round.&lt;/li>
&lt;li>Write a program to find middle point of a linked list&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>Implement Linklist, its structure size, padding, allocating and print list wrappers.&lt;/li>
&lt;/ul>
&lt;h3 id="memory-management">Memory Management&lt;/h3>
&lt;ul>
&lt;li>Assume you have a memory pool of 1G allocated using malloc(). Now, implement my_malloc() and my_free() which will operate on this 1G chunk of memory to service multiple threads in an application. Try to implement the APIs which can alloc/free in O(1) time complexity.&lt;/li>
&lt;/ul>
&lt;h3 id="multithreading">Multithreading&lt;/h3>
&lt;ol>
&lt;li>Write a program which has 2 threads, 1 will take input from the user and another thread will do some processing on that input.&lt;/li>
&lt;li>Program to print from 0 to 100 sequentially using 2 threads, 1st thread will print only even values and 2nd thread will print only odd values.&lt;/li>
&lt;/ol>
&lt;h3 id="debugging--miscellaneous">Debugging &amp;amp; Miscellaneous&lt;/h3>
&lt;ul>
&lt;li>Implement sizeof operator&lt;/li>
&lt;li>Write a program to print diamond pattern&lt;/li>
&lt;li>Print all prime numbers between 1 to 10.&lt;/li>
&lt;li>Follow up: Store the prime numbers in singly linked-list.&lt;/li>
&lt;/ul></description></item></channel></rss>