/interview-questions

Stuff I use to prepare for interviews. Based off several CS courses from UIUC + https://github.com/donnemartin/system-design-primer.

Ace's interview questions

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

How I prepare for interviews

Caveat: most of this advice is geared towards junior/"new grad" interviews. More senior folks may still find it useful, however.

Part 1: conceptual questions

  1. Attempt to answer these questions from memory
  2. Review the answers I missed (usually via a script that records [in]correct answers)
  3. GOTO 1 until I get every question right more times than I've gotten it wrong

Subject matter

Algorithms-based interview

Review all the Cloud questions

Review 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
DevOps/Embedded Systems/C-based interview

Review all the CS225, CS233, and CS241 questions.

Part 2: practice questions

  1. Look at Glassdoor, LeetCode or similar sites for interview questions asked by a particular company for a particular role.
  2. Try to find trends in the questions - types, difficulty, concepts, etc.
  3. Attempt to answer representative-sample questions (from Glassdoor or other sites) before checking the (provided) answers
  4. Check the provided answers, and compare them to mine
  5. GOTO 3 until I feel comfortable and confident with a particular company's question level
  6. GOTO 1 for every different company I'm interviewing with

You can also do step 4 in groups.

Part 3: a few days before the interview

  1. 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)
  1. Test them against common edge cases
  2. Tweak your implementations until all your test cases pass
  3. Do any other last-minute prep (e.g. reading company engineering blogs) now.

Part 3: the night before the interview

  1. Do not prep any further. (Ideally, you're fully prepared by this point anyway.)
  2. Do something fun and relaxing to calm your nerves.
  3. Get a good dinner and a good night's sleep.

Part 4: the day of the interview

  1. Have a solid breakfast.
  2. Remember that stupid rejections happen to everyone.
  3. Good luck! You'll do great. :)

Misc. stuff

Credits

The questions are based off material from the following sources:

UIUC courses

  • CS173 (Discrete Mathematics)
  • CS225 (Data Structures)
  • CS233 (Computer Architecture)
  • CS241 (System Programming)

Public Resources

License

This content is licensed under an Apache 2.0 license.

Errata

This repo is rarely updated, however I do keep an occasional eye out for pull requests - so feel free to send them.

Resources

Here are some things that I've found helpful throughout my career:

Here are some useful resources to review when preparing for an interview: