Final Exam Prep Guide

The final exam will be in class on Tuesday, December 13th.

The questions will focus on material since the midterm, but some material from the first part of the course may be needed to set up problems on the material from the back part of the course.

Professor Fisler will run a special office hour/session to review practice exam answers on Monday Dec 12 from 2:30-3:30 in SH309.

Where To Take the Exam

Take the exam in the same room as you took the midterm: for noon lecture, last names starting with A through F go to SH202 (Stratton Hall). For the 1pm lecture, last names starting with A through G go to Olin 107.

What Should You Expect?

  • The exam is pencil-and-paper. You may not use a computer.
  • The exam is self-contained. You will not be asked to remember any specific problem from homework or labs.
  • You will not be expected to write much code on the exam. You may be asked to annotate code with access modifiers or show where to put given pieces of code within a set of given classes. You will not be asked to write much by way of methods.
  • You will not be graded on the details of Java syntax. You should know what info goes where (i.e., where fields go, what goes into each of interfaces and classes, where public/private annotations go, etc). You will not lose points for a missing semicolon or unbalanced braces as long as your indentation makes it clear what goes where.

Exams from Previous Offerings

In addition to these, the sample exams in the Midterm Prep Guide had several data structures questions (the ones we told you to ignore for the midterm). Those are reasonable questions for the final as well.

What You Can Bring

You may bring a single sheet of paper with whatever notes, examples, comments, etc that you wish. You may use both sides of the paper. Typeset or handwritten is fine. The exam is otherwise closed-book, closed-notes.

You may not share paper notes with others during the exam.

What You are Expected to Know

The final will focus on the following topics that we have done since the midterm:

  • What hashtables and graphs are (conceptually) and when to use them
  • Java Hashmaps: how to create, put data into, and get data from them
  • Exceptions: how and when to throw and catch them, how Java figures out which method catches an exception, what code does and doesn't run as the result of throwing an exception
  • For the various data structures we've studied, their operations, shapes and requirements, and their efficiency at each of their core operations. The data structures covered on the exam are lists, sorted lists, binary trees, binary search trees, AVL trees, heaps, hashmaps, and graphs. You have also been exposed to stacks, queues, and priority queues (for which you should know the operations, but not anything about efficiency). You don't need efficiency on graphs either.
  • Access modifiers (public/privateprotected): what they do and when to use them
  • How to use generics (type variables) and how to write a class that has generic types
  • How to create cyclic data
  • How to write functions over graphs and make those functions terminate
  • Putting methods in the same class as their data (one form of encapsulation)
  • How to encapsulate a data structure in its own class
  • How to identify a good set of tests for a method or problem

Topics from the first half of the course, such as class hierarchies, could show up indirectly, but won't be the focus of any particular question

The exam will not cover any material past the lecture on Friday, December 9.

Literal Instructions from First Page of Exam

Here is the instructions page from last year, outlining what is expected in terms of describing data structures, testing, constructors, etc. I expect this year's to be the same.