自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

如风

坚持做自己懒得做但是正确的事情,你就能得到别人想得到却得不到的东西。

  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

原创 Shell脚本学习初段--一个进度条程序

相信用过shell脚本的一定会爱上这门脚本语言,因为它实在是很好用。,Shell有⼀种执⾏命令的⽅式称为批处理(Batch),⽤户事先写⼀ 个Shell脚本(Script),其中有很多条命令,让Shell⼀次把这些命令执⾏完,⽽不必⼀条⼀条地敲命令。有时候对于调试代码有很大的帮助。作为一个shell脚本初学者,我还觉得这门语言有很少的语言规则,并且写出来会很高端大气上档次(因为很多都是

2016-08-21 21:38:52 2487

原创 Linux grep命令常用参数一览

grep1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。2.格式 grep [options]

2016-08-13 11:13:10 4705

原创 Linux下IO多路转接技术之epoll

在学习linux套接字编程的进阶阶段,写下对epoll的一些自己的见解,当然,大部分是来自网络智慧。一。什么是epoll按照man⼿册的说法:是为处理⼤批量句柄⽽作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel2.5.44),它⼏乎具备了之前所说的⼀切

2016-07-30 15:10:21 1747 1

转载 一致性哈希算法

原来对于一致性哈希是一种半知半解的状态,今天刷掘金时刚好发现发现一片特别好的一致性哈希算法文章,在此给大家分享:本文copy至http://coderroc.com/article/%E7%9F%A5%E8%AF%86%E8%AE%B0%E5%BD%95/Consistent-Hashing.html一致性Hash算法是什么?一致性哈希(Consistent Hashing

2016-07-30 13:19:04 685

原创 基于select模型的TCP服务器

之前的一篇博文是基于TCP的服务器和客户机程序,今天在这我要实现一个基于select模型的TCP服务器(仅实现了服务器)。socket套接字编程提供了很多模型来使服务器高效的接受客户端的请求,select就是其中之一。了解select模型我们先来看一下的代码:int iResult = recv(s, buffer,1024);这 是用来接收数据的,在默认的阻塞模式下的套接字里,r

2016-07-29 20:36:01 8966 1

原创 基于TCP协议的服务器/客户端程序

作为传输层的主要协议,TCP协议不仅可以支持本地的数据通信,还可以支持跨网络的进程间通信。在偌大的互联网中,我们可以通过“IP地址+端⼜号”标识互联网中唯一的一个进程。然而,“IP地址+端⼜号”就称为socket,这就是网络socket编程。在TCP协议中,建⽴连接的两个进程各⾃有⼀个socket来标识,那么这两个socket组成 的socketpair就唯⼀标识⼀个连接。socket

2016-07-26 21:21:59 9779 2

原创 平衡搜索树之AVLTree

今天我想要在这里写下个人觉得比较难的数据结构---AVL树的一些些心得。一。了解一种新的数据结构,首先要搞懂它的定义:AVL树又称为高度平衡的二叉搜索树,是1962年有俄罗斯的数学家G.M.Adel'son-Vel'skii和E.M.Landis提出来的。它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。所以严格点来说,对于一棵搜索二叉树,能达到O(logn)的只是

2016-07-23 21:21:13 1334

原创 路由表建立策略(算法)

一。路由表的一些介绍:路由(名词)数据包从源地址到⽬的地址所经过的路径,由⼀系列路由节点组成。路由(动词)某个路由节点为数据报选择投递⽅向的选路过程。路由节点⼀个具有路由能⼒的主机或路由器,它维护⼀张路由表,通过查询路由表来决定向哪个接⼜发送数据包。在Linux环境下可以通过ifconfig和route查看路由表的信息。路由表由很多路由条⽬组成,每个

2016-07-23 00:33:19 1515

原创 IP数据报的分片和组装过程

一份数据从一个主机通过以太网发送到里一个主机时,是要经过很多层路由转发的。其中过程相对比较的复杂,在这里我们要讨论的是IP在路由中转发时是以怎样的形式转发的和目的主机在接受到这写数据报时又是怎样处理的。       首先我们需要了解的是整个IP数据报的格式:IP的转发控制都是由IP数据报的头部决定的。在这里我们就不详细的讨论首部的所有字段,我们就讨论一下个分片有关的总长度字

2016-07-21 00:07:05 42976

原创 Linux-信号机制详解(二)

