Final Exam Information
Written by Chris Gregg and Nick Troccoli, based on documents by Jerry Cain, Julie Zelenski, Marty Stepp and others
Date/Time:
Wednesday, March 18th, 3:30PM-6:30PM (take-home)
Review Session:
TBA - remote / recorded
If you do not have a workable laptop for the exam, you must let us know by Tuesday 3/17 @ 11:59PM PST.
Exam Optionality
Option 1
- Students may take the final exam on Wednesday as usual, as per previous announcements that the exam is open-book, open-computer, open-network.
- 30% of the final exam points will be allotted specifically to topics like those you saw on the midterm, 40% alloted to questions that rely on multithreading, and 30% to questions that rely on networking. Note that the exam will no longer cover MapReduce. We're committing to this split because that informs Option 2.
Option 2
-
Students can skip the final exam if they'd like to. If you do, your assignment scores will be used to synthesize an equivalent final exam score as follows:
- Your average on assign1 through assign4 (equal weights) will count for 30% of your final exam score.
- Your average on assign5 through assign6 (equal weights) will count for 40% of your final exam score.
- Your assign7 score will count for 30% of your final exam score
We will calculate your assignment substitute score and translate it to a final exam score based on the distribution of all assignment substitute scores for all students. In other words, if your assignment substitute score is 90% and the assignment substitute score distribution median is 90%, then if the final exam median is 80% this would translate to about an 80% on the final exam if you choose not to take it, not a 90%.
When calculating your final grade, we will be taking the maximum of option 1 and option 2's final exam score. In other words, option 1 can only improve your grade.
Note that you do not need to explicitly notify us in advance of which option you choose - just take or don't take the final as you wish.
Also note that this policy is in addition to the previously-announced reweighting policy for assignment 8. In combination with that policy, this means that we will effectively be calculating your grade as the maximum of the following approaches (section grading is unchanged):
- count final exam score, weighted at least 27.5% (includes assign8 weight), and assign1-7 weighted 52.5%
- count final exam score, weighted at least 20% (doesn't include assign8 weight), and assign1-7 weighted 60%
- count assignment substitute score, weighted at least 27.5% (includes assign8 weight), and assign1-7 weighted 52.5%
- count assignment substitute score, weighted at least 20% (doesn't include assign8 weight), and assign1-7 weighted 60%
A Note on Fairness and Rigor
We are in a unique position to allow assignments to count for much more than they would in other quarters because the assignments are demanding and everyone is expected to work by themselves. This would be a much more difficult situation if the coursework were different, e.g. had we allowed pair programming (as some of our other classes do). It's likely that grades will be higher, but all of this is being done without precedent to accommodate the very difficult circumstances many of you face. We feel that it's the best, fairest option for CS110 that ensures everyone can prioritize things way more important than CS110 right now.
Understand that these policies apply to CS110 only and not the entire CS department, much less the entire campus. Please realize that every course decision must factor in the content, structure, and context of that specific course. For that reason, please do not use CS110's policies as leverage for changes in other courses. We realize that many of you are in dire situations at home and on campus, that many of you have concerns about your friends, your health, and your grades, and that all of us would appreciate a return to stability as quickly as possible. Additionally, we ask that you call out misinformation about CS110-specific course policies if you see it brought up elsewhere.
Incompletes
If you feel that neither option as described is a viable option for you due to extenuating circumstances, we are, as is standard, willing to consider requests for Incompletes. In this case, we would allow you to take the CS110 final exam in a future quarter. Note that Option 2 will not apply if you take an incomplete - meaning we will always use your final exam score in this case, and not the assignment-substitute. We will add that, while incompletes are a possible option, they as always should be considered a last-resort, as delaying the final exam for a future quarter is a significant future burden. Any requests for incompletes need to be sent by Tues. 3/17 at 11:59PM.
In closing, we hope you all agree that this approach is the most reasonable way for CS110 to finish off the quarter. As always, please reach out if you have any questions or concerns about what the rest of the quarter might look like for you. Stay healthy and stay safe!
Overview
The final exam will be held our registrar-scheduled exam time: Wednesday, March 18, 3:30PM-6:30PM.
The exams are designed to assess your mastery of the course learning objectives, with a particular emphasis on material that was prominent in the lectures, assignments and sections.
The exam is open-book. We will provide you with all of the C function prototypes and C++ classes that might be relevant to a particular problem.
You will take your exam electronically, using our custom BlueBook exam software, which you can run on your computer if you have one. If you do not have access to a laptop for the exam that can run BlueBook, please contact the course staff as soon as possible.
If you have discussed an alternate exam time with the instructors prior to the exam, you should receive information via email about taking the exam. If you have OAE accommodations for the exam and have let the course staff know about them, you should receive an email a few days prior to the exam to make scheduling arrangements.
Material Covered
The midterm is intended to assess your understanding of the content covered throughout the course. The priority is on material that figured prominently in the assignments, sections, lecture, and reading (this list is in order of decreasing emphasis). The topic coverage for the final exam will be comprehensive and span the entire quarter, but expect more emphasis on material covered after the midterm (multithreading and networking). You won't be expected to write any code using non-blocking I/O, the topic covered in the last lecture.
We highly recommend revisiting the sections and assignments as you prepare. The textbooks also contain many exercises if you want additional problems to work.
We'd love to see the Piazza forum come alive in helping everyone do their best on the exam – this is a great place to ask and answer unresolved questions, discuss conceptual issues, share techniques and materials you are finding useful as preparation, and support and encourage each other.
Topics Summary
Check your rear-view mirror for the very impressive list of things you've learned in 110 this quarter!
- You should understand how
open,read,write,close,stat, andlstatall work. - You should understand file descriptor tables, the file entry table, the vnode table, and what type of information is stored in each.
- You should be familiar with the basic concepts of layering and naming in computer systems.
- You should understand the UNIX v6 file system concepts, data structures, and layers you coded against for Assignment 2.
- You should be familiar with
fork,waitpid, all of the various status macros,execvp,signal, signal handlers, signal blocking and unblocking,kill, process ids, process groups, andpipe. - You should be familiar with the various inter-process concurrency issues that can come up as a result of a single code base controlling multiple processes.
- You should have a basic understanding of how virtual-to-physical memory mapping works and how it's used to allow all processes to operate under the illusion that each owns its full virtual address space.
- You should have a basic understanding of how the OS scheduler works (as covered in lab 3).
- You should understand your implementations of pipeline, subprocess, farm, and trace, from Assignment 3.
- You should understand your implementation of stsh and how a shell manages and executes jobs, from Assignment 4
- You should understand what race conditions and critical regions are and how to identify them.
- You should understand the C++
threadclass, how to instantiate one, and how to use itsjoinmethod. - You should be familiar with the
mutex,condition_variable_any, andlock_guardclasses. - You should understand the notion of a semaphore and how we implement it in terms of
mutexes,condition_variable_anys, andlock_guards. - You should understand how to effectively use
mutexes andsemaphores to protect against race conditions, senseless busy waiting, and deadlock. - You should understand all of the various synchronization patterns discussed in https://cs110.quip.com/lcrNAQ1SeMci/Multithreading-and-Synchronization-Redux and all of the examples that appear in
/usr/class/cs110/lecture-examples/threads-cpp. - You should understand the client-server model as discussed in lecture.
- You should be familiar with the
sock_addrfamily of socket address records (which will be provided where needed on the exam). - You should be familiar with all of the examples presented in lecture and in
/usr/class/cs110/lecture-examples/networking. - You should be familiar with the basic structure of an HTTP request--the request line and the header--and how they were manipulated by your
proxysolution. - You should be able to address questions pertaining to the material presented during our Principles of System Design lecture on Mon. 3/9.
- You should understand all of the material in the lab handouts (although we will not test you only anything regarding tools --i.e.
g++-5,gdb,valgrind,info, the/sys/procpseudo filesystem, etc. will not come up). Some of the problems from the practice exams below have been cannibalized to contribute to your lab handouts.
What To Have During The Exam
The exam is on your computer. You should have:
- Your laptop and charger
- The device you use for two-step authentication (to submit the exam)
Logistics
-
The Honor Code: the exam is to be completed individually and without any assistance from a partner or other students. Follow the Stanford Honor Code (see link on main course homepage) during the exam: submit only your own work, do not use unpermitted aids on the exam (see below for permitted aids), and say something to the instructors or students in question to prevent any inappropriate activity conducted by others surrounding the exam.
-
Permitted Materials: During the exam, you may use/reference:
- any notes, textbook materials, course materials, internet resources and computer programs (though we strongly advise against using a compiler due to time constraints)
You are not permitted to discuss the exam or problems with others, or receive any aid from others during the exam. -
Grading: For coding questions, the majority of the points are typically focused on the correctness of the code. However, there may be deductions for code that is roundabout/awkward/inefficient when more appropriate alternatives exist. We will reward the simple, direct approach for its good design decisions and such code will likely have fewer correctness issues, so the choice of appropriate design can have a large impact. For example, we expect you to leverage appropriate features from the standard libraries; re-implementing that functionality wastes your valuable time and introduces opportunity for error.
Note that certain problems may have certain constraints (such as only using certain material, etc.) that you must follow to earn full credit. We reserve the right to deduct points for extremely inelegant or inefficient code that dodges the spirit of the problem.
You are not required to write
#includestatements on the exam. Please do not abbreviate any code on the exam (such as writing "x2" next to code to copy it twice). Abbreviated code will not be graded.Pseudo-code (writing English sentences and phrases instead of code) will typically earn little to no points. For example, writing "In this part of the code, I want to open the file and read each line and print it" will not earn any points.
You should include your answer, as well as any scratchwork, in the text area for each problem. An answer to a problem not in the designated answer pages for that problem will not receive any credit.
Unless otherwise specified, it is fine to write helper functions to implement the required behavior.
Downloads
BlueBook Software (version 1.1.0):
Mac Download | Windows Download | Linux Download
IMPORTANT: If you have taken a course that used BlueBook in the past two quarters, you should not have to re-download the software. When you open up BlueBook, you should see a version number of 1.1.0 at the bottom. Once you have downloaded the installer file, install BlueBook wherever you wish on your computer. If you're using a Mac and you get an error saying that the Disk Image is from an unidentified developer, open up the installer file in your finder, and right click it and select "Open." The same window will pop up, but this time you'll have a chance to open it anyway. If you get any popups asking for keystroke or other permissions, please make sure to grant them in order for the exam to administer properly. On Windows, if you get a message that says, "Windows protected your PC," you can click on "More info" and then "Run anyway."
Exam Reference Sheet:
Practice Materials:
Below is a collection of four CS110 final exams we've given in past quarters. We're also including links to the companion solutions and grading criteria for the PDF exams. Understand that we are trying to give you a sense of what some CS110 exam problems have looked like in the past, but we may not replicate the structure of these practice exams in the actual exam. In particular, some of the material on past exams is different from the material from this quarter, and the exams provided below were closed-book. Also note that some of the problems from the practice exams have been cannibalized to contribute to the section handouts. You should be able to answer any of those questions again should they come up on the exam.
BlueBook Practice Midterm: BlueBook | Solutions
Password: unlimited
This was the final exam from CS110 Spring 2019. It was written as a 180 minute closed-note BlueBook exam.
Note: the practice BlueBook exam is configured with an infinite time limit. You cannot close BlueBook and come back to work on the exam later - you must complete it in one sitting. You cannot submit practice exams - if you'd like to check your answers, leave BlueBook open while you do so. Note that for security reasons, BlueBook disables copy/pasting into or out of BlueBook. You can copy/paste within BlueBook, however.
Practice Final 1: PDF | Solutions
Practice Final 2: PDF | Solutions
Practice Final 3: PDF | Solutions
Review Session Materials: Coming Soon
BlueBook
Based on a handout by Brahm Capoor
BlueBook is a program that can administer electronic exams distributed in a special file format. BlueBook itself does not come with any exams but is rather just an application used to take exams. Your exams, including practice exams, will be distributed as special BlueBook files uploaded to the course website. These exam files are encrypted and cannot be opened without a password, which will be provided to you at the start of the exam, or along with the practice materials. Download these files and keep them wherever you wish on your computer.
Once you have BlueBook installed and an exam downloaded, begin by opening BlueBook. On a Mac, if you get a message saying that you were blocked from opening the app for security reasons, browse to the app in the Finder, right click it and select "Open." The same window will pop up, but this time you'll have a chance to open it anyway. The app should go full screen and allow you to choose the exam file you downloaded earlier. Click the folder icon on the right of the screen and navigate to the exam file and click ‘ok’, followed by ‘Load Exam’. At this point, you’ll be brought to the Exam Start Screen. Fill out your details on this screen, fill in the password and click ‘Start Exam’.
You’ll then be brought to the main Exam View, which allows you to go back and forth between all the questions for the duration of the exam. You can navigate between questions using the toolbar at the top of the window. The text editor provided to you will have syntax highlighting, bracket completion and automatic indenting, but will not allow you to compile your code. The exam will end automatically after the specified duration ends.

We know that BlueBook is not the same as working with a compiler as you do on Myth, and we account for that in how we design and grade the exam. We are assessing your ability to think logically and use appropriate problem-solving techniques. We expect you to express yourself in reasonably correct C/C++, but we will be lenient with errors that are syntactic rather than conceptual.
When you are done with your exam – or time has run out – you can begin the submission process for the exam. Do so by clicking the blue ‘Submit’ button in the toolbar. Once time runs out, this process automatically starts. Beginning submission is an irreversible decision, so make sure that you’re confident you’re ready to turn your answers in. Once you confirm that you want to submit, the BlueBook window will shrink and allow you to turn on your internet in order to submit the exam. Importantly, we verify your identity while submitting, so please make sure to have your two-step authentication device with you. Once your submission is successful, you will see a message with a green check mark and a confirmation code of your exam submission, which you should keep for your records in case any issues arise later. At this point, feel free to close BlueBook. Congratulations! You’re done with the exam!
Some final notes about BlueBook:
- Please make sure that your laptop has at least a few gigabytes of free space before the exam begins. While BlueBook exams certainly don’t take up that much space, we do back up your answers in case your computer crashes and we want to make sure your computer has enough space for these backups.
- Please come to the exam with a fully charged laptop and charger.
- Should your laptop crash during the exam, please notify a proctor as soon as possible so they can restore your answers and you can continue working. Do not attempt to restart the exam from scratch as this might overwrite your previous answers.
Icons by Piotr Kwiatkowski