Interviewing with Jane Street for a Linux Engineer role
In August I interviewed with Jane Street for a Linux Engineer role, and I didn’t get it. They asked me not to share anything about the interview itself, so this post doesn’t: no questions, no tasks, nothing from inside it. What I can share is the ground I made sure I had covered going in, because none of that is theirs. It’s the same ground any Linux, systems or infrastructure role expects you to know.
Before writing this, I asked if I could write about the interview, and whether they’d rather I didn’t name them. This was the reply, and it’s why there’s nothing from the interview itself in here.
Most of my day-to-day work is kernel and data plane code. Before the interview I went over the fundamentals around it as well, from the kernel boundary outwards.
The basics
These are what any Linux, systems or infrastructure role expects you to know:
syscalls and what strace shows, fork and exec, threads and processes,
signals and process states (D state, orphans, zombies, PID 1), virtual memory,
page faults and overcommit, inodes and permissions, file descriptors, pipes and
redirection order, what the shell expands before a program runs, the boot path
from firmware to systemd, load and iowait, and sockets and TCP states. I wanted
to be able to explain each of them without looking anything up.
The deeper parts
Most of my own time goes into the areas below, and I’ve written about all of them here.
XDP and eBPF. In xdp-bfd, replies are built inside an XDP program by rewriting the incoming packet. That meant BPF timers, keeping BPF maps consistent with userspace, pinning maps and links so a new process can take over without dropping anything, and fitting SHA1 into the 512-byte BPF stack.
Scheduling. Part 1 of that series is about how the normal scheduler picks the next task and what SCHED_FIFO does to everything below it. Part 9 gets into real-time throttling, and why a SCHED_DEADLINE reservation is the only thing that outranks a priority-99 task.
The receive path. On real hardware I had to deal with NIC queues, flow control and moving work to other CPUs with a cpumap, and I found PCIe power saving showing up as reply latency. Those are in part 9 and part 10.
TCP and tunnels. My offsite backups
were slow because cubic collapses on a small amount of loss over a long path,
and switching to BBR with fq pacing fixed it. The same post covers why a
WireGuard peer behind NAT needs a keepalive.
Routing daemons. I have eleven fixes merged in FRR’s BFD daemon, from its data plane protocol to authentication, and they’re all in the FRR post.
How it went
From my side, the interview went well. I got through everything within the hour, and it wrapped up around the 56th minute. I don’t know what Jane Street’s criteria are, so I can’t say what decided it. Better luck next time.