Mr.Mou @ ShiShi AP Center

AP CSA 考前最后复习清单

AP CSA 考前最后复习清单


AP CSA 目标分数换算参考

说明:以下换算是根据当前练习表中的粗略 composite score 估算。实际 AP 分数线每年可能会根据考试难度调整,所以这不是官方固定分数线,而是考前复习用的目标参考。

分数换算基础

部分 原始分 权重 Composite Score
MCQ 42 题 55% 最高 55 分
FRQ 25 分 45% 最高 45 分
Total 最高 100 分

大致换算:

项目 约等于
每做对 1 道 MCQ 约 1.31 分
每拿到 1 个 FRQ 原始分 约 1.8 分

所以,FRQ 的每一个 rubric point 都很值钱
考场上千万不要空着 FRQ,即使代码不完美,也要尽量写出能得分的结构。


目标 3 分

大致目标

MCQ 正确题数 MCQ 约得分 FRQ 需要原始分
18 / 42 约 23.6 约 12 / 25
20 / 42 约 26.2 约 11 / 25
22 / 42 约 28.8 约 9 / 25

简单记法

想拿 3 分,比较现实的目标是:

MCQ 做对 20 题左右 + FRQ 拿到 10–12 分左右

对学生的提醒

目标 3 分的同学不需要写出完美代码。
最重要的是:


目标 4 分

大致目标

MCQ 正确题数 MCQ 约得分 FRQ 需要原始分
26 / 42 约 34.0 约 19 / 25
28 / 42 约 36.7 约 18 / 25
30 / 42 约 39.3 约 16 / 25
32 / 42 约 41.9 约 15 / 25

简单记法

想拿 4 分,比较现实的目标是:

MCQ 做对 28–32 题左右 + FRQ 拿到 15–18 分左右

对学生的提醒

目标 4 分的同学通常不是完全不会,而是容易丢小分。
最重要的是避免:


目标 5 分

大致目标

MCQ 正确题数 MCQ 约得分 FRQ 需要原始分
34 / 42 约 44.5 约 22 / 25
36 / 42 约 47.1 约 21 / 25
38 / 42 约 49.8 约 19 / 25
40 / 42 约 52.4 约 18 / 25

简单记法

想拿 5 分,比较现实的目标是:

MCQ 做对 36–38 题左右 + FRQ 拿到 19–22 分左右

对学生的提醒

目标 5 分的同学不能只靠“感觉自己懂”。
最重要的是:


考试结构

部分 内容 比重
Multiple Choice Questions 42 道选择题 55%
Free Response Questions 4 道简答题 45%

Unit 权重排序

排名 Unit 考试比重
1 Unit 4 Data Collections 30–40%
2 Unit 2 Selection and Iteration 25–35%
3 Unit 1 Using Objects and Methods 15–25%
4 Unit 3 Class Creation 10–18%

第一部分:最高频核心知识点

0. 数据结构能存什么类型

重要性:最高 对应考试:Array / 2D Array / ArrayList 的基础理解,所有相关 MCQ 和 FRQ 都会用到


0.1 核心结论

必会内容

在 AP CSA 中,常见的数据集合有三类:

数据结构 能否存 primitive type 能否存 reference type
array 可以 可以
2D array 可以 可以
ArrayList 不可以直接存 可以

0.2 Array 可以存 primitive type 和 reference type

primitive type 数组

int[] nums = new int[10];
double[] scores = new double[5];
boolean[] answers = new boolean[4];

reference type 数组

String[] names = new String[10];
Student[] students = new Student[5];

0.3 2D Array 也可以存 primitive type 和 reference type

primitive type 2D array

int[][] grid = new int[3][4];
double[][] scores = new double[2][5];

reference type 2D array

String[][] seats = new String[5][6];
Student[][] classroom = new Student[4][8];

0.4 ArrayList 只能存 reference type

正确写法

ArrayList<String> names = new ArrayList<String>();
ArrayList<Student> students = new ArrayList<Student>();

ArrayList 不能直接存 primitive type。

错误写法

