NOTE: As we shift from Java to Python, this site is gradually being supplanted by Pythonorama, created with Alain Kägi. The Java content here is no longer being maintained. My students will have use for pages in the administrivia section.
This repository holds topic summaries and questions for Peter Drake's computer science courses.
I have three purposes in creating this repository:
- To keep my own notes and useful links organized.
- To provide a place where I can direct students' frequently-asked questions.
- To provide a bank of questions and answers, which both serves as a study guide and makes exam creation easier. Answers are provided, but there should be so many questions that memorizing all of the answers is infeasible.
I list additional online and print resources where applicable, trying to list the most valuable ones first. In general, print resources go into more depth or provide a more gentle explanation.
Questions are rated according to their difficulty:
- ⭐ By the end of the course in question, you should be able to answer these questions immediately off the top of your head. They often involve terminology or basic concepts.
- ⭐⭐ These questions may take a bit of thought, close reading, experimentation, or research.
- ⭐⭐⭐ These questions require even more.
The table below shows which topics I expect people to learn in which courses. (CS1 is taught in C, but for these topics C and Java are very similar.) Links are to existing pages in the Drakepedia.
Topic | CS1 | CS2 | Algorithms | Software Development |
---|---|---|---|---|
Development Tools | Command Line | IntelliJ IDEA | Git | |
Control Structures |
The Main Method If Statements Loops Functional Decomposition |
Recursion | ||
Data Structures |
Primitive Types Operators Variables Strings Arrays |
Inanimate Objects References Linked Lists Stacks Queues Lists Sets and Maps Trees Graphs |
Binary Search Trees Hash Tables Priority Queues Union-Find |
|
Algorithms | Analysis of Algorithms Search Traversal |
Algorithmic Strategies Sorting Graph Algorithms |
||
Style | Documentation Omitting Needless Code |
Defensive Programming | ||
Object- Oriented Programming |
Constructors Instance Methods Wrapper Classes Access Modifiers Default Methods Interfaces Generics |
Inheritance Packages Exceptions |
Enums Inner Classes |
|
Libraries | java.lang stdlib java.util |
javax.swing | ||
Software Development |
Iterative Development Pair Programming Testing Debugging |
Extreme Programming Object-Oriented Design Design Patterns |