There will be an Exam in class on Thursday, 11 April. The exam will be on paper, and mostly short answer questions with a mix of questions that ask for short responses to demonstrate understanding of key concepts and problems that expect you to demonstrate technical skills and understanding.

My recommendations for preparing for the exam:

  1. Read the posted comments on Project 1, Project 2, and Project 3 (in Canvas). If there are any topics on the projects that you don’t understand after reading the comments, prioritize understanding those (and bring questions you have to the review class Tuesday).

  2. Look at the list of concepts and abilities below. Most are linked to relevant slides from classes. See Classes for a list of all the classes.

  3. If you are okay with #1 and #2, don’t be stressed about the exam. You should do well.

Notes Page. You are permitted to bring a one-page (letter or A4 sized paper, single-sided) reference sheet for use during the exam, but all other resources are forbidden (no internet, textbook, other humans, magnification instruments, etc.).

Review Topics

Here’s a list of things you should be able to demonstrate on the exam:

Representing Information

  • Understanding of the different between analog and digital data interpretations, and be able to explain why nearly all computing is done on digital data. (Class 1, Class 2, Project 1)

  • Ability to convert between binary, decimal, and hexadecimal number formats, and to answer questions about how many different values can be represented by a given number of bits or hexadecimal digits. (Class 3, Class 4, Project 1)

  • Be able to perform arithmetic operations (addition, multiplication) on binary data. (Class 5)

  • Understanding of what compression is, the difference between lossy and lossless compression, and what a compression ratio means and what factors influence it. (Class 4, Project 1)

The Internet and the Web

  • Understanding of the basic mechanisms that make Internet-scale search engines possible, including hash functions and reverse indexes. (Class 6, Class 7, Project 2)

  • Be able to explain the difference between latency and bandwidth, and how changes to a network design impact each. (Class 8)

  • Understanding of how the Internet works at the level needed to explain traceroute at a high level. (Class 9, Class 10)

  • Understanding of the structure of HTML, including URLs, links, and elements. (Class 8, Project 2)

Trust on the Internet

  • Understanding of what a domain name is and what it means to own a domain name. (Class 11)

  • Understanding of what encryption is and the properties that and encryption and decryption function should have in both symmetric and asymmetric cryptography. (Class 12)

  • Be able to state Kerckhoff’s Principle and answer whether or not a cryptosystem design satisfies it. (Class 12)

  • Understanding of how we are able to trust a website we visit is the one we expect, including how the TLS protocol establishes a secure channel between our client and a web server, and how certificates work in TLS. (Class 13)

Programming

  • Be able to read short fragments of JavaScript code and answer questions to show you understand what it means. (Class 15, Class 17, Class 18, Class 19, Class 20, Class 21; Project 3)

  • Be able to write JavaScript code to do a simple computation. You do not need to memorize the syntactic details, and are not expected to be able to write exact code, but should be able to show enough that a reader would be convinced that with access to a JavaScript interpreter and time to debug, you could get the code working. (Class 15, Class 17, Class 18, Class 19, Class 20, Class 21; Project 3)

  • Understanding of how BNF grammars describe languages, and ability to determine the set of strings in a given BNF grammar, and to define a BNF grammar for a given language. (Class 16, Class 19, Project 3)

  • Understanding of the edit distance algorithm and code, sufficient to answer questions about it. (Class 20, Class 21)