读书笔记
文章平均质量分 69
shuimuniao
一分耕耘,一分收获。
展开
-
《编程卓越之道--第一卷:深入理解计算机》读书笔记
在看到这本书之前,我并没有读它的打算。我只是想读一些计算机体系结构的书,又不想读太理论化的、晦涩难懂的书。从图书架上拿到这本书之后,翻到它的目录部分。我看到了第九章"CPU体系结构"。这个章节讲到了cpu如何通过并行提高处理速度。因为看到了这个章节的目录,所以我才打算读这本书。现在已经读完了这本书,如果按照读书之前的想法,那么这本书满足了我的需求。我脑中不再有”流水线到底是什么?“、 ”乱序优化到原创 2012-02-26 16:14:21 · 1119 阅读 · 0 评论 -
变量名称解析规则
使用gcc编译模板类时,容易遇到编译错误。形如:找不到变量等。为此问题,在网上搜索了一番。模板类的变量解析分为两个步骤:1. 模板类解析过程这个过程中,需要解析与泛型参数无关的变量名、函数名。如下代码,typedef void (*cb)();template class TestClass{public: fieldType m_functionPtr;原创 2012-06-04 13:48:06 · 664 阅读 · 0 评论 -
将使用者从实现细节中解放出来
事情的起因 去年一时兴起,利用windows的系统API写了一个简单的俄罗斯方块游戏。今年重读去年编写的代码时,发现了如下的代码。SS_VOID SS_PrintErrorMsg(void){ DWORD errorCode = GetLastError(); LPVOID pOutputBuffer = SS_NULL; LPVOID pDisplayBuffer =原创 2012-05-19 15:41:37 · 960 阅读 · 0 评论 -
classloader机制研究(3) --- 类型安全
转载,请注明出处!本文实际是对《Dynamic class loading in the Java Virtual machine》第四部分的翻译。第四部分的题目是"Maintaining Type-safe Linkage",翻译成中文就是“链接时保证类型安全”。按照我的理解,用户自定义class loader以及class loader委托机制是造成类型不安全的原因。这部分就是在解释:用户原创 2012-05-25 00:21:31 · 790 阅读 · 0 评论 -
鸟哥私房菜读书笔记-- 文件权限
我的工作机是linux系统。我登录root帐号,从svn服务器check out源代码。之后使用文本编辑器修改源码,竟然发现无法保存!!昨天读了《鸟菜》相关章节后,总算明白了原因。这一切与linux的文件权限有关。1. linux系统是多用户多任务的系统。这点与windows不同,windows是单用户多任务系统。linux系统允许多个用户从不同的终端同时登录。假设目前有A用户、B用户同时登录原创 2012-09-19 11:27:54 · 837 阅读 · 0 评论 -
鸟哥私房菜读书笔记 -- 设备名称以及硬盘分区
1. 一个IDE插槽可以链接两个IDE接口的设备。因此可以用电缆把2块硬盘安装在一个IDE插槽上。这两块硬盘通过跳线来区分。其中一台是主(master)设备,另一台是从(slave)设备。注意:一般情况下我们使用的主机只有1块硬盘,因此没有主、从之所。如果真的有两块设备,那么可以将任意一块设为主设备,另一块设为从设备。2. 在linux系统中,设备被作为文件管理。设备的文件名是固定的。IDE硬原创 2012-09-18 18:15:56 · 944 阅读 · 0 评论 -
匿名namespace的作用
转自:http://blog.csdn.net/nodeathphoenix/article/details/6045928一。匿名namespace的作用在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则在链接阶段就会发生重定义错误,为了解决这个问题,我们可以在定义这些标识符(identifier)的时候加转载 2012-09-24 17:29:35 · 1395 阅读 · 0 评论 -
深入理解C++中的mutable关键字
转自 : http://dev.yesky.com/393/3007393.shtml mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不转载 2012-09-26 09:30:32 · 596 阅读 · 0 评论 -
GCC __builtin_expect的作用
将流水线引入cpu,可以提高cpu的效率。更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率。如下图所示:+--------------------------------|取指令 | 执行指令 | 输出结果+--------------------------------| | 取指令 | 执行+-----------------原创 2012-09-25 17:36:23 · 20864 阅读 · 1 评论 -
http协议--ETAG
转自 Etag 是什么 Etag 是URL的Entity Tag,用于标示URL对象是否改变,区分不同语言和Session等等。具体内部含义是使服务器控制的,就像Cookie那样。 HTTP协议规格说明定义ETag为“被请求变量的实体值” 。另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服转载 2012-10-17 15:36:07 · 1353 阅读 · 0 评论 -
动态规划 --- 车队过桥
网上有这道题的描述,并且给了一组示例数据。我以示例数据作为输入,得到的输出与它给的输出不同。于是仔细解了一下。重新在网上搜索之后,发现速度单位是km/h。要求输出单位是分。这样子的话,我的计算结果就是对的。思路不需要改变,还是动态规划。源码需要改变:1. 将函数getInputData()中的distance *= 1000删除2. 输入的速度可以是浮点数。将carin原创 2012-05-29 15:45:02 · 2808 阅读 · 1 评论 -
c++ primer -- 基于过程的设计(5)
1.在局部域中的变量声明引入了局部对象(local object)。有三种局部对象:自动对象(automatic object)、寄存器对象(register object)以及局部静态对象(local static object)。区分这些对象的是对象所在存储区的属性和生命期。2.自动对象的存储分配发生在定义它的函数被调用时。分配给自动变量的存储区来自于程序的运行栈,它是函数活动记录的一原创 2012-04-22 15:27:38 · 360 阅读 · 0 评论 -
《c陷阱与缺陷》读书笔记
刚刚读完一本书《c陷阱与缺陷》,这本书的作者是Andrew Koening。作者编写此书时,ansi c标准还未完成。因此,此书中的很多问题我们应该不会遇到。但这本书中还是有些启发性的例子、思想。我在此简单总结一下给大家分享。1.else悬挂问题。如下例子if (x == 0) if (y == 0) error();else{ z = x + y; f(&z);原创 2012-02-17 09:24:35 · 747 阅读 · 0 评论 -
关于链接指示符的问题
extern “XX”可以告诉编译器,该函数是用其它语言来编写的,但强制这些函数采用XX语言的方式进行编译。举个例子说吧!C接口的方法:C中调用C++函数:生成一个工程叫demo,加入一个demo.c 内容如下:int add(int a,int b );//有无都可int main(){int i=add(3,2); printf("i=%d",i);re原创 2012-04-22 14:47:09 · 479 阅读 · 0 评论 -
c++ Primer -- 基本语言(6)
1.在c中,对象的定义并不被视为C语言的语句,块中的所有对象定义必须出现在任何程序语句之前。在C++中,对象的定义是C++语言的一条语句,所以可以将对象定义放在任何其他语句能够出现的地方。2. 对于类对象的定义来说,由于类对象与构造函数和析构函数相关联,所以声明的局部性就变成必须的了。a)在做函数或语句块中的任何事情之前,所有类对象的构造函数均被调用。声明的局部性使我们能够把初始化的开销分原创 2012-04-22 15:17:37 · 336 阅读 · 0 评论 -
c++ primer -- 基本语言(4)
1.%操作符计算两个树相除的余数,第一个数被第二数除。该操作符只能被应用在数值类型(char、short、int、和long)的操作数上。当两个操作数都是正数时,结果为正。但是,如果有一个(或两个)操作数为负,余数的符号取决于机器。因此,移植性无法保证。2.算术表达式的计算会导致不正确或未定义的值,这些情况被称为算术异常(但是不会导致抛出实际的异常)。算术异常归咎于算术的自然本质(比如除以0)原创 2012-04-22 15:16:36 · 428 阅读 · 0 评论 -
c++ primer -- 基本语言(9)
1.istream_iterator2.在容器头部插入元素:slist.insert(slist.begin(),value);在容器指定元素前插入元素:string son("Danny");list::iterator iter;iter = find(slist.begin(), slist.end(), son);slist.insert(iter, spo原创 2012-04-22 15:15:40 · 418 阅读 · 0 评论 -
c++ primer -- 基本语言(7)
1.顺序容器(sequence container)拥有由单一类型元素组成的一个有序集合。两个主要的顺序容器是list 和 vector。[第三个顺序容器为双端队列deque,它提供了与vecotr相同的行为,但是对于首元素的有效插入和删除提供了特殊的支持。]2.关联容器(associative container)支持查询一个元素是否存在,并且可以有效地获取元素。两个基本的关联容器类型是ma原创 2012-04-22 15:22:07 · 310 阅读 · 0 评论 -
c++ primer -- 基于过程的程序设计(1)
1.所有的函数都使用在程序运行栈(run-time stack)中分配的存储区。该存储区一直保持与该函数相关联,直到函数结束为止。那时,存储区将自动释放以便重新使用。该函数的整个存储区被称为活动记录(activation record).系统在函数的活动记录中为函数的每个参数都提供了存储区。2.使用引用的时机:第一,调用函数必须将一个参数改成指针来允许改变实参的值时就比较合适。第二,向主调原创 2012-04-22 15:22:54 · 398 阅读 · 0 评论 -
c++ primer -- 基于过程的设计(2)
1.如果返回值是一个大型类对象,用引用(或指针)返回类型比按值返回类对象效率要高得多。在某些情况下,编译器自动将按值返回转换到按引用返回。该优化被称为命名返回值优化(named return value optimization)。2.返回一个指向局部对象的引用。局部对象的生命周期随函数的结束而结束。在该函数结束后,该引用变成未定义内存的别名。3.函数返回一个左值。对返回值的任何修原创 2012-04-22 15:23:27 · 365 阅读 · 0 评论 -
c++ primer -- 基于过程的设计(3)
1.关于链接指示符。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等。而在C中,只是简单的函数名字而已,不会加入其他的信息,也就是说:C++和C对产生的函数名字的处理是不一样的。原创 2012-04-22 15:24:33 · 257 阅读 · 0 评论 -
c++ primer -- 基本语言(6)
1.链表必须支持的操作:插入(insert)、删除(remove)、查找(find)一个项、查询链表长度(size)、显示链表(display)、比较两个链表是否相等(equality)、翻转链表(reverse)以及连接两个链表(concatenate)。2.size()实现有两种方案:a)迭代链表,返回所遍历的元素个数。b)将长度作为一个数据成员存储起来。第二种实现效率很高原创 2012-04-22 15:21:24 · 309 阅读 · 0 评论 -
c++ primer -- 基于过程的设计(4)
1.声明引入的名字可以被用在什么地方?为回答这个问题,我们将给出域的概念,并且介绍它们是怎样界定一个名字在程序文本文件中的可用范围。具体包括:全局域、局部域。2.声明引入的运行时刻实体的生命期是什么?为回答这个问题,我们将讲述声明是怎样引入全局对象和函数(在整个程序生成期间一直有效的实体)、局部对象(在程序生成期间的子集上有效的对象),以及动态分配的对象(生命期由程序员控制的对象)的。原创 2012-04-22 15:26:27 · 348 阅读 · 0 评论 -
Spring的价值及学习内容
Spring的根本使命是 简化Java开发,方法是引导开发者使用POJO来设计实现系统。Spring还有样式代码的封装和复用,我认为这个不是亮点。因此,略去不表,不喜勿喷。关于POJO的理解POJO是一个简称,全称为plain old java object。中文翻译是简单老式的java对象。我认为Java类具备下面两个条件时,那么这个类可以被称为POJO。Java类没有任何基类或Java类的继承...原创 2018-06-22 10:01:46 · 388 阅读 · 0 评论