DEV Community

Cover image for The Interview Study Guide For Software Engineers
SeattleDataGuy
SeattleDataGuy

Posted on • Updated on

Software Engineer Interview The Interview Study Guide For Software Engineers

By Ben Rogojan

Software engineering interviews, like other technical interviews, require plenty of preparation. There are a number of subjects that need to be covered in order to ensure you are ready for back-to-back questions on algorithms, data structures, design, optimization and honestly just an ever growing basket of subjects.

So I created a checklist on my last round of interviews that covers many of the popular topics.

To help you keep track of your progress, we've compiled a comprehensive checklist of the same problems listed below; that list can be found here.

Warm Up With The Classics

  1. Fizz Buzz
  2. 560. Subarray Sum Equals K
  3. Arrays: Left Rotation
  4. Strings: Making Anagrams
  5. Nth Fibonacci

How did you do? Take a moment and rate yourself on these classics. We have been asked most of these at some point in the interview process---and often early on as weed-out style questions. They often have less to do with algorithms and data structures, but still require a good understanding of loops and arrays (yes, an array is a data structure).

Algorithms And Data Structures

Pre-Study Problems

Before going through the video content about data structures and algorithms, consider trying out these problems below. See if you can answer them. This will help you know what to focus on.

  1. 985. Sum of Even Numbers After Queries
  2. 657. Robot Return to Origin
  3. 961. N-Repeated Element in Size 2N Array
  4. 110. Balanced Binary Tree
  5. 3. Longest Substring Without Repeating Characters
  6. 19. Remove Nth Node From End of List
  7. 23. Merge k Sorted Lists
  8. 31. Next Permutation

Algorithms And Data Structures Videos

Data Structures

  1. Data Structures & Algorithms #1 --- What Are Data Structures? --- Video
  2. Multi-dim --- Video
  3. Dynamic Arrays--- Video
  4. Resizing arrays --- Video
  5. Data Structures: Linked Lists --- Video
  6. Core Linked Lists Vs Arrays --- Video
  7. Pointers to Pointers--- Video
  8. Data Structures: Trees--- Video
  9. Data Structures: Heaps--- Video
  10. Data Structures: Hash Tables--- Video
  11. Phone Book Problem --- Video
  12. Data Structures: Stacks and Queues--- Video
  13. Using Stacks Last-In First-Out --- Video
  14. Data Structures: Crash Course Computer Science #14--- Video
  15. Data Structures: Tries--- Video

Algorithms

  1. Algorithms: Graph Search, DFS and BFS--- Video
  2. BFS(breadth-first search) and DFS(depth-first search) --- Video
  3. Algorithms: Binary Search --- Video
  4. Binary Search Tree Review --- Video
  5. Python Algorithms for Interviews--- Video
  6. Algorithms: Recursion --- Video
  7. Algorithms: Bubble Sort --- Video
  8. Algorithms: Merge Sort --- Video
  9. Algorithms: Quicksort --- Video

