0%

因为对汇编很感兴趣,加上之后想搞ctf的pwn和reverse方向,我开始读《深入理解计算机系统》(CSAPP),并做配套的lab。读完第三章的大部分内容后,今天完成了Bomb Lab(这是下载地址)的前两个Phase。该文章记录了我的思考过程,并将其重新梳理写成解答。

阅读全文 »

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语言,最近又读起了《Linux C编程一站式学习》。书的第二章的标题为C语言本质,涉及到了一些计算机底层的知识,激起了我探索的热情。最近两天在看计算机体系结构基础、x86汇编有关的部分,一个研究C语言函数调用的例子让我印象深刻。这篇文章算是一次实验的记录。

阅读全文 »

前言

又一个月过去了,现在学到哈希表,感觉是时候写一点东西了。本来准备直接写做Proj2的心路历程的,又觉得还是先做一个回顾好一些。

以前一直用vscode写文章,每次都要部署后才能看得到效果,有些浪费时间。今天试了一下Typora,感觉十分不错!但还是写了一下午,时间是真的不够啊。

cs61b的前1/3讲了主要讲了三个内容:Java语法、Java面向对象以及最基础的数据结构(链表、队列)、算法(插入排序等)。说实话,很多内容都记不清了。

我一直不是很清楚讲语法的文章应该怎么写,因为有权威——各种书(例如《Java编程思想》)、Java官方文档已经讲得很好了,资料也很容易找到,另外网上写这些的多如牛毛。最后决定只写给自己看,但也会尽量保持文章严谨、清晰,只为留下思维的痕迹。

这里的回顾只涉及cs61b中讲授的Java基础内容,若有不足之处请原谅。

阅读全文 »

Java中JUnit的使用和测试的思想

概要

  • Reading3.1
    • JUnit模块的基础使用
    • Test-Driven Development(TDD)的思想
  • Lab3
    • 在IntelliJ中使用JUnit
    • 链表的反转
    • A Debugging Mystery:很有意思,涉及到java常量池、==操作符和.equal方法
  • Project 1B
    • 回文字符串的检测
    • 首次尝试TDD(注意步鲰)
阅读全文 »

重点是Java中数组的特点,以及对数据结构细节实现的思考。

概要

  • Reading2.3
    • 着眼于删除链表结点的问题,追求操作的简便与快速,讲述了更多有关链表操作的细节。
    • 简要介绍Java中泛型的用法
  • Reading2.4
    • Java中数组的基础用法(其中System.arraycopy方法比较常用)
    • 二维数组基础
    • Class与Array对比
  • Reading2.5
    • 数组队列中resize方法的分析
    • why null all objects
阅读全文 »

这篇文章主要讲述了阅读C Primer Plus的方法,以及一些学习C语言时的心得。结合自己半年学编程的经验,希望可以对还没学过C语言的人多多少少有一些帮助。

先谈谈一些其它的问题

阅读全文 »

概要

今天的主题是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的学习,立志一天要完成一个星期的内容!

本来是这样想的。结果却成了这样:早上看video(感觉还行,老师比较有趣)、中午reading+一些exercise、下午proj0一部分(主要是建模)、晚上proj0完成(然而在autograder上仍然折腾了很久)。由此我深刻认识到了proj的任务量之大。

阅读全文 »