block by joyrexus ff019505566c3d06c22f

CS basics

At the risk of stating the obvious, any CS major needs a solid understanding of combinatorics, probability, and complexity. Consider studying Concrete Mathematics to bone up on core techniques.

Basic topics you should regularly review (at least before interviewing for a competitive software engineering position):

Sorting

You should know the details of at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort). Merge sort can be highly useful in situations where quicksort is impractical.

Hashing

You should know how to implement a hash table using only arrays in your favorite language.

Trees

Be familiar with the basic tree construction, traversal and manipulation algorithms.

Familiarize yourself with binary trees, n­ary trees, and trie­trees. Be familiar with at least one type of balanced binary tree, whether it’s a red/black tree, a splay tree or an AVL tree, and know how it’s implemented. Understand tree traversal algorithms: BFS and DFS, and know the difference between inorder, postorder and preorder.

Graphs

There are 3 basic ways to represent a graph in memory (objects and pointers, matrix, and adjacency list); familiarize yourself with each representation and its pros & cons.

You should know the basic graph traversal algorithms: breadth­first search and depth­first search. Know their computational complexity, their tradeoffs, and how to implement them in real code. If you get a chance, try to study up on fancier algorithms, such as Dijkstra and A*.

Concurrent/Distributed Programming

The world is rapidly moving towards multi­core, so know the fundamentals of “modern” concurrency constructs.

Know about processes, threads and concurrency issues. Know about locks and mutexes and semaphores and monitors and how they work. Know about deadlock and livelock and how to avoid them. Know what resources a processes needs, and a thread needs, and how context switching works, and how it’s initiated by the operating system and underlying hardware. Know a little about scheduling.