Big O Notation

  1. Introduction to Big O Notation and Time Complexity (Data Structures & Algorithms #7) --- Video
  2. Harvard CS50 --- Asymptotic Notation --- Video
  3. A Gentle Introduction to Algorithm Complexity Analysis --- Post
  4. Cheat sheet --- Post

Dynamic Programming

  1. Dynamic Programming (Think Like a Programmer) --- Video
  2. Algorithms: Memoization and Dynamic Programming --- Video
  3. 6.006: Dynamic Programming I: Fibonacci, Shortest Paths --- Video
  4. 6.006: Dynamic Programming II: Text Justification, Blackjack --- Video
  5. Dynamic Programming --- Post

String Manipulation

  1. Coding Interview Question and Answer: Longest Consecutive Characters --- Video
  2. Sedgewick --- Substring Search --- Video

Interview Problem Walk-throughs

  1. Google Coding Interview --- Universal Value Tree Problem --- Video
  2. Google Coding Interview Question and Answer #1: First Recurring Character --- Video
  3. Find min and max element in a binary search tree --- Video
  4. Find height of a binary tree --- Video
  5. Check if a binary tree is binary search tree or not --- Video
  6. What Is Tail Recursion? Why Is It So Bad? --- Video

Post-Study Problems

Now that you have studied for a bit, and watched a few videos, let's try some more problems!

  1. Bigger Is Greater
  2. 6. ZigZag Conversion
  3. 7. Reverse Integer
  4. 40. Combination Sum II
  5. 43. Multiply Strings
  6. Larry's Array
  7. Short Palindrome
  8. 65. Valid Number
  9. Bigger is Greater
  10. The Full Counting Sort
  11. Lily's Homework
  12. Common Child
  13. 459. Repeated Substring Pattern
  14. 27. Remove Element
  15. 450. Delete Node in a BST
  16. 659. Split Array into Consecutive Subsequences
  17. Number of Subarrays with Bounded Maximum
  18. Combination Sum IV
  19. Best Time to Buy and Sell Stock with Cooldown
  20. Longest Repeating Character Replacement
  21. Swap Nodes in Pairs
  22. Binary Tree Right Side View
  23. Flatten Nested List Iterator
  24. Binary Tree Level Order Traversal
  25. Binary Search Tree Iterator
  26. Maximum Length of Pair Chain
  27. Split Linked List in Parts

Operational Programming Problems

Some companies won't ask you algorithm problems. Instead, they might focus more on implementation and operational problems. These are usually more niche and involve practical problems, like looping through data and performing a task of some sort. These types of problems don't usually require as much practice because it is more about taking basic concepts like arrays and HashMaps and keeping track of what you are doing to them.

  1. Kangaroo Problem
  2. Breaking Records
  3. Find A Stringiter
  4. No Idea!
  5. Days of the programmer
  6. Leaderboard
  7. Word Order
  8. Sherlock And Squares
  9. Equalize The Array
  10. Apples And Oranges
  11. More Operational Style Questions

System Design Videos

System design questions are crucial questions that show you are more than just a coder. You need to be able to think big picture as an engineer. Where do certain services belong, what kind of servers do you need, how would you manage traffic, etc. All of these ideas show that you are able to design software, not just code what people tell you to code.

  1. Parking Lot System --- Video
  2. Whats App --- Video
  3. Uber design --- Video
  4. Instagram --- Video
  5. Tinder Service --- Video

Operating Systems

Operating system questions are a little more rare, but it is good to have a solid understanding of concepts like threads, scheduling, memory, etc., even if it is just a basic understanding. It is very embarrassing to get asked what the difference is between a process and a thread and not know the answer.

  1. Commonly Asked Operating Systems Interview Questions
  2. What is Translation lookaside buffer?
  3. Why does Round Robin avoid the Priority Inversion Problem?
  4. Interrupt Vs System Call---What is 'inode' in file system?
  5. Operating System Interview Questions and Answers --- Part I
  6. What is a kernel --- Gary explains
  7. Round Robin Algorithm Tutorial (CPU Scheduling)
  8. The Magic of LRU Cache (100 Days of Google Dev) --- Video
  9. MIT 6.004 L15: The Memory Hierarchy --- Video
  10. Interrupts --- Video
  11. Scheduling --- Video

Threads

  1. User Level thread Vs Kernel Level thread
  2. Intro to Processes & Threads --- Video
  3. Difference Between Process and Thread --- Georgia Tech --- Advanced Operating Systems --- Video
  4. Difference between forking and multithreading

Object Oriented

Similar to operating systems, not every interview will ask you about object-oriented programming, but you never know. You want to make sure you remember your basics from your computer 162 course.

  1. Java Programming Tutorial --- 49 --- Inheritance --- Video
  2. Java Programming Tutorial --- 55 --- Introduction to Polymorphism --- Video
  3. Java Programming Tutorial --- 58 --- Abstract and Concrete Classes --- Video
  4. Java Programming Tutorial --- 57 --- Overriding Rules --- Video
  5. Java Programming Tutorial --- 59 --- Class to Hold Objects
  6. Object-Oriented Programming --- Video

Design Patterns

If you were like us, we weren't taught about all the various design patterns. So it's good to get an understanding of how they work and why you would use them. Some interview questions can be as simple as, "Why would you use a factory class?"

  1. Factory Design Pattern --- Video
  2. Observer Design Pattern --- Video
  3. Adapter Design Pattern --- Video
  4. Facade Design Pattern --- Video
  5. Chain of Responsibility Design Pattern --- Video
  6. Interpreter Design Pattern --- Video
  7. Singleton Design Pattern Tutorial --- Video
  8. Chapter 6 (Part 1) --- Patterns (video) --- Video
  9. Head First Design Patterns --- Video

SQL

This is the last section. Many of you probably won't be asked that many SQL questions. However, I always think it is good to have in your back pocket.

SQL --- Problems

  1. 262. Trips and Users
  2. 601. Human Traffic of Stadium
  3. 185. Department Top Three Salaries
  4. 626. Exchange Seats
  5. Hackerrank The Report
  6. 177. Nth Highest Salary
  7. Symmetric Pairs
  8. OccupationsPlacements
  9. Ollivander's Inventory

SQL --- Videos

  1. IQ15: 6 SQL Query Interview Questions --- Video
  2. Learning about ROW_NUMBER and Analytic Functions --- Video
  3. Advanced Implementation Of Analytic Functions --- Video
  4. Advanced Implementation Of Analytic Functions Part 2 --- Video
  5. Wise Owl SQL Videos --- Video

Post SQL Problems

  1. Binary Tree Nodes
  2. Weather Observation Station 18
  3. ChallengesPrint Prime Numbers
  4. 595. Big Countries
  5. 626. Exchange Seats
  6. SQL Interview Questions: 3 Tech Screening Exercises (For Data Analysts)

Interviewing can be tough because you can feel like you are making no progress. Having this study guide will help you track your progress and give you a better read on how you are doing!

Good luck!

Also, if you are looking to read/watch more great posts or videos:
Connecting To Big Query Using Jupyter Notebook On SaturnCloud Part 2

Three Books You Should Read As A Data Scientist
Hadoop Vs Relational Databases
How Algorithms Can Become Unethical and Biased
How To Improve Your Data Driven Strategy
How To Develop Robust Algorithms
4 Must Have Skills For Data Scientists
SQL Best Practices — Designing An ETL Video

Top comments (91)

Collapse
 
scottshipp profile image
scottshipp

I think we really need to face a reckoning in our profession. And the reckoning is this: requiring an overload of stuff that's simply not-important on-the-job just to get through the interviewing process and land a position.

Some of it is mildly useful for the actual job. But the rest of it is a bunch of hurdles that we don't need to put in the way of people.

And we need to do a much better job of building bridges into the profession that actually build people up into valuable devs.

The current approach of "leetcode" gatekeeping to the industry is a failure.

Collapse
 
seattledataguy profile image
SeattleDataGuy

I think many developers and engineers hold this same sentiment. Most of us study really hard to figure out how to reverse a binary tree into a linked list blah blah blah(I hope you get thats a joke)....and then we get the job and....

We are just calling APIs of libraries developed by people before us. So what was the point. So yes, there are many of us that agree. But, since this is still the current way, I hope this list can be useful but would also like to see it deprecated :).

