Justin Rudd’s Drivel

My interview with Amazon

April 29, 2007 · 69 Comments

I wrote a little while ago about my interview with Microsoft. I was going to wait a bit before putting this post up. But I decided to go ahead and post and keep my mind off things.

Basically my interview with Microsoft wasn’t the greatest I’d ever had. But Pea and I still wanted to move to WA. I started looking at companies that were based in WA. I looked at Dice and Monster primarily. But those seemed to be pretty much filled with Microsoft jobs. Finding a non-Microsoft job on their website was actually pretty easy until you dug into the job listing. A lot of the jobs were listed by recruiters that were hiring for Microsoft. So those two websites were kind of a bust. I applied to a couple of jobs, got a couple of callbacks, but nothing that really stoked my interests.

One night I was browsing through Amazon.com fixing my recommendations, and I noticed a small link at the bottom that said “Come work for Amazon”. I figured what the heck. I clicked on it and was sent to their jobs page.

They had a ton of jobs listed (568 as of this posting). I looked through them, and they were all for C++ and Linux. Some of them were for Java and Linux. But they all had Linux on them. At the time, I had maybe clocked 10 hours on a Linux box. My college programming was all done on Windows using Visual C++ Compiler and MFC as the class library. We didn’t really care about cross-platform C++. If we wanted to build it that way we could, but we didn’t get any extra points or anything.

Up until 2003, all I’d ever done is C++ programming for back end systems. COM, DCOM, COM+, MSMQ, etc. were my middle ware technologies. So all the *NIX technologies were foreign to me. But they needed C++ developers (check) and distributed systems experience (check) and linux (nope).

I wrote them a cover letter basically saying that my C++ and distributed experience were very good (which I believe they are), but that other than having a passing knowledge of Linux (I knew things like cat, sed, tail, awk, etc.), I’d never used it in a production environment.

It was about 4 days before I got a call from a recruiter. She wanted to setup a phone screen for the next day. “Sure. I look forward to it.”, I said.

The next day, I get a call from a senior developer. He explains what the process will be and how long it will take. The very first question - why do you want to work at Amazon? Now I knew this was coming. Every interview I’ve ever had I get asked this. But I ignored my cardinal rule and wasn’t prepared with a good answer. I had general ideas about why I wanted to work there -

  • Humorous - “I’ve spent enough money there over the years. I’d like Amazon to give some of it back.”
  • Greedy - “I want to move to WA”
  • Technical - “I want to work on truly large systems”

In the end, those are all reasons why I wanted to work there. But the last one - work on truly large systems - is the one I told him. There are very few truly large systems in the world. Everybody says they want a developer that can build a scalable system, but Amazon, Microsoft, Google, Yahoo!, and a few others are the only ones that truly do need those types of people. To work with datasets that encompass millions of orders a day is a humbling experience.

He seemed to like the answer. He grunted his approval and off we went on a discussion of the C++ language. What features I liked, didn’t like, what I would change, etc. Then came the homework assignment. Write a function that detects a cycle in a graph. I was like “oh well. It was fun while it lasted.”. I’d been out of college for close 8 years at this point. And I haven’t used graphs even one time outside of college.

But I knew what they were, so I spent the next 62 minutes (2 minutes over the allotted 60 minutes) hacking out a solution. I spent a lot of time naming variables and functions. I made very short functions that allowed the code to read like an English sentence. Basically I was going for form and function. I think most people go for function or form, but not both. But the graph stuff was fairly easy. Used quite a bit of STL and templates (probably more than I needed). I did put in my response, that I’d probably use Boost::Graph instead of doing this all by hand. Believe it or not, most Windows C++ developers know about Boost :) We used the pieces that we could.

I got a call back from the recruiter the next day saying they wanted to schedule a second phone screen that would be a bit more technical. She told me it would focus on data structures and design skills even more than the first. “Sure. I’m available any time”, I said. The call came 3 days later.

I was a bit more prepared for the culture questions this time around as I had been thinking about them for 3 days. Of course, the second interviewer only asked me 1 of the same questions - why do you want to work for Amazon? I gave him the same answer as before. He grunted his approval and off we went.

He asked me to name some data structures. I named off the normal ones - array, list, map, set, etc. He said “What about hashtable?”. I said that a hashtable is an implementation of a map, but not the only type. I mention that because it was the smartest thing I said in the phone screen :)

He asked me how a hash table is typically implemented, complexity of lookups, inserts, etc., where you would use them, and where you wouldn’t use them. It was a good set of questions. The main one I had trouble with is where you wouldn’t use them. I had to draw out some Java knowledge of TreeMap and specifically a method that it has called submap (tecnically part of the SortedMap API). But I could never come up with a good place to use a TreeMap. We moved on to optimizing the details page of Amazon.com.

