自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YANG

临渊羡鱼不如退而结网

原创 了解Gtest中的事件机制

引入事件机制 举例:我们使用gtest框架测试STL中的map这个数据结构时,我们假设只测find(),size()这两个函数,如果不使用事件机制,则测试的TEST()部分如下: 我们可以看到,在每一个TEST内部都创建了一个map结构,并进行了插入操作,这样就做了很多重复的事情。其实gtest...

2017-08-05 10:46:10 2296 2

原创 22题:栈的压入、弹出顺序

题目描述输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否是栈的弹出序列。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。‘思路分析首先考虑这个问题肯...

2017-06-29 12:28:20 2147 1

原创 进程间通信:消息队列&信号量&共享内存

进程间通信之管道,点击这里: http://blog.csdn.net/qq_33951180/article/details/68959819 消息队列: 消息队列是一种进程间发送二进制数据块的机制,每个数据块都有特定的类型,接受者进程可以有不同的类型值。 信号量: 共享内存:

2017-06-21 10:24:08 1182 0

原创 二叉树的镜像

题目描述完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点定义如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...

2017-06-19 14:50:23 794 0

原创 Shell---循环结构

Shell下的循环结构是类C的,同样也有for循环、while循环,此外,Shell也有until循环。for循环 for循环的基本语法 for variable in {list} do statement1 statement2 ... donefor循环的语法意思与C...

2017-06-12 14:43:41 1148 0

原创 信号

信号的基本理解 什么是信号 提到信号,大部分人的第一反应都是红绿灯,没错,这是日常生活中的一种信号,它给了人们提示,当各种颜色的灯亮起时我们应该做什么样的处理动作。不过我们今天说的信号时Linux下的信号(signal),我们回想一种场景,当我们在Linux下打开一个终端,假设现在正有一个进程在...

2017-06-07 20:09:39 403 0

原创 多线程实现生产者与消费者模式

