Landing Dream Job In Tech
I have interviewed at most of the big names in tech in the US. I will be joining Amazon starting January 2019, I have also received offers from a social media giant, several startups. In this post I will share my experience and how you can be a winner. The interview structure varies greatly by company. For example, my Apple and Samsung interviewers focused mostly on Java/C++ internals, which was tedious at times. Fortunately, big 4 (Amzon, Facebook,Google, Microsoft) companies have similar interview structure.
The very first thing to do when you get started with job hunt is to start solving leetcode, “LEETCODE TOP INTERVIEW QUESTIONS” from the beginning. I mentioned it in ALL CAPS, because this is the single most important resource in my opinion. Stick to my guide, I believe you wont be disappointed.
It took me little less than 4 months to prepare, apply and land an offer. I am not the brightest mind in the room, so you may be able to do it even faster. Believe in yourself. Cheers!
Step 1: Getting Started
- By solving Leetcode TOP INTERVIEW QUESTIONS: 145 total problems, start with easy problems and then solve the medium and finally try to solve some hard ones.
- Solve Problems in random order, don’t solve problems by topic.
- This helps your adaptivity.
- Think brute force first.
- (Think) Alternative ways to solve a problem.
- Find the optimal solution and learn that solution.
- If a problem bothers you too much (for hours), leave it for later. Move on.
- Clear your basic data structures 101: String, LinkedLists, Tree, Trie, Graph, Sorting, Serching, Dynamic and Recursive programming etc.
- Learn one language very well i.e. you dont require stackoverflow for solving basic problems.
- Make a cheatsheet and go through it once a week. Cheatsheet can be on a goodgle doc for the language/algorithm specifics you need to know in order to solve problems.
- Dont limit yourself to a book at the beginning. Follow the previous steps before getting into books.
- Book1 (I love it): Elements of Programming Interviews in Java/C++/Python by Adnan Aziz et.al. Get the book in the lanaugage you are most comfortable in.
- Book2: Cracking the Coding Interview by Gayle McDowell Laakmann
Step 2: Resume
You are trying to build the right resume that will get you the interview calls. Best thing is to start with a template from Harvard/MIT/Gayle Laakmann Software engineer resume and go from there.
- Resume should be 1 page and 1 page only.
- Keep their design. Don’t customize design, waste of time.
- Reorganize items to best represent your profile.
- Use keywords related to a job/ category of jobs.
- Use action words in describing projects or responsibilities.
- List all of your projects, Class projects or Research projects (1 liner).
- If you have never done projects it’s time to do some.
- Get a friend/two (NOT EVERYBODY) to review your resume preferably someone in the industry.
Step 3: Apply
Your goal is to get as many interview calls possible that are relevant to your background.
- If you don’t know know RubyOnRails, don’t write it on your resume. You should have some familiarity with every technology you write in your resume.
- Read the job description couple of times and see if they are looking for skills similar to you. Apply if you like it.
- Be flexible with location of the company.
- Apply at what u want to be, NOT who will call u.
- If the job doesn’t ask for expertise or specific skills, you can apply; but there will be stiff competition.
- Learn about ATS Applicant Tracking System and how to overcome it using word cloud or similar tools.
- You will start getting calls in a couple of months; however, you might have to wait couple of months.
- Make applying for jobs a habit. 20 applications/week. NOT 100 random applications/day.
- Dig into fortune top tech companies and apply from their site.
- Apply through LinkedIn EasyApply.
- Use IndeedPrime, stella.ai, leap.ai and similar tools.
A brief list of top tech companies to work for in the US. Following is a laundry list of big tech companies in US, in no porticular order.
- Big4: Google, Amazon, Facebook, Microsft
- Twitter, Snapchat, LinkedIn
- UBER / Lyft / Aurora / Tesla
- Netflix, Twitch, RIOT Games
- VM Ware, Cisco, Dell, HP
- Apple, Samsung, Samsung Research US
- Chipmakers: Intel, AMD, Qualcomm, NVIDIA
- Fintech: Bloomberg LP, Two-Sigma, Tableau
- Few Others
- eBay, Paypal, Square, Walmart-Labs
- Citrix- / Ultimate-software
- Oracle, IBM, Salesforce-CRM, Digital-Ocean-cloud, SAP
- High growth Companies
- Hubspot, Rackspace
- Palantir, Spotify
- Zillow, Airbnb
- Box, Dropbox, Medium, Quora
- Settled-in the business
- Adobe, Alibaba, Baidu, Deloitte, Epic, Fitbit, Yahoo, Yelp At the application stage, keep solving leetcode problems
Step 3-1: Application Rejections
- Rejections are mostly generated by an automated system
- Generally a ATS system, less than a certain percentage of profile match.
- Filter based rejection with keywords.
- Some recruiters use workday software to filter resumes.
- This auto-rejection emails are worthless. Still keep applying at the same company, similar job. Someday a recruiter will eventually dig your application up.
Step 4: Networking
LinkedIn is a great platform to network with recruiters and professionals. It helps a lot in getting interviews.
- Update your entire profile. Follow some of the big big guys, check to see how they write their profile. Describe every project. Lookup a director/VP of any company and you will have a good idea.
- Make friends with recruiters. Occasionally send thank you to a selected few when they accept your request.
- Like, Comment relevant Recuiter/ Field Expert posts.
- Post/Share interesting things several times a week.
- Reach out to recruiters.
- Introduce yourself
- Write something personal, say i see what you are posting and love what you are doing
- Find a job at their company, mention it
- They get so many msgs they don’t wanna do the matchmaking.
- Occasionally ask questions about their process
- They will help you out.
Step 5: Phone Interview
- Structure of the Phone Interview
- Few minutes about the job and the company
- Solve a programming on hackerrank/ googledocs/ codepair
- You can ask questions
- Take notes during interview
- Talk about your solution, the interviewer will ask questions, change the assumptions.
- Talk about edge cases
- Know the time complexity
- Can’t solve it? Think of a brute-force solution.
- How can you eliminate /reduce total execution?
Practice demo interview with peers on Pramp or similar sites. Your programming practice, Leetcode, data structures will come handy now.
Step 5-1: Failed phone interview?
So, you failed a phone interview. Maybe you didn’t quite solve the problem or the solution is not optimal. So the interviewer decided you need more time, MORE PRACTICE. Next-
- Learn optimal solution to a problem.
- There is no shame in learning, that guy also studied.
- They didn’t invent KMP or Shortest path algorithm
- Think of alternative ways to solve a problem
- Think, what if the constraints are altered.
- Learn to code in white-board, no-IDE environment
- Use pen-paper (not a pencil) to sketch.
- No time to erase.
Step 5-2: Dealing with Failure
it makes you stronger. ” “If something doesn’t break you,
Always remember this.
Here is how it makes you stronger-
- In someway or the other.
- Every problem you are asked, learn optimal solution to it.
- Learn OPTIMAL solution to similar problems.
- Try NOT to make the same mistake again.
- Make a plan to go through the essential DS, Algorithms.
- Solve Leetcode TOP INTERVIEW QUESTIONS(140 approx.), Do Easy, Medium, before anything else.
- Listed in order of importance.
String / Array
- Anagram/ Palindrome, from linked list or string.
- String search, KMP Search and Boyer-Moore Search.
- Reverse an array/string without affecting special characters
- All Possible Palindromic Partitions
- Count triplets with sum smaller than a given value
- Convert array into Zig-Zag fashion
- Generate all possible sorted arrays from alternate elements of two given sorted arrays
- Length of the largest subarray with contiguous elements
- Find the smallest positive integer value that cannot be represented as sum of any subset of a given array
- Smallest subarray with sum greater than a given value
- Stock Buy Sell to Maximize Profit
- Insertion/Deletion of a node in Linked List
- Insert with some constraints
- Delete certain matching value
- Reverse entire list or part of the linked list
- Check if a linked list is palindrome without extra space.
- Find loops and fix loops.
- Two Pointer
- Compare two strings represented as linked lists
- Add Two Numbers Represented By Linked Lists
- Merge two sorted Linked List.
Tree / Binary Search Tree
- Tree Traversal
- BFS, DFS recursively
- BFS, DFS iteratively
- Inorder,Preorder, Post-order traversal
- DFS Applications
- Check whether a binary tree is a full binary tree or not
- Lowest Common Ancestor in a Binary Search Tree
- Find Minimum Depth of a Binary Tree
- Maximum Path Sum in a Binary Tree
- Diameter of a Binary Tree
- More Problems
- Addition, deletion of nodes in BST, Binary Heap
- Check if a given array can represent Preorder Traversal of Binary Search Tree
- Remove nodes on root to leaf paths of length < K
- Check if a binary tree is subtree of another binary tree
- Reverse alternate levels of a perfect binary tree
Sorting And Searching
- Binary Search
- Search an element in a sorted and rotated array
- Merge Sort, Heap Sort (Binary Heap), Quick Sort
- Bubble Sort, Insertion Sort
- Find Kth Smallest/Largest Element In Unsorted Array
- Given a sorted array and a number x, find the pair in array whose sum is closest to x
- Breadth First Search (BFS) with Queue and recursively
- Do Island perimeter, robot movement simulation
- Depth First Search (DFS) with Queue and recursively
- To detect cycle in a Graph Union Find
- Shortest Path from source to all vertices Dijkstra.
- Minimum Spanning tree Prim / Kruskal.
- Building graph from a set of strings or some kind of representation(say 1–2, 2–3, 2–4 etc.).
Prepare / Dynamic Programming
- Longest Common Subsequence LCS
- Longest Increasing Subsequence LIS
- Edit Distance
- Minimum Partition
- Ways to Cover a Distance
- Longest Path In Matrix
- Subset Sum Problem
- Optimal Strategy for a Game
- 0-1 Knapsack Problem
- Boolean Parenthesization Problem
Prepare / BIT Manipulation
- Count total set bits
- number occurs once, every other appears twice. Find the number.
- Maximum Subarray XOR
- Magic Number
- Sum of bit differences among all pairs
- Swap All Odds And Even Bits
- Find the element that appears once
- Binary representation of a given number
- Count total set bits in all numbers from 1 to n
- Rotate bits of a number
- Count number of bits to be flipped to convert A to B
- Find Next Sparse Number
Prepare / Number Theory
- Modular Exponentiation
- Modular multiplicative inverse
- Primality Test,
- Basic and Extended Euclidean algorithms
- Chinese remainder theorem
Step N-1 : Finally, Onsite Call(n)!
- Time to learn system design.
- Design twitter, tinyurl, messenger,… EDICATIVE.IO - Grokking the system design Interview
- GoF Design Patterns
- Focus on building scalable, load balanced system
- Low latency applications
- Caching, CDN
- Failure tolerant systems
- Partitioning, Replication
- Integrate design pattern on small components
- Company wise Problem Solving
- Top leetcode problems in last 2 years
- Glassdoor reported problems ordered by date(latest/most recent)
Organize your thoughts on a board during the interview by Doug Arcuri
- Were they looking for a particular skill set/language proficiency?
- You don’t get hired, if you don’t know it.
- GET OVER IT.
- Keep applying, keep interviewing. DONT GIVE UP.
- The process itself is the biggest test.
- Made Mistakes?
- Go back a couple of slides, Dealing with failures.
Step N: You have an offer
- Were they looking for a particular skill set/language proficiency?