I applied online. The process took 3 weeks. I interviewed at Undo (London, England) in May 2025
Interview
"The Grill" is the name of the interview process. Which was a true software grilling against 3 senior engineers. Most questions were unique and involved deep understanding of Linux system programming
Interview questions [1]
Question 1
System Design and programming was the key topic of questions
I applied in-person. The process took 1 week. I interviewed at Undo (Cambridge, England) in Sep 2017
Interview
You start out with a brief telephone interview to see if you are a potential match for the company, if both parties are happy to proceed you will be invited to a face to face interview.
The face to face interview is long, but fair, I was greeted by the Cheif Operational Officer of the company, who is a knowledgeable guy; he knows his stuff. It's a fairly informal chat about the company, and about what processes they employ at the company. You get given a good idea about what they do, what they value and what they are looking for in a candidate. My face to face interview lasted around 5-6 hours.
I didn't get offered a position as they are looking for someone with a much deeper understanding of how the Linux system APIs work than what I currently have (i.e. at the C Library and Kernel level) and someone with a more comprehensive knowledge of how C code is assembled.
Interview questions [5]
Question 1
Write a C function to reverse a string; discuss your approach, and why you chose the method you have gone for.
Write out the assembly for this C code snippet taking into account possibilities to optimize:
int myfunc( void ); // Don't need to provide assembly for this; you can assume it is "callable"
void abc( void )
{
int a, b, c, d;
a = 1
b = 2
c = myfunc() + b;
return c;
}
Discuss this code snippet; can you spot any bugs and if so, how to fix them (note, the code in the interrupt handler cannot be modified):
// The following is known:
// 1. You can be interrupted at any time.
// 2. The interrupt will be repeatedly raised every 'x' micro seconds.
// Please answer:
// 1, Where is the bug in this code?
// 2. How you would fix it?
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<assert.h>
typedef struct {
int a;
int b;
int c;
int done;
} foo;
foo bar;
void sig_handler(int signo)
{
if ( !bar.done )
{
bar.c = bar.a + bar.b;
bar.done = 1;
}
}
int main(void)
{
bar.done = 0;
bar.a = 0;
bar.b = 0;
signal(SIGINT, sig_handler);
while(1) {
for (int i=1; i < 20; i++) {
for (int j=1; j < 20; j++) {
bar.a = i;
bar.b = j;
while( !bar.done );
assert( bar.c == bar.a + bar.b );
bar.done = 0;
printf("Loop done %d\n", bar.c);
}
}
}
}
I applied through a recruiter. The process took 2 weeks. I interviewed at Undo (Cambridge, England) in Aug 2016
Interview
- Phone chat with a HR person
- Phon e chat with a senior engineer (to understand more about the company and whether we were suitable for each other)
- Interview at Undo's office with COO, CEO and two engineers.
Interview questions [1]
Question 1
Various questions on how I would implement what UndoDB does and then several questions from basic C knowledge to inner workings of Linux.