Without giving away the secret sauce of Amazon.com’s detail page, let me just say that A LOT of work goes into showing you that detail page :)

First he asked me how I would determine that a page was popular. I started off way to detailed and too complicated. I started talking about instrumenting the code to track page renders and keeping track of that information in a database. Then based on mining of that data, you would know which pages were the hot pages. While that works, it is incredibly invasive and complicated. He asked for something simpler than that. I don’t know why, but it just dawned on me - Apache access logs. They already knew which pages were getting hit the most. They had the access logs. So I described a solution where you’d mine the logs keeping a count of the most popular ASINs.

He was happy with this and then asked how would the web server deal with the cache. Again I went way too detailed. I was talking about a rendered page cache and looking at the URL to know which page. And all he wanted to know was - what data structure would I use for the cache. Oh. Hashmap. Then we talked a bit about concurrency and what not. Then came the homework assignment.

This is where I had a brain fart. He farmer problem. This is where there is a farmer who has a cat, chicken, and grain. He needs to get them across the lake but can only take them one at a time. If he leaves the cat with the chicken, the cat will eat the chicken, and you lose. If he leaves the chicken with the grain, the chicken will eat the grain, and you lose. He told me to write a program that would give the farmer the correct order to take them across the lake. So I dutifully started to implement this when I got a “feeling”. The interviewer said program not algorithm. Is this a trick question? I spent the next 10 minutes figuring out if this was a trick question or not. Finally, I decided I had a 50/50 shot of it being a trick question. So I wrote a program that told him the correct order. Here it is in its entirety -

#include <iostream>

using std::cout;
using std::endl;

int main() {
   cout << "Farmer takes chicken, leave cat and grain" << endl
        << "Farmer leaves chicken, returns by himself" << endl
        << "Farmer takes cat, leave grain" << endl
        << "Farmer leaves cat, returns with chicken" << endl
        << "Farmer takes grain, leaves chicken" << endl
        << "Farmer leaves grain, returns by himself" << endl
        << "Farmer takes chicken" << endl;

   return 0;
}

This program is correct. Because it will always tell the farmer the correct order to take his items across the lake. In the pit of my stomach, I knew I was doing the wrong thing, but still I sent it in. Why? Because the interviewer said program not algorithm. I even put in the e-mail my rationale and said “I’m either making a huge mistake or being correct. I’m hoping for correct”.

It was about 3 days before the recruiter called me back and said “We want to schedule you for an onsite interview.”. I was in shock. I just knew after I sent in that “program” that it would have been the end. But I guess it was correct enough for the interviewer. Or maybe he just didn’t put a lot of stock in the homework assignment.

It took about a week before I went up. And during that time, I was psyching myself down. I kept telling myself that there was no way they would hire someone with absolutely no Linux experience. Sure I knew C++ but only in a Windows environment. All my sockets programming was done with CSocket in MFC or Winsock directly. Berkeley sockets? Nope. Never did that. CORBA? Sure I’d look at IDL and what not since I was big into COM/DCOM at the time. But ORBs and what not were foreign to me in practice. Theory sure. Practice no.

They put me up in the W in downtown Seattle on 5th avenue. The interview address was for 5th Avenue South. I found out later that the “South” prefix makes a huge difference. In the morning, I stroll out and ask a cabby for a ride to the address. He looks at the address and says “That is only 2 blocks north. I’m not driving you.”. Normally I’d go off on the cabby about it is his job to drive people, but I decided to walk it. Didn’t want to put any bad Karma in the air before I got to the interview. I got to the address and asked reception where I was to check in. They looked at me like I was crazy. I asked if they were 605 5th Avenue South, they said we are 605 5th Avenue, but South is about 12 blocks…south…of where I was.

I walk back outside and can’t find a cab. So I start running…in dress shoes. I finally get to 5th Avenue South which is a downhill stretch. I’m sweaty and my feet hurt. I walk the rest of the way and get checked in 5 minutes early.

A different recruiter then the one I’ve been talking to on the phone comes down and gathers me up and chats with me for about 10 minutes. Tells me what to expect and what not. Now here is where I give Amazon huge kudos on the interview process. I was in the same room all day. For my Microsoft interview, I was constantly moving between buildings, trying to find shuttles, and hoping I wasn’t running late.

