This is my personal coding interview preparation plan that I hope to follow during the time frame. Many things were adopted from other interview prep guides, some were suggested by top KZ coders that I know. Everything was then customized according to my knowledge and experience. Feel free to customize it for yourself.
Time frame: ~6 month (mid May - mid November)
Goal: at least 1 offer to big tech company in Europe/US
If you would like to prepare for the coding interview, feel free to reuse this repo. I, personally, find it very useful to organize things like so and track what you have done so far.
To prepare for the coding interview using this repository, fork it, and clone the forked repo to your local machine:
git clone https://github.com/yourusername/coding-interview-prep.git
You may want to solve problems on your own without reusing my codes. To do so, just remove everything from Problems directory.
To count your solved problems, execute the following Shell command:
./count_solved
Plan is based on existing preparation guides:
- Interview preparation guide bible from Sergey Makagonov
- List of Udacity courses developed with Google
- Good guide on GitHub
- Another guide on GitHub (seems to be less powerful)
To stay motivated during preparation:
- Programeme Instagram
- Tushar Roy’s YouTube Channel - suggested by Alibek Datbayev
- CS Dojo's YouTube Channel
- HackerRank's Youtube Channel
- Find someone who is also preparing for interviews and discuss problems together - suggested by Yerzhan Mademikhanov
- Mock interview each other - suggested by Sherzat Aitbayev
The areas I know:
- Back-end software development - Django MVC/REST, asynchronous Tornado, Play for Java, JAX-RS
- Machine Learning - built language models with RNNs
- iOS Development - 1 year experience (long ago, probably forgot)
The areas I need to work on:
- Algorithms & Data Structures (Stacks, Queues, Graphs, Trees, etc.) - 80% of time
- Object-Oriented Programming (in C++)
- System Design (Scalability 😏)
- Dynamic Programming
- Computer Architecture (Cache, RAM, etc.) - review the course at NU
- Operating Systems (Processes and Threads, Scheduling) - review the course at NU
- Computer Networks (especially TCP/IP) - review the course at NU
I have decided to split my plan into two phases (three months each): summer and fall phases.
Time to dedicate:
- 2 hrs on weekdays, 5 hours on weekends
- 12 weeks
- Total: ( 2 x 5 + 5 x 2 ) x 12 = 240 hrs (be realistic, 200 hrs will be good too😉)
Objective: solve > 200 problems on Leetcode! 😎
Programming language chosen: C++
Areas to work on:
- Algorithms (e.g. sorting)
- Data Structures (e.g. lists, stacks, queues, hash-map)
- Graphs (e.g. BFS, DFS)
- Trees (e.g. BST)
- Object-Oriented Programming (in C++)
- Dynamic Programming
- Mock Interviews - once a month
Where to study:
- Programming Challenges by Steven Skiena - first 3 chapters (theory only)
- LeetCode - start from easy Facebook, LinkedIn, Uber, AirBnb, then focus on middle and hard problems
- InterviewBit - go for another theory from video lectures and problems
- HackerRank, Codeforces - if time left for contests (to keep being interested in solving problems)
- Codefights - suggested by Anuar Serikov
- Algorithm Design Canvas - general guides on how to solve algo problems
Comments:
- Push solved problems to Github for later usage to refresh memory
Time to dedicate:
- TBD but less than previous phase due to university studies
Objective: solve 100 more Leetcode problems! 😎
Areas to work on:
- Computer Architecture (Cache, RAM, etc.)
- Operating Systems (Processes and Threads, Scheduling)
- Computer Networks (especially TCP/IP)
- System Design (Scalability uuh, cool)
- Mock Interviews - once a week (on weekends)
- Keep solving LeetCode problems + Cracking the Coding Interview
Where to study:
- Computer Organization and Design by David Patterson
- Computer Networking: A Top-Down Approach by Jim Kurose
- GitHub repos mentioned above
- Everything listed in Sergey’s post (MUST!!!)
- Pramp - suggested by Yerzhan Mademikhanov (20 unique free interviews)
- Gainlo - wanna pay?
- Distributed Systems - highly recommended by Alibek Datbayev
- Watch past interviews of people on Glassdoor, CareerCup - suggested by Ulugbek Adilbekov
Everything listed here is optional. Even though it is not that realistic to dedicate time to all these, I will try doing it during rest time at leisure 😄
Read Books:
Develop own website/landing page:
- Yenbekbay.me (source code is starred on Github)
- Sarahlim.com
Improve existing codes:
- Software Engineering course project
- Data Mining course project - building financial models (use Siraj Raval’s example code)
Complete started courses:
Open Source projects to contribute:
Physical:
- Buy a whiteboard/glassboard, put it in front of a mirror - good investment