深入理解计算机系统(CS:APP) - Data Lab详解
关于CS:APP
《深入理解计算机系统》(Computer Systems: A Programmer’s Perspective;CS:APP)这本书作为CMU核心课程的核心教材,一直被众人所推崇。这本书的主要内容就如它的英文名称那样:以一个程序员的视角看待计算机系统(现在的中文书名翻译给人一种这本书非常精深的错觉)。实际上这本书的内容并没有太过于深入,并且一直都作为计算机科学与技术专业低年级的计算机基础课来开设。所需要的前置知识也不是很多,一般来说学习过C语言之后就可以看了,并不需要提前学习汇编(本书第三章会讲解汇编的基础内容)。但个人感觉在学习过王爽的8086汇编以后学习本书的汇编会顺利不少。
我在三月份时得知本书第三版的英文版即将出版就早早预订了(第三版中文翻译版早已出版),苦苦等待一个月以后终于如愿成为了这版CS:APP的第一批读者。
读这本书的感受第一就是非常地爽,可以说这本书可以引领你从表层的程序一直深入到计算机内部的运作方式中,里面对于一些概念的理解也是给人一种前所未有的透彻感觉(溢出的图形表示、补码的权值理解等等)都切中了问题的本质。
除了书本上的内容,CMU的课程官网上还提供了9个lab,这9个lab也一直深受CMU开设的课程的学生们的喜爱,在lab中我们可以将在各章中学习到的知识运用到解决一个有趣的问题中,并且通过自动化的评分机制评估对知识的掌握程度。这9个lab同样是这本书的核心内容。
Android Google官方MVP架构分析
写在前面
关于MVP模式的基本介绍与优缺点可以参见下面这篇文章:
本文的重点是对Google官方写的一个MVP架构实现的Demo进行简单的分析来看看谷歌实现的Android MVP架构是怎么搭建的。
谷歌官方的架构Demo地址:
本文所讲解的为:
https://github.com/googlesamples/android-architecture/tree/todo-mvp
需要读者参照源码查看本文。
我将这个todo应用的框架提炼出来(同时也意味着丢失了很多的实现细节,但可以将架构看得更加清晰),制作了一张伪UML
图(为了简化,没有遵循UML
的规范),下面我们参照着表中的内容进行分析:
ArchLinux安装后的必须配置与图形界面安装教程
ArchLinux安装后的必须配置
在上一篇教程中,我们成功地安装了ArchLinux
,这时系统处于一个非常精简的状态,为了日常使用,我们必须进行一些配置、安装一些需要的组件,来扩展我们的系统功能,开源的组件相互协同工作也是Linux
的迷人之处之一。
下面的教程部分参考了官方General recommendations。
上述链接中还有很多本文未提及的可以配置的东西,感兴趣的同学可以阅读其中的内容对系统进行更加完善的配置。
以官方Wiki的方式安装ArchLinux
Android利用UDP、TCP进行局域网数据传输
写在前面
在团队内部的hackweek中实现了一个在局域网环境中(同一个wifi下)进行的卡片收发小游戏,踩了一些关于局域网内通信的坑,这篇博文就用来整理一下整个过程的思路,完整代码地址。
实现思路
在整个过程中利用到了UDP与TCP两种传输层协议,两者的特性决定了使用上的不同。
简单地说,UDP非面向连接,不需要先与目标建立连接,所以UDP不提供可靠的数据传输,也不能保证数据准确无误地到达目的地,但UDP的优势在于它可以迅速传送大量信息,传输性能比较好。
而TCP是面向连接的协议,需要经过三次握手与目的地址建立一个稳定的连接,可以保证数据准确、完整地到达。但是它的传输效率就没有UDP那么高。
首先,为了数据传输的稳定和准确性,在传送主要数据部分我们必需使用TCP来建立一个点对点的稳定的连接来传输主要数据。