Collapse
 
eanx profile image
Zack Z.

It's hard to demand change when you're interviewing for a new job. However, once you have the job, I think it's a lot easier to demand change. Be that person who asks, "Why are we doing interviewing like this?" Be that person who says, "This interview question provides no useful signal." Be that person who says, "We shouldn't use Leetcode / Hackerrank / etc. as a filtering step."

Collapse
 
ollelinux profile image
Olle Linux

Very true! Still thanks for the great list of 'todo\'s'

Collapse
 
eurowhisper profile image
EuroWhisper

I'm very glad to see that this is the top comment on the article. Honestly, these hiring processes that start with some algorithm challenges straight out of that controversial "Cracking The Coding Interview" book benefit nobody, but hurt everyone.

It reinforces the "imposter syndrome" experienced by many perfectly competent candidates and companies basically rob themselves of valuable prospective employees by insisting on taking this approach to interviewing.

As someone looking for their first frontend job... Can I solve a bunch of advanced algorithm challenges? Nope, I don't have the computer science background for that. But can I build a reusable component library, consume REST/GraphQL API's to communicate with the server and display data in a sensible way on the client-side? I sure can.

Yet, people like me are being glossed over, even though we are perfectly able of solving real-world problems.

I suppose another way to look at it each time this happens is "the trash took itself out". As in, if this is their hiring practice and they see nothing wrong with it, would I like working for that company anyway? Though, that doesn't help me get my foot in the door.

Collapse
 
rjlacanlaled profile image
rjlacanlaled

But they need to know your skills are above average as to effectively Google search the simple solution to their "super project" needs.

Collapse
 
javyer12 profile image
javyer12

100% true, I'm learning frontend, and some of these examples overwhelm me, but I still find the challenge of learning it interesting

Thread Thread
 
eurowhisper profile image
EuroWhisper

Don't worry about it too much, it's now 3 years since I made that comment. I still suck at solving these "brainteasers" that are pointlessly used at interviews and I'm working for a nice company where I'm well respected, have been told I'm approaching senior level very quickly and am involved in training juniors. I don't bother practicing brain teasers at all, in fact. I instead put my effort into learning "advanced" React features, NextJS, some AWS basics and now looking into Svelte and judging by the salary increases, it was a good idea.

Collapse
 
leesmith profile image
Lee Smith 🍻 • Edited

This is all well and good...brings back a lot of memories from undergrad school.

But after enduring such an interview from a company, PLEASE PLEASE PLEASE don't forget to then ask your interviewer how they've used/applied said "algorithms, data structures, design, optimization and honestly just an ever growing basket of subjects" in their CURRENT work.

If you get a blank stare back, you'll know that you were just put through an "interview" that was essentially algorithm hazing and nothing more. I'd seriously question whether or not I'd want to work for this company.

Collapse
 
bedmison profile image
Bob Edmison

This x 1000. I interviewed with a Big Name Company once, early in my career, and was asked some question about implementing a AVL tree or some such. I asked the guy ( and it was a guy because they all were at Big Name Company, but that's a diff issue ) if he had ever, in his entire working life at that place, ever implemented an AVL tree, or any other primitive data structure from scratch. When he said "no", I asked why they were asking me how to do it. He said because they always asked that question. I said I'd answer when I had my data structures book handy. I got the gig anyway.

These questions are pointless. I'm a hiring manager now. I never ask interviewees questions about how to implement basic structures or algorithms. If someone is rolling their own now, they need to have a damn good reason for it. However, I will ask questions to tease out if they understand WHEN AND HOW TO USE different algorithms, structures, design patterns, etc, and the tradeoffs associates with those choices. I think that is fair game, and also a better indicator of what kind of software engineer you will be.

If you can code up a quick sort, but I don't ask you that kind of sort to use in a given situation , and then don't find out until after I hire you that you use bubble sorts for everything, me knowing you can code a quick sort is not terribly helpful.

Collapse
 
theodesp profile image
Theofanis Despoudis

You were asked for AVL tree? Jesus

Thread Thread
 
adarsh_menon_ profile image
Adarsh Menon

I was asked - what is the data structure that databases usually use to store data. I said B trees or B+ trees (we were discussing indexing, fan-out et.. ). Then he said ok now implement a B tree with all the crud operations. I told him I can explain the logic to you, but I don't think i can code that. Maybe I could, but it would take me a log time to convert the logic into code.

Collapse
 
eddie profile image
Eddie

Thirthirded

Collapse
 
spqrbob profile image
Bob McCann

100% this! Same with not allowing you to use Google as you attempt to formulate a solution. I assume you would be allowed to use Google day-to-day as you perform your job, right?

Collapse
 
kevinlang profile image
Kevin Lang

Exactly! I'm disappointed by how many people accept these whiteboarding rituals as a necessary or unavoidable evil. They aren't. There are plenty of companies out there that offer more sane alternatives that mirror day-to-day work.

Collapse
 
zyabxwcd profile image
Akash

@leesmith That's super good advice. I always shout my guts out to people I chat with that this type of convention or practice that is going on in the soft dev world is so useless but more often than not I get that 'stop cribbing' look back or just some ignorant view point back which makes me think that people are just whizzing through life mindlessly, like they don't actually care. Anyways, I am definitely gonna raise this question in my next interview of how they have used what they are asking me in their work on a day to day basis. It'll be super fun (and maybe a little risky) xd

Collapse
 
fleepgeek profile image
Emmanuel Okiche

Seconded!!

Collapse
 
belverus profile image
Belverus

Seems like I will never be ready :)

