自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 收藏
  • 关注

原创 【剖析tinyhttpd源码】

说明:剖析这个源码的时候。我处理分析它的流程之外,自己还模拟实现了以下,具体的代码在github上。这里我把关于这个源代码分析的流程图贴出来,具体的过程我不予赘述。对tinyhttpd整个实现的程序逻辑流程图分析对CGI处理的流程分析:

2017-08-20 07:42:45 490

原创 【基于负载均衡的云盘】

说明:关于这个项目的重点代码在github上。这里我只把我分析的流程图贴出来。项目框架流程具体的实现流程分析

2017-08-20 07:35:35 1069 2

原创 【Linux】---文件描述符和文件指针

文件描述符一、文件描述符 - 1、概念: 在linux下一切皆文件爱你的思想,文件被分为普通文件,目录文件,链接文件和设备文件。 文件描述符是内核为了高效管理已被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件,所有执行I/O操作的系统调用都要通过文件描述符。 程序刚启动的时候,0,1,2分别表示标准输入,标准输出,标准错误。因此此时当我们打开一个文件的时候,他的文件描述符是3

2017-05-08 11:14:58 719

原创 【数据结构】--几道栈和队列面试题

用两个栈实现一个队列1、思路分析 拿到这道题,会有以下几种思路: 思路一:入队时,将所有的元素压入到s1中出队时,将s1中的所有元素倒入到s2中,然后让s2中栈顶的元素出栈,然后将s2中所有的元素倒入到s1中问题所在:我们不难发现,在这种解法中,要进行来回倒栈,时间复杂度就会比较大,做起来也比较麻烦 思路二: 说明:是对第一种的优化我们不难发现,其实在进行倒栈的时候,没必要进行最后一个元

2017-05-05 01:11:30 1304

原创 【数据结构】---二叉树有关的面试题

重建二叉树1、说明: 知道一棵树的前序序列和中序序列,进行重建这棵二叉树2、思路分析 A:我们知道前序的遍历顺序是:根–左–右 中序的遍历顺序是左–根–右 因此在给定的前序序列中第一个数就是根,给定的中序序列中,中间就是根,左右是它的左右子树。我来用图进行说明下: B:我们由图可以知道,经过第一轮的寻找后接下来的就利用递归就可实现了3

2017-04-28 22:43:36 426

原创 【linux】--task_struct

task_struct结构:什么是task_struct里面包含的内容标识符 : 描述本进程的唯一标识符,用来区别其他进程。 状态 : 任务状态,退出代码,退出信号等。 优先级 : 相对于其他进程的优先级。 程序计数器: 程序中即将被执行的下一条指令的地址。 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针 上下⽂数据: 进程执行时处理器的寄存器中的数据

2017-04-13 17:34:37 564

原创 【linux】--粘滞位

粘滞位1、由来 防止任意一个普通用户都能够删除系统服务运行中使用的临时文件设置了粘滞位之后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。 注意:粘滞位权限只能针对目录设置,对于文件无效。 设置了粘滞位权限的目录,使用ls命令查看其属性时,其他用户权限处的“x”将变为“t”。 2、什么是粘滞位 粘滞位(Sticky bit) 如果用户

2017-03-29 22:36:58 338

原创 【linux】--find命令

find命令1、功能:find是个使用频率比较高的命令。常常用它在系统特定目录下,查找具有某种特征的文件。 2、find命令的格式:find [-path……] -options [-print -exec -ok] path:要查找的目录路径。 ~ 表示$HOME目录 . 表示当前目录 / 表示根目录 print:表示将结果输出到标准输出。 exec:对匹配的文件

2017-03-29 20:46:18 381

原创 【linux】--Linux文件的三个时间点(access time,modify time,change time)

access time说明:表示文件最后一次访问的时间(仅限于访问) modify time说明:表示最后一次修改文件的内容的时间 change time表示最后一次对文件属性修改的时间,包括权限,大小,属性等等。修改前: 修改后: 总结 1)当仅读取或访问文件时,access time 改变,而modify time ,change time 不会改变。 2)当修改文

