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
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