0%

Bomb Lab

实验代码见GitHub

简介

BombLab是CS:APP中对应第三章内容:程序的机器级表示的lab。主要内容为提供一个二进制对象文件bomb,当运行时,它会要求用户输入六个字符串,如果其中的任何一个不正确,炸弹就会爆炸,输出一行错误信息并向计分服务器提交(自学所用的材料不会向服务器提交信息,但这不代表我们可以随意让炸弹爆炸),学生必须通过反汇编和逆向工程来找到六个正确的字符串来解除自己的炸弹(理论上每个人的炸弹答案都不同,但自学材料的答案都是一样的,本文针对的是自学材料)。

阅读全文 »

关于CS:APP

《深入理解计算机系统》(Computer Systems: A Programmer’s Perspective;CS:APP)这本书作为CMU核心课程的核心教材,一直被众人所推崇。这本书的主要内容就如它的英文名称那样:以一个程序员的视角看待计算机系统(现在的中文书名翻译给人一种这本书非常精深的错觉)。实际上这本书的内容并没有太过于深入,并且一直都作为计算机科学与技术专业低年级的计算机基础课来开设。所需要的前置知识也不是很多,一般来说学习过C语言之后就可以看了,并不需要提前学习汇编(本书第三章会讲解汇编的基础内容)。但个人感觉在学习过王爽的8086汇编以后学习本书的汇编会顺利不少。

我在三月份时得知本书第三版的英文版即将出版就早早预订了(第三版中文翻译版早已出版),苦苦等待一个月以后终于如愿成为了这版CS:APP的第一批读者。

读这本书的感受第一就是非常地爽,可以说这本书可以引领你从表层的程序一直深入到计算机内部的运作方式中,里面对于一些概念的理解也是给人一种前所未有的透彻感觉(溢出的图形表示、补码的权值理解等等)都切中了问题的本质。

除了书本上的内容,CMU的课程官网上还提供了9个lab,这9个lab也一直深受CMU开设的课程的学生们的喜爱,在lab中我们可以将在各章中学习到的知识运用到解决一个有趣的问题中,并且通过自动化的评分机制评估对知识的掌握程度。这9个lab同样是这本书的核心内容。

阅读全文 »

写在前面

关于MVP模式的基本介绍与优缺点可以参见下面这篇文章:

https://segmentfault.com/a/1190000003927200

本文的重点是对Google官方写的一个MVP架构实现的Demo进行简单的分析来看看谷歌实现的Android MVP架构是怎么搭建的。

谷歌官方的架构Demo地址:

https://github.com/googlesamples/android-architecture

本文所讲解的为:

https://github.com/googlesamples/android-architecture/tree/todo-mvp

需要读者参照源码查看本文。

我将这个todo应用的框架提炼出来(同时也意味着丢失了很多的实现细节,但可以将架构看得更加清晰),制作了一张伪UML图(为了简化,没有遵循UML的规范),下面我们参照着表中的内容进行分析:

阅读全文 »

ArchLinux安装后的必须配置

上一篇教程中,我们成功地安装了ArchLinux,这时系统处于一个非常精简的状态,为了日常使用,我们必须进行一些配置、安装一些需要的组件,来扩展我们的系统功能,开源的组件相互协同工作也是Linux的迷人之处之一。

下面的教程部分参考了官方General recommendations

上述链接中还有很多本文未提及的可以配置的东西,感兴趣的同学可以阅读其中的内容对系统进行更加完善的配置。

阅读全文 »

写在前面

这可能是你能找到的最适合你的中文ArchLinux安装教程。

前几天硬盘挂了,万幸的是家目录放在了另一块硬盘上所以存活了下来。不得不再重装一遍Arch,算上帮朋友装的,这已经是我第四次安装Arch了。也想借此机会记录这个过程写一篇完全按照官方Wiki指导再加上Wiki上没有重点写出来但是安装过程中会遇到的一些问题的一篇不太一样的安装教程。

阅读全文 »

写在前面

在团队内部的hackweek中实现了一个在局域网环境中(同一个wifi下)进行的卡片收发小游戏,踩了一些关于局域网内通信的坑,这篇博文就用来整理一下整个过程的思路,完整代码地址

实现思路

在整个过程中利用到了UDP与TCP两种传输层协议,两者的特性决定了使用上的不同。

简单地说,UDP非面向连接,不需要先与目标建立连接,所以UDP不提供可靠的数据传输,也不能保证数据准确无误地到达目的地,但UDP的优势在于它可以迅速传送大量信息,传输性能比较好。

而TCP是面向连接的协议,需要经过三次握手与目的地址建立一个稳定的连接,可以保证数据准确、完整地到达。但是它的传输效率就没有UDP那么高。

首先,为了数据传输的稳定和准确性,在传送主要数据部分我们必需使用TCP来建立一个点对点的稳定的连接来传输主要数据。

阅读全文 »

编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串welcome to masm!

效果图:

采用了双循环嵌套的写法,外层控制输出行数,内层逐字符读取ASCII码与对应行的属性。

loop s1改为loop s2有惊喜哦

所有实验答案在这里

阅读全文 »

前言

GitHub完整代码

上篇博客简单介绍了属性动画的原理,这篇博客将会以一个简单的实例来运用上之前讲的内容,并对Animator的几个回调方法进行讲解。

目标是自定义一个View,在画布上绘制一个小球,点击屏幕后小球从顶部自由下落,落到底边后反弹,反弹损失一半的能量,也就是说小球只能上升到下落时一半的高度,再重复这个过程直到退出程序。如图:

阅读全文 »