2017-03-20 21:40:08 476

原创 【linux】--目录与权限

进入一个目录需要什么权限先创建一个目录file我们可以看到当我们去掉可执行权限时,访问就受限了结论:进入一个目录需要可执行权限显示目录中的内容需要什么权限当我们去掉可读权限时,显示目录中的内容受限结论:显示目录中的内容需要可读权限 创建一个目录需要什么权限结论:当我们要创建一个目录时,需要写权限

2017-03-20 21:25:07 321

原创 【linux】--shell和linux权限管理

Shell一、shell的由来 如果操作系统直接和用户进行沟通的话,在安全性和使用难度上都会增加很大的难度级,因此我们在他俩之间增加一个媒介–shell。二、定义 包括在命令行linux下的解释器 包含: 1)将使用者的命令翻译给核心处理 2)核心将处理的结果翻译给使用者三、性质 linux下操作系统和用户之间的桥梁四、作用 1)传递的作用 2)某种意义上对操作系统的保护五

2017-03-20 20:40:10 358

原创 【linux】--初识Linux

背景知识1、计算机 狭义:有输入经过计算输出 广义:宽泛的概念,一些产品2、计算机的分层结构 用户 图形化界面(windows)/命令行界面(linux) 操作系统 驱动 硬件操作系统通过数据+驱动来和硬件进行交流3、冯诺依曼体系结构: 注意: 1)这里的存储器就是内存 2)cpu读取的数据都是从内存中进行读取的,当处理完数据的时候还是要先写回内存,最后才从内存输出到

2017-03-20 19:02:01 647 1

原创 【数据结构】:图

图1、定义是一种非线性结构,由顶点的集合和顶点间的关系的集合组成的一种数据结构。 Graph = (V,E); V = {x|x是顶点的集合}; E = {<x,y> |(x,y属于V)};2、图的分类有向图:顶点之间单向指引就是有向图无向图:顶点之间可以互相指引就是无向图 3、一些基本概念 1)完全图:在由n个顶点组成的无向图中,若有n(n-1)/2条边,则就是完全无向图 2)权重

2017-03-20 11:29:11 540

原创 【数据结构】:由小米的一道面试题入手并查集

小米的面试题1、题目: 假如已知有n个人和m对好友关系(存于数字r),如果两人是直接或间接好友(好友的好友的好友….),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。 例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1,2,3,属于一个朋友圈,4,5属于另一个朋友圈。结果为2个朋友圈。2、怎么

2017-03-09 19:45:06 738

原创 【数据结构】:排序--归并排序

归并排序1、思想: 归并排序是类似于快排的一种排序,采用分治的思想,将原来的序列进行划分,划分到各自的区间大小为1(注意:如果是一个奇数大小的序列,那么要将其中一个多划分一次),然后将划分的子区间进行有序合并,最终达到完全有序的序列。2、具体如何实现: 3、代码实现:#include<iostream>#include<assert.h>using namespace std; voi

2017-03-09 18:40:26 563

原创 【数据结构】非比较排序--计数排序和基数排序

非比较排序1、思想 不需要进行元素之间的比较,交换,在线性的时间内完成排序。2、分类 1)计数排序 2)基数排序3、优缺点 要求的空间比较多,是典型的以空间换时间的一种做法计数排序1、原理 2、代码实现#include<iostream>using namespace std; void CountSort(int* a,int n){ //1、首先确定要开一个多大的

2017-03-07 15:36:08 1145

原创 【数据结构】---B树,B+树,B*树及Mysql的两种搜索引擎

一、B树1、B树的定义 是一种多路搜索树2、B树的性质 一颗M阶(M>2)的B树,是一颗平衡的M路平衡搜索树,可以是空树或者满足以下性质: 1)根节点至少有两个孩子 2)每个非根节点有[M/2-1,M-1]个关键字 3)每个非根节点有[M/2,M]个孩子 4)key[i],key[i+1]孩子的值介于key[i]和key[i+1]之间 5)所有的叶子节点都在同一层3、B树如何实现

