From f891bc30c7a165e2fda13b6f2bfdbca0a12df56d Mon Sep 17 00:00:00 2001 From: Yangshun Tay Date: Sun, 11 Aug 2019 13:20:15 -0700 Subject: [PATCH] contents: minor tweaks --- contents/best-practice-questions.md | 8 +- contents/interview-formats.md | 172 +++++++++++++++---------- contents/picking-a-language.md | 18 ++- contents/understanding-compensation.md | 4 +- 4 files changed, 127 insertions(+), 75 deletions(-) diff --git a/contents/best-practice-questions.md b/contents/best-practice-questions.md index d90e3e3f..eda99a57 100644 --- a/contents/best-practice-questions.md +++ b/contents/best-practice-questions.md @@ -67,7 +67,7 @@ The focus of week 3 is on non-linear data structures like trees, graphs and heap ## Week 4 -Week 4 builds up on knowledge from previous weeks but questions are of increased difficulty. Expect to see such level of questions during interviews. We get to use more advanced data structures such as heaps and tries in this week. +Week 4 builds up on knowledge from previous weeks but questions are of increased difficulty. Expect to see such level of questions during interviews. You get to get more practice on advanced data structures such as heaps and tries. - [Add and Search Word](https://leetcode.com/problems/add-and-search-word-data-structure-design/) - [Implement Trie (Prefix Tree)](https://leetcode.com/problems/implement-trie-prefix-tree/) @@ -90,15 +90,17 @@ Week 4 builds up on knowledge from previous weeks but questions are of increased ## Week 5 -Week 5 focuses on Dynamic Programming questions. +Week 5 focuses on Dynamic Programming (DP) questions. Personally as an interviewer, I'm not a fan of DP questions as they are not really applicable to practical scenarios. However, companies like Google still ask DP questions and if you joining Google is your dream, DP is unavoidable. + +DP questions can be hard to master and the best way to get better at them is... you guessed it - practice! Be familiar with the concepts of memoization and backtracking. - [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/) - [Coin Change](https://leetcode.com/problems/coin-change/) - [Longest Increasing Subsequence](https://leetcode.com/problems/longest-increasing-subsequence/) -- [Word Break Problem](https://leetcode.com/problems/word-break/) - [Combination Sum](https://leetcode.com/problems/combination-sum-iv/) - [House Robber](https://leetcode.com/problems/house-robber/) - [House Robber II](https://leetcode.com/problems/house-robber-ii/) - [Decode Ways](https://leetcode.com/problems/decode-ways/) - [Unique Paths](https://leetcode.com/problems/unique-paths/) - [Jump Game](https://leetcode.com/problems/jump-game/) +- [Word Break Problem](https://leetcode.com/problems/word-break/) diff --git a/contents/interview-formats.md b/contents/interview-formats.md index 280565e2..6ca768fc 100644 --- a/contents/interview-formats.md +++ b/contents/interview-formats.md @@ -1,120 +1,158 @@ --- id: company-interview-formats -title: Company Formats +title: Interview Formats --- +Interviews are a multi-stage process and each stage can consist of vastly different formats. + +## Various Formats + +### Pop Quiz + +Pop quizzes are meant to be a quick and dirty way of weeding out extremely weak (or even non-technical) candidates. They are structured questions and have clear-cut answers which makes them possible to be administered by recruiters/non-technical folks. It is not a very common interview format these days. + +Examples: + +- What is 4 & 5? Answer: 4 +- What is the time complexity of bubble sort? Answer: O(n^2) + +### Take Home Assignment + +There has been numerous debates on whether asking algorithm questions are a good way of assessing individual abilities as they aren't exactly the most relevant skills needed for a job. Take home assignment is a format designed to address the shortcomings of the algorithm interview by getting candidates to work on larger projects which allow them to demonstrate software design skills. + +However, this interview format takes up more time from both the candidates and the company and hence it is not as commonly seen in large companies where they have a high volume of candidates. This format is more common among startups and small companies. + +Examples + +- Build a flights listing app +- Build a snake game + +### Phone Interview + +Phone interview are the most common format and every candidate will face this at least once while interviewing. You will be asked to speak with an interviewer either over a phone call or VoIP (Skype/Hangout). A question will be given to you and you will work on that question using an online collaborative editor (CoderPad/CodePen/Google Docs). + +### Onsite + +If you have made it to this stage, congratulations! This is usually the final stage before an offer decision. Candidates who made it to the onsite stage will be required to have an in-person interview at the office. If you are an overseas candidate, companies might even fly you in and pay for your accommodations! + +The onsite stage usually consists of multiple rounds (coding, system design, behavioral) and is expected to last for a few hours. Since you are onsite, it is possible that you will be asked to do a whiteboard exercise with an interviewer, usually either solving an algorithm question or doing a system design question. It ia also possible that you have to bring you own laptops and work on a project/solve a coding problem on the spot. + +If the company provides lunch, you might also have a lunch session with an employee where you can find out more about the company culture. + +## Formats of famous companies + ### Airbnb -- Recruiter phone screen. +- Recruiter phone screen - Technical phone interview: - - 1 or 2 x Algorithm/front end on CoderPad/CodePen. + - 1 or 2 x Algorithm/front end on CoderPad/CodePen - On-site (General): - - 2 x Algorithm coding on CoderPad. - - 1 x System design/architecture. - - 1 x Past experience/project. - - 2 x Cross functional. + - 2 x Algorithm coding on CoderPad + - 1 x System design/architecture + - 1 x Past experience/project + - 2 x Cross functional - On-site (Front End): - - 2 x Front end coding on CodePen. Use any framework/library. - - 1 x General coding on your own laptop. - - 1 x Past experience/project. - - 2 x Cross functional. + - 2 x Front end coding on CodePen. Use any framework/library + - 1 x General coding on your own laptop + - 1 x Past experience/project + - 2 x Cross functional - Tips: - - All sessions involve coding on your own laptop. Prepare your development environment in advance. - - You are allowed to look up APIs if you need to. - - They seem to place high emphasis on compilable, runnable code in all their coding rounds. - - Cross functional interviews will involve getting Airbnb employees from any discipline to speak with you. These interviews are mostly non-technical but are extremely important to Airbnb because they place a high emphasis on cultural fit. Do look up the Airbnb section of the behavioural questions to know what sort of questions to expect. + - All sessions involve coding on your own laptop. Prepare your development environment in advance + - You are allowed to look up APIs if you need to + - They seem to place high emphasis on compilable, runnable code in all their coding rounds + - Cross functional interviews will involve getting Airbnb employees from any discipline to speak with you. These interviews are mostly non-technical but are extremely important to Airbnb because they place a high emphasis on cultural fit. Do look up the Airbnb section of the behavioral questions to know what sort of questions to expect ### Asana -- Recruiter phone screen. -- Technical phone interview. +- Recruiter phone screen +- Technical phone interview - On-site (Product Engineer): - - 3 x Algorithm and system design on whiteboard within the same session. + - 3 x Algorithm and system design on whiteboard within the same session - 1 x Algorithm on laptop and system design. This session involves writing code on your own laptop to solve 3 well-defined algorithm problems in around 45 minutes after which an engineer will come in and review the code with you. You are not supposed to run the code while working on the problem. - Tips: - - No front end questions were asked. - - Asana places high emphasis on System Design and makes heavy use of the whiteboard. You do not necessarily have to write code for the algorithm question of the first three interviews. - - All 4 sessions involve algorithms and system design. One of the sessions will be conducted by an Engineering Manager. - - The last session will involve coding on your own laptop. Prepare your development environment in advance. - - Regardless of Product Engineer or Engineering Generalist position, their interview format and questions are similar. + - No front end questions were asked + - Asana places high emphasis on System Design and makes heavy use of the whiteboard. You do not necessarily have to write code for the algorithm question of the first three interviews + - All 4 sessions involve algorithms and system design. One of the sessions will be conducted by an Engineering Manager + - The last session will involve coding on your own laptop. Prepare your development environment in advance + - Regardless of Product Engineer or Engineering Generalist position, their interview format and questions are similar ### Dropbox -- Recruiter phone screen. +- Recruiter phone screen - Technical phone interviews: - - 2 x Algorithm/front end on CoderPad/CodePen. + - 2 x Algorithm/front end on CoderPad/CodePen - On-site (Front End): - - 2 x Front end on CodePen. Only Vanilla JS or jQuery allowed. - - 1 x General coding on CoderPad. - - 1 x All around. Meet with an Engineering Manager and discussing past experiences and working style. + - 2 x Front end on CodePen. Only Vanilla JS or jQuery allowed + - 1 x General coding on CoderPad + - 1 x All around. Meet with an Engineering Manager and discussing past experiences and working style - Tips: - - You can code on your own laptop and look up APIs. - - Dropbox recruiters are very nice and will give you helpful information on what kind of questions to expect for the upcoming sessions. - - One of the front end sessions involve coding up a pixel-perfect version of a real page on www.dropbox.com. You'll be given a spec of the desired page and you'll be asked to create a working version during the interview. + - You can code on your own laptop and look up APIs + - Dropbox recruiters are very nice and will give you helpful information on what kind of questions to expect for the upcoming sessions + - One of the front end sessions involve coding up a pixel-perfect version of a real page on www.dropbox.com. You'll be given a spec of the desired page and you'll be asked to create a working version during the interview ### Facebook -- Recruiter phone screen. +- Recruiter phone screen - Technical phone interviews: - - 1 or 2 x Algorithm/front end on Skype/CoderPad. + - 1 or 2 x Algorithm/front end on Skype/CoderPad - On-site (Front End): - - 2 x Technical coding interview on whiteboard (Ninja). - - 1 x Behavioural (Jedi). Meet with an Engineering Manager and discussing past experiences and working style. - - 1 x Design/architecture on whiteboard (Pirate). + - 2 x Technical coding interview on whiteboard (Ninja) + - 1 x Behavioural (Jedi). Meet with an Engineering Manager and discussing past experiences and working style + - 1 x Design/architecture on whiteboard (Pirate) - Tips: - - You are only allowed to use the whiteboard (or wall). No laptops involved. - - For the Jedi round, you may be asked a technical question at the end of it. Front end candidates will be given a small HTML/CSS problem nearing the end of the session. - - For the Ninja rounds, you may be asked one to two questions depending on how fast you progress through the question. + - You are only allowed to use the whiteboard (or wall). No laptops involved + - For the Jedi round, you may be asked a technical question at the end of it. Front end candidates will be given a small HTML/CSS problem nearing the end of the session + - For the Ninja rounds, you may be asked one to two questions depending on how fast you progress through the question ### Google -- Recruiter phone screen. +- Recruiter phone screen - Technical phone interview: - - 1 or 2 x algorithm on Google Doc. + - 1 or 2 x algorithm on Google Doc - On-site (Front End): - - 3 x Front end on whiteboard. Have to use Vanilla JS (or at the most, jQuery). - - 2 x Algorithm on whiteboard. -- Team matching. - - Speak with managers from different teams who are interested in your profile. + - 3 x Front end on whiteboard. Have to use Vanilla JS (or at the most, jQuery) + - 2 x Algorithm on whiteboard +- Team matching + - Speak with managers from different teams who are interested in your profile - Tips: - - You are only allowed to use the whiteboard. No laptops involved. - - In rare cases, candidates may even be allowed to skip the phone interview round and advanced to on-site directly. - - For non-fresh grads, you only receive an offer if you are successfully matched with a team. + - You are only allowed to use the whiteboard. No laptops involved + - In rare cases, candidates may even be allowed to skip the phone interview round and advanced to on-site directly + - For non-fresh grads, you only receive an offer if you are successfully matched with a team ### Lyft -- Recruiter phone screen. +- Recruiter phone screen - Technical phone interview: - - 1 x Algorithm/Front end over JSFiddle. + - 1 x Algorithm/Front end over JSFiddle - On-site (Front End): - - 4 x Front end on Coderpad/your own laptop. Use any language/framework. - - 1 x Behavioural. Meet with an Engineering Manager and go through candidate's resume. + - 4 x Front end on Coderpad/your own laptop. Use any language/framework + - 1 x Behavioral. Meet with an Engineering Manager and go through candidate's resume - Tips: - - Can use whiteboard and/or laptop. - - For front end coding, I opted to use React and had to set up the projects on the spot using `create-react-app`. + - Can use whiteboard and/or laptop + - For front end coding, I opted to use React and had to set up the projects on the spot using `create-react-app` ### Palantir -- Recruiter phone screen. +- Recruiter phone screen - Technical phone interview: - - 1 x Algorithm over HackerRank CodePair and Skype. + - 1 x Algorithm over HackerRank CodePair and Skype - On-site (General): - - 2 x Algorithm on whiteboard. - - 1 x Decomposition (system design) on whiteboard. + - 2 x Algorithm on whiteboard + - 1 x Decomposition (system design) on whiteboard - On-site (Front End): - - 1 x Front end on your own laptop. This session lasts about 1.5 hours. Use any library/framework. - - 1 x Decomposition (system design) on whiteboard. + - 1 x Front end on your own laptop. This session lasts about 1.5 hours. Use any library/framework + - 1 x Decomposition (system design) on whiteboard - Tips: - - I opted to use React and had to set up projects on the spot using `create-react-app`. - - You may be asked to meet with Engineering Managers after the technical sessions and it's not necessarily a good/bad thing. + - I opted to use React and had to set up projects on the spot using `create-react-app` + - You may be asked to meet with Engineering Managers after the technical sessions and it's not necessarily a good/bad thing ### WhatsApp -- Recruiter phone screen. +- Recruiter phone screen - Technical phone interview: - - 2 x Algorithm over CoderPad. + - 2 x Algorithm over CoderPad - On-site (Web Client Developer): - - 4 x Algorithm on whiteboard. + - 4 x Algorithm on whiteboard - Tips: - - No front end questions were asked. - - 1 of the interviewers is an Engineering Manager. + - No front end questions were asked + - 1 of the interviewers is an Engineering Manager diff --git a/contents/picking-a-language.md b/contents/picking-a-language.md index bb90934c..b3c93ac7 100644 --- a/contents/picking-a-language.md +++ b/contents/picking-a-language.md @@ -3,12 +3,24 @@ id: picking-a-language title: Picking a Language --- -Before anything else, you need to pick a programming language to do your interviews in. Most companies will let you code in any language you want, the only exception I know being Google, where they only allow candidates to pick from Java, C++, JavaScript or Python for their algorithmic coding interviews. Most of the time, I would recommend that you use a language that you are extremely familiar with rather than picking up a new language just for doing interviews because the company uses that language heavily. +Before anything else, you need to pick a programming language to do your interviews in. Most companies will let you code in any language you want, the only exception I know being Google, where they only allow candidates to pick from Java, C++, JavaScript or Python for their algorithmic coding interviews. -There are some languages which are more suitable than others for coding interviews and some languages you absolutely want to avoid. From my experience as an interviewer, most candidates pick Python or Java. Other commonly seen languages include JavaScript, Ruby and C++. I would absolutely avoid lower level languages like C or Go, simply because they lack many standard library functions and data structures. +## Some languages are more suited for interviews + +There are some languages which are more suitable than others for coding interviews and some languages you absolutely want to avoid. From my experience as an interviewer, most candidates pick Python or Java. Other commonly seen languages include JavaScript, Ruby and C++. I would absolutely avoid lower level languages like C or Go, simply because they lack many standard library functions and data structures and some may require manual memory management. Personally, Python is my de facto choice for algorithm coding interviews because it is succinct and has a pretty huge library of functions and data structures available. One of my top reasons for recommending Python is that it uses consistent APIs that operate on different data structures, such as `len()`, `for ... in ...` and slicing notation on sequences (strings/lists/tuples). Getting the last element in a sequence is `arr[-1]` and reversing it is simply `arr[::-1]`. You can achieve a lot with minimal syntax in Python. -Java is a decent choice too but having to constantly declare types in your code means extra keystrokes which results in slower coding/typing speed. This issue will be more apparent when you have to write on a whiteboard during on-site interviews. The reasons for choosing/not choosing C++ are similar to Java. Ultimately, Python, Java and C++ are decent choices of languages. If you have been using Java at work for a while now and do not have time to be comfortably familiar with another language, I would recommend just sticking to Java instead of picking up Python from scratch just for the sake of interviews. Doing so, you can avoid having to context switch between languages during work vs interviews. Most of the time, the bottleneck is in the thinking and not the writing. It takes some getting used to before one becomes fluent in a language and be able to wield it with ease. +Java is a decent choice too but having to constantly declare types in your code means extra keystrokes which results in slower coding/typing speed. This issue will be more apparent when you have to write on a whiteboard during on-site interviews. The reasons for choosing/not choosing C++ are similar to Java. Ultimately, Python, Java and C++ are decent choices of languages. + +## Use a language you are familiar with + +Most of the time, it is recommended that you use a language that you are extremely familiar with rather than picking up a new language just for doing interviews because the company uses that language heavily or just because you want to show that you are trendy. + +If you are under time constraints, picking up a new language just for interviewing is hardly a good idea. Languages take time to master and if you are already spending most of your time and effort on mastering algorithms, there is barely spare effort left for mastering a new language. If are familiar with using one of the mainstream languages, there isn't a strong reason to learn a new language just for interviewing. + +If you have been using Java at work for a while now and do not have time to be comfortably familiar with another language, I would recommend just sticking to Java instead of picking up Python from scratch just for the sake of interviews. Doing so, you can avoid having to context switch between languages during work vs interviews. Most of the time, the bottleneck is in the thinking and not the writing. It takes some getting used to before one becomes fluent in a language and be able to wield it with ease. + +## The exception to the norm One exception to the convention of allowing you to "pick any programming language you want" is when you are interviewing for a domain-specific position, such as Front End/iOS/Android Engineer roles, in which you would need to be familiar with coding in JavaScript, Objective-C/Swift and Java respectively. If you need to use a data structure that the language does not support, such as a Queue or Heap in JavaScript, perhaps try asking the interviewer whether you can assume that you have a data structure that implements certain methods with specified time complexities. If the implementation of that data structure is not crucial to solving the problem, the interviewer will usually allow this. In reality, being aware of existing data structures and selecting the appropriate ones to tackle the problem at hand is more important than knowing the intricate implementation details. diff --git a/contents/understanding-compensation.md b/contents/understanding-compensation.md index d919084e..e01e608f 100644 --- a/contents/understanding-compensation.md +++ b/contents/understanding-compensation.md @@ -31,11 +31,11 @@ Bonuses are usually paid on a semi-annual basis and are typically dependent on a - Brandon is a Software Engineer fresh out of college. His base salary is 100,000, is a fresh grad (seniority multiplier: 10%), crushed expectations for the half (individual performance multiplier: 200%) and his company did pretty well (company performance multiplier: 120%). For that half, his bonus will be as follows: - - **Bonus:** 100,000 x 50% (for the half) x 10% (seniority) x 200% (individual performance) x 120% (company performance) = 12000 + - **Bonus:** 100,000 x 50% (half a year) x 10% (seniority) x 200% (individual performance) x 120% (company performance) = 12000 - Alyssa is an Engineering Manager with 10 years of professional experience. Her base salary is 220,000, is an experienced engineering manager (seniority multiplier: 20%), exceeded expectations for the half (individual performance multiplier: 150%) and her company did pretty awesome (company performance multiplier: 130%). For that half, her bonus will be as follows: - - **Bonus:** 200,000 x 50% (for the half) x 20% (seniority) x 200% (individual performance) x 130% (company performance) = 39000 + - **Bonus:** 200,000 x 50% (half a year) x 20% (seniority) x 200% (individual performance) x 130% (company performance) = 39000 Hence the amount of bonus you receive can be highly variable and senior employees get a higher proportion of their compensation from bonuses.