我在康奈尔学CS,这学期的CS2110这门课学得不是很好,对考试把握不是很大,想提前准备复习,请问期末考试有哪些考点?老师能辅导吗?
康奈尔大学的CS2110(面向对象编程和数据结构)课程探讨了软件工程概念。同时,通过主要编程语言Java,介绍了面向对象编程的基础理念,包括对象、类、子类型、封装和多态性。此外,还研究了各类算法(排序、搜索、遍历)及数据结构(包括列表、栈、队列、树、堆、哈希表和图)的性能表现。最后,引入了并发编程与事件驱动编程等替代性编程范式。针对CS2110考试,我们总结了可能会出现的考点,希望能帮助你更有针对性的进行考前复习。
一、CS2110课程目标
1、运用递归与面向对象编程概念(如类、接口、多态性、继承)解决计算问题。
2、基于英文规格说明书设计、实现并验证非简单Java程序,运用封装与单元测试等特性提升可维护性。
3、分析算法与程序的渐近复杂度,评估其运行时间与内存需求。
4、实现基础数据结构(动态数组、链表、二叉搜索树、堆、哈希表、邻接表)并在程序中应用。
5、构建并修改基于Java的事件驱动图形用户界面(GUI)。

二、CS2110考试重点
1、基础知识
阐释静态类型与动态类型编程语言的差异。
确定包含一个或多个运算符、方法调用及/或隐式/显式类型转换的表达式的静态类型。
绘制内存图以可视化涉及多重方法调用及/或递归的程序执行状态。
阐述Java在内存中存储和引用对象的方式。
利用Java文档定位实现特定功能的方法,并成功将其整合到程序中。
绘制对象图以可视化引用类型。
编写涉及数组的Java程序,运用索引语法和数组字面量。
编写并执行使用程序参数的Java代码。
根据方法规范开发Java方法,整合一种或多种(可能嵌套)控制结构,如if语句、循环、for循环、else循环、while循环。
根据规范开发Java递归方法。
识别并解释含错误的Java代码中的问题,无论是否借助计算机。
2、软件开发
根据方法签名及其行为的英文描述编写详细的JavaDoc规范。
阐述软件开发中的客户方与实现方角色。
根据方法规范和签名识别其先决条件、后置条件及副作用。
将防御性编程实践(如先决条件检查和不变量断言)融入代码。
仅凭方法规范和签名编写全面的单元测试。
评估单元测试套件对方法或类的覆盖率。
阐述测试驱动开发流程及其潜在优势。
说明黑盒测试与玻璃盒测试的差异。
描述涉及数组的迭代方法的循环不变式,并用图示可视化呈现。
运用数组图开发迭代方法。
为使用范围表示法的数组方法编写精确规范。
阐释异常机制及其与规格说明、防御性编程的关系。
编写抛出、传播及处理异常的代码。
3、复杂度分析
说明采用渐近分析与性能测试评估代码效率的优势差异。
确定包含一个或多个循环及/或方法调用的代码段的渐近时间复杂度与空间复杂度。
判断给定(数学)函数是否属于特定大O复杂度类。
比较线性搜索与二进制搜索的异同。
确定递归方法的调用次数及调用栈最大深度,并据此计算其时间与空间复杂度。
比较插入排序、归并排序和快速排序算法,讨论时间/空间复杂度及稳定性等特性。
4、面向对象编程
根据类描述,识别其状态与行为,并据此勾勒其字段与公共方法签名。
识别类的恒定条件,编写代码以维持该恒定条件并/或验证其成立。
比较静态方法与实例方法的异同。
根据给定规范编写实例方法,实现对对象字段值的访问和/或修改。
绘制内存图以可视化涉及实例方法调用的代码状态。
确定变量的作用域与生命周期。
阐释面向对象封装原则及其优势。在给定代码中识别正确与错误封装的实例。
比较接口、抽象类与(具体)类的异同。
根据给定状态表示的规范实现接口。
比较静态类型与动态类型的异同。
列举三种允许子类型替换的情境。
阐述面向对象代码中运用多态性的优势。
描述动态分派原理与编译时引用规则。
解释继承关系及其相较于接口的优劣势。
基于父类,运用继承机制开发一个或多个子类。
为给定字段或方法确定正确的可见性修饰符(public/protected/private),并说明选择依据。
追踪包含以下任一元素的代码片段执行流程:继承、重写方法及super调用。
判断类是否可变。
阐释关键字的语义含义。final
描述运算符与方法的语义差异,并根据具体场景确定适用方案。==equals()
识别类中定义的equals()方法要求,并在用户自定义类中重写该方法。Object
5、线性数据结构
阐述数据结构与抽象数据类型的区别。
实现包含一个或多个泛型参数的泛型类或方法。在客户端代码中使用泛型类。
描述自动装箱与自动拆箱的语义,并在代码片段中定位其发生位置。
利用模板方法模式为抽象数据类型实现抽象测试套件。
比较普通Java数组与动态数组类型(如Java的ArrayList)的行为差异。
比较基于动态数组实现的List与基于链表实现的List的性能表现,判断特定用例中更优方案。
绘制对象(或节点)图以可视化链表数据结构。在链表数据结构上实现方法。
描述Iterable和Iterator接口的应用场景。
为指定数据结构类实现Iterator接口,并以客户端身份使用迭代器。
阐述迭代器模式及其与传统迭代器的差异。
识别并定义函数接口,使用lambda表达式实现。
分析栈与队列数据结构的应用场景。
阐述组合关系及其优于继承的适用情境。
6、树数据结构
识别树中父节点、子节点、根节点、叶节点、祖先节点及后代节点。
给定一棵树,确定其大小、高度、节点深度及元数。
编写通用树与二叉树的递归方法。
根据二叉树结构图,输出其节点的前序遍历、中序遍历和后序遍历结果,并反向推导。
在树上实现迭代器。
描述二叉搜索树不变式,判断给定树是否满足该条件。
阐述Comparable与Comparator接口的应用场景。
解释泛型类型边界的语义并编写包含该特性的代码。
编写修改二叉搜索树的方法,同时保持其不变式。
分析二叉搜索树上给定方法的时间/空间复杂度。
描述堆的不变性,判断给定二叉树是否满足这些条件。
在堆的树形表示与数组表示间进行转换。
实现堆的操作并计算其时间/空间复杂度。
使用堆实现优先队列并分析其性能。
7、高级数据结构
描述集合(Set)和映射(Map)抽象数据类型(ADT)的操作。
编写使用集合和映射的程序。
比较基于数组、排序数组、(平衡)二叉搜索树和哈希表实现的集合的效率。
使用函数式接口实现数据结构上的操作。
使用映射实现动态优先队列,并分析其操作的空间/时间复杂度。
识别哈希算法的步骤,并描述优质哈希函数的特性。
可视化哈希表执行特定操作序列后的状态。
描述链表法与探测法处理冲突的哈希表差异,并指出各自适用场景。
实现基于链表或探测哈希表的数据结构。
8、图论
在形式描述(顶点边列表)与(加权)图的示意图之间进行转换。
描述图的邻接表与邻接矩阵表示法,比较这两种表示法中操作的空间/时间复杂度。
通过手动和编程方式对给定图执行广度优先遍历(BFS)和深度优先遍历(DFS)。
可视化图遍历执行过程中的状态,将节点状态描述为未发现、已发现、已访问和/或已确定。
阐述深度优先遍历与拓扑排序的关系。
描述迪杰斯特拉最短路径不变式,并利用其推导算法执行过程中图中未访问部分的性质。
实现迪杰斯特拉最短路径算法,并分析其时间/空间复杂度。
9、事件驱动编程
将图形用户界面应用程序的各个方面归类为模型、视图或控制器的一部分。
根据图形应用程序的设计草图编写代码,设置其组件层次结构。
描述布局管理器的工作原理及其与组件层次结构中元素的交互。
利用Java文档查找并集成新GUI控件至图形应用程序。
编写对图形组件执行自定义绘制的代码。
阐述事件驱动程序中的控制反转机制。
在图形应用程序中编写事件监听器。
解释Swing应用程序的执行流程及其对事件分发线程的使用。
10、并发编程
阐述并发代码的优缺点。
使用Java的Thread类编写并发代码。
识别给定并发代码中的竞争条件,并列举程序执行后可能出现的状态。
阐释Java锁的语义并编写涉及同步的代码。
描述并发程序中可能导致死锁的条件及规避方法。
说明如何使用条件变量同步共享资源的修改操作。
以上就是康奈尔大学CS2110期末考试可能会考察的重点内容。如果你对考试没有把握,考而思能够为你提供一对一康奈尔大学考前辅导。你可以直接联系考而思的课程顾问,及时在专业学术导师的指导下进一步明确考试重点、全面查漏补缺、提升编程技能、掌握应试技巧,从而为康奈尔大学考试做好准备。