Collapse
 
mongopark profile image
Ola' John Ajiboye

In first interview. I was asked to sum up all integers in an array. I used reduced method.interviewer asked me to use for loop instead. I completely froze. They laughed at me an sent me out. That was a push in the right direction for me.

Collapse
 
belverus profile image
Belverus • Edited

I was asked:

  • OOP & all related concepts on Java. It was very detailed. (answered 85%)

  • Data Structures & Algorithms (BST, RB Tree, Sets, Maps, Hashing, Graphs, BFS, DFS, MSP, etc..) (answered 90%)

  • SQL: they nearly asked every single keyword on SQL. (answered 99%)

  • Implemented a LinkedList on a blackboard. Then they made me do couple of sorting algorithms on that.

  • HTML & CSS live-coding.

And they rejected me yesterday because I don't know JS Which was already very clear on my resume. This was a junior FE position :)

Thread Thread
 
seattledataguy profile image
SeattleDataGuy

Welcome to interviewing....

Thread Thread
 
mongopark profile image
Ola' John Ajiboye

Most companies have no clue how to interview and the process is similar for senior and Junior. I interviewed at another company for an internship where I was asked to implement a LinkedList in Java even though I made it clear I was more into Javascript. But somehow I did well because I was prepared for anything. The interview gave a glowing review and said he was really impressed. The recruiter contacted me to ask if I had another offer I was considering, I said No. Then he said they were going to interview other candidates. Next thing I heard was that they picked other guys.

I just kep working harder. Months after that I got a dream offer. I am glad I missed that opportunity.I would have had to start form an intern. But I got another offer as solid mid-level Engineer. Just keep pushing. Itäs a matter of time. I was rejected around 300times , some after 6 rounds.

Collapse
 
seattledataguy profile image
SeattleDataGuy

Don't let this stress you out. You don't need to do every problem to be ready. I just recommend doing a few of each. Doing an interview or two, seeing where you need to study and then do more :).

Collapse
 
belverus profile image
Belverus

I did my first interview today. It was bad. Not that bad as I imagined. I could answer what I learned since from the start. I was already aware but rediscovered that I need to learn a lot.

Thanks for the boost!

Thread Thread
 
seattledataguy profile image
SeattleDataGuy

We have all had that first interview. I remember my first interview at Amazon. The very first question shut me down and I froze and just couldn't think of a good answer. Luckily the interviewer allowed me to move on so I could get some answers in. But those first interviews show you what you don't know...it's painful but good :);

Thread Thread
 
belverus profile image
Belverus

Haha exactly. Happened to me either. I asked to "move on" and get back to that question "later".

Collapse
 
chrisachard profile image
Chris Achard • Edited

You know something's going to be a great resource when it already has a whole bunch of "saved for later" tags 😃

Great list! Love that you included more than just algorithms (like system design, etc too). Even if you're not interviewing right now, it's a great idea to just pick a few videos off the list and watch them :)

Thanks!

Collapse
 
seattledataguy profile image
SeattleDataGuy