前面的详解(一)已经详细讨论了信号的种类,信号产生的条件和信号的阻塞信号,基本上已经对信号的处理方式有了一定的了解。今天我们继续了解信号的其他内容。四。捕捉信号之前的信号的处理中有提到过捕捉信号,就是通过调用自定义的函数处理信号信号捕捉举例:1. ⽤户程序注册了SIGQUIT信号的处理函数sighandler。2. 当前正在执⾏main函数,这时发⽣中断或异常切换到

2016-07-18 00:05:16 679 1

原创 Linux-信号机制详解(一)

之前有写过SystemV的信号量机制,现在是信号。这里的信号和前面的信号量是不同的。这里的信号是进程给操作系统或进程的某种信息,让操作系统或者其他进程做出某种反应。      信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送

2016-07-17 00:29:05 10940 1

原创 STL-空间配置器剖析

网上有很多对于STL空间配置器源码的剖析,之所以这么多人去剖析空间配置器,我觉得是真的设计的太好,而且剖析空间配置器的架构的设计对于C++学者来说是一个不错的提高能力的项目,所以加入到这个解剖大军中来。      参照了侯捷的《STL源码剖析》,原本直接看源码不懂得东西,突然间豁然开朗。再次写下自己对于STL空间配置器的一点点理解。   要了解空间配置器,有一张图是必看的:

2016-07-15 00:07:33 6291

原创 IPC之消息队列

实现linux进程通信的方式有5种:--信号(Singal)--管道(Pipe)--消息队列(Message)--信号量(Semaphore)         这些方式各有各的特点。消息队列的存在有

2016-07-13 16:30:58 809

转载 中缀表达式转换为前缀后缀最简单的方法

35,15,+,80,70,-,*,20,/               //后缀表达方式(((35+15)*(80-70))/20)   //中缀表达方式  /,*,+,35,15,-,80,70, 20             //前缀表达方式 人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16等进制不知所措一样~~!人们习惯的运算方式是中缀表

2016-07-12 09:36:33 1554 1

原创 STL-迭代器源码剖析

在接触了STL后,觉得STL就是一个为效率而生的怪物,而且令人惊讶的是它里面的很多算法和模板对于学C++的人来说是非常有价值去剖析的。       迭代器(Iterator)模式--提供一种方法,使之能够依序寻访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式。STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶合剂(iterator)将它们撮合在一

2016-07-11 21:11:19 2098

原创 System V 信号量机制

