Some notes about what I wanted to do prep-wise for my interview at Microsoft for a summer 2015 internship (I didn't get an offer).

read more
Things to do:
Read through some Java code to get familiar. - I'm good
C structs - think of them as classes sort of. Then you can make methods with them too that create objects. Pass them parameters etc. 
Branch misprediction - done? Should make sure I'm correct. 

Things to remember: 
C: Memcpy() is used for copying an array 
C: strcpy() is used for copying string
Hash: average lookup is O(1). Will need extra memory to get things sorted, though. Worst case is O(n). Hash is going to require a lot of memory if the number of distinct values you want is large. 
BST: Average insert, remove, find etc, is O(logN).
Heap: remove top node, then move the last node (in an inorder traversal) to be the top, then percolate it down. 
Branch prediction: I think this is tied to pipelining, essentially you continue executing the loop based on its past history rather than waiting for the condition (before you in the pipeline) to evaluate. Then if you made a mistake you undo all the stuff since that evaluation. 
My hardest project: probably class checker. Started with very inefficient design, paranoia about issues (can't test against anything), then slow SQL queries, then mail server problems. 



Go over some of the algorithms we haven't covered in algorithms by going through the textbook. Going to say done. Can't really find any. 

Review some data structures: hash especially. Look at 410 notes. Consider memory and run time. 

Look over 411 notes for caches, branch mis prediction, pipelines, etc. done. 

Prepare what the hardest of my projects has been.