Interview Prep
1) Brush up on your Computer Science fundamentals (overviewprovided below):during yourtechnical phone interview, we will ask you to code in the language of yourchoice and solve CS focused problems. Visit www.codechef.com, www.topcoder.comor similar websites to brush up on problem solving and core Computer Sciencefundamentals.
“Random forests, naïve Bayesian estimators, RESTful services, gossipprotocols, eventual consistency, data sharding, anti-entropy, Byzantine quorum,erasure coding, vector clocks ... walk into certain Company’s meetings, and youmay momentarily think you've stumbled into a computer science lecture.” - JeffBezos, 2010 Shareholder letter
¡ Programming Languages
We do not require that you knowany specific language before interviewing for a technical position at Company’s.com,but familiarity with a prominent object oriented language is generally aprerequisite for success. Not only should you be familiar with the syntax of alanguage like C++, Java, or C#, you should also know some of the languagenuances such as how memory management works, what some of the most commonlyused collections or libraries are, etc. You should be able to compare languagesand talk about the tradeoffs between using language X vs. language Y. It’s considereda plus to be familiar with some scripting language such as Perl, Ruby, Awk,etc. It’s also nice to know the basics of regular expression as they are now amainstay in both the object oriented and scripting worlds.
¡ Data Structures
Most ofthe work we do involves storing and providing access to data in efficient ways.This necessitates a very strong background in standard data structures. Youshould know what each of these data structures is and how they’re implemented;what their runtimes are for common operations; and under what circumstances itwould be beneficial to use one.
§ Array
§ Linked List
§ Binary Tree, Binary SearchTree, Red-Black Tree
§ Heap
§ Hash Table
§ Stack
§ Queue
§ Trie
§ Graph (both directed and undirected)
¡ Algorithms
It’salso important to know efficient ways manipulate data. One great way of doingthis is brushing up on some common algorithms. We’ll expect that you can applyand discuss the tradeoffs between some commonly used algorithms.
¡ Sorting
§ Bubble Sort
§ Merge Sort
§ Quick Sort
§ Radix/Bucket Sort
¡ Traversals (Onmultiple data structures)
§ Depth First Search
§ Breadth First Search
¡ Coding
Expectto be asked to code syntactically correct code – no pseudo code. If you’re abit rusty coding without an IDE or coding in a specific language, it’s probablya good idea to dust off the cobwebs and get comfortable coding with pen andpaper. The most important thing a software engineer does at Company’s.com iswrite scalable, stable, robust, and well tested code. These are going to be themain criteria by which your code will be evaluated, so make sure that you checkfor edge cases and common error inputs as well as the “happy paths” through thecode.
¡ Object Oriented Design
Gooddesign is paramount to extensible, bug free, and long living code. It’spossible to solve a software problem in an almost limitless number of ways, butwhen software needs to be robust and extensible, it’s important to know somecommon techniques that help with this. Using object oriented design bestpractices is one way to build lasting software. You should have a workingknowledge of a few common and useful design patterns (singleton, factory,adapter, bridge, visitor, command, proxy, observer, etc.) as well as know howto write software in an object oriented way with appropriate use of inheritanceand aggregation.
¡ Databases
Most ofthe software that we write is backed by a database somewhere. A lot of thechallenges we face come in to play when interfacing with existing data modelsand when designing new data models. You should know the basics of howrelational databases work, how to design relational database schemas, as well ashow to write basic SQL queries against a database.
¡ Distributed Computing
Oursystems at Company’s.com usually have to work under very strict tolerances athigh load. While we have some internal tools that help us with scaling it’simportant to have an understanding of a few basic distributed computingconcepts. Having an understanding of topics such as map-reduce, serviceoriented architectures, distributed caching, load balancing, etc. will help youin formulating answers to some of the more complicated distributed architecturequestions you might encounter.
¡ Internet Topics
This isCompany’s.com, we’re an online company and we expect our engineers to befamiliar with, at least, the basics of how the internet works. You might wantto brush up on how internet browsers do what they do, DNS lookups, what TCP/IPand HTTP are, sockets, etc. We’re not looking for network engineering types ofqualifications, but a solid understanding of the fundamentals of how the webworks is a requirement.
¡ Operating Systems
You won’t need to know how to build your ownoperating system, but you should be familiar with some OS topics that canaffect code performance, such as memory management, processes, threads,synchronization, paging, multithreading, deadlocks (causes, detection,avoidance).
“Invention is in our DNA and technology is the fundamental tool wewield to evolve and improve every aspect of
the experience we provide our customers.” - Jeff Bezos, 2010Shareholder letter
2) Be prepared to discuss technologies listed onyour resume for example, if you list Java or C++ you should expect technicalquestions about your experience with these technologies. It’s also helpful toreview the job description before your call to align your qualificationsagainst the requirements/responsibilities.
3) Please ask questions if you need anythingclarified. We want the interview process to be collaborative. We also want tolearn what it would be like to work with you on a day-to-day basis in our openenvironment. If you are asked a question but not given all of the informationneeded to solve the problem, focus on how you would attempt to solve it giventhe imperfect information.
4) Whenanswering the question, try to be concise and detailed in your response. Werealize it’s hard to gauge how much information is too much vs. not sufficientenough during a phone conversation. Aneffective litmus test is pausing after your succinct response to ask if you’veprovided enough data or if they’d like you to continue with more detail.
5) Wewant to hire smart, passionate people. Please reflect on what motivated you topursue a career with Company’s and be prepared to speak to it. Although “Why Company’s?”is a standard type of question, it’s not a check the box type of formality forus. We genuinely want to understand what inspired you to explore an opportunitywith us so we get a better sense of who you are. It’s also appreciated whencandidates have put thought into a few questions for the Interviewer. It also goes a long way when you’ve taken theinitiative to research the company prior to your interview.