This Study Plan was built following Coding Interview University
All weeks require at least 3 DS&A problems to be solved DAILY and pushed up to DSA repo
- Weeks 1-6, 3 easy problems
- Weeks 7-14, 2 easy 1 medium problem
- Weeks 15-20, 1 easy 2 medium problems
- Weeks 21-24, 2 medium, 1 hard problem
- Extra time 1 easy, 1 medium, 1 hard problem
- Problems are to be solved on paper or whiteboard FIRST, sample tests and then coded and pushed to the repo
- Whiteboard
- Leet Code
- Leet Code Solutions
- AlgoEpert
- [Grokking](- Grokking)
- Cracking the coding interview (version 6)
- Structy (because Alvin)
- Cracking the coding Interview (Version 6)
- DS&A in Python
- SRE: How Google Does It
- The SRE Workbook
- Seeking SRE
-
Complete AAO Python Week 1
-
Deep Dive into Python Lists
- Deep Dive 1 (Reading)
- Algo Expert Lists videos
- Easy Problem Day 1
- Easy Problem Day 2
- Easy Problem Day 3
- Easy Problem Day 4
- Easy Problem Day 5
-
Chapter 1 Cracking Coding interview (Arrays & Strings)
-
Cracking the Coding Interview Big O
-
Project
- Create Front End (React) Pomodoro Timer
- create test specs with (mocha/chai)
- Maintain Technical Journal (example)
- Build out a nice ReadMe (example)
- Add Wiki Pages for current and future features
-
Linked List vs Arrays
-
Chapter 2 Cracking Coding Interview (Linked List)
-
Chapter 3 Cracking Coding Interview (Stacks, Queues)u
-
Project
- Create a backend for Ponodoro Timer
- Add simplified user Auth
- MongoDB database
- Allow custom timers
- Maintain the Technical Journal
-
AlgoExpert hash tables videos
-
Distributed hash tables:
-
Implement with array using linear probing
- hash(k, m) - m is size of hash table
- add(key, value) - if key already exists, update value
- exists(key)
- get(key)
- remove(key)
- binary search (on sorted array of integers)
- binary search using recursion
-
Chapter 1 Cracking Coding interview (Arrays & Strings)
-
Project
- Refine Frontend/Backend for Pomodoro
- Deploy the Pomodoro app
- Add to GitHub profile
- Add to LinkedIn and make a post showcasing the project, tag Dr. Derek Austin
-
Implement in Python:
- insert // insert value into tree
- get_node_count // get count of values stored
- print_values // prints the values in the tree, from min to max
- delete_tree
- is_in_tree // returns true if given value exists in the tree
- get_height // returns the height in nodes (single node's height is 1)
- get_min // returns the minimum value stored in the tree
- get_max // returns the maximum value stored in the tree
- is_binary_search_tree
- delete_value
- get_successor // returns next-highest value in tree after given value, -1 if none
-
Chapter 4 Cracking Coding interview (Trees)
-
Project
- PokeDex
- Set up the express backend with mongoDB
- Create Postman Test Collection
- Create tests (mocha/alternative)
- Use Pagination
- MongoDb will store all Poke information
- two routes /pokemon and /pokemon/:id
- seed database
- pass postman tests
-
Implement:
- Merge Sort
- Quick Sort
- insert
- sift_up - needed for insert
- get_max - returns the max item, without removing it
- get_size() - return number of elements stored
- is_empty() - returns true if the heap contains no elements
- extract_max - returns the max item, removing it
- sift_down - needed for extract_max
- remove(x) - removes item at index x
- heapify - create a heap from an array of elements, needed for heap_sort
- heap_sort() - take an unsorted array and turn it into a sorted array in-place using a max heap or min heap
-
Chapter 10 Cracking Coding interview (Sorting, Searching)
-
Project
- PokeDex Frontend React Set up
- create test specs with (mocha/chai)
- Style up the app with good CSS
- set different modes (dark/light)
- Look for additional Features time permitting :)
-
Implement:
- DFS with adjacency list (recursive)
- DFS with adjacency list (iterative with stack)
- DFS with adjacency matrix (recursive)
- DFS with adjacency matrix (iterative with stack)
- BFS with adjacency list
- BFS with adjacency matrix
- single-source shortest path (Dijkstra)
- minimum spanning tree
- DFS-based algorithms (see Aduni videos above):
- check for cycle (needed for topological sort, since we'll check for cycle before starting)
- topological sort
- count connected components in a graph
- list strongly connected components
- check for bipartite graph
-
Chapter 4 Cracking Coding interview (Trees & Graphs)
-
Introduction XI Cracking the Coding Interview (Advanced Topics)
-
Project
- Refine Frontend/Backend for Pokedex
- Deploy the Pokedex app
- Add to GitHub profile
- Add to LinkedIn and make a post showcasing the project, tag Dr. Derek Austin
-
Chapter 8 Cracking Coding interview (Recursion, Dynamic Programming)
-
Contributing to Open Source
- Start Here
- NOOB Open Source Contributer
- How to Get Started (Video)
- IN Depth
- Advanced Search
- make sure open source project is in you chosen tech stack (need at least 5 - 10 contributions)
-
Learn these Patterns:
- strategy
- singleton
- adapter
- prototype
- decorator
- visitor
- factory, abstract factory
- facade
- observer
- proxy
- delegate
- command
- state
- memento
- iterator
- composite
- flyweight
-
Reference 101 Design Patterns
-
Chapter 9 Cracking Coding interview (System Design, Scalability)
-
Real Project or Contribute to Open Source
- think of small local business / church / friends / anyone and build them a site
- the point is to have real clients and work with them to build experience
- make sure that you have written permission to share the code on GitHub signed by owner
- make sure open source project is in you chosen tech stack (need at least 5 - 10 contributions)
-
LRU Cache
-
CPU cache
-
Concurrency in Python
-
Chapter 15 Cracking Coding interview (Threads, Locks)
-
Real Project or Contribute to Open Source
- think of small local business / church / friends / anyone and build them a site
- the point is to have real clients and work with them to build experience
- make sure that you have written permission to share the code on GitHub signed by owner
- make sure open source project is in you chosen tech stack (need at least 5 - 10 contributions)
-
Dependency Injection
-
Chapter 11 Cracking the Coding Interview (Testing)
-
Real Project or Contribute to Open Source
- think of small local business / church / friends / anyone and build them a site
- the point is to have real clients and work with them to build experience
- make sure that you have written permission to share the code on GitHub signed by owner
- make sure open source project is in you chosen tech stack (need at least 5 - 10 contributions)
-
Complete review of Cracking the Coding interview
-
Real Project or Contribute to Open Source
- think of small local business / church / friends / anyone and build them a site
- the point is to have real clients and work with them to build experience
- make sure that you have written permission to share the code on GitHub signed by owner
- make sure open source project is in you chosen tech stack (need at least 5 - 10 contributions)
- Mock Interviews
- How to Pass the Tech Interview
- How to Get a Job at the Big 4
- How to get a Job at the Big 4 follow-up
- Cracking the Coding Interview 1
- Cracking the Coding Interview 2
Think of about 20 interview questions you'll get, along with the lines of the items below. Have at least one answer for each. Have a story, not just data, about something you accomplished.
- Why do you want this job?
- What's a tough problem you've solved?
- Biggest challenges faced?
- Best/worst designs seen?
- Ideas for improving an existing product
- How do you work best, as an individual and as part of a team?
- Which of your skills or experiences would be assets in the role and why?
- What did you most enjoy at [job x / project y]?
- What was the biggest challenge you faced at [job x / project y]?
- What was the hardest bug you faced at [job x / project y]?
- What did you learn at [job x / project y]?
- What would you have done better at [job x / project y]?
- How large is your team?
- What does your dev cycle look like? Do you do waterfall/sprints/agile?
- Are rushes to deadlines common? Or is there flexibility?
- How are decisions made in your team?
- How many meetings do you have per week?
- Do you feel your work environment helps you concentrate?
- What are you working on?
- What do you like about it?
- What is the work life like?
- How is the work/life balance?
Begin to build out and map a plan for future development: