3 ms·
OS: Used mutexes, semaphores, implementation details, argue about pros/cons, liveness/safety properties. Implemented shell, virtual memory, interrupt handling,
by wting 13y ago
OS: Used mutexes, semaphores, implementation details, argue about pros/cons, liveness/safety properties. Implemented shell, virtual memory, interrupt handling, process tables, scheduling algorithms, and multi-processor kernel support on JOS. Inode management and journaling for a FUSE filesystem. Concurrent network proxy.
Distributed Computing: Paxos, Bayou, Byzantine Faults, 2 Phase Commit.
Network Security: Had to demonstrate SQL injection, XSS attacks, stack smashing various C programs (one exploit required taking advantage of a double free to gain control).
Programming for Performance: cache / matrix multiplication optimization, finding single source shortest path for the USA road network using a multithreaded implementation on a supercomputer 3 ways (Djikstra, Bellman-Ford, BF with chaos relaxation), and again using CUDA.
Algorithms: graph theory (cycle detection, min-max flow, bipartite detection, Kruskal's, Floyd-Warshall, A*), divide & conquer, recursion / dynamic programming, greedy algorithms.
Other courses: compilers, data structures, combinatorics, probability, linear algebra.
These are just some projects I've done over the years, and only a subset of what was taught. Oh, and I picked up boring stuff like git, unit testing, and 3NF along the way.
> Did anyone actually learn software development from their CS degree?
Yes, yes I did.