COVID-19 Notice
Due to the COVID-19 outbreak, this website is being retired effective March 15, 2020. All future updates will be moved to Canvas for online instruction as advised by the university.
The exam should take around 1 hour to complete, but you will have the entire class time of 1 hour 45 minutes to complete the exam. Please plan to complete the exam in a single sitting.
The exam questions may consist of:
The order you see questions and possible answers may be randomized. Most questions will be automatically graded by Canvas. Short answer and code snippet questions will be graded manually by the instructor.
The exam will be conducted on Canvas on the lab computers using Lockdown Browser. You may NOT take the exam on your laptop or using any other web browser. You may access to the following official Java documentation during the exam:
You can also access the following documentation:
Certain official Java Guides, including the Collections Framework Overview, Creating Unmodifiable Lists, Sets, and Maps, Programming with Assertions, and Java Logging Overview.
JUnit Documentation, including the JUnit API and JUnit User Guide.
Log4j2 Documentation, including the Log4j2 API and Log4j2 Core API, and the Log4j2 Manual.
The exam is otherwise closed-book closed-note.
You may not reference any other websites other than Canvas and the approved websites above, e.g. you may not look at the class website, Github, StackOverflow, or Google. You may not open any other program other than the the browser, e.g. you may not open Eclipse or run Java. You may not reference your cell phone or tablet during the exam (even if you take a bathroom break). You may not look at the monitors of your fellow classmates.
You may ask the instructor for one piece of blank paper during the exam to use as scratch paper, but must turn in this paper at the end of class. You may not use your own paper.
You will be asked to completely clear the tables of all items except for the piece of scratch paper, and a pencil. This includes any bags, food or drinks, or cell phones.
You may ask the instructor for clarification on a question during the exam.
You will have an opportunity to retake the entire exam during the next class period. The retake is conducted exactly the same as the original exam with a couple of exceptions.
First, the retake does NOT require using Lockdown Browser. However, you may still only access the allowed websites listed earlier. Second, in addition to the allowed websites, you can consult the instructor for hints if you do not know how to fix an answer. The instructor will also go through hints for difficult questions on the board during the retake process. You will also have access to the answers on your original attempt, but the order of questions may not be the same!
The final exam 1 score will be the average of the original and retake scores. It is impossible to earn a lower score due to the retake process. If your retake score is lower than your original score, your original score will be used instead of an average.
The exam retake is optional. If you are happy with your current exam score, you can skip the retake process. Your original exam score will be used instead.
The exam will cover topics on all of the lecture slides, homework assignments, quizzes, and additional resources covered thus far in class. This includes:
See the Schedule for more information.
The following are some example topics that you may want to make sure you understand. This is a non-comprehensive list. Some of these topics may not appear on the exam and some topics not covered here may appear on the exam.
You should understand what each keyword in Java means, including: public
, private
, static
, final
, class
, abstract
, and interface
.
You should understand the difference between a primitive type and an object.
You should understand how to use different control-flow statements, such as if
, else if
, else
statements, for
and enhanced for
loops, while
and do-while
loops, switch
statements, and how to use related keywords such as break
, continue
, and return
.
You should understand how to create and use String
objects.
You should be familiar with the Object
class and all of its methods.
You should understand how to use the new
keyword and its significance when it comes to memory allocation and the final
keyword.
You should understand the difference between mutable versus immutable objects, and when it is safe to pass a reference of an object.
You should understand the difference between the abstract data types list, set, and map.
You should understand how and when to use different built-in data structures, such as ArrayList
, LinkedList
, HashSet
, TreeSet
, HashMap
, and TreeMap
.
You should understand how to create, access, and efficiently iterate through a nested data structure, and understand how to compare the pros/cons of different approaches to iteration.
You should understand how to create and use classes, including the meaning of terms like constructors, methods, and members.
You should understand how to design a class to be both generalized and encapsulated.
You should understand how to overload and override methods.
You should understand the difference between identifiers and instances.
You should understand how to catch and throw exceptions.
You should understand how to use a try-with-resources block, as well as a traditional try
/catch
/finally
block.
You should understand the difference between a relative path and absolute path.
You should understand how to read and write to files line-by-line and traverse directories using the Java “new IO” package and the Path
, Paths
, Files
, BufferedReader
, BufferedWriter
, and DirectoryStream
classes.
You should understand inheritance-related terms such as superclass, subclass, direct, and indirect, as well as keywords such as this
and super
.
You should understand the difference between an interface and an abstract class.
You should understand how to create a nested class, and the difference between different types of nested classes.
You should understand how to create an anonymous inner class, and the inheritance relationships that class has to its outer class and its superclass.
You should understand concepts such as upcasting and downcasting, as well as how they are useful.
You should understand how to extend the Comparator
and Comparable
interfaces to allow for custom sorting using Collections.sort()
.
You should understand how to create functional interfaces using the @FunctionalInterface
annotation.
You should understand how to create and use lambda expressions, and the difference between lambda expressions and anonymous inner classes and interfaces.
You should understand how to create and use streams and stream pipelines, and the differences between a stream and a collection.
You should understand terminology with respect to stream operations, including intermediate versus terminal operations, lazy versus eager operations, and what it means for an operation to be non-interfering, stateless, and without side-effects.
You should understand how to interpret JUnit test classes, and create your own JUnit tests. This includes understanding the @Test
, @Nested
, @BeforeEach
, @AfterEach
, and @ParameterizedTest
annotations and the methods in the org.junit.jupiter.api.Assertions
package.
You should understand how to use assertions in Java using the assert
keyword, and where it is (or is not) appropriate to use.
You should understand how to configure and use Log4j2 for logging and debugging. If given a configuration file, you should be able to determine where log messages will go (file or console), which level log messages will be output (all, info, debug, etc.), and in what format.
Students may receive exam accommodations, such as additional testing time or a more private exam setting, through Student Disability Services. If you are planning on using these exam accommodations, please read the following.
I must receive a notification for accommodation from SDS regarding this exam at least one week before the exam itself. You may have SDS proctor the exam, but you will be expected to take the exam on the same day as the rest of the class.
For exams proctored by SDS, Canvas will be configured to automatically allow you to (1) begin the exam at your scheduled appointment time and (2) give you the additional time stipulated by your SDS alternative testing contract.
You may take the exam on your own laptop or on a computer provided by SDS. The allowed websites will be linked directly from the exam; no other websites, resources, or materials may be accessed. If necessary, you can bring your own piece of scratch paper and turn it in directly to the professor when you are done.
I will actively monitoring email for questions from your proctor, but there might be a delay if your appointment happens at a time different from the rest of class.
You may decide whether to use SDS accommodations for the exam retake. The retake generally takes less time than the original exam; most students decide not to use SDS accommodations for the retake process. Since you are allowed to ask for help during the retake, this allows you to receive more immediate help and feedback.
If you do choose to use SDS exam accommodations for the retake, I will prepare some general hints you can use during the retake. The SDS proctor can send me your questions via email, but I may have limited availability to answer those questions during your scheduled time.
It may also be possible to combine SDS exam proctoring and attending class for the retake (so you get both extra time and in-class help), but this depends on both SDS and instructor availability. To inquire further, please make a private post on Piazza.