Note: This is by no means a comprehensive guide or one size fits all solution. I do NOT guarantee that you will find a job if you follow this. I am just posting this here for my own notes, and reference and these are the materials that I found helpful. Please don’t ask me what you should do as you know what’s best for you.
Algorithms and Data Structures
- HackerRank - Free: A free online platform with thousands of good questions covering a variety of topics such as Algorithms, Data Structures, Databases (SQL and NoSQL), Bash, Language Specific tracks (Python, Java etc.) and a collection of commonly asked Interview questions.
- Cracking the Coding Interview - Paid Book: Gives a good overview of what is expected in a coding Interview. An excellent guide for someone who has no idea how a Software Engineering Interview is conducted.
- LeetCode - Free & Paid: A very famous online platform with thousands of questions asked in tech interviews (user-curated) and sorted by company name, difficulty and concepts. (Arrays, Trees etc.)
- BinarySearch - Free: A relatively new free alternative to Leetcode with thousands of further questions and a host of new features such as timeboxing and other cool gamification features.
- InterviewCake: A good fast-tracked Interview Preparation for people in a rush.
- Excercism: A website to learn a new programming language by solving problems and get feedback from experienced programmers. (Free Code Review)
- Learn X in Y Minutes: Learn a new language or revise a forgotten one quickly.
- FreeCodeCamp: Strengthen the Fundamentals of a language or framework by working on Projects in Browser.
- Google Tech Dev Guide: A good collection of well-explained fundamentals of CS put together and maintained by Engineers at google.
- GeeksForGeeks: GFG has been around for quite a while and hosts some good content on the basics of Computer Science.
- SQL Practice with Mode: Basics and Advanced SQL explained simply with lots of practice questions that can be executed online on the Website. Although the Website is aimed at Data Analysts, the fundamentals stay the same and can be used by software engineers.
- TutorialsPoint DBMS Concepts: This covers the fundamental Database concepts such as Normalization, Entity-Relationships and Keys. A quick overview of the theory is helpful in the efficient table and schema design for SQL Databases.
- MYSQL Concepts Tutorialspoint: It’s good to know one famous SQL Database Software and its implementation details. This page covers a good overview of MYSQL.
- NoSQL and MongoDB Overview: This Website gives a good overview of Commonly asked questions about MongoDB, a well known used NoSQL Database.
Operating Systems, Unix and Linux
- The Basics of Operating Systems: Basic Operating Systems concepts are very vital to good software design as the software we write does not run in a vacuum. The article summarizes the basic concepts well and makes for a good recap. You don’t have to read the entire blog. Just take down important points and refresh more about them using Wikipedia.
- Linux Basics with LinuxJourney: Over 76% of servers on the web run Unix. It is a valuable skill to have while working with servers and the Linux command line. This Website offers an interactive way to master the basics of Unix/Linux and the command-line interface.
- Linux Detailed Documentation : The Linux Documentation Project is fully comprehensive guide to learning the in’s and outs of Linux.
- Udacity OS Refresher: A quick overview of Operating systems on udacity. A prequel to an advanced OS Course.
- Advanced OS Course: Advanced course on Operating systems covering most of things you need to know on OS level for modern distributed systems.
The System Design Primer: This is an amazing comprehensive guide with a large collection of examples and links to learn about building large-scale systems. Includes both high-level and low-level design and a good explanation of various techniques and technologies used.
HiredInTech System Design Guide: A less popular guide to System Design Interviews where the author goes through a systematic process of breaking down a given system design problem and tackling it step by step. I personally use this method during Interviews and when I am trying to design or think about systems at scale.
Shared Online Whiteboard at Miro. Formerly AwwApp: You can now select a system design question and share an online drawing board with a friend and practice designing systems at scale.
- Pramp: Pramp helps simulate real-world Interview situations by setting up one on one peer Interview sessions. This helps you put yourself in an actual interview situation and to analyze how you perform under pressure. The best part about Pramp is that it’s totally free to use. You can Interview for various topics such as Coding, System Design, Data Science, Behavioural Interview, Frontend Development etc.
- Interviewing IO - Paid: Anonymous technical mock interviews with engineers from Google, Facebook, and other top companies and get feedback in real-time and a chance to win Referrals as well. You can also conduct and take peer-based Interviews for free.
Are you a Robot?
- Common Behavioural Interview Questions: A beneficial collection of Commonly asked behaviour Interview questions and good ways to answer and common pitfalls to avoid.
- Some helpful tips for Negotiation:Some pointers from a negotiation expert Herb Cohen.
Other Amazing Resouces and Tips.
- 2.9 GPA at a no-name liberal arts college with 1 mediocre internship —> 4 FTE offers including FB: An inspiring story to read + lots of good resources.
- Patterns of Coding Interviews: Common patterns for solving coding problems. A beneficial way to learn to recognize patterns among related issues.
- Sliding Window Technique to Solve Substring Search Problems: An excellent Leetcode post on how to solve tricky substring search problems using a well-known technique called Sliding Window.
- Dynamic Programming Explained Step By Step: An excellent video series by GeekForGeeks on How to solve Common Dynamic Programming problems step by step with walkthrough examples.
- Tushar Roy’s Dynamic Programming Series: Tushar is an excellent teacher, and I found most of the videos on his helpful channel. Especially the ones on Dynamic Programming.
- Ifran Baqui’s Common Whiteboard Playlist: A good whiteboarding presentation of commonly asked interview questions.
- Advice on Studying Algortihms: A post from an excellent blog maintained by Buck Shelgris.
- Python Coding Style Guide: Some good tips on writing neat python code.
- Google Java Style Guide: Examples of Google’s style recommendation when it comes to Java. Just for your reference.
Getting that Yum TC ;)
- See the section On Numbers and Negotiation: An old but excellent post of Reddit from a former Facebook Software Engineer on how to negotiate.
Job Search Resources
- Glassdoor: Job Applications and Anonymous Reviews of Companies and Positions along with helpful Interview Questions.
- Angellist : Apply for Startup Jobs.
- JobPostings Canada: Explore varied Job Options in Canada.
- Indeed Canada: Apply for Jobs.
- Turing: Work full-time with top US companies.
- Hatchways: Interviews, Internships and assessments for New Grads to work in Startups in Canada.
- TripleByte: Find good Software Engineering Jobs via Online Assessments.
- Hired Canada: Find Remote Tech Jobs in Canada.
- Underdog: Apply to top startup jobs in NYC and San Francisco.
- RocketReach: Find Contacts of People out of your network.