Thanks for your kind words! Yes almost 1k saves as of right now. I really tried to make it comprehensive. Also, that isn't meant to intimidate anyone. The reason I add a checklist is so you can do a few in each section and go for an interview. Figure out where you need to work on things and focus on that area.

Collapse
 
napoleon039 profile image
Nihar Raote

Took only 3 days for that number to jump up to 2000. Just goes to show how awesome this checklist is. Thanks for creating this!

Thread Thread
 
seattledataguy profile image
SeattleDataGuy

It's crazy how fast it got liked o.O

Collapse
 
mcloide profile image
Cristiano D. Silva

Questions like these do not prove that the candidate has knowledge or experience, it only proves that the candidate has academic experience.

The test that I give to all my candidates is simple and direct to the point. It expects that the candidate knows engineering and coding and test those aspects with non-standard questions and problems that could have more than one solution where you could verify how the candidate responded the question and follow up with him/her about it.

This is my opinion off course but it does seem foolish applying tests like this.

Collapse
 
peksapro profile image
Krzysztof Peksa

Nice article.
I would mention about application security.
Let's start with OWASP: blog.sucuri.net/2018/10/owasp-top-...

Collapse
 
wavegxd profile image
wavegxd

Thanks! This is perfect!

I had some trouble figuring out what I should tackle first. The warm up and pre-study problems are a great idea.

Collapse
 
seattledataguy profile image
SeattleDataGuy

After the warm-ups I think I would personally just hit a few of each subject at a time and then check them off the checklist.

Collapse
 
spqrbob profile image
Bob McCann

The "warm ups" made me sit back down and reevaluate my career entirely. Is it too late to change my major to Underwater Basket-Weaving?

Collapse
 
lakincoder profile image
Lakin Mohapatra

Awesome List. It really helps. Thank you so much for contributing to the community.

Collapse
 
seattledataguy profile image
SeattleDataGuy

I love being part of the community!

Collapse
 
method5440 profile image
Scott Fenton

Wow, that ‘12 minute read’ is really misleading here lol

Collapse
 
seattledataguy profile image
SeattleDataGuy

Like, 12 minute read...100 hours of practice

Collapse
 
mazentouati profile image
Mazen Touati

Congratulation, you just won the internet 👏👏

Collapse
 
seattledataguy profile image
SeattleDataGuy

I don't know if that is true! But I hope this helps :)

Collapse
 
mazentouati profile image
Mazen Touati • Edited

Indeed, Developers are lazy by nature. They may know/be aware about these topics in general but having all of them curated this way is a great help. It may also saves time when refer it for new comer to the field in your circle. So thanks man ^

Thread Thread
 
seattledataguy profile image
SeattleDataGuy

Having checklists :) just help make things easy!

Collapse
 
sudheendrakv profile image
Sudheendra

Thanks a lot!

Collapse
 
seattledataguy profile image
SeattleDataGuy

You're welcome!

Collapse
 
bgalvao profile image
Bernardo

I am not a guy from computer science, will learning from this guide change the way I approach programming problems? Just asking as an outsider.

Collapse
 
n8chz profile image
Lorraine Lee

Yes. Mastering the list above might even turn you into a guy from computer science. At minimum, it will change the way you approach programming problems to the computer science way.

Collapse
 
seattledataguy profile image
SeattleDataGuy

In many ways you are very correct! If you can really get a handle on all this stuff. You could land a job as a software engineer.

Collapse
 
joellau profile image
Joel Lau

I'm still rather new myself, but I think so! Especially with regards to performance (think 100k users or records), and maintainability (how organized your entire code base is e.g. 200 java files)

Collapse
 
amboulouma profile image
Amin M. Boulouma
Collapse
 
jawwad22 profile image
jawwad22

thanks dude

Collapse
 
seattledataguy profile image
SeattleDataGuy

You're welcome!

Collapse
 
sridharpandu profile image
sridhar pandurangiah

Awesome. Circulated the URL to all my colleagues

Collapse
 
seattledataguy profile image
SeattleDataGuy

Thank you!