生产者-消费者模式的简介:在实际的软件开发过程中,我们将产生数据的模块称为生产者,处理数据的模块成为消费者。但仅有这两者还不够成为一个生产者-消费者模式,还需要有一个缓冲区(一段内存区域)作为中介,生产者产生的数据放入缓冲区,消费者从缓冲区读取数据并处理。(注:上述所说的模块是广义的,可以是类,函...

2017-06-01 10:08:07 4619 1

原创 线程的同步与互斥:条件变量&信号量

条件变量与互斥锁一样,都是一种数据变量,这两者通常搭配起来使用。 条件变量的作用: 实现线程的同步与互斥: 接口:

2017-05-31 21:40:45 2345 0

原创 线程的同步与互斥:互斥锁

什么是线程的同步与互斥? 同步:假设现有线程A和线程B,线程A需要往缓冲区写数据,线程B需要从缓冲区读数据,但他们之间存在一种制约关系,即当线程A写的时候,B不能来拿数据;B在拿数据的时候A不能往缓冲区写,也就是说,只有当A写完数据(或B取走数据),B才能来读数据(或A才能往里写数据)。这种关系就...

2017-05-29 11:13:07 8524 0

原创 重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出它的头结点。 分析及实现: 思路分析 根...

2017-05-28 10:24:26 5753 4

原创 旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小数组。例如数组{3,4,5,1,2}是数组{1,2,3,4,5}的旋转数组,该数组的最小值为1。思路解析: O(N)的算法 这种算法的思想就是遍历这个数组,由于这个数组...

2017-05-25 15:51:19 771 4

原创 cut & sort & uniq 工具合集

cut命令主要接受三个定位方法:-b , -c , -f sort工具的常用选项:-u,-r,-o,-n,-k,-t,-f uniq命令常用选项:-d,-u,-c

2017-05-04 13:35:26 938 0

原创 awk工具

awkawk是一种文本分析工具,相对于grep的查找,sed的编辑。awk和sed都可以处理文本,awk比sed的强大之处在于处理列也是比较细致的,它可以对行(记录)、列(域)进行分析。awk默认的行分隔符是换行,列分隔符是Tab或者连续的空格(列分隔符分开的每个部分称为一个域)。 awk命令行的...

2017-05-02 09:22:50 864 0

原创 sed工具

sed的基本格式: sed option ‘command’ file1 file2 … sed option -f scriptfile file1 file2 … sed的命令格式:sed /pattern/action pattern即正则表达式,action即编辑动作 ...

2017-04-28 07:45:31 1137 0

原创 基于HTTP协议实现的小型web服务器

我们先了解一下这个项目最终能达到的一个目标,然后以这个来进行项目的分析: 1、实现最基本的HTTP/1.0版本的web服务器,客户端能够使用GET、POST方法请求资源 2、服务器将客户请求的资源以html页面的形似呈现,并能够进行差错处理(如:客户请求的资源不存在时,服务器能够返回一个404...

2017-04-28 07:37:28 24297 4

原创 HTTP长连接和短连接

HTTP是工作在应用层的文本传输协议,它在底层的实现是基于TCP协议的,今天说的HTTP的长连接和短连接实质上是TCP的长连接和短连接。 TCP的长连接和短连接: TCP的连接 在客户端和服务器端之间进行数据传输时,首先需要在client和server之间建立一条通信链路,如果clie...

2017-04-04 16:54:44 1564 0

原创 匿名管道和命名管道

进程间通信(IPC)每个进程有各自不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到。所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间中拷贝到缓冲区,进程2再从缓冲区把数据读走。内核提供的这种机制就是进程间通信。 通信需要媒介,两个进程间通信的媒介...

2017-04-03 15:02:38 9409 0

原创 I/O多路复用之select

I/O多路复用:I/O多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备就绪后,它就通知该进程的应用程序,应用程序就可以马上完成响应的I/O操作,而不需要等待系统完成I/O操作,这样大大提高了效率。I/O多路复用实质上是实现了单线程来处理并发请求。 系统为我们提供了多个函数来实现多路复用...

2017-03-30 16:39:49 1041 0

原创 socket编程之实现一个简单的TCP通信

一、理解socket1、socket即为套接字,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一的标识网络通讯中的一个进程,“IP地址+TCP或UDP端口号”就为socket。 2、在TCP协议中,建立连接的两个进程(客户端和服务器)各自有一个socket来标识,则这两个socket...

2017-03-29 18:33:01 59780 1

原创 Shell 字符串截取方法

一、运算符截取  假设现在有字符串var=http://www.mmm.cn/123.html # 和 ## 号截取字符串(删左边留右边) # :${var#*string} 解释:从左边开始,删除第一个string以及左边的所有字符。var为变量名,#表示截取的运算符。 ## :...

2017-03-29 09:20:51 21411 1

原创 端口号的分类

端口:在网络技术中,端口有两层意思:一个是物理端口,即物理存在的端口,如:集线器、路由器、交换机、ADSL Modem等用于连接其他设备的端口;另一个就是逻辑端口,用于区分服务的端口,一般用于TCP/IP中的端口,其范围是0~65535,,比如用于网页浏览服务的端口是80端口,用于FTP服务的是2...

2017-03-10 20:43:16 1086 0

原创 TCP的连接建立与释放

TCP --- 传输控制协议 报头格式: (1)源端口和目的端口:与UDP类似,TCP的分用是通过端口实现的。 (2)序号:TCP是面向字节流的,在TCP连接中传送的字节流的每一个字节都是有顺序的,整个要传送的字节流的起始序号必须要在连接建立时设置。首部中的序号字段值表示本报文段的数...

2017-03-09 15:43:24 7019 0

原创 替换空格

题目:请实现一个函数,把字符串中的每个空格替换成”%20”。例如:输入”we are happy.”,则输出”we%20are%20happy.” 思路分析: 我们比较替换之前与替换之后的字符串长度,很明显,字符串长度增加了4,所以,第一点,将”we are happy.”用一个字符指针指向肯...

2017-03-07 16:55:36 1039 3

原创 TCP中的四个计时器

TCP中的四个计时器包括重传计时器、坚持计时器、保活计时器、时间等待计时器 重传计时器(Retransmission Timer): 目的:为了控制丢失的报文段或者丢弃的报文段。这段时间为对报文段的等待确认时间。创建时间:在TCP发送报文段时,会创建对次特定报文段的重传计时器。可能发生的两种情...

2017-03-06 12:52:28 6096 0

原创 Linux - 使用gdb调试多进程程序

gdb是Linux下一款调试器,常用来调试c/c++代码。对于多进程的程序,gdb是如何进行调试的呢?我们接下来一起学习:方法一:attach pid 利用该命令attach到子进程然后进行调试。为方便调试,可以sleep,这样有充分的时间进行调试。 方法二:gdb wrapper 专用于f...

2017-03-04 16:03:58 866 0

原创 Linux - 信号

一、信号的基本理解 提到信号,大部分人的第一反应都是红绿灯,没错,这就是一种信号,它给了人们提示,当各种颜色的灯亮起时我们应该做什么样的处理动作。不过我们今天说的信号时Linux下的信号(signal),我们回想一种场景,当我们在Linux下打开一个终端,假设现在正有一个进程在运行,它的工作就是...

2017-02-27 16:17:33 584 0

原创 可重入函数与线程安全的区别与联系

在了解可重入与线程安全之前,我们需要明确一点,可重入与线程安全是不同的概念。 我们以一个例子引入可重入与不可重入:假设现在要往链表中插入一结点,而对于信号的处理也是调用insert函数,在此,insert函数被不同的执行流进入,这称为重入。但insert访问一个全局链表,有可能因为重入导致错误的结...

2017-02-24 12:30:29 319 0

原创 Linux - 进程、线程、程序之间的区别与联系

一、进程 进程是一个程序的动态运行实例一个正在执行的程序能分配处理器并由处理器执行的实体内核观点:担当分配系统资源(CPU时间,内存)的实体。进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行。(进程在内存中因策略或调度需求会处于各种状态)...

2017-02-23 11:13:37 1212 0

转载 Linux环境下段错误产生的原因与调试

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与...

2017-02-20 11:56:20 831 0

原创 Linux - 如何使用gcc命令生成静态库和动态库

Linux下查看是否有静态库:ar  -tv  test.a   一、库的简述 简单的说,库(Library)是由系统提供的一组具有特定功能的函数的集合,是为提高开发效率和运行效率而设计的。从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 静态库: 静态是指...

2017-02-18 20:33:24 1160 0

原创 Linux - 进程管理task_struct

·进程概念 简单来讲,进程是程序的一个执行实例;是一个正在执行的程序。 进程与程序的关系:进程是由程序代码和代码相关联的数据集组成。 进程与程序的区别: 总得来说:进程是程序加载到内存后,操作系统或给该 ·PCB 即进程控制块(Process Control Block),是进程中的一部分,它描述...

2017-01-24 16:23:23 572 0

原创 如何编写一个makefile

一个工程中的源文件不计其数,按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为马克覅了就像一个Shell脚本一样其中也可以执行操作系统的的命令。makefile带来的好处就...

2017-01-02 11:33:11 1725 0

原创 Linux - 实现简易进度条

1.背景知识讲解 2.如何实现一个简单的进度条 开始今天的内容之前,我们先来回顾一个知识,看下面一段代码(Linux下运行程序) 对比上边的代码,似乎相差不大,但是运行结果却千差万别:A图代码运行结果---先输出“hello”,停3秒之后程序运行完毕;B图代码运行结果---执行程序后会先停3...

2017-01-01 16:11:35 1693 0

原创 Linux - sticky bit

一、粘滞位是什么? 粘滞位是Linux下文件权限的一个旗标,当对一个文件设置了粘滞位后,只有owner用户或者root用户才可以对该文件进行删除或移动,但假若不对文件设置粘滞位,任何对该文件具有写和执行权限的用户都可以移动这个文件。因此,对文件设置粘滞位从一方面来将还是对文件有安全保护的。

2016-12-30 12:47:58 334 0

原创 Linux - find命令讲解

windows是我们使用比较熟悉的一个系统,在windows下,文件是以后缀来区分类型的,而且我们也比较熟悉在该系统下怎样去查找一个文件。由于Linux不像windows那样,可以区分文件,并且关于Linux还有一个说法就是“一切皆文件”,在这样一个系统下工作,我们不可避免的要搜索一些指定类型的文...

2016-12-28 17:00:58 542 0

原创 Linux - atime,mtime,ctime以及用touch指令来进行修改

Linux下的文件或目录有三种时间: 访问时间(Atime):每当访问这个文件/目录后,Aeecss显示的时间就会更新一次。 修改时间(Mtime):当对这个文件进行修改后,Modify显示的时间就更新一次。 状态改变时间(Ctime):状态改变时间是指每次用chmod命令改变文件属性后该时间就会...

2016-12-25 11:14:00 3828 0

原创 哈夫曼树以及文件压缩的实现

从哈夫曼树到哈夫曼编码再到文件压缩,一步步讲解,一步步实现

2016-12-22 22:20:46 16342 8

原创 设计一个简单的对象池

在将内存池之前需要先回忆一个以前听过的东西----内存碎片。 一、内存碎片是什么 我们都知道当需要动态开辟内存时,系统都是在堆上开辟一块空间,尽管开辟出来内存的地址是连续的一块内存空间,但每次开辟的内存块的地址并不是连续的,这样的话当我么开辟的次数变多以后,堆上就剩余许多小块的空间导致在我们需要一...

2016-12-07 19:51:23 1361 0

原创 非比较排序---计数排序&基数排序

如果给出一组数:2, 2, 9, 5, 3, 9,怎样才能遍历一次该数组就能使其有序呢?!试试之间讲的算法,好像都不行。这里我给出另一种排序算法------非比较排序! 非比较排序包括计数排序和基数排序。 一、计数排序 算法思想: 很明显,计数排序当然就需要计数啦,这里就是对这组数组中相同的数...

2016-12-03 10:41:29 497 0

原创 排序算法---选择排序&堆排序&冒泡排序

直接选择排序、堆排序、冒泡排序及其比较 直接选择排序和堆排序都属于选择排序 ps:仍以升序为例! 一、直接选择排序 直接选择排序的思想: 选择排序就是通过n-i次关键字的比较,每次从n-i+1个记录中找出最小的关键字,将其与第i个位置的数据交换。 void SelectSort(int...

2016-12-01 14:42:16 730 0

提示
确定要删除当前文章?
取消 删除