有三种 IPC我们称作XSI IPC,即消息队列、信号量以及共享存储器(共享内存),这就是我么所说的进程间通信的IPC,有了这些IPC提供给程序的通信接口,实现进程间的通信。    本文主要讨论的是信号量的机制。semget()创建一个新的信号量集,或者存取一个已经存在的信号量集:系统调用:semget();原型:int semget(key_t key,int nsems

2016-07-10 23:53:11 1076

原创 比KMP高效的Boyer-Moore字符串匹配算法

在这里我所要想说的比KMP算法高效的算法是Boyer-Moore算法。       在讲解Boyer-moore算法之前,在这里先回顾一下KMP算法。       比如说有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"。大部分情况下我们会使用KMP算法去解:                         

2016-07-07 20:15:54 3416 4

原创 二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。    思路:找出数组中的根节点,将数组分为左右子树,递归判断是否满足二叉搜索树的性质:左子树都比自己小。右子树都比自己大。如果按照后序遍历,先左后右最后根的顺序来遍历树,数组的最后一个元素肯定是自己(父节点)然后剩余的部分分成

2016-07-06 23:11:40 326

原创 Linux下FILE结构体字段详解

struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。如下所示:  

2016-07-05 15:47:18 937

原创 剑指offer面试题--类

剑指offer和网上有很多考察类的面试题,我觉得很具有代表性,在这里做一个总结:     简答题一:我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数?     答:错误的。一个类的成员函数使用const修饰,其意义是隐式的在参数中传一个const this*参数。然而,static修饰的成员函数是没有this指针的,与const是相反的。     简答

2016-07-04 22:42:48 2697

原创 atexit函数详解

对C语言有所了解的人都知道main函数是整个程序的入口,但是其实不然,在内核中可以使用链接器来设置程序的开始地方。当内核使⽤⼀个exec函数执⾏C程序时,在调⽤main函数之前先调⽤⼀个特殊的启动例程,可执⾏程序将此例程指定为程序的起始地址。启动例程从内核获取命令⾏参数和环境变量,然后为调⽤main函数做好准备。      前面我们关注的是程序开始进入时的调用函数,而atexit函数是一个特殊

2016-07-03 10:05:57 22051 2

原创 C++虚函数和虚表

一直对于C++的虚函数的概念比较模糊,今天上网查资料然后把虚拟继承这一块给搞懂了,给大家分享。   继承是C++的一大特性,继承是复用的重要手段,。通过继承一个类,继承是类型(一个类)之间的关系建模,共享父类的一些资源,但是有些数据是共享补了的,每个类都有自己要实现的东西,所以本质是不同的。    在这里我就不再赘述继承的概念的东西,相信懂一点C++的程序员都会使用继承,但是在这里强调一下

2016-07-01 15:12:39 803

原创 剑指offer之找出数组中的逆序对

在数组中的俩个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组的逆序对的总数。    看到这个问题时,我先想到的方法是遍历整个数组,扫描到一个数字,逐个比较它后面的数字大小。如果后面的数字比它小,则这两个数字就组成一个逆序对,这种方法的是假复杂度是O(N*N),显然,我们必须找到更加高效的算法。        想想其实可以使用排序来解决这个问题,每

2016-06-28 21:28:22 700

原创 找到第N个丑数

什么是丑数呢?丑数就是只包含因子2,3,5的数称作是丑数,在这里这种定义我是比较模糊的,所以上网查找了更加浅显的定义,丑数就是另一个丑数乘以2,3,5以后的结果(1除外,通常认为1是最小的丑数)。       通常,最简单的方法肯定是遍历数组,然后确定每一个数是否是丑数,这种方法是最简单并且直观的。bool IsUgly(int num){ while (num % 2 == 0)

2016-06-27 09:47:11 8631

原创 复杂单链表的复制

在这里复杂单链表指的是一个具有_sibling结点指针的单链表,这个指针可以指向单链表中的任意一个结点,这就让复制的工作难以进行,当复制_sibling指针的时候需要从链表的头节点开始经过n步才能找到,所以复杂链表的这种复制方法的时间复杂度是O(N*N)。但是一般情况下O(N*N)的时间复杂度是面试官所不能认同的算法,所以我们需要找到比这种方法快的方法。  复杂链表的结点结构:

2016-06-26 21:10:30 612

原创 数组中出现次数超过一半的数字

题目:数组中有一个数字出现超过数组长度的一半,请找出这个数字。列入输入一个长度为9的数组{1,2,3,2,2,2,5,4,2},由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。      看到题目的第一感觉就是要先把未排序的数组排序,排序的最小时间复杂度(快速排序) O(N*logN) , 加上遍历,时间复杂度为: O(N*logN+N)   第二种方法是考虑每次删除两个

2016-06-22 17:48:12 299

原创 malloc内存分配过程详解

说起malloc,但凡对C/C++有点基础的人在编写代码的时候都用过。我们调用malloc接口分配一段连续的内存空间,不使用时使用free可以释放这段内存空间。这些我们都已经比较的熟悉了。但是你知道malloc背后的调用机制吗?     C语言程序员都知道,malloc只是C语言库标准提供的一个普通函数,我们实现的malloc和库函数比起来效率要低很多,但是可以通过编写一个简单的malloc来

2016-06-15 19:33:06 25821 4

原创 数据结构之红黑树

一直觉得数据结构中最难以搞懂的结构之一就是红黑树了。所以一开始就对红黑树有一股“敬畏感”,所以在学习红黑树的时候在网上查找了很多资料。但是网上的资料在讲解时条理不清,有的只是点甚至一笔带过,树的变化也没有体现出来。自己总结了好久才把它给搞定,再此,向大家分享一下个人的思路。      首先,我们要知道红黑树的规则:  性质1. 节点是红色或黑色。  性质2. 根是黑色。

2016-06-14 19:42:48 458

原创 操作系统的常见进程调度算法

先来先服务 (FCFS,first come first served) 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又想排队了,只

2016-06-11 21:46:59 38324 5

原创 哈夫曼树实现文件压缩与解压缩

见识了360压缩的神奇后,想要实现自己的文件压缩程序,然后花了近一个星期的时间去完成文件压缩与解压缩,期间有很多坑,花了很长时间去调试它,最后把坑给填了(真心的感受到了程序员写代码时的小小粗心会把自己给坑惨)。以下是些程序时的一些坑:在windows下回车的字符是‘\r’'\n',编译器在读取字符时读取到'\r'后再读取到'\n'就会转换为回车。。。在解压缩小文件时不会出现的问题在解压

2016-06-06 21:23:14 24386 15

原创 数据结构之二叉搜索树(BinarySearchTree)

一。定义:二叉搜索树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3. 任意节点的左

2016-06-03 08:32:14 635

原创 Linux下实现一个进度条

本文的题目就是实现一个进度条,进度条的应用在软件中无处不在,拷贝一个文件需要一个进度条,加载一个文件也需要一个进度条,来标志完成与否。    那么 ,一个进度条有哪些元素呢:一个不断向右生长的容器(直观的看出当前的进度)一个数据化反映进度的百分比。一个标志(这个标志反映这个进度条是否在工作,还是卡死)在这里有一些小小的知识点:C语言中缓冲区的刷新方式是以行缓冲刷新的。也就是说,

2016-05-31 19:39:11 615

原创 linux下的进程控制块task_struct详解

背景:为了管理进程,操作系统必须对每个进程所做的事情进行清楚地描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块。在linux系统中,这就是task_struct结构,在include\linux\sched.h文件中定义。每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息,在任何时候操作系统都能

2016-05-30 23:25:40 689

原创 怎样配置Linux下的vim编辑器

vim编辑器是一个强大的文本编辑器。对于一个C/C++初学者来说,可以利用vim编写自己喜欢的代码出来。但是习惯于使用windows下的IDE,初次体验vim真的是糟透了,不同于VS的编程习惯,使用起来及其的不方便,编写代码的效率很低很低。在网上有很多网友都有分享自己的vim配置,以下就是博主根据自己的变成习惯配置的vim编辑器:操作系统环境:CentOS 6.7    (64位)  不同

2016-05-26 13:11:10 868

原创 Linux下的find指令详解

在Linux下有很多查找指令:locatewhereiswhichfind  在这些查找指令中功能最强大的当属find指令了。find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。所以在本片博客中主要讨论find命

2016-05-24 17:33:07 505

原创 Linux下C程序的链接过程

今天看到一个很有意思的小程序,它让我对Linux下C程序的编译链接有了一个全新的认识!   这个程序的就是写一个简单的输出“hello World!”:  要求:1.不使用C运行库,写一个独立于任何库的程序。(也就是说我们不能#include)。      2.不适用main函数为程序的入口(大家都知道一般使用了库的程序都是使用main函数作为程序的入口,在这里我们使用自己写的函数nomain作为

2016-05-24 15:28:48 1105

原创 Linux下的find指令详解

在Linux下有很多查找指令:locatewhereiswhichfind  在这些查找指令中功能最强大的当属find指令了。find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。所以在本片博客中主要讨论find命令。(一)find命令的格式:find 路径 -命令参数 [输出

2016-05-24 15:28:45 490

原创 各种排序算法大汇总

比较排序是比较常见的排序算法,它分为以下几个类:交换排序:冒泡排序(BubbleSort)和快速排序(QuickSort)。插入排序:直接插入排序和希尔排序(ShellSort)。选择排序:选择排序(SelectSort)和堆排序(HeapSort)。(一)交换排序:void BubbleSort(int* arry, int size){ for (int i = 0; i < size -

2016-05-24 15:28:42 522

原创 布隆过滤器(Bloom Filter)

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。       如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合

2016-05-24 15:28:39 348

原创 位图

位图算法是一种使用二进制位来表示一个数是否存在的算法。  一个字节是八位二进制,可以表示两种状态,1和0。1表示存在,0表示不存在。  四个字节是32位二进制,可以表示32种状态。  八个字节是64位二进制,可以表示64种状态。  比如这道题:  给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】   这是一道腾讯的编程题,看起来也是难难的。

2016-05-24 15:28:36 297

哈夫曼树实现文件压缩

使用小顶堆,哈夫曼树,实现一个简单的文件压缩程序

2016-06-11

银行家算法

详细的银行家算法c语言代码 int available[SIZE];//可利用资源矩阵 int claim[SIZE][SIZE];//所需资源最大量矩阵 int allocation[SIZE][SIZE];//已分配资源矩阵 int need[SIZE][SIZE];//需要资源矩阵 int request[SIZE][SIZE] = { 0 };//记录某个进程申请各个资源类中的资源实例的数量 int finish[SIZE] = { 0 };//工作变量,用于判断进程是否已经执行过,初始状态全部为0,即未执行 int p[SIZE];//记录序列执行顺序 int ava;//记录系统有多少个资源类 int process;//记录进程数量 int r;//记录当前要申请资源的进程的序号

2016-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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