紧接上篇文章,这篇文章将分析CSAPP配套课程ICS(Introduction to Computer Science)中,Bomb Lab的第二部分——Phase 3和Phase 4。
CSAPP——BombLabⅠ
cs61b系列day6——proj2的记录与分析
Project2来啦!按照cs61b-sp18的讲师Josh Hug的说法,”Project 2 is incredibly chanllenging, really pushing you to the limits, making you grapple with complexity in terms of large system building project”。下面是往期的一些project。
- sp15–Implement subset of the git version control software.
- sp16–Build a text editor
- sp17–Implement the subset of SQL
在我开始写这篇文章时,我的项目大概完成了70%,已经初具雏形。对于我来说,写文章重要之处在于思考的过程,可以帮助我一步一步改进项目。在这篇文章中,我将主要讲解我在做proj2时的思路,以及接触到的一些新的知识点。接下来开始正式介绍proj2。
C语言函数调用与x86汇编
为了进一步了解C语言,最近又读起了《Linux C编程一站式学习》。书的第二章的标题为C语言本质,涉及到了一些计算机底层的知识,激起了我探索的热情。最近两天在看计算机体系结构基础、x86汇编有关的部分,一个研究C语言函数调用的例子让我印象深刻。这篇文章算是一次实验的记录。
cs61b系列day5——回顾1
前言
又一个月过去了,现在学到哈希表,感觉是时候写一点东西了。本来准备直接写做Proj2的心路历程的,又觉得还是先做一个回顾好一些。
以前一直用vscode写文章,每次都要部署后才能看得到效果,有些浪费时间。今天试了一下Typora,感觉十分不错!但还是写了一下午,时间是真的不够啊。
cs61b的前1/3讲了主要讲了三个内容:Java语法、Java面向对象以及最基础的数据结构(链表、队列)、算法(插入排序等)。说实话,很多内容都记不清了。
我一直不是很清楚讲语法的文章应该怎么写,因为有权威——各种书(例如《Java编程思想》)、Java官方文档已经讲得很好了,资料也很容易找到,另外网上写这些的多如牛毛。最后决定只写给自己看,但也会尽量保持文章严谨、清晰,只为留下思维的痕迹。
这里的回顾只涉及cs61b中讲授的Java基础内容,若有不足之处请原谅。
cs61b系列day4——TestDebug
Java中JUnit的使用和测试的思想
概要
- Reading3.1
- JUnit模块的基础使用
- Test-Driven Development(TDD)的思想
- Lab3
- 在IntelliJ中使用JUnit
- 链表的反转
- A Debugging Mystery:很有意思,涉及到java常量池、==操作符和.equal方法
- Project 1B
- 回文字符串的检测
- 首次尝试TDD(注意步鲰)
cs61b系列day3——ArrayDeque
重点是Java中数组的特点,以及对数据结构细节实现的思考。
概要
- Reading2.3:
- 着眼于删除链表结点的问题,追求操作的简便与快速,讲述了更多有关链表操作的细节。
- 简要介绍Java中泛型的用法
- Reading2.4:
- Java中数组的基础用法(其中System.arraycopy方法比较常用)
- 二维数组基础
- Class与Array对比
- Reading2.5:
- 数组队列中resize方法的分析
- why null all objects
C Primer Plus学习指北
cs61b系列day2——Proj1A
概要
今天的主题是list(表)。
- Reading2.1中先是描述了一种递归定义的链表——IntList,并提供了一些单元测试以帮助我们完善IntList的实现,同时首次介绍了reference type(引用类型)的定义。
- Reading2.2中:
- 为了解决IntList难以使用的特点,创造了新的类SLList,而IntList则作为Nested class,仅提供一些必要的接口供SSList使用。
- 为了解决size方法效率低下的问题,采用了caching的方法。
- 为了解决处理特殊情况(如删除第一个结点)时代码繁杂的问题,引入了Sentinel Nodes(DDList也同样能有Sentinel Nodes)。
- 为了避免用户操作不当以及减小接口的复杂程度,介绍了private关键字。
- 为了解决数据类型单一的问题,首次介绍了Generics(泛型)。
最后,我们也应该关注书中构建数据结构并一步步改进的思维。
- Project1A中,要求我们实现Deque(双端队列)的链表实现,只提供了少量测试,更多的测试需要自己编写。
cs61b系列day1——Proj0
今天正式开始cs61b的学习,立志一天要完成一个星期的内容!
本来是这样想的。结果却成了这样:早上看video(感觉还行,老师比较有趣)、中午reading+一些exercise、下午proj0一部分(主要是建模)、晚上proj0完成(然而在autograder上仍然折腾了很久)。由此我深刻认识到了proj的任务量之大。