CPSC 225, Spring 2011
Information About the Final Exam

The final exam for CPSC 225 is cumulative, with some emphasis on material covered since the second test. That includes material: on networking (Socket and ServerSocket; the HTTP protocol); on threads (the synchronized statement, volatile variables, wait() and notify()); on parallel and distributed processing (Section 12.4); on Buttons and Actions (Section 13.3); and on the MVC patters and GUI components that use it (Section 13.4). The final exam is worth 20% of the grade for the course. It will be about 6 pages long.

Here are some terms and ideas covered since the second test:

network connections and the Socket class;  constructor: new Socket(host,port)
the ServerSocket class;  constructor: new ServerSocket(port);
socket.getInputStream() and socket.getOutputStream()
clients and servers; how to implement them with Socket and ServerSocket
using a thread to receive messages from a socket's input stream
the HTTP protocol
basic format of HTTP request headers and HTTP response headers
mime types and the Content-Type header
basic operation of a web server and how it can be implemented

uses for threads:
   animation, as an alternative to Timers
   background computation
   parallel processing
   dealing with blocking I/O
the synchronized statement
synchronization lock in every Object, and how it is used in synchronization
mutual exclusion
volatile variables
multiprocessing: dividing up a job among available processors
load balancing
thread pools
wait() and notify()
using wait() and notify() for low-level signaling between threads
how wait() and notify can be used to implement a blocking queue
distributed computing; the master/slave model

the AbstractAction class; creating Actions by subclassing AbstractAction
using actions to make JButtons and JMenuItems, 
                              which take their properties from the Action
the reason to use actions; the principles of nonredundancy and loose coupling

design patterns
the MVC (Model/View/Controller) pattern
relationships among the model, the view, and the controller
how events are used in implementing the MVC pattern
using multiple views of the same model
ListModel and how it is used with JList
JTable and TableModel

Here are some of the most important topics from earlier in the term:

analysis of algorithms
Big-Oh and Big-Theta notation
worst case and average case run times
run-time analysis of operations on stacks, lists, trees, etc.

exceptions and exception classes (such as Exception and RuntimeException)
throwing an exception
checked exceptions and mandatory exception handling
the full try..catch statement, including the finally clause

recursion and recursive methods
base case of a recursion
infinite recursion
examples of recursion such as maze-solving, blob-counting...

linked data structures
linked lists; traversing a linked list with a "runner"
adding and deleting nodes in a linked list

ADT (Abstract Data Type): what they are and why they are important
the "queue" and "stack" abstract data types
operations on stacks and queues
implementation of stacks and queues as linked lists
implementation of stacks as arrays
postfix expressions and how they are evaluated using a stack

binary trees
pre-order, in-order, post-order traversal of binary trees
recursive processing of binary trees
expression trees

generic programming and generic classes in Java
the JCF (Java Collection Framework)
Collection, List, ArrayList, LinkedList, Set, TreeSet, HashSet
for-each loops for traversing a collection
Map, TreeMap, HashMap
hash tables and hash codes

streams; input and output streams, binary and character streams
files and the file class
designing file formats

creating and starting threads; the run() method in a thread
race conditions and deadlock
blocking queues and the producer/consumer pattern

You can also see the review sheets for the two in-class tests,
which are available on-line.