CSE 333 18su Final Exam Topics

This list summarizes topics we've covered since those on the midterm. The final exam will be biased towards these items but anything we've done this quarter could appear, so you should take another look at the midterm list. Generally, if you've kept up with everything that's been covered in lecture, sections, exercises, and homework assignments you should be well prepared. A good way to study is to take some of the old exams before looking at the sample solutions and to work some of the practice exercises at the end of most lectures if you haven't done them already.

The rest of C++

  • Templates - template parameters for classes and functions, what happens when the compiler generates an instance of a template
  • STL, containers, and iterators. You are not expected to know picky details, but you should be able to use basic containers (vector, list, map) and iterators.
  • Smart pointers, reference counting semantics, using with STL. Understand differences between unique_ptr (cannot be copied, but can move ownership to another), shared_ptr (reference counting), weak_ptr (using to break cycles and why this is needed)
  • Subclasses, inheritance, virtual functions, dynamic vs static dispatch (function calls), vtables, constructors and destructors in subclasses
  • Pure virtual functions and abstract classes (what they are, how it works)
  • Using class heirarchies with STL and smart pointers, assignment slicing, value vs pointer semantics
  • C++ casts

Network Programming

  • Basic network layers: physical, data link, IP, TCP, application
  • Packets, and packet encapsulation across layers
  • IP addresses, address families (IPv4 and IPv6), DNS, ports
  • Stream sockets, file descriptors, read, write, close
  • Client steps: address resolution, create socket, connect socket to server, read/write (including retrys), close
  • Server steps: determine address and port, create socket, bind socket to address/port, listen (and how the OS queues pending connections), accept connection, read/write, close
  • Very basic HTTP and HTML (e.g., understand data sent and received by something like the HW4 web server)

Concurrency

  • Multiple processes and fork() (review of CSE351 mostly), shared file descriptors and close() in forked processes
  • Threads - concurrent execution inside a single process; know a few of the pthread basics (i.e., what it means to create a thread and start execution in a function; passing arguments to threads); basic issues involving sharing data between threads and locking.
  • Use of concurrency to improve throughput and resource utilization

You should understand the ideas and core concepts and how to use them, but don't memorize API details. We'll provide hints on the exam for API details as needed, but you should know the basics (e.g., how to use a STL vector or map, or the difference between accept and connect for sockets).