Uncategorized

Tales From My First Technical Interview

So I got my first technical interview.  It was an interesting experience, and definitely far outside of anything I’ve done before.  As I sit here on the train home it seems like a good time to work through my experiences, in the hopes of learning from it.

It was broken into three distinct parts, each interviewer came with their own goals and interests, and clearly had their own domain of knowledge.

Person 1: went through understanding of pretty basic stuff, asked me what the computer DOES, in as much or as little detail as possible, when you type “google.com” into the address bar and hit send.  He stressed that this was a “no right answer” kind of question, and just wanted to know how we thought through a weird question,and it also gave clear hints about where we came from. For example I talked about the DNS request, and then walked through how the page info would be downloaded and parsed.  When I finished he explained that in his mind he immediately went towards the hardware, and that the NIC was looking at the hardware cache etc.

Gave me white board question:  given unsorted array of ints how would you print every duplicated item only once.

To be clear, he started out with less concrete details that I’ve outlined here.  He briefly hemmed and hawed about a linked list vs an array, further more details were outlined when I asked.  Is it sorted? did he want duplicates printed once or multiple times, and were were time or space sensitive?

I enjoyed this a lot, it felt like he was trying to see how I thought vs giving me a scripted question that he expected a singular solution from.

After a brief detour into wrong town I realized sorting it was the best way to handle this, and at that he more or less told me to call a “sort the array” function and move on.  

After my first pass and I started to move to testing, he stopped me and said he saw 3 distinct bugs and asked me to relook over the code.  As I found the issues he checked them off the verbal list “With that change we’ve fixed the first two issues I saw.”

 

After I finished the solution he asked me to test it, and was pleased when I started writing out explicit test cases.  Then we talked about WHY I chose the test cases I did, and he explained how one of them was particularly good given a bug I had (which I of course didn’t spot with that test case because I hand waved too much).

Afterwards we went on to talk time and space complexity, of my solution.  And this is when that sorting came back up. He wanted these figures in terms of the sorting and then incorporating the sorting into the overall algorithm.

Person 2: This man started out wanting to talk about interfaces, and I had no idea what that was.  So when I told him I had no idea what that was, he more or less lost all interest in the interview, devolving to sitting on his phone while I worked on the coding problem I was given.  

That being the factorial problem both recursively and iteratively.  This caused a great deal of confusion in me, because of the simplicity of the problem.  I was completely confused by this being the thing that was asked. I overthought it so thoroughly, as I couldn’t fathom that he would give me something so simple.  Eventually I got through it, to a semi positive response from him. “Yeah that looks fine, we don’t even need to step through it.”

He then asked me about projects, where had I failure and how could I attribute that failure to.  And this is really where my stomach sinks. This sis a SUPER obvious question, and I shat the bed in such a catastrophic way.  I blamed and complained. I talked about process (or lack thereof) in my current work primarily. I didn’t OWN anything. If I don’t get the job this will be what I will 100% point to as the issue.  I NEED to find better answers to this question.

Then, finally, we went back to knowledge questions, talking about classes, the parts therein, how we handle/what are static member variables, what the different access specifiers were, and what they meant.  We walked through creation and use of a class, “we’re in main, create an instance of the class … okay now access the function given in the prototype.

One major struggle we had was a difference in coding language.  I find all of these types of problems easiest in C++, and that’s what I defaulted to.  When he asked me to create an instance of the class, he expected className instanceName = new className(arg), but because I was thinking in C++ I used className instanceName(arg) which he immediately latched onto as wrong.  

This whole section felt like a basic knowledge test.  I think he was thrown by my lack of understanding of interfaces, and was at a loss as to where to go without his interview path he had clearly planned out.

Person 3: Started off talking about languages, I clearly favor javascript, in that everything I’m listing as a skill I’m comfortable using is javascript derivative, and he wanted to talk to me about why that was something that appealed to me.  He moved on to talking some of the intricacies of javascript such as hoisting and how javascript handles variable scope (read: poorly).

His pre whiteboard problem was pretty brief all in all.

And this whiteboard problem MESSED me up.  I felt like every choice I made was wrong, and I pretty clearly got frustrated about it.  I will say, that I’m incredibly proud of the fact tat at a certain point I stopped myself and said “okay, I’ve gone down a bad path somewhere, back up, look at my assumptions, and start again.”  I feel like this was a very good decision by me, and hope that it was appreciated.

In the end I found a solution, it took some nudging “you’re looking for a math problem that wont be particularly helpful, but this other idea you’re chasing is a good path”.  But in the end I got there. At the end I had the insight to ask him to share his assessment, and he was massively positive. He said where I landed was what he was hoping for from interviewees.  There was an idiosyncratic way he solved it that he jokingly said was worth bonus points, but what he wanted was my solution. He then gave me some minor critiques that I need to 100% take to heart for this going forward.

Takeaways/Lesson plan:  

Interfaces, how do they work???

Prefixv vs postfix increments, why

Statics in greater detail