ArrayList<int> nums = new ArrayList<int>();      // 错
ArrayList<double> scores = new ArrayList<double>();  // 错

0.5 primitive type 要用 wrapper class

如果想在 ArrayList 中存数字或布尔值,要使用 wrapper class。

primitive type wrapper class
int Integer
double Double
boolean Boolean

正确写法

ArrayList<Integer> nums = new ArrayList<Integer>();
ArrayList<Double> scores = new ArrayList<Double>();
ArrayList<Boolean> results = new ArrayList<Boolean>();

常见考法


1. Array / ArrayList / 2D Array 数据集合

重要性:极高
对应考试:Unit 4,30–40%;FRQ 3 + FRQ 4 + 大量 MCQ


1.1 一维数组 Array

必会内容

int[] arr = new int[10];
int[] nums = {1, 2, 3, 4};

数组长度:

arr.length

注意:

arr.length      // 对
arr.length()    // 错

常见考法


必背模板

for (int i = 0; i < arr.length; i++)
{
    // use arr[i]
}

学生易错点


快速提醒

数组最后一个位置不是 arr.length,而是 arr.length - 1


1.2 ArrayList

必会内容

ArrayList<String> list = new ArrayList<String>();

常用方法:

list.size()
list.get(i)
list.set(i, value)
list.add(value)
list.add(i, value)
list.remove(i)

常见考法


必背模板:普通遍历

for (int i = 0; i < list.size(); i++)
{
    // use list.get(i)
}

必背模板:删除元素

如果要删除多个元素,优先倒序:

for (int i = list.size() - 1; i >= 0; i--)
{
    if (condition)
    {
        list.remove(i);
    }
}

学生易错点


快速提醒

ArrayList 删除元素,最安全的考场写法是倒序遍历。
ArrayList 不能用 list[i],要用 list.get(i)


1.3 2D Array 二维数组

对应 FRQ 4


必会内容

int[][] grid = new int[rows][cols];

行数:

grid.length

列数:

grid[0].length

访问元素:

grid[r][c]

必背模板:按行遍历 Row-major

for (int r = 0; r < grid.length; r++)
{
    for (int c = 0; c < grid[0].length; c++)
    {
        // use grid[r][c]
    }
}

必背模板:按列遍历 Column-major

for (int c = 0; c < grid[0].length; c++)
{
    for (int r = 0; r < grid.length; r++)
    {
        // use grid[r][c]
    }
}

常见考法


学生易错点


快速提醒

grid.length 是行数,grid[0].length 是列数。
访问元素永远是 grid[row][col]


第二部分:控制结构与算法

2. Selection and Iteration

重要性:极高
对应考试:Unit 2,25–35%;FRQ 1 核心;MCQ 高频


2.1 if / else / nested if

必会内容

if (condition)
{
    // do something
}
else if (condition)
{
    // do something else
}
else
{
    // otherwise
}

常见考法


学生易错点


快速提醒

多个独立 if 可能都会执行。
if / else if / else 只会执行其中一支。


2.2 Boolean Logic 布尔逻辑

必会内容

&&   // and
||   // or
!    // not

De Morgan’s Laws

!(a && b)  等价于  !a || !b
!(a || b)  等价于  !a && !b

短路求值 Short-circuit

if (obj != null && obj.getName().equals("Tom"))
{
    // safe to use obj.getName()
}

如果 obj != null 是 false,后面不会执行。


常见考法


学生易错点

obj.getName().equals("Tom") && obj != null

这样可能先报错。


快速提醒

判断对象方法前,先确认对象不是 null


2.3 while loop / for loop

必会内容

while (condition)
{
    // repeat
}
for (int i = 0; i < n; i++)
{
    // repeat
}

常见考法


学生易错点


快速提醒

循环题先看三件事:起点、终点、变化量。
需要最后返回结果时,通常先在 loop 外初始化结果变量。


2.4 Nested Loop 嵌套循环

必会内容

for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        // inner loop
    }
}

常见考法


学生易错点


快速提醒

外层走一步,内层跑一整圈。


2.5 Standard Algorithms 标准算法

必会算法


常见模板:count

