The Final Exam for this course is scheduled for Sunday, May 9, from 1:30 to 4:30, in our regular classroom. The exam will be in the same general format as the in-class tests, but will be six pages long instead of four. It will cover material from the entire semester.
On the last day of class, Monday, May 3, you can show your final project, but you can continue working on it after that if it is not completely finished. The deadline for turning in your project is 9:00 AM on Monday, May 10. At that time, your project should be copied into your homework folder in /classes/s10/cs225/.
During the week leading up to the exam, I expect to have office hours as follows:
Sunday, May 2 11:00 -- 4:00 Monday, May 3 11:00 -- 12:10 Tuesday, May 4 10:00 -- 11:00 Wednesday, May 5 11:00 -- 4:00 Thursday, May 6 11:00 -- 5:00 Saturday, May 8 11:00 -- 4:00 Sunday, May 9 12:00 -- 1:20
Here are some of the major themes of the course. You should understand them in depth. You should be able to write about them and apply them to programming.
Here are some things that we have covered since the second test:
client/server model for network communication sockets network hosts and port numbers the Socket class: Socket s = new Socket( host, portNumber ); methods: s.getInputStream(), s.getOutputStream(), s.close(); the ServerSocket class: ServerSocket s = new ServerSocket( portNumber ) Socket c = s.accept(); the HTTP protocol: a request/response protocol basic request format: GET filepath HTTP/1.1 basic response format: HTTP/1.1 200 OK, HTTP/1.1 404 Not Found mime types and the Content-Type header common mime types: text/plain, text/html, image/png, image/jpeg GUI programming state machines events and event listeners resources resource URLs: ClassLoader cl = getClass().getClassLoader(); URL resourceURL = cl.getResource( pathToResource ); BufferedImage img = ImageIO.read(resourceURL); // (for example) ImageIcon icon = new ImageIcon(resourceURL); // (for example) using icons on JButtons and in JMenuItems Actions and AbstractAction using Actions to create buttons and menu items design patterns Model/View/Controller pattern how the model, the views, the controller interact how JList uses the MVC pattern: ListModels and DefaultListModel
Here are the more important topics from the review sheet for the first test:
exceptions handling exceptions: the try..catch statement the finally clause in a try statement, and why it might be used questions of efficiency of a program run-time analysis of algorithms worst-case analysis and average case analysis log2(n) and how it arises in analysis of some algorithms "Big Theta" and "Big Oh" notation ( Θ(f(n)) and O(f(n)) ) comparing Θ(n) to Θ(log(n)), or Θ(n2) to Θ(n*log(n)) recursion recursive methods base case of a recursion maze-solving and similar recursions infinite recursion, and why "marking" locations as already visited is important the QuickSort recursive algorithm the idea of QuickSortStep (but not the detailed code) the general idea of why QuickSort has average case run time Θ(n*log(n)) the worst case run time of QuickSort the recursive nature of grammar rules for Java and for English linked data structures understanding names such as "employee.boss.name" and "node.next.next" simple linked lists the head of a list; why you always need to keep a pointer to the head traversing a linked list; using a "runner" to move down the list basic linked list processing, such as searching, or adding up items in a list the meaning of "while (runner != null)" and "runner = runner.next" adding a node to the head of a list why working at the head of a list is often a special case inserting and deleting nodes in a list using a "tail" pointer in a list; adding a node a the end of a list doubly-linked lists Abstract Data Types (ADTs) alternative implementations of ADTs relation of ADTs to interfaces and abstract classes the "Queue" ADT queue operations: enqueue, dequeue, isEmpty how to implement a queue as a linked list with tail pointer the "Stack" ADT stack operations: push, pop, isEmpty binary trees recursive traversal of a tree inorder, preorder, and postorder traversals binary sort tree inserting items into a binary sort tree searching for an item in a binary sort tree balanced binary tree inserting/searching in a balanced binary sort tree has run time Θ(log(n))
Here are the more important topics from the review sheet for the second test:
multi-processor computers and why parallel processing is necessary threads the Thread class writing subclasses of Thread the run() method in a thread starting a thread, running a thread in parallel with other threads race conditions; what can happen when two threads both use a shared resource what it means for a thread to block why threads are often used in network programming ArrayBlockingQueue<T> and LinkedBlockingQueue<T> the put() and take() methods in a BlockingQueue (and why they can block) generic programming what problem does generic programming try to solve? parameterized types; for example, ArrayList<T> wrapper classes; Integer, Double, Character, etc. using wrapper classes with parameterized types; for example, ArrayList<Integer> iterators "for-each" loops; for example: for ( String str : strList )... using a for-each loop to traverse a collection the JCF (Java Collection Framework) collections, lists, and sets run-time performance of various operations on lists and sets ArrayLists versus LinkedLists [differences; when to use] HashSets versus TreeSets [differences; when to use] maps keys and values in maps hash tables HashMaps versus TreeMaps [differences; when to use] uses of lists, sets, and maps Generic interfaces and classes in the Java Collection Framework: Collection<T>; methods: add(x), remove(x), size(), clear(), isEmpty() List<T>; methods: get(index), set(index,x), remove(index) ArrayList<T> LinkedList<T> Set<T> HashSet<T> TreeSet<T> Map<K,V>; methods: put(k,v), get(k), containsKey(k), keySet() HashMap<K,V> TreeMap<K,V> streams for input and output files how streams and files are abstractions and why that is important binary streams versus character streams InputStream and OutputStream Reader and Writer IOExceptions Scanner PrintStream files, directories, and file paths the File class; the exists() method FileInputStream and FileOutputStream using a Scanner to read from a file using a PrintWriter to write to a file saving data in a file choosing a format for a data file why use human readable (character) files?