I've been putting together a long list of items to study for the software engineer interview:
The Computer Science Areas Involved
With this project, you can follow along with all the areas I'll be studying:
- data structures
- coding problems
Items that I added are in sections labeled "additional". I've been putting this list together for months.
Each day I take one subject from the plan, watch videos about that subject, and write an implementations:
- C - using structs and functions that take a struct * and something else as args.
- C++ - without using built-in types
- C++ - using built-in types, like STL's std::list for a linked list
- Python - without using built-in types
- and write tests to ensure I'm doing it right, keep it simple with just assert() statements
You may do Java or something else, this is just my thing.
Each subject does not require a whole day to be able to understand it fully.
Why code in all of these languages?
- Practice, practice, practice, until I'm sick of it, and can do it with no problem (some have many edge cases and bookkeeping details to remember)
- Work within the raw constraints (allocating/freeing memory without help of garbage collection (except Python))
- Make use of built-in types so I have experience using the built-in tools for real-world use (not going to write my own linked list implementation in production)
Keep in mind my approach is a little overboard since I haven't had low level experience with these. I've mainly used them in PHP where the details were abstracted away.
You don't need to memorize the guts of every algorithm.