2017-03-02 17:32:59 1150

原创 【数据结构】:排序--交换排序

交换排序1、基本思想 思想的核心是“交换”,是指借助序列中元素之间的相互交换进行排序的方法。2、种类 冒泡排序快速排序冒泡排序1、基本思想 抓住两个点:趟数和次数 对于冒泡排序,一个元素要经过多少趟才能冒出头,其他的元素要经过同样的形式多少次。2、代码实现 基本实现void BubbleSort(int*a, size_t sz) { int i =

2017-02-28 22:48:48 442

原创 【数据结构】:排序--选择排序

选择排序1、基本思想 该方法的核心是“选择”,每次在要排序的一组数中先找出最大的(或者最小的)一个数,然后将它和序列中最后一个数(或者第一个数) 进行交换,剩下的数依次进行。2、分类 选择排序堆排序选择排序1、基本思想 这是最基本的选择排序。思想就遵循选择排序的基本思想2、代码实现(基本实现:)void SelectSort(int*a,int n){ int i

2017-02-28 20:31:07 319

原创 【数据结构】:排序--插入排序

插入排序:基本思想: 可以这样理解:将无序的区间插入到有序的区间里分类: 1)直接插入排序 2)希尔排序 3)折半插入排序1、直接插入排序:基本思想: 将第i个记录插入到第i-1个序列中,将第i个数对应的关键字k与第i-1前面排好序的数进行比较,(我们这里以降序为例)如果k是比前面的数都小的,那么直接进行插入,否则在第i-1个数中进行寻找合适的位置,找到之后再进行插入。图示: 代

2017-02-27 17:10:39 388

原创 【数据结构】:哈希的扩展---布隆过滤器

什么是布隆过滤器:由来: 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。我们能想到的数据结构就有链表,树,哈希表等等,但是随着集合中元素不断的增加,哈希表也很难进行存储这样的数值,并且哈希有一个问题就是会出现哈希冲突,那么这个时候就很难进行元素的判断,所以这个时候我们就引入了布隆过滤器。原理: 当一个元素被加入集合时,通过 K 个 Hash 函数将这

2017-02-27 15:31:49 490

原创 数据结构::由一道面试题进入位图的世界

我们先来看一道腾讯的面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中

2017-02-23 20:04:24 855

原创 数据结构::一些经典的大数据题

前言:1、说明:一般解决大数据问题有两个思路:1)先将与这道题相关的所有的数据结构进行使用一遍,如果有合适的就直接进行使用2)如果不能直接使用,一般就要进行哈希切分,然后再使用合适的数据结构进行问题的解决2、在这里我先来介绍一种常用于大数据问题的方法:哈希切分1)先估算出要切分的大小2)然后使用哈希的除留余数法进行各个数据的映射经典题:1、给

2017-02-22 17:41:17 5461

原创 数据结构::关于哈希表

学习完二叉搜索树后,我们来学习一种新的结构,哈希表【前言】:二叉搜索树具有lgn的搜索时间复杂度,但是是建立在数据有足够的随机性哈希表是也是具有对数时间复杂度的,但是它是以统计为基础的,并不在乎输入数据的随机性【哈希表】:1、定义:*HashTable-散列表/哈希表,是根据关键字(key)而直接访问在内存存储位置的数据结构。*它通过一个关键值的函数将所

2017-02-21 17:16:14 749

原创 数据结构::关于STL中map,set,muliset,multimap要说的

前言:1、对于关联式容器,在插入和删除的时候是不需要内存拷贝可内存移动的,所有的元素都是用节点的方式进行存取,所以在这里插入和删除都是指针的移动,而不会发生内存移动,因此在进行插入操作的时候是不会发生迭代器失效的问题的。相对于vector来说,每一次删除和插入,指针都有可能失效,调用push_back在尾部插入也是如此。因为为了保证内部数据的连续存放,iterator指向的

2017-02-20 17:13:31 1206

原创 数据结构::STL库里map和set的用法简介

前言:【pair的简介】:1、它是一种模板类型的结构体,定义在头文件#includetemplate2、有两个成员是first,second3、模板参数可以是任何类型的【STL简单提要】:1、分为序列式容器和关联式容器1)序列式容器就是里面操作的数据无关联,比如:vector,它的操作push,pop2)关联式容器就是里面操作的数据有关联,比如:set,map,

2017-02-16 10:37:46 695

原创 数据结构::浅析红黑树

1、概念:    红黑树是一棵二叉搜索树,它增加一个标志位来进行红黑颜色的表示。通过任何一条从根到叶子节点路径上的颜色来进行约束,红黑树保证最长路径是最短路径的两倍。2、性质:   1)每个节点不是红色的就是黑色的   2)根节点是黑色的   3)红色节点是不连续的   4)从根节点到每一条叶子节点的简单路径中,黑色节点的个数是相等的。   5)每个叶子节点是黑色的

2017-02-15 11:03:20 770

原创 c::求数组中的异数~

函数说明:1)一个数组中有一个数出现了一次,其余的数字出现了两次。思路分析: A: 首先可能会想到的办法是:再建一个数组,进行数组的遍历,遇到相同的数,就放到新的数组中,最终剩下的就是异数。 B:但是上面的这种办法会有开空间的开销,所以我们想到另外一种办法:利用异或,我们知道异或就是相同的数异或为零,针对此题,最终异或下来的数就是异数。#includeint main(){

2017-02-04 17:41:05 510

原创 c::在一个字符串中查找第一个只出现一次的字符

拿到这道题,我们首先想到的做法是:设置一个计数器,从字符串的第一个字符开始进行遍历,遇到字符就开始让计数器自增,但是我们如何处理不同的字符到底被计数了所少次呢,这时候就比较棘手,那么我们就来用下面我介绍的这种方法来进行解决。思路分析:1)我们知道字符的大小不会超过256,所以我们先设置一个大小为256的数组2)我们开始进行字符串的遍历,将每一个字符作为数组的下标进行自增,(其实原理就是

2017-02-03 13:51:38 1012

原创 COM组件:完成任意进制到任意进制的转换

1、实现说明:我先是将任意进制转换成十进制,然后将十进制转换成任意进制2、代码实现:#ifndef __HEXCONVERSION_H__#define __HEXCONVERSION_H__#include#includeusing std::string;//数据//2R0,1 表示2进制的1//3R0,1,2 表示3进制12//4R0,1,2,3

2017-02-02 11:29:17 275

原创 操作系统::银行家算法

一、银行家算法二、用代码实现//.h文件#ifndef _SYS_H_#define _SYS_H_#define ERROR -1#define SUCCESS 0int init(int n_SRC,int m_PRO);void SetVal(int *availiable,int **max,int **allocation);int LegitimacyC

2017-02-02 11:08:27 1614

原创 c::如何左旋一个字符串中的k个字符~

函数说明:1.实现一个函数,可以左旋字符串中的k个字符。比如:AABCD左旋一个字符得到ABCDA            AABCD左旋两个字符得到BCDAA实现方法:1)方法一:      说明:将要左旋的字符先存放在一个临时变量中,然后将后面的字符向前挪动,最后将放入到临时变量中的字符放入到挪动后最后空出来的位置。      代码实现:#include

2017-02-01 22:37:13 337

原创 数据结构::浅析平衡二叉树

【为什么我们要引入平衡二叉树?】在学习完搜索二叉树后,我们知道搜索二叉树退化了之后,它的样子和单链表很像(如下图),在这种情况下,我们如果进行搜索的话,它的时间复杂度就大大降低了,此时的时间复杂度是O(N)。因此我们引入了平衡二叉树,它解决了搜索二叉树效率低的缺点【平衡二叉树(AVL树)】:1、概念:(首先它是搜索二叉树)要么是空树,要么是具有以下性质的二叉树:1)左右

