
读书笔记
劉俊
这个作者很懒,什么都没留下…
展开
-
写一下这些年看过的书(2014.7.31更新)
之前答应了啊牛要写一篇东西分享一下经验,但是却一直都没怎么动手。因为自己大学四年基本上都是摸着石头过河的感觉,也谈不上什么经验,所以也不知道自己可以写些什么。不过,后来受一位师兄的日志启发,觉得也可以分享一下自己看过的书,让师弟师妹参考一下,希望能起到一点帮助吧。 PS:水平有限,下面介绍的那些书完全是站着自己角度去写的,所以如有不妥的地方,请大家指正。 1、《C Prime原创 2014-07-06 01:18:57 · 2207 阅读 · 0 评论 -
《Windows核心编程 5th》部分读书笔记----第10章 同步设备I/O与异步设备I/O
异步设备I/O基础假设一个线程向设备发出一个异步I/O请求。这个请求被传给设备驱动程序,后者负责完成实际I/O的操作。当驱动程序在等待设备响应的时候,应用程序的线程并没有因为要等待I/O请求完成而被挂起,线程会继续运行并执行其他有用的任务。到了某一时刻,设备驱动程序完成了对队列中的I/O请求的处理,这时它必须通知应用程序数据已发送,数据已收到,或发生了错误,这些通知称之为“接收I/O请求完成通原创 2013-03-23 15:12:14 · 1171 阅读 · 0 评论 -
《剑指Offer》读书笔记---面试题6:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出二叉树并输出它的头结点。二叉树结点的定义为:struct BinaryTreeNode{ int m_nValue ; BinaryTreeNode*原创 2013-04-05 15:00:05 · 1032 阅读 · 0 评论 -
《剑指Offer》读书笔记--面试题16:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义:struct ListNode{ int m_nValue ; ListNode* m_pNext ;} ;一开始我是先想到递归求解的:ListNode* ReverseLinkedList(ListNode *pListHead) { if(NULL == pListHea原创 2013-04-05 11:13:14 · 822 阅读 · 0 评论 -
《剑指Offer》读书笔记---面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得偶数位于数组的后半部分。一开始我是想到快速排序的Partitation函数的,所以按照快速排序的形式写了一下:#include#includeconst int N = 100 ;void Partitation(int *A,int p,int r) ;int main(void){ int原创 2013-04-05 11:06:42 · 896 阅读 · 0 评论 -
《TCP/IP协议详解:卷一》读书笔记---IP、UDP、TCP协议基础
IP:网际协议不可靠:不能保证IP数据报能成功地到达目的地,仅提供最好的的传输服务。无连接:IP并不维护任何关于后续数据报的状态信息。每个数据报的处理的相互独立。IP首部普通的IP首部长为20个字节,除非含有选项字段。包含的字段:4位版本、4位首部长度、8位服务类型、16位总长度(字节数)、16位标识、3位标志(分片所用)、13位片偏移(分片所用)、8位生存原创 2013-04-01 20:32:07 · 1497 阅读 · 2 评论 -
《深入理解计算机系统 2nd》部分读书笔记---第9章 虚拟存储器(未完成)
进程--摘自《深入理解计算机系统 2nd》第8章 异常控制流进程提供给应用程序的关键抽象:一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用存储器系统。这两个抽象很重要,对理解《Windows核心编程 5th》和《Unix环境高级编程 2nd》两书中描述的一些机制很有帮助。虚原创 2013-03-17 15:48:13 · 3385 阅读 · 2 评论 -
《深入理解计算机系统 2nd》读书笔记----第7章 链接
链接链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行。链接可以执行于编译时(compile time),也就是在源代码被翻译成机器代码时;也可以执行于加载时(load time),也就是在程序被加载器(loader)加载到存储器并执行时;甚至执行于运行时(run time),由应用程序来执行。静态链接Un原创 2013-03-15 00:58:39 · 3163 阅读 · 4 评论 -
《Windows核心编程 5th》读书笔记----第9章 用内核对象进行线程同步
用户模式与内核模式下的线程同步首先,先引用一下《深入理解计算机系统 2nd》第8章 “异常控制流”关于用户模式和内核模式的一段话,理清一下关于用户模式和内核模式的概念:为了使操作系统内核提供一个无懈可击的进程抽象,处理器必须提供一种机制,限制一个应用可以执行的指令以及它可以访问的地址空间范围。处理器通常是用某一个控制寄存器中的一个模式位(mode bit)来提供这个功能的,该寄存器描述原创 2013-03-16 10:49:20 · 992 阅读 · 0 评论 -
《Windows核心编程 5th》读书笔记---第8章 用户模式下的线程同步
在以下两种基本情况下,线程之间需要相互通信:1、需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性。(互斥)2、一个线程需要通过通知其他线程某种任务已经完成。(同步)用户模式下的线程同步Interlocked系列函数Interlocked系列函数会以原子方式来操纵一个值,所谓的原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会同一时刻访原创 2013-03-14 21:21:35 · 845 阅读 · 0 评论 -
《剑指Offer》读书笔记---面试题24:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。例如输入数组{5,7,6,9,11,10,8},则返回true,如果输入的数组是{7,4,6,5},则返回false。我的思路:由于之前看了那个重组二叉树的题目,所以很容易就想出类似的解法。一个二叉搜索树的后序遍历结果中,序原创 2013-04-11 21:51:59 · 832 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记-----WSAAsyncSelect模型
WSAAsyncSelect模型WSAAsyncSelect模型允许应用程序以Windows消息的接收网络事件通知。这个模型是为了适应Windows的消息驱动环境而设置的,现在许多对性能要求不高的网络应用程序都采用WSAAsyncSelect模型,MFC中的CSocket类也使用了它。 WSAAsyncSelect函数自动把套接字设为非阻塞模式,并且为套接字绑定一个窗口句柄和发送哪些通原创 2013-05-04 16:02:11 · 1094 阅读 · 1 评论 -
《剑指Offer》读书笔记---面试题28:字符串的排列,(扩展:求字符串的所有组合)
题目:输入一个字符串,打印出字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。书上的解法:#include#include#include#include#includevoid Permutation( char *pStr ) ;void Permutation(原创 2013-09-19 15:56:51 · 3339 阅读 · 0 评论 -
《剑指Offer》读书笔记---面试题7:用两个队列实现栈
题目:用两个队列实现一个栈。队列的声明如下,请实现它的pop和push函数。思路:入栈动作时,如果内部两个队列都为空的话,将数据压入其中一个队列(代码中为m_queue1)。如果其中一个队列已经有数据了,则将数据压入已经有数据的那个队列。出栈动作时,先将有数据的那个队列,除了最后一个入队的数据之外的所有数据输出到另外一个空的队列,然后最后那个数据也出队。代码示例:#includ原创 2013-09-11 21:22:27 · 1457 阅读 · 0 评论 -
WinSock五种I/O模型的性能分析
原文链接:http://www.rover12421.com/2010/04/02/winsock%E4%BA%94%E7%A7%8Dio%E6%A8%A1%E5%9E%8B%E7%9A%84%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90.html重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数。当使用重叠I/O转载 2013-05-10 17:15:16 · 870 阅读 · 0 评论 -
关于《Windows核心编程 5th》“3.3.4终端服务命名空间”章节的理解
很久之前看到这一小节的时候,基本是一头雾水、半知半解的感觉,因为有太多不熟悉的概念。当时也在网上找了一些资料和博客来看,感觉帮助也不大,于是就跳过了。今天论坛的左懒童鞋突然问了我这个地方应该如何理解,于是决定再好好去看看书,验证自己的想法。书上主要原话:在正在运行终端服务的计算机中,有多个用于内核对象的命名空间。其中一个是全局命名空间,所有客户端都能访问的内核对象要放在这个命名空间原创 2013-05-10 00:34:15 · 1554 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记----可伸缩服务器系统设计实例
一个基于IOCP服务器的设计――CIOCPServer类 CIOCPServer类的总体结构:CIOCPServer类工作主要由一个监听线程_ListenThreadProc和一个或多个工作线程_WorkerThreadProc负责。 监听线程_ListenThreadProc的工作:监听线程负责初始投递几个异步的AcceptEx I/O,创建指定数目的工作线程,另外还负责原创 2013-05-08 00:00:16 · 1408 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记----IOCP与可伸缩网络程序
完成端口I/O模型I/O完成端口是应用程序使用线程池处理I/O请求的一种机制。处理多个并发异步I/O请求时,使用I/O完成端口比在I/O请求时创建线程更快更有效。 CreateIoCompletionPort函数有点复杂,需要说明一下CreateIoCompletionPort函数有两个功能。1、创建一个完成端口对象。2、将一个或者多个文件句柄(套接字句柄)关联到I/O完成原创 2013-05-06 15:34:52 · 1538 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记----重叠(Overlapped)I/O模型
重叠(Overlapped) I/O模型与介绍过的其他模型相比,重叠I/O模型提供了更好的系统性能。这个模型的基本设计思想是允许应用程序使用重叠数据结构一次投递一个或者多个异步I/O请求(即所谓的重叠I/O)。提交的I/O请求完成之后,与之关联的重叠数据中事件对象触发,应用程序便可使用WSAGetOverlappedResult函数获取重叠操作的结果。这和使用重叠结构调用ReadFile和Wr原创 2013-05-05 16:19:02 · 1278 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔记----WSAEventSelect模型
WSAEventSelect模型Winsock提供另一种有用的异步事件通知I/O模型――WSAEventSelect模型。这个模型与WSAAsyncSelect模型类似,允许应用程序在一个或者多个套接字上接收基于事件网络通知。它与WSAAsyncSelect模型类似是因为它也接收FD_XXX类型的网络事件,不过并不是依靠Windows的消息驱动机制,而是经由事件对象句柄通知。使用这个模型的原创 2013-05-05 10:41:38 · 1253 阅读 · 0 评论 -
《Windows网络与通信程序设计》读书笔试----select模型
select模型具体编程流程:1、 初始化套接字集合fdSocket,向这个集合添加监听套接字。2、 将fdSocket集合拷贝到一个每一次临时要读取的fdRead集合,然后将fdRead传递给select函数。当有事件发生 时,select函数移除集合中没有未决I/O操作的套接字句柄,然后返回。3、 比较原来fdSo原创 2013-05-04 15:33:57 · 892 阅读 · 0 评论 -
《Windows核心编程 5th》读书笔记------第3章 内核对象
何为内核对象?每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问。这个内存块是一个数据结构,其成员维护着与对象相关的信息。由于内核对象的数据结构只能由操作系统内核访问,所以应用程序不能在内在中定位这些数据结构并直接更改其内容。应用程序想要操纵这些内核对象,可以利用Windows提供的一组函数。调用一个会创建内核对象的函数后,函数会返回一个句柄(handle),它标原创 2013-03-13 00:01:11 · 781 阅读 · 0 评论 -
Windows内核对象句柄的继承小总结
对象句柄的继承 跨进程边界共享内核对象有三种常用的机制:为对象命名、复制对象句柄,还有就是使用对象句柄继承。 Windows支持“对象句柄的继承”,而不是支持对象的继承。(这里顺带总结一下,内核对象本质上是一个内存块,是操作系统内核分配,并只能由操作系统内核访问。而句柄标识了所创建的内核对象,与进程相关。句柄的值大概可以认为是进程句柄表的一个索引值,标识内核对象在进程句柄表中的原创 2012-07-23 22:20:25 · 4780 阅读 · 1 评论 -
归并排序&求逆序对数
归并排序:基本原理:与插入排序使用的“增量”方法不同,归并排序使用另外一种策略:分治法 分治策略基本思想:将原问题划分成n个规模较小而结构与原问题相似的小问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 分治模式在每一层递归上都有三个步骤;分解(Divide):将原问题分解成这一系列子问题。解决(Conquer):递归地解各子问题。若子问题足够小,则直接原创 2012-10-07 22:36:22 · 8079 阅读 · 0 评论 -
插入排序
1、插入排序基本原理:插入排序的原理与很多人打牌时,整理手中牌时的做法差不多。在开始摸牌时,我们的左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的每一张牌从右到左地进行比较。无论在什么时候,左手中的牌都是排好序的,而这些牌原先都是桌上那副牌里最顶上的一些牌(摘自《算法导论》) 时间复杂度:O原创 2012-10-07 22:08:45 · 788 阅读 · 0 评论 -
堆排序
堆:堆的性质:(二叉)堆数据结构是一种数组对象,它可以被视为一棵完全二叉树。树中每个结点与数组中存放该结点值的那个元素对应。树的每一层都是填满,最后一层可能除外(最后 一层从一个结点的左子树开始填)。表示堆的数组A是一个具有两个属性的对象:length[A]是数组中元素的个数,heap-size[A]是存放在A中的堆的元素个数。就是说,虽然A[1...length[A]]中都可以包含有效值,但原创 2012-10-07 22:56:54 · 661 阅读 · 0 评论 -
Windows下的线程终止
Windows下的线程可以通过以下4种方法来终止。1、 线程函数返回。(强烈推荐)2、 线程通过调用ExitThread函数“杀死”自己。(避免使用)3、 同一个进程或另一个进程中的线程调用TerminateThread函数(避免使用)4、 包含线程的进程终止运行(避免使用) 1)、线程函数返回(自然死亡)清理工作包括:C原创 2012-07-28 01:28:22 · 4336 阅读 · 0 评论 -
CreateThread和_beginthreadex
在《Windows核心编程 5th》一书里经常提到一个的建议,那就是:如果写的是C/C++代码,尽量不要用CreateThread来创建线程,而必须调用C/C++运行库函数_beginthreadex。其中的原因摘自书上的原话就是:”标准C/C++运行库不是为多线程应用程序而设计的。”。以全局函数和全局变量为例,在多线程环境中会问题。因为他们是多个线程访问同一个资源,例如调用函数出错后设置err原创 2012-07-28 01:24:45 · 1090 阅读 · 0 评论 -
标准I/O缓冲机制读书笔记总结和理解
缓冲标准I/O库提供缓冲的目的是尽可能减少read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I/O库最令人迷惑的也是它的缓冲。 标准I/O提供了三种类型的缓冲:(1)、全缓冲。在这种情况下,在填满标准I/O缓冲区后才进行实际I/O操作。对于驻留在磁盘上的文件通常是由标准I/O库实施全缓冲的。 (原创 2012-07-25 18:34:01 · 1803 阅读 · 0 评论 -
各种ID总结
嗯,看书的时候,自己老是记不住那种ID对应什么作用,所以~~ 用户标识 1、用户ID:口令文件登录项中的用户ID是个数值,它向系统标识各个不同的用户。系统管理员在确定一个用户的登录名的同时,确定其用户ID。用户不能更改其用户ID。通常每个用户有一个唯一的用户ID。 2、组ID:口令文件登录项中也包括用户的组ID,它是一个数值。组ID也由系原创 2012-07-19 15:36:18 · 1529 阅读 · 0 评论 -
可等待的计时器与APC调用
以前第一次看到APC,也就是异步过程调用的时候,没有搞明白这是一个什么样的机制。今天再看一次,然后结合一些简单的测试代码和搜索来的资料,大概明白了是怎么回事。 先来非常简单地描述一下这一个“可等待的计时内核对象”。大概定义如下:可等待的计时器对象是这样一种内核对象,它们会在某个指定的时间触发,或每一段时间触发一次,它们通常用来在某个时间执行一些操作。 相关的API(具体原创 2012-08-02 19:20:04 · 1689 阅读 · 1 评论 -
文件描述符、文件表项、V节点表项的一些总结
看书的时候对这三样东西把握得不太清楚,嗯,所以写篇blog来总结一下。 文件描述符(进程级别): 1)、在每个进程表中都有一个记录项,记录项中包含有一张打开文件描述符表,可将其视察为一个矢量(数组),每个描述符占用一项。与每个文件描述符相关联的是: (a)、文件描述符标志。 (b)、指向一个文件表项的指针。(不同的文件描述原创 2012-07-12 11:26:39 · 6603 阅读 · 5 评论 -
快速排序
快速排序:基本原理:快速排序也是基于分治模式的。 分治过程的三个步骤:分解:数组A[p...r]被划分成两个(可能空)子数组A[p..q-1]和A[q+1...r],使得A[p..q-1]中的每个元素都小于等于A(q),而且,小于等于A[q+1..r]中的元素。下标q也在这个划分过程中进行计算。解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1...r]排序。原创 2012-10-07 23:15:08 · 533 阅读 · 0 评论 -
基数排序
原文地址:http://www.cnblogs.com/xiaosuo/archive/2010/03/12/1654353.html 分配排序的基本思想:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。一、两种多关键码排序方法 最高位优先法(MSD法)。先按k1排序,将序列分成若干子序列,每个子序列中的记录具有相同的k1转载 2012-10-08 22:54:58 · 1128 阅读 · 0 评论 -
线性时间排序-计数排序
计数排序:基本思想:对每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以把x直接放到它在最终输出数组中的位置上。例如,如果有17个元素小于x,则x就属于第18个输出位置。 时间复杂度:O(k+n),n为输入元素个数,假设所有输入元素都不大于k。空间方面则额外用到了两个数组,一个用来统计,一个用来存放排序结果。所以也是O(n+k) ; #include原创 2012-10-07 23:20:58 · 676 阅读 · 0 评论 -
《STL源码剖析》读书笔记---第4章 序列式容器
序列式容器:array(build-in)、vector、heap(以算法形式呈现)、priority-queue、list、slist(非标准)、deque、stack(配接器)、queue(配接器)所谓序列式容器,其中的元素都可序,但是未必有序。---------------------------------------------------------------------原创 2013-03-10 00:25:23 · 1322 阅读 · 0 评论 -
《Window核心编程 5th》读书笔记----进程、作业、线程
进程一般将进程定义成一个正在运行的程序的一个实例,它由以下两部分构成(在Windows中)。1、一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方。2、一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。-----------------------------------作业Windows提供了一个作业内核对象,它允许我们将进程原创 2013-03-13 00:32:16 · 932 阅读 · 0 评论 -
《STL源码剖析》读书笔记------第3 章 迭代器概念与traits编程技法
迭代器相应型别(associated types):value_type:指迭代器所指对象的型别。difference_type:用来表示两个迭代器之间的距离,因此它也可以用来表示一个容器的最大容量。reference_type:对一个mutable iterator(允许改变所指对象之内容)进行提领操作时得到的型别。pointer_type:传回一个pointer,指向迭代器所指原创 2013-03-08 09:19:08 · 1110 阅读 · 0 评论 -
《STL源码剖析》读书笔记---第2章 空间配置器
STL空间配置的标准接口:allocator::value_typeallocator::pointerallocator::const_pointerallocator::referenceallocator::const_referenceallocator::size_typeallocator::difference_type//一个嵌套的class template.原创 2013-03-06 23:46:49 · 909 阅读 · 0 评论 -
《C Primer Plus 5th》读书笔记----存储类、链接、类型限定词
下面是C的5种存储类:1、 自动---在一个代码块内(或者在一个函数头部作为参量)声明的变量,无论有没有存储类修饰符auto,都属于自动存储类。该类具有自动存储时期,代码块作用块和空链接。如未经初始化,它的值是不固定的。(局部变量)2、寄存器---在一个代码块内(或在一个函数头部作为参量)使用存储类修饰符register声明的变量属于寄存器存储类。该类具有自动存储时期、代码块作用域原创 2013-03-05 15:16:11 · 1264 阅读 · 0 评论