int count = 0;

for (int i = 0; i < arr.length; i++)
{
    if (condition)
    {
        count++;
    }
}

常见模板:sum

int sum = 0;

for (int i = 0; i < arr.length; i++)
{
    sum += arr[i];
}

常见模板:max

int max = arr[0];

for (int i = 1; i < arr.length; i++)
{
    if (arr[i] > max)
    {
        max = arr[i];
    }
}

学生易错点


快速提醒

max / min 通常用第一个元素初始化,不要随便用 0。


第三部分:String 与方法调用

3. String Algorithms and String Methods

重要性:高
对应考试:Unit 1 + Unit 2;FRQ 1 Part B 高频


3.1 String 常用方法

必会方法

str.length()
str.substring(start, end)
str.substring(start)
str.indexOf(target)
str.equals(other)
str.compareTo(other)
str.split(delimiter)

substring

String s = "computer";
s.substring(0, 3);  // "com"

规则:

包含 start,不包含 end。

单个字符:

s.substring(i, i + 1)

indexOf

s.indexOf("put")

如果找到,返回起始 index。
如果找不到,返回 -1


compareTo

"a".compareTo("b")   // negative
"b".compareTo("a")   // positive
"a".compareTo("a")   // 0

split

String info = "red,blue,green";
String[] parts = info.split(",");

结果:

parts[0]   // "red"
parts[1]   // "blue"
parts[2]   // "green"

注意:split 返回的是 String[] 数组,所以长度用:

parts.length

不是:

parts.length()

常见考法


学生易错点


快速提醒

String 比内容用 .equals(),不要用 ==
substring(a, b) 取的是 [a, b)
split 返回数组,数组长度用 .length


第四部分:Class Design 类设计

4. Class Creation

重要性:高
对应考试:Unit 3,10–18%;FRQ 2 固定考 Class Design


4.1 类的基本结构

必背模板

public class Student
{
    private String name;
    private int score;

    public Student(String n, int s)
    {
        name = n;
        score = s;
    }

    public String getName()
    {
        return name;
    }

    public int getScore()
    {
        return score;
    }
}

FRQ 2 必须有


学生易错点


快速提醒

Constructor 没有返回类型,连 void 都不能写。
题目要求返回值时,要用 return,不是 System.out.print


4.2 Scope and this

必会内容

private int score;

public Student(int score)
{
    this.score = score;
}

常见考法


学生易错点

public Student(int s)
{
    int score = s;  // 错:新建了局部变量
}

快速提醒

this.score 指的是这个对象自己的 instance variable。


4.3 Method Writing and Method Overloading

方法结构

public int getScore()
{
    return score;
}

Method Overloading

同名方法,参数列表不同:

public void print(int x)
{
}

public void print(String s)
{
}

注意

返回值不同不算 overloading。

public int getValue()
public double getValue()

这不是合法 overloading。


学生易错点


快速提醒

Overloading 看参数,不看 return type。


第五部分:对象、引用、null、参数传递

5. Objects and References

重要性:高
对应考试:Unit 1 + Unit 3;MCQ 高频陷阱


5.1 Object Reference

核心概念

对象变量存的是 reference,不是对象本身。

Dog a = new Dog();
Dog b = a;

此时 ab 指向同一个对象。


常见考法


学生易错点


快速提醒

对象变量装的是“地址”,不是对象本体。


5.2 null

核心概念

Dog d = null;

d 目前没有指向任何对象。


常见错误

d.getName();  // NullPointerException

安全写法

if (d != null)
{
    d.getName();
}

快速提醒

只要对象是 null,就不能调用它的方法。


5.3 Pass-by-Value 参数传递

核心概念

Java 永远是 pass-by-value。

对于 primitive:

int x = 5;
change(x);

方法里改参数,不会改变原来的 x

对于 object reference:

Dog d = new Dog();
changeDog(d);

传进去的是 reference 的 copy。
方法里可以通过这个 reference 改对象内容,但如果让参数指向新对象,不会改变原变量指向。


学生易错点


快速提醒

Java 传的是值;对象传进去的是 reference 的副本。