2017-01-24 22:21:13 885

原创 数据结构::搜索二叉树

【概念及性质】:    它要么是一颗空树,要么是具有以下性质的一颗树:    1)每个节点都有一个作为搜索依据的关键码(key),并且每个关键码都不相同    2)左子树上的所有节点的关键码都小于根节点的关键码    3)右子树上的所有节点的关键码都大于根节点的关键码    4)左右子树都是搜索二叉树【如何实现一些接口】:(由于它亦是一个二叉树,所以一些拷贝构造,析构等

2017-01-13 13:03:04 731

原创 C++::浅拷贝,深拷贝,引用计数的拷贝,写时拷贝

【什么情况下会用到c++中的拷贝构造函数】: 1)用已经存在的同类的对象去构造出另一个新的对象  2)当函数的形参是类的对象时,这时调用此函数,使用的是值的拷贝,也会调用拷贝构造函数  3)当函数的返回值是类的对象时,这时当函数调用完后,会将函数的对象拷贝构造出一个临时的对象并传给函数的返回处【浅拷贝】:(位拷贝(值拷贝))1、概念:所谓的浅拷贝就是当在进行对象的复制时

2017-01-04 21:47:10 2761 1

原创 C::如何实现翻转一个字符串

1、首先我们先要明白:什么叫翻转一个字符串?我举个例子:比如给定一个字符串“love you”,经翻转后就成为了“ouy evol”.2、接下来怎么解决:(如何进行翻转)1)我们首先定义两个指针:一个指向字符串的首地址*left,一个指向字符串尾部*right2)让left向后走,让right向前走,在走的过程中,这两个指针指向的内容要进行交换,最终两个指针会相遇,相遇的时候就停止

2017-01-04 14:07:13 655

原创 数据结构::如何实现哈夫曼树

【哈夫曼树的定义】:    哈夫曼树又称为最优二叉树,它是加权路径最短的二叉树。    不同于普通的二叉树,它的每个节点都有相应的权值,当我们构建的时候最终离根节点远的节点权重小,反之就比较大。【哈夫曼树的实现】:1、利用的核心思想:贪心算法     贪心算法:是指在问题进行求解的时候,总是做出当前看起来最好的选择。即就是说贪心算法做出不是整体的最优解,而是某种

2017-01-01 20:13:23 4211

原创 c::用字符串代替空格f

1、题目要求:请实现一个函数,把字符数组中的每个空格替换成“%20”。2、分析:1)想法一:我们可以再创建一个数组,当遇到空格的时候,就将所要替换的字符串一个一个放进去,这种方法当然可行,但是效率低又造成空间的浪费,所以我们不采取这种方法。2)想法二:从前往后:在原基础上进行替换(空间是足够的),如果从前往后遇到空格就进行替换,必然后对原来的字符造成覆盖,不可以实现3)想法三:

2016-12-31 17:20:45 672

原创 数据结构::堆及堆的应用~

【堆】:1.概念:  堆是一种特殊的树形结构,堆的把每一个节点都有一个值,我们通常所说的堆这种数据结构,指的就是二叉堆。    其实它可以被看做一个完全二叉树。  它的每个节点的子树又可以被看做是堆。2.分类:   堆可以分为最大堆和最小堆:   最大堆:每个父节点都大于孩子节点   最小堆:每个父节点都小于孩子节点3.关于堆的实现:  1)如何建堆

2016-12-31 13:47:35 7905

原创 c::你会翻转一个数的二进制位吗?

1、题目说明:unsigned int  reverse_bit(unsigned int value);这个函数的返回 值value的二进制位模式从左到右翻转后的值。在32位机器上25这个值包含下列各位:00000000000000000000000000011001翻转后:(2550136832)10011000000000000000000000000000   

2016-12-29 09:41:20 777

空空如也

空空如也

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

TA关注的人

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