My first interviewer of the day was to grill me on C++. He gave me a scenario (which at the time I thought was implausible but after working here for awhile…) where they had a ton of shared code in a constructor that was identical between 3 different constructors except for 1 line. At the time, I’d been reading Modern C++ Design, and I’d been trying to work in more templates into my everyday programming. I asked a few questions about the code whether or not it used the parameter values passed in the constructor, if it used any of the fields that were initialized in the shared code, etc. I ended up giving him a templated class whose template parameter was the different code. He liked it, but I could tell it wasn’t what he wanted. That’s when he tried to catch me with the trap. He asked, couldn’t you use put it into a C++ virtual function? *buzz* No. Virtual functions don’t work from constructors in ISO C++. We went round and round about templates just when all he wanted to know is if virtual functions could be called from constructors.

The next interviewer was…well…interesting. He was very quiet. He came in, asked his question, and let me talk the whole time except when he had a point to make or to ask me to refine my algorithm. That interview kind of put me a bit on edge. Because when the next interviewer showed up, he said “What you got there looks great. Thanks for your time.” and then he left.

The next guy was much friendlier. He too only asked one question - a design question which we chatted about for the entire hour. Design, implementation, and technology choices. In retrospect this was my favorite interview because it was my comfort zone - design. This interview was also the one that I later figured out was to see how I did with conflict. He openly told me several times that my idea wouldn’t work. But he wouldn’t tell me why it wouldn’t work. He was basically trying to find out how I handled those types of situations. So if you interview at Amazon and you are randomly being told you are wrong with no reasoning, calm down and think through how you can get your point across. Getting angry isn’t going to help. And it goes against what they are looking for. Of course, later on in life at Amazon, I should have heeded that advice myself :)

Next came lunch. I’ve already mentioned how I hate lunch interviews. But at least this time it was with sandwiches. During lunch, I got the culture questions again. Turns out this guy I was eating lunch with was my potential new boss. He needed to know how I fit onto the team. After lunch came the technical portion of the interview. It was basically two questions - one was to find as many errors in the C++ code as possible. The second was a Huffman algorithm and was it valid C code. To be honest, I didn’t know it was a Huffman algorithm till after he told me. I knew it was valid C code after thinking it through. But right off the bat I was like “no way is that valid”. Then we got to discussing C++ and what a switch/case statement really is (it isn’t an if/else like it is commonly described). After I was hired, my boss told me that I had found more mistakes on the C++ code than any other candidate had. I think I found a little over 20. And they were simple little things. Here is one that I’m sure people have seen…

int i = 0;
while(i < 10);{
   ++i
}

Do you see the problem?

The next guy I got was another design question guy. The question is still commonly used in Amazon, so I won’t mention it. Needless to say, graphs fit the solution perfectly. So he and I had to discuss graphs a bit before I could give him a better design.

Unlike Microsoft, I don’t meet up with the recruiter at the end of the day. The last guy you have, is the one that shows you out. Before we did though, they showed me around the office. I got to see the cube area, kitchen, etc. Met a few other people and found out what they work on and what not. Then he walked me out. I asked where I could catch a cab, but he directed me to the bus because it drops off right at the airport. I was like…OK. All I had was a 2 ones and a 5. The bus ride was 50 cents. The last interviewer gave me 2 quarters. I thought that was pretty nice of him.

It was 2 days before I got a call from Amazon. I was really surprised. I figured they would e-mail me that I didn’t make the cut. Because even though I did well on the interviews, I still had no Linux experience. I still couldn’t fathom that they would hire me.

But she said they liked me and wanted to extend me an offer. I was in shock. I accepted and 10 days after I accepted, I was working in Seattle for Amazon.com.

In looking back on the interview, I believe I did really well because I just didn’t expect to get the offer. I went in expecting to do well on the programming questions, but to be discarded because I would bomb whatever Linux questions they asked (turns out they asked none). During the interviews (other than the second one with the guy who didn’t talk), I was totally relaxed. I had nothing to lose because I wasn’t expecting to win anything.

I’m glad I accepted. I know I’ve written in the past about things I don’t believe Amazon does correctly, but I wouldn’t trade these last 2 and a half years for anything. I’ve gotten to work on some truly large systems (my first team was responsible for making sure all retail shipments started the shipping process). But most importantly, I’ve gotten to work with some truly wonderful people.

Categories: Programming · interviewing

