June 20, 2013 - Tagged as: en.
A few hours ago I had my first interview ever. I had applied to Jane Street’s software development internship position last Sunday(16 June), and they returned to me on Monday(17 June), and we had an interview today(20 June). It was overall a very good experience.
I should say I’m a bit sad about this interview, because I couldn’t answer the questions with details I could answer and I gave wrong answers to some questions that I know very well. Still, I think I wasn’t bad in general. What happens next will be clear in few days.
We started with some generic personal questions like what I know, what I write, why did I applied to this internship etc. and I couldn’t give good answers even to this questions. For example, at some point I’m asked “what do you like about functional programs”, if you sit next to me in a class and ask me same question, I can give you a 50-minute lecture, but while at interview I just couldn’t do that.
Anyway, we then moved to technical question.
As for first question I’m asked to list 5 unix programs with 2 letters. I immediately listed vi
and ls
, after some thought I added sh
, ld
, ln
and nm
. I’m asked for what does ld
do, and I wrongly answered “shows dynamically loaded libraries of an ELF binary”. My interviewer later asked me if I ever used that command, lol. It was funny that I said yes and explained how I used it, haha. The program I explained here is actually ldd
, and ld
is actually a linker(and I knew it very well, even though I have never called it manually). I also gave wrong answer to nm
, I said “it shows string in a binary”, which was wrong because that what strings
does. I should have said “shows symbols in a binary”. And I use these tools frequently!
For second question I’m asked “how would I count a list of files in a folder and it’s subfolders”. I said I’m not that good in shell environment so I wrote a small Python program instead. This was easy. (btw, I made a mistake even in this code by first writing a Python program that prints file paths instead of counting files, haha. Later I’m warned and I fixed the code :-D )
For third question I’m asked to tell what I know about garbage collectors and garbage collection techniques. I said the purpose of garbage collectors, and then mentioned reference counting technique. Later I’m asked to list some languages that does and doesn’t have automatic garbage collection.
Fourth question was to write and explain a map
function that works on lists. It was trivial.
Fifth question was to write and explain fold
function. I mentioned both left and right folds, wrote foldl
in Haskell syntax and said that it’s a tail recursive process. At this point I’m also asked why is it tail recursive and what does tail recursive mean.
I think one nice question at this part is that the question of “does being tail-recursive matters in Haskell, because it’s lazy by default”. I think my interviewer wanted to test me if I understand orthogonality of laziness and tail recursion.
Last question, which I failed to give a correct answer was “you have a 5-sided fair dice, and you want to make a fair choice between 7 choices, how can you do it?”. Now this is by no means a hard question and I solved harder problems, but at that time I just couldn’t answer it.
One interesting observation I made while I’m trying to solve this problem was that thinking in a language and translating ideas to another one at the same time is hard. After few seconds of silence my interviewer asked me to say what I’m thinking. I was bad at this.
Anyway, I think I did good enough. I’ll post on updates, wish me luck :-) .
EDIT: I’ve just got an email from Jane Street, we will make another interview, this time with someone from NY office :-)