第六部分:基本类型、表达式、Math、Wrapper Classes

6. Primitive Types and Expressions

重要性:中高
对应考试:Unit 1,15–25%;MCQ 高频


6.1 int / double / boolean

必会内容

int age = 16;
double price = 9.99;
boolean passed = true;

整数除法

5 / 2      // 2
5.0 / 2    // 2.5

Casting

(double) total / count
(int) 3.9    // 3

Remainder %

x % 2 == 0

可以判断偶数。


Integer Range and Overflow

int 有固定范围:

Integer.MIN_VALUE
Integer.MAX_VALUE

如果计算结果超过 int 的范围,会发生 integer overflow。

重要:

Integer overflow 通常不会报错,而是得到一个错误的数值。

例如:

int x = Integer.MAX_VALUE;
x = x + 1;

结果不会是一个正常的大整数。


学生易错点


快速提醒

想得到小数,除法里至少要有一个 double。
Integer overflow 不一定报错,但结果会错。


6.2 Math Class

必会方法

Math.abs(x)
Math.pow(a, b)
Math.sqrt(x)
Math.random()

随机整数公式

生成 [min, max]

(int)(Math.random() * (max - min + 1)) + min

学生易错点


快速提醒

Math.random() 范围是 [0.0, 1.0),包含 0,不包含 1。


6.3 Wrapper Classes

必会内容

Integer x = 5;
Double y = 3.14;

Autoboxing:

Integer x = 5;

Unboxing:

int n = x;

必会方法

Integer.parseInt("123")
Double.parseDouble("3.14")

学生易错点


快速提醒

IntegerDouble 是对象;intdouble 是 primitive。


第七部分:Searching / Sorting / Recursion

7. Searching Algorithms

重要性:中
对应考试:Unit 4;MCQ 高频


核心概念

从头到尾一个一个找。

for (int i = 0; i < arr.length; i++)
{
    if (arr[i] == target)
    {
        return i;
    }
}
return -1;

常见考法


快速提醒

Linear search 不要求数组有序。


核心概念

每次砍掉一半。

前提:

数据必须已经有序。


常见考法


学生易错点


快速提醒

Binary search 的前提是 sorted。


8. Sorting Algorithms

重要性:中
对应考试:Unit 4;MCQ 常考中间状态


8.1 Selection Sort

核心概念

每一轮找最小值,放到前面。


中间状态特征

前面一段已经放好了最小的几个元素。


快速提醒

Selection sort:找最小,换到前面。


8.2 Insertion Sort

核心概念

像整理扑克牌,把当前元素插入前面已经排好序的部分。


中间状态特征

前面一段已经有序,但不一定是全局最小的几个。


快速提醒

Insertion sort:前面有序,后面还没处理。


8.3 Merge Sort

核心概念

递归地分成小数组,再合并成有序数组。


常见考法


快速提醒

Merge sort:先一直拆,再一层层合并。


9. Recursion

重要性:中
对应考试:Unit 4;通常出现在 MCQ


必会内容

递归必须有:

  1. Base case
  2. Recursive call

常见考法


学生易错点


快速提醒

递归题不要空想,画调用栈。


第八部分:文件、数据、注释、伦理与社会影响

10. Text Files and Scanner

重要性:低到中
对应考试:Unit 4 Topic 4.6


必会内容


常见 Exception

如果 Scanner 读取的数据类型和实际内容不匹配,可能出现:

InputMismatchException

例如:程序想读一个 int,但文本里是一个不是整数的单词。


快速提醒

Scanner 读取的类型必须和数据内容匹配。


11. Comments and Documentation

重要性:低到中


必会内容

// single-line comment

/*
 multi-line comment
*/

常见考法


快速提醒

注释不是把代码翻译一遍,而是解释代码目的。


12. Ethical and Social Issues Around Data Collection

重要性:低


必会内容


快速提醒

数据不公平,算法结果也可能不公平。


第九部分:FRQ 四大题型考前模板

FRQ 1:Methods and Control Structures

7 分


常考内容


考场检查


快速提醒