69 responses so far ↓

  • Tara // April 29, 2007 at 8:09 pm

    Nice write up…I’m currently trying to get to a programming stage to even make myself marketable in that world. Gives me a good idea on what to expect with the “big” guys =)

  • Alok // April 30, 2007 at 4:35 am

    >He asked, couldn’t you use put it into a C++ virtual function? *buzz* No. Virtual functions don’t work from constructors in ISO C++.

    Actually they do, only they dispatch to the object that is being constructed, (that is the virtual function of the object whose constructor is being executed). Remember the object is not yet a derived class object, unless it has already been constructed as various base class objects first.

    I quote from the standard below:
    Member functions, including virtual functions (10.3), can be called during construction or destruction
    (12.6.2). When a virtual function is called directly or indirectly from a constructor (including from the
    mem-initializer for a data member) or from a destructor, and the object to which the call applies is the
    object under construction or destruction, the function called is the one defined in the constructor or
    destructor’s own class or in one of its bases, but not a function overriding it in a class derived from the constructor
    or destructor’s class, or overriding it in one of the other base classes of the most derived object
    (1.8).

  • Alex // April 30, 2007 at 4:54 am

    Great writeup. Simply put with a nice flow to it. It’s nice to read articles that make it easier for the reader :)

  • Weird interviews at Syed Uzair Aqeel’s Weblog // April 30, 2007 at 7:11 am

    [...] was reading this just now, about a guy’s job interview at Amazon. He says Unlike Microsoft, I don’t meet up [...]

  • Nate // April 30, 2007 at 7:43 am

    Umm, semicolon is in the wrong place? Yikes, someone is wasting your time with finding what could be a typo?

  • dvka // April 30, 2007 at 7:56 am

    Thats something we call A Complete Package I guess :)
    Congrats!

  • Justin // April 30, 2007 at 8:10 am

    Hey Alok,

    You’re correct. I should have explained that better in the post. Basically he was looking to see if I knew it wouldn’t call the derived class since the vtable hadn’t been completely setup.

    Thanks for pointing that out!

  • Justin // April 30, 2007 at 8:16 am

    Hey Nate,

    The missing semicolon on (++i) was actually a typo on my part :). So assume that one is there, and there is still an error.

  • Justin // April 30, 2007 at 8:17 am

    Hey Alex,

    Thanks for the compliment!

  • Rainier // April 30, 2007 at 8:28 am

    Very nice story! Glad to hear one of the good guys is picked up by a great company like Amazon.

  • KirkH // April 30, 2007 at 9:03 am

    “The missing semicolon on (++i) was actually a typo on my part :). So assume that one is there, and there is still an error.”

    Shouldn’t that be a for loop?

  • Keith // April 30, 2007 at 9:07 am

    Sometimes having a “oh, well, I’m not gonna get this anyway” attitude does help. I don’t mean being rude or lackadaisical - just relaxed. I went in for a 6 hour technical on-site interview with a company a few years ago. The interview started at 8:00AM, and for whatever reason, I had not had ANY sleep the night before. I figured “I’m screwed, but I might as well go talk to them”. I was so relaxed that despite being almost comatose, I did great on the interview and was given an offer letter right after lunch. (BTW, this is not to say that I recommend going to an interview without any sleep :-)

  • Peter // April 30, 2007 at 9:25 am

    Your expectations going in were wrong. With any serious software company (Google, Microsoft, Apple, and even the likes of Amazon), practical/applied knowledge doesn’t matter much. You can learn that in a few months. Even if you come in not knowing the OS, not knowing the programming language, and not knowing databases, you can learn those quite fast if you’re smart, and understand the theory. The interviews mostly want to guarantee that you’re smart, you understand algorithms, pointers, and recursion, and to the extent they can evaluate it, have a good personality, learn stuff fast, and work hard. If you’ve got those, any software company will hire you.

  • Snappy! // April 30, 2007 at 9:27 am

    The semi-colon before the 1st curly brace and I think the ++i; would make cause 1+0 to be computed, which returns a ‘true’ (1) but when the loop goes to the conditional statement, it would cycle from 0, 1, 2 … actually, it does not really matter since the conditional is reached only after the ++i; … so ++i; or i++; would not really matter in this case I suppose.

    Unless, the original question request for a different range of values … which is not clear from the post anyway … :)

  • Interviewer // April 30, 2007 at 9:30 am

    Great article. Thanks chief!

  • Prashanth // April 30, 2007 at 9:34 am

    There is a ; before {. That makes an infinite loop. Is that the right answer? Do you remember any more questions? :)

  • llp // April 30, 2007 at 10:28 am

    You mention “we talked about what a switch-case statement _really_ is, ( not an if then else as it is commonly described)”…

    What _is_ a switch-case statement if it is not a comparison branching with branches?

    I’m intrigued as to how a switch-case statement could mean that a deeper understanding of its “true” identity is required in order to understand an algorithm using one.

  • Justin // April 30, 2007 at 10:30 am

    A couple of notes right off the bat - if you post a comment and you don’t see it show up right away, that’s because you’ve never posted, and I have to moderate the comment. Sorry for the inconvenience.

    KirkH, the code is correct. It doesn’t need to be a for loop.

    Keith, I don’t think I’d have gone in without any sleep :) It was hard enough as is.

    Peter, expectations are based on past experiences. In Phoenix (and Atlanta before that), I interviewed with some linux companies and that was always a sticky point “You don’t have any Linux experience”. And these were small companies. My expectation was that I wouldn’t get it because of the lack of Linux experience. I agree that it shouldn’t be that way, but that’s life.

    Snappy!, it would never reach the block of code that does ++i because of the semi-colon after the “while” statement. It would spin for infinite.

    Interviewer, you’re welcome!

    Prashanth, you are correct!

  • jason // April 30, 2007 at 10:41 am

    int i = 0;
    while(i

  • Joseph Garvin // April 30, 2007 at 11:12 am

    llp, I would guess that the fundamental difference is that in a switch statement, you can choose to _not_ end a case block with a break. Try running this code:

    #include <iostream>

    using namespace std;

    int main()
    {
    int i = 0;

    switch(i) {
    case 0:
    cout << “Ran” << endl;
    case 1:
    cout << “Also ran” << endl;
    }

    return 0;
    }

    Contrary to what you might expect, both “Ran” and “Also ran” will be printed. Notice that the syntax for specifying case’s looks similar to goto labels. “switch(i)” simply specifies that it should start executing code in the switch block at the case i label. After that, the case labels are ignored. If you insert a break at the end of each case block (notice that it’s not a block in the traditional sense, no curly braces, just indented) then switch does behave like an if-elseif-else.

  • Joseph Garvin // April 30, 2007 at 11:12 am

    Sorry, delete the versions where I screwed up the <> ;)

  • moraie // April 30, 2007 at 11:35 am

    Great article. Even though I’m not in the computing industry, its interesting to see someone else’s perspective on an interview process.

    I am in a semi-technical profession (environmental analysis) so I do sometimes get problem solving type questions, but I loved your answer to why you wanted to work for Amazon. It really showed you knew something about the company.

    That’s something I need to work on.

  • Doug L. // April 30, 2007 at 12:10 pm

    justin wrote “… not an if then else as it is commonly described”. Then llp *changed* that into “What _is_ a switch-case statement if it is not a comparison branching with branches?”

    llp, that the difference (between what justin wrote and the way your question was written) is just the point. A chain of if-then-elsif-then … statements implies structure. Justin’s point is that in C/C++, switch statements have only an illusory structure. One way to understand this is to grok the bizarre “Duff’s Device“. (IMHO, it’s very good to have an understanding of what that does, and it’s very very bad ever to use that knowledge.) Another way to look at it is to think of the “case foo:” things as LABELs, not as the segments of a real case statement (as seen in most higher-level languages).

    justin wrote that his college didn’t give any extra points for writing portable code. That, in my opinion, is a travesty.

    Finally, regarding the “no Linux experience” == “goodbye” (the difference between Peter’s experience and justin’s): I suspect that this difference is usually the difference between actually talking to the technical people (as Peter seems to have done) versus talking with only the first set of screeners (usually HR, usually don’t really understand programmers very well).

  • ypesh // April 30, 2007 at 12:11 pm

    Hi Justin,

    Thanks for this excellent piece, is it possible to have a look at your covering letter. Fascinating.

    Kind Regards,

  • Vladekk // April 30, 2007 at 12:36 pm

    You’re awesome ;-)
    I know only maybe two programmers who can answer these kind of questions without investigating prior.

  • Justin // April 30, 2007 at 12:58 pm

    A case statement in C/C++ is just a label. Like a ‘goto’ label. When you do a switch, it essentially just does a goto. Now if you look at the generated assembly, you MIGHT see the same structure as an if/else-if/else block of code. But that is just how the compiler decided to implement your switch statement. It normally does that when you have a break for every case statement.

    And I totally agree and totally disagree with Doug’s statement about my college :) Sometimes when chatting with people at Amazon, I wish my college education would have been more formal. My professors spent the bare minimum time on algorithm complexity (i.e. Big O). But, I did learn things like source control (branching, merging, etc.), writing requirement docs, writing help files, using power points to express your tech ideas, etc. which I believe MOST (not all) colleges ignore or allow the student to learn on their own. So I was very productive in my first job. All I had to really learn is the product I was working on.

  • JFKBits // April 30, 2007 at 1:12 pm

    I’m not surprised the Linux experience wasn’t a huge thing. The fact that Amazon is writing server-side code totally hidden from the outside world helps here. If they developed Linux applications deployed to other people’s Linux boxes, I think it might matter a whole lot more.

  • swedegeek // April 30, 2007 at 1:20 pm

    Justin, great write up of your experience. Felt like I there myself. Thanks for sharing!

    One question… Did you provide references at any point, and if so, were they contacted? It seems with the several interviews that Amazon could weed people out well enough to skip on the reference checks, but maybe not. Just curious.

  • Justin // April 30, 2007 at 1:24 pm

    Hey swede,

    I did provide references. I gave 4. 3 were fellow developers and the 4th was a sales guy that I did a lot of presales work with. Guess which one they contacted? At least he was the only one that ever admitted to being contacted.

  • Michael G.R. // April 30, 2007 at 1:41 pm

    Very nice post! Thank you for sharing your experience. I think I’m not the only one who is interested in knowing more about how these cool companies look like from the inside.

  • pointyhead // April 30, 2007 at 1:50 pm

    Justin and fellow up-and-comers,

    Aren’t you tired of being under-appreciated, overeducated, and stuck in jobs you hate with bosses much less talented than you? If so, you’re probably a “chogey”.

    The good news is that there are a lot of us. Break free from your cubicle shackles…if only long enough to share your horror stories with other chogeys.

    If this sounds interesting, please check out the Chogey HQ at chogeyunited.com.

    Chogeys of the World Unite!

  • Justin // April 30, 2007 at 2:03 pm

    Hey Michael, I try to post what I can from the inside :) But it is hard sometimes. This entry is pretty black and white because it could have been posted by anyone that DID NOT get an offer. No secret sauce so to speak.

    But other things, well, they are a bit harder. Things I think aren’t proprietary turn out to be. So I generally show the posts to my manager and if they cringe, I either ask legal or I don’t post. So far I’ve just not been posting. I’m hoping to change that in the future.

    Oh yeah…the pointyhead comment is actually a real site :)

  • Ronnie Ann // April 30, 2007 at 2:12 pm

    This post is one of the best pieces I’ve seen about how to get a job. You went in without thinking you’d get it (because of the lack of linux) so you just relaxed and gave it your best - and even had a little fun with the process. This is also a good lesson to people who don’t apply for jobs unless they have every teeny tiny skill. As a project manager and functional expert, I used to help hire people for an IT development area in a major university. True…we hoped to find all the programming skills we used, but we also knew technologies change rapidly and we wanted someone who could change and grow right along with us. Mostly we were looking for someone sharp, creative, resourceful, undaunted by a mere thing like not knowing something, and above all someone we would enjoy seeing every day, no matter how hectic things got. Your post could be a primer for anyone looking for a job - whether in IT or not. Thanks for sharing!

  • John Quays // April 30, 2007 at 2:50 pm

    For the most part, i had no idea of what you’re talking about. But it was well written, in a nice style and entertaining. Cheers!

  • Swoosh // April 30, 2007 at 4:46 pm

    Nice post! I am a third party technical recruiter, and currently looking for people for… Amazon.com positions. I’m going to use your write up to help candidates prepare.
    And if anyone wants to submit a resume: aschwartz at denaliai dot com. That’s DenaliAI.
    Cheers!
    Andrea

  • Top Posts « WordPress.com // April 30, 2007 at 4:58 pm

    [...] My interview with Amazon I wrote a little while ago about my interview with Microsoft. I was going to wait a bit before putting this post up. […] [...]

  • Justin // April 30, 2007 at 4:59 pm

    Hey Swoosh,

    I hope it helps some people. Just make sure you remind them that Amazon.com interviewers are very good at sniffing out answers that people don’t truly understand. Giving the correct answer and not knowing why is a big red flag :)

  • Alexandre // April 30, 2007 at 6:43 pm

    int i = 0;
    while(i < 10) {
    ++i;
    }

    Yuck, a while loop. That is totally inefficient! I can’t imagine they would use such inefficient control structures at Amazon.com. Use goto, instead!

    int i = 0;
    loop:
    i++;
    printf("%i\n", i);
    if (i < 10)
    goto loop;

    Seriously though, why the loop? When, int i = 10; yields the same result?

  • dreymer // April 30, 2007 at 8:42 pm

    Hey, great write-up. You got me hooked although I have very little knowledge on programming. Congratulations!

  • jihadjoe // April 30, 2007 at 8:44 pm

    Awesome write up! It’s usually pretty tough to read an article this large while sitting at a computer, but well constructed paragraphs coherent flow makes for smooth reading.

    Keep keepin it real and I hope you enjoy working with Amazon. I always hear they are a great company to work for!

  • Seiruu // May 1, 2007 at 2:59 am

    Great post indeed. I never knew the interview process for programmers would go through that many phases. Very interesting.

    What I do want to know now is whatever happened to that Linux factor? They needed someone with also Linux experience, you’ve had no significant Linux experience, got the job, been happy working for them ever since: so how did that not knowing Linux thing work out? Did Amazon just not put you on a Linux project? You got the relevant internal Linux courses and picked it up fast? Combination of both?

  • Arm // May 1, 2007 at 3:06 am

    A really, really good read. Random browsing CAN bring good results ;).

    I am myself quite interested in this area, and it was great to read up on a relatively detailed display of what to expect in such an interview.

    -Arm

  • prabhagovind // May 1, 2007 at 7:09 am

    Congratss…..it was a pleasure reading through ur blog entries!….i hope u wount mind me adding u to my blogroll..
    Keep blogging!!

  • My take on Justin Drudd's 'Interview at Amazon' « Arun Rajagopal // May 1, 2007 at 9:45 am

    [...] Justin Drudd, Job Interview. trackback I logged into WordPress this morning and I had to click on Justin Drudd’s ‘ My Interview with Amazon’.  It was a fabulous piece of writing describing an arduously long interview process with a good [...]

  • arunrajagopal // May 1, 2007 at 9:54 am

    Gr8 post and I’m glad everything worked out well for you. Guess what, I blogged about you today (http://arunrajagopal.com/2007/05/01/my-take-on-justin-drudds-interview-at-amazon/) & you’re one person I’ll be thinking about next time I have a job interview. Cheers! Arun

  • Eric // May 1, 2007 at 12:35 pm

    I really enjoy your optimistic paper. Such things, where clever people get a job, even if there are not specialists of what the firm wants, do not occur in my old country.

    About your C++ technical question: I know nothing about C++, a few ones about Perl (where ++i becomes i++… :-) ) and Linux/Unix. Is your problem a well know loop one, where you want a variable to be strictly less than 10 when the loop enables it to reach this unaccepted value?

    Yours friendly
    Eric

  • Technical Interviews in big software companies « Waste of Space // May 1, 2007 at 1:47 pm

    [...] etc. Today I stumbled across Justin’s blog wherein he has described his interview with Amazon which had a happy ending. It’s really a fabulous piece of writing which I recommend to [...]

  • unlink // May 1, 2007 at 2:20 pm

    Interesting story. Very good read. I will check back with your wordpress more often. ;)

  • My take on Justin Drudd’s ‘Interview at Amazon’ « Arun Rajagopal // May 2, 2007 at 5:21 pm

    [...] Justin Drudd, Job Interview. trackback I logged into WordPress this morning and I had to click on Justin Drudd’s ‘ My Interview with Amazon’. It was a fabulous piece of writing describing an arduously long interview process with a good [...]

  • My interview with Amazon- a geek's account of his experiences being interviewed by Amazon « BotHack // May 2, 2007 at 9:13 pm

    [...] the post here. Filed under: Interview, Amazon, experiences, humour [...]

  • nathanhollis.org - links for 2007-05-03 // May 2, 2007 at 9:19 pm

    [...] Justin Rudd’s Drivel My interview with Amazon « appy!, it would never reach the block of code that does ++i because of the semi-colon after the “while” statement. It would spin for infinite. [...]

  • claudettefour // May 3, 2007 at 6:55 am

    love to read here, maybe you could have just as easily taken up writing,professionally. It seems to suit you well also.

  • Dev hiring process at Amazon « Scobleizer // May 13, 2007 at 11:47 pm

    [...] hiring process at Amazon Justin Rudd wrote a really great tome on how he got hired at Amazon as a developer. Subscribed! Filed under: Amazon [...]

  • Dallas Freeman // May 14, 2007 at 2:37 am

    Nice write up, gives me some confidence in going for the ‘larger’ companies. I am keen to work for Microsoft or Google, not just because they are truly large but also for their work ethics and spirits. Which to me and many other people, is really important!

  • Entrevistas, guías y geeks | bioxd.com // May 14, 2007 at 10:24 am

    [...] Mi entrevista con Amazon - Como funciona una entrevista de trabajo con el gigante de la ventas por internet [...]

  • adam // May 15, 2007 at 5:50 am

    nice article, i enjoyed the read.

  • Dallas Freeman » Blog Archive » A job interview with Amazon // May 15, 2007 at 6:42 am

    [...] Read more at Justin Rudd’s Drivel [...]

  • Seçme Bağlantılar // May 19, 2007 at 11:22 pm

    [...] My interview with Amazon « Justin Rudd’s Drivel Amazon ile iş görüşmesi yapan bir programcının yazdıkları. Güzel bir anlatım ve faydalı olabileceğini düşündüğüm bilgiler içeriyor. [...]

  • Sandy // June 13, 2007 at 1:21 am

    Hey Justin,

    Thanks for sharing your experience! That was wonderful! I am about to have an interview with amazon in the next two days, and I’m in the stage of “overly nervous” with them. Can you be so kind and tell me what kind of questions were ask during interview, or / and what should I do to help me to get the job? Thank you a million!

  • Gabriel // June 29, 2007 at 1:35 pm

    Hey, I see that you ultimately relocated. Did Amazon buy your house? I have my second phone interview in two days and I wondered about that. Did they help a lot with your relocation?

  • Justin // July 1, 2007 at 1:30 pm

    Amazon did not buy my house. But they were very helpful with relocation. If you have a phone screen with them, then ask your HR contact. They’ll be more than happy to discuss that with you.

  • Gabriel // July 3, 2007 at 4:03 pm

    Thanks, I had my second phone interview and it went good. We’re moving from Charlotte NC so I just need the offer(if I get one ) to be good enough for us to go out to WA.

  • Kaan Zoroglu // August 20, 2007 at 7:08 am

    J RUDD

    How the HELL are you bro??? Its Kaan from AZ.

    Later Hommie

  • Vaidyanathan Krishna // October 1, 2007 at 12:29 pm

    Hey Justin.
    Thanks so much for that…I have my 2nd phone intvw….Ive been told it wouldbe technical…But Im very less of a CS guy…haved worked in Mainframes all life, and Im aiming for a database position….do you think, I should just concentrate on my forte?

  • Eidan // October 3, 2007 at 1:53 am

    Hi guys! I want to make an interview whit Amazon.com…i’m a linux user. Anyone have idea of what they ask in the interviews? let me know: eidan78 at gmail.com

  • Jeff // December 2, 2007 at 6:47 pm

    For all those wondering what to study for an Amazon interview (or any other interview), I recommend the basics.

    Be a great coder in at least one language. Look at past projects and ask yourself, how being a better coder would have helped, and what are the aspects of coding common to most jobs.

    It will also help if you improve your problem solving. If you want to learn to do problems, don’t read them with the intent of learning the tricks. Read them with the intent of aproaching them in an orderly fashion. Being able to deal with something confusing is far more impressive than having some esoteric knowledge.

    For example, if you are stumped by a problem:

    1) what information did the asker give me? What did he leave out? If the questioner gives you too much information or irrelevant information, this may be to be tricky, but you also might be misunderstanding the question.

    2) problem solving is often about pattern recognition. If you can’t find a pattern after four entries, try looking at eight and see if that helps. If you can’t do the linked list question, draw a few boxes and see if that helps. Often the chalk/marker is your friend in these cases.

    3) Maybe you are looking too deep into a problem. If a problem seems “too hard”, or something bothers you about it, then don’t be afraid to say something like “Are you asking me to do X or are you just looking for Y”.

    4) Can you “Pre-Solve” a question? For example, if they ask you to do a complex mathematical procedure, then if you can look at it and real quickly say, based on X, Y, and Z, I expect the answer to be a large negative number, then just a few seconds into the problem, you are halfway there. This will also form good guide-rails for you as you solve it to let you know you are on the right track. If you are wrong, then you also get feedback on that quickly.

    The final thing I want to mention is, make sure you don’t miss the easy stuff! I’m not just saying that you should understand the relatively easy or important parts of your education, although that is important too, but don’t fight fiercely for the algorithm points and then lose it all in style. Code a couple sample problems and then read back to see how you could improve the readability. For example, if the question starts with “take two numbers”, it is probably appropriate to name your parameters “int number1, int number2″ but this is the exception that proves the rule. If you name a function “doStuff()”, then that is just bad style.

    I offer this information with the hope that readers become not just better interviewers, but also better developers.

  • TestingSucks // January 28, 2008 at 4:24 am

    Justin/All,

    Thanks very much for this enlightning article (and reply posts). I stumbled upon it while googling for interview process at Amazon. I am currently looking for a job change and one of the consultants I approached has considered me for a position with Amazon. Ok … so far so good …

    I am supposed to get a call from Amazon sometime this week that too for a QA position. Can anybody please tell me what kind of questions do these guys ask if someone was to join their QA department.

    The problem is that I am a QA guy with no understanding or inclination of what goes on in a While loop or goto for that matter. :-D Though I am smart (I would like to think that I am smart :-D), in my QA experience I have been responsible for mostly Manual Testing and later on have handled a couple of QA Teams in a Product Based Organization.

    So you see … I am not sure what to prepare here … and would appreciate any sort of help I can get through this forum.

    Thanks ….
    TestingSucks !!

  • sean jones // February 18, 2008 at 12:52 pm

    Justin/ All,
    I really enjoyed your input concerning the interview with Amazon.com. I have an phone interview with them tomorrow evening and I will go in with what I know.

  • Tarandeep Gill // February 24, 2008 at 7:32 pm

    My interview with Amazon crashed in just the first phase because of a silly goof-up. I wrote a detailed entry in my blog at http://www.tarangill.com/blog/content/view/22/1/

    Please read it and leave a comment, what could you have done in such a situation.

Leave a Comment