Previous Lecture Lecture 18

Lecture 18, Thu 06/06

Final Review

Logistics
- Bring studentID and writing utensil
    - ink or dark led
- Please write LEGIBLY
- No electronic devices
- No book, no notes
- 30% of your final grade
- Monday 6/10 @ 12pm (CHEM 1171)

Format of the exam
- Similar to the midterms, but designed to take two hours (~ twice as long)
- Mix of questions
    - Short answer
    - Briefly describe / define / state /...
    - Write code
    - Fill in the blank / complete the table (or diagram)
    - True / False, if false explain why
    - Given code, what is the output

Topics
- Will cover everything from the start of the quarter up to Tuesday's lecture (6/4) on Threads
- Covers lecture, labs, homeworks, and readings
    - Use lecture notes as breadth of topics (except OS, use lecture notes for depth), and all other course material (lecture, hw, labs, reading) as depth.

- Makefiles
- STL (vector, map, unordered_map, string, iostream, thread, ...)
- Class Design
    - Abstract Data Types
    - Build process
        - .cpp / .h linking
    - Big Three (copy constructor, destructor, assignment operator)
    - Scope resolution operators (::)
        - Used in class method definitions and namespaces
    - Templates
- Structs and classes
    - Differences
    - Memory storage (hexidecimal notation)
    - Syntax
- Memory Padding
- Namespaces
    - Naming collisions (and how to avoid them)
    - Global namespace
- Quadratic Sorting
    - Bubblesort, selectionsort, insertionsort
    - Optimizations
    - Running times
- Hash Tables
    - Performance and functionality
    - Open-address, double-hashing, chained-hashing (pros / cons)
    - std::map, std::unordered_map, std::set, std::unordered_set (under-the-hood implentation and concepts and runtime)
- Mergesort and Quicksort
    - Algorithm
    - Running times
    - Pros / cons
- Inheritance
    - Understand concepts and behavior
    - Understand memory allocation of base / sub classes
    - Hierarchy (types)
- Polymorphism
    - Understand concpets and behavior
    - Virtual vs. non-virtual
    - Abstract classes and pure virtual functions
    - Virtual destructors
- Exceptions
    - Try / catch / throw mechanisms and flow control
    - Inheritence and how catches work with types
- Function Pointers
    - Syntax of function Pointers
        - How to declare, assign, call functions via function Pointers
    - Using function pointers with Threads
    - write code utiliznig function pointers
- Testing
    - Understand main ideas and terminology
    - tddFuncs' way of Testing
    - TDD (test driven development)
- Operating System concepts
    - Role of the OS
    - OS Kernel
    - Relationship to software / hardware
    - Processes
    - Threads
    - Basic Unix commands from lecture notes
        - ps, ps -e, top, jobs, ^C, ^Z, kill, ...
    - Foreground vs background Processes
        - How they relate to the terminal
    - Fork / Exec
        - Examples with terminal behavior when executing command lines and unistd.h functions in a C++ application
- Heap
    - MinHeap and MaxHeap
    - Conceptual tree structure
    - Implementation
    - Array representation and index of children / parent of node
    - Insertion and maintenance
        - Deletion (of root)
        - Runtime analysis
- Threads
    - Threads and hardware (threads running on cores)
        - Concurrency
    - Using <thread> library to create threads
    - .join, .detach - what they do and why is this important
    - Race conditions
        - Mutex (locks) and supporting atomic operations