FRQ 1 通常不是语法最难,而是题目规则最多。先读 examples,再写代码。


FRQ 2:Class Design

7 分


必须检查


快速模板

public class ClassName
{
    private Type var;

    public ClassName(Type value)
    {
        var = value;
    }

    public ReturnType methodName()
    {
        // code
    }
}

快速提醒

FRQ 2 是最应该保分的题。结构分不能丢。


FRQ 3:Data Analysis with ArrayList

5 分


必须检查


快速提醒

ArrayList 题最怕删除时 index 乱掉。


FRQ 4:2D Array

6 分


必须检查


快速提醒

2D Array 题先判断:我是按行扫,还是按列扫?


第十部分:MCQ 高频陷阱总表

高频陷阱 快速提醒
integer division int / int 得到 int
casting cast 的位置会影响结果
operator precedence 先算括号,再按优先级
boolean expressions 注意 &&||!
short-circuit evaluation 前面能决定结果,后面可能不执行
De Morgan’s Laws &&|| 要互换
String comparison 比内容用 .equals()
substring bounds 左闭右开 [start, end)
indexOf result 找不到返回 -1
compareTo result 负数、0、正数分别表示顺序关系
split 返回 String[]
array index out of bounds 最后一个 index 是 length - 1
ArrayList remove 删除后元素会移动
enhanced for loop 不适合在遍历时增删集合大小
object references 变量存 reference,不是对象本体
aliasing 两个变量可能指向同一个对象
null null 不能调用方法
method overloading 看参数,不看 return type
scope and shadowing 小心 local variable 遮蔽 instance variable
this keyword this.x 是当前对象的 instance variable
pass-by-value Java 永远是 pass-by-value
wrapper classes Integer / Double 是对象
integer overflow 可能不报错,但结果错误
recursion tracing 找 base case,画 call stack
linear search 不要求有序
binary search 必须有序
selection sort 找最小,放前面
insertion sort 像整理扑克牌
merge sort 先拆,再合并
2D array traversal 行列边界不能写反

第十一部分:最后一天复习优先级

必看

  1. Unit 4 数据集合
    • 1D Array 越界问题
    • ArrayList 倒序删除
    • ArrayList get(i) / size() / remove(i)
    • 2D Array [r][c] 和嵌套遍历边界
  2. FRQ 2 Class Design 模板
    • private instance variables
    • constructor 没有返回类型
    • method 要符合题目要求
    • return 不要写成 print
  3. Unit 2 控制流陷阱
    • if / else if / else
    • short-circuit
    • De Morgan’s Laws
    • == vs .equals()

快速扫过

  1. String 方法
    • substring
    • indexOf
    • compareTo
    • equals
    • split
  2. 排序与查找
    • Binary Search 必须有序
    • Selection Sort 找最小放前面
    • Insertion Sort 像打扑克
    • Merge Sort 先拆再合并
  3. 基本类型与表达式
    • int / int
    • casting
    • %
    • integer overflow
    • Integer.MIN_VALUE / Integer.MAX_VALUE
  4. 对象和方法
    • object reference
    • aliasing
    • null
    • pass-by-value
    • scope / this

如果时间不够,可以最后再看

  1. Text Files and Scanner
  2. Recursion 复杂追踪
  3. Ethical and Social Issues
  4. Comments and documentation

最后考前提醒

写代码前

先看:

  1. 题目要求返回什么类型?
  2. 有没有已经提供的方法必须调用?
  3. examples 里面体现了什么规则?
  4. 是处理 String、Array、ArrayList,还是 2D Array?

写代码时

重点检查:

  1. loop 边界有没有越界?
  2. return 有没有放错位置?
  3. String 是否用了 .equals()
  4. ArrayList 是否用了 .get(i)
  5. 2D Array 是否用了 [row][col]
  6. constructor 有没有写返回类型?
  7. method signature 是否和题目一致?

交卷前

最后快速扫一遍:


一句话总结

AP CSA 最后冲刺最值得保住的分数来自:

循环边界、String 方法、ArrayList 遍历、2D Array 行列、Class Design 结构、对象引用与 null。