These are the conceptual "flashcard" questions (and answers) I use to prepare for software engineering interviews.
These questions are intended to cover the conceptual background you'll need to succeed. They are not a replacement for solving practice problems or implementing basic algorithms (e.g. sorting algorithms, binary search) yourself.
Mid/Senior-level folks: I recommend taking a look at Donne Martin's excellent System Design primer. The
Cloud
questions cover my knowledge gaps relative to that tutorial. (Your knowledge gaps will be different than mine - feel free to send PRs with your own questions for things I didn't cover.)
Caveat: most of this advice is geared towards junior/"new grad" interviews. More senior folks may still find it useful, however.
- Attempt to answer these questions from memory
- Review the answers I missed (usually via a script that records [in]correct answers)
GOTO 1
until I get every question right more times than I've gotten it wrong
Review all the
Cloud
questionsReview all the
CS225
questions.Review the following
CS241
sections:
- quiz4-part1
- quiz4-part2
- quiz6-deadlock
- quiz6-virtualMemory
- quiz7-networking1
- quiz7-networking3 (ignore
getaddrinfo()
stuff)- quiz7-scheduling
- quiz8-raid
- final_misc (ignore C-specific stuff) If you have time, review the following
CS241
sections:- quiz8-files3
- quiz8-files4
Review all the
CS225
,CS233
, andCS241
questions.
- Look at Glassdoor, LeetCode or similar sites for interview questions asked by a particular company for a particular role.
- Try to find trends in the questions - types, difficulty, concepts, etc.
- Attempt to answer representative-sample questions (from Glassdoor or other sites) before checking the (provided) answers
- Check the provided answers, and compare them to mine
GOTO 3
until I feel comfortable and confident with a particular company's question levelGOTO 1
for every different company I'm interviewing with
You can also do step 4 in groups.
- Go over some common algorithms and implement them yourself:
- Sorts (quicksort, mergesort, insertion sort)
- Binary tree traversals (insertion, deletion, search)
- Balanced binary tree (e.g. AVL tree) operations (insertion, deletion, search)
- Test them against common edge cases
- Tweak your implementations until all your test cases pass
- Do any other last-minute prep (e.g. reading company engineering blogs) now.
- Do not prep any further. (Ideally, you're fully prepared by this point anyway.)
- Do something fun and relaxing to calm your nerves.
- Get a good dinner and a good night's sleep.
- Have a solid breakfast.
- Remember that stupid rejections happen to everyone.
- Good luck! You'll do great. :)
The questions are based off material from the following sources:
UIUC courses
- CS173 (Discrete Mathematics)
- CS225 (Data Structures)
- CS233 (Computer Architecture)
- CS241 (System Programming)
- System Design primer by Donne Martin
- Azure Architecture Center by Microsoft
This content is licensed under an Apache 2.0 license.
This repo is rarely updated, however I do keep an occasional eye out for pull requests - so feel free to send them.
Here are some things that I've found helpful throughout my career:
- Steve Yegge's resume advice
- Jeff Erickson's algorithms book
- levels.fyi
- Interview mind map (a tiny bit Java-specific)
- Anecdata: how to succeed in software engineering
Here are some useful resources to review when preparing for an interview:
- Mid/Senior folks: common cache types