自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 C++ 智能指针

在 c 和 c++ 中,通过访问指针对象存储的地址,可以实现对内存的直接操作,但在实际工程中,由于复杂情况下意料外的程序跳转,程序很可能出现内存泄漏。int* p = new int(1);//若干代码 if (p){ return } //若干代码 delete p;因此我们引入「智能指针」智能指针的历史智能指针是 RAII(Resource A...

2018-08-26 01:06:33 193

原创 链表面试题

1.从尾到头打印单链表 //O(N^2)void PrintTailToHead(SListNode* head){ SListNode* end = NULL; while (end != head) { SListNode* cur = head; while (cur->_next != end) { ...

2018-08-26 00:48:47 213

原创 Web版简易加法计算

HTTPHTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器。通常,由HTTP客户端发起一个请求,建立一个到服务器指...

2018-08-22 22:57:11 1604

原创 webbench--网站压力测试工具

WebBench的下载安装下载 命令:wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz解压缩进入webbench目录文件 命令:cd webbench安装 命令1:make 命令2:make install运行 webbench -c 10 -t 20 http://ww...

2018-07-15 15:46:18 319

原创 文件压缩

过程统计文件中字符出现的次数,利用数据结构中的堆建造Huffman树,字符出现次数多的编码短,出现次数少的编码长;根据建造好的Huffman树形成编码,以对文件进行压缩;将文件中出现的字符以及他们出现的次数写入配置文件,以便后续的解压缩;根据配置文件读取相关信息,重建Huffman树,对压缩后的文件进行译码。首先观察解压的文件和原文件是否相同,再通过Beyond Compare 4软...

2018-07-15 15:35:21 634

原创 排序算法- 归并算法

归并排序:(时间复杂度O(N*lg(N)))思想:把数组划分为两段区间,假设两段区间都有序,则合并的区间也有序。 步骤:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两个指针,最初位置分别为两个已经排序序列的起始位置 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 重复步骤3直到某一指针达到序列尾代码: ...

2018-03-22 18:17:12 259

原创 排序算法-快速排序

快速排序:(时间复杂度O(N^2))方法一:左右指针法(递归,划分为子问题) 注:end的起始位置就是key的位置 步骤: 1.从数列中挑出一个元素,key 2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 3.递归地(re...

2018-03-21 21:33:15 228

原创 排序算法-冒泡排序

冒泡排序:(时间复杂度O(N^2))它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序要控制的是最后终止的位置 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开...

2018-03-21 21:22:42 169

原创 排序算法-堆排序

堆排序:(时间复杂度O(N*lg(N)))借助二叉树的思想,将数据看作为静态二叉树(用来表示完全二叉树) 排成升序的话,建大堆(根节点大于等于孩子) 开始排序时要保证每个根节点的左右子树都为大堆,才能进行向下调整算法 1.找第一个非叶子结点(最后一个结点的父亲),对它进行向下调整算法(如果该节点比左右孩子大,则这个就是大堆,否则与大的那个孩子进行交换) 2.调整完成之后,将根...

2018-03-21 21:20:41 176

原创 排序算法-选择排序

选择排序:(时间复杂度O(N^2))首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。选出数组中最小的数的下标 选出一个最小的和一个最大的(下标),依次放在左边和右边,为begin和end,然后begin++,end–之后,在begin和end区间再去选择两个数,依次放左边和右边…...

2018-03-21 21:17:29 179

原创 排序算法-希尔排序

希尔排序:(时间复杂度O(N^2),平均情况下O(N^1.3 ))有两个阶段 1.预排序 — — 接近于有序 2.直接插入排序 定义一个gap,对数据进行分组,间距为gap的为一组。对这几组数据按分组进行排序(组内插入排序) gap越小,越接近于有序(数组越大gap越大,数组越小,gap越小),gap为1时为有序。例如:10000 3000 1000 300 100 30 10...

2018-03-21 21:15:38 210

原创 排序算法-插入排序

插入排序:(时间复杂度O(N^2)) //是所有N^2排序中最好的它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 一个数组,未排序,那么我们将第一个数字看作一个...

2018-03-21 21:12:47 839

原创 UDP协议与TCP协议

UDP用户数据报协议特点:UDP是无连接的 UDP使用尽最大努力交付,即不保证可靠交付(不可靠) UDP是面向报文的UDP没有拥塞控制(实时应用如IP电话、实时视频会议,要求主机以恒定的速率发送数据,并允许发生拥塞时丢失一些数据)UDP支持一对一、一对多、多对一的交互通信首部开销小(UDP8字节,TCP20字节)首部格式: 1.源端口 源端口号。在...

2018-03-21 21:03:02 481

原创 OSI七层网络模型和TCP/IP四层概念模型

OSI七层网络模型 <1> 应用层 OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。<2> 表示层 表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转...

2018-03-21 20:54:16 504

原创 ARP脚本

什么是ARP?地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。ARP脚本 我们先在...

2018-03-05 20:09:05 228

原创 Linux下重要命令的作用

du命令1.命令格式:du [选项][文件]2.命令功能:显示每个文件和目录的磁盘使用空间。3.命令参数:-a或-all 显示目录中个别文件的大小。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文 件的总和。 -k或--kilobytes 以KB(1024bytes)为单位输出

2017-11-07 17:01:15 581

原创 为什么模板不支持分离编译

什么是模版的分离编译?如图所示 我们先来简单的分析一下,编译器报的这种错误属于链接性错误,也就是当程序预处理、编译、汇编、链接,在链接时出现了错误。而一般出现链接错误,通常是因为,声明了一个函数,但是没有写实现体.因此,当程序在链接时,从符号表中只找到了函数名,找不到具体函数实现的地址,因此编译器会报出这样的错误!为什么当模板在分离编译时会报出这样的错误呢?我们知道模板需要两次编...

2017-09-26 14:36:39 333

原创 端口分类调研

一共又多少有效端口?本文所述端口都是逻辑意义上的端口,是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。 端口是如何分类的?一.按端口号分布划分知名端口(Well-Known Ports) :知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务...

2017-07-29 19:18:57 354

原创 调研tcp定时器

一.重传计时器:重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生两种情况:若在计时器超时之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位。重传时间=2*RTT;RTT的值应该动态计算。常用的公式是:RTT=previous RTT*i +...

2017-07-29 18:13:08 209

原创 URG和PSH

什么是URG?有什么特点?如何使用?URG(紧急指针有效标志位)它使一端可以告诉另一端有些具有某种方式的紧急数据已经放置在普通的数据流中。另一端被通知这个紧急数据已被放置在普通数据流。特点: 1.在紧急数据后面的数据为普通数据,需要按序缓存 2.窗口为0也可以发送紧急数据 3.紧急数据都处理完成后,tcp就告诉进程恢复到正常操作中,由接收方决定如何处理。使...

2017-07-29 17:52:19 524

原创 NAT技术与代理服务器调研

什么是NAT技术?随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。事实上,除了中国教育和科研计算机网(CERNET)外,一般用户几乎申请不到整段的C类IP地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请IP地址时,所分配的地址也不过只有几个或十几个IP地址。显然,这样少的IP地址根本无法满足网络用户的需求,于是也就产生了NAT技术。 ...

2017-07-29 17:30:50 556

原创 对比线程安全和可重入函数

什么是线程安全,如何避免?如果你的程序所在的进程中有多个线程在同时运行,而这些线程可能同时运行一段代码或同时访问一个对象,如果每次运行完这段代码或访问完这个对象之后,所得到的结果和单线程运行的结果一样,而其他变量的值也和预期的保持一致,那么就认为是线程安全的。也就是说当多个线程同时运行同一段代码,不会造成资源的冲突,不会产生错误的结果就是线程安全的。避免1.不保护共享变量的函数采用...

2017-07-29 16:53:32 324

原创 C++:指针、引用和CONST

什么是引用引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名;什么是const引用const引用是指向const的引用,其实这样说也不恰当,和const指针一样,const引用可以与常量绑定,也可以与变量绑定,只是不能通过这个const引用来改变绑定对象的值。对const的引用,常简称为”常量引用”...

2017-07-29 16:23:34 394

原创 解析C++中函数重载的实现原理

什么是函数重载?函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。剖析C++是如何实现重载的?几个同名的重载函数仍然是不同的函数,它们是如何区分的呢?我们自然想到函数接口的两个要素: 参数与返回值。如果同名函数的参数不...

2017-07-29 15:54:33 391

原创 TCP的握手与挥手

TCP通讯时序图 三次握手在这个过程中,客户端和服务器分别给对方发了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为“三方握手(three-way-handshake)”。第一次握手:客户端将SYN设置为1,表示要建立一个新的连接,并随机差生一个序列值seq=M,并将该数据包发给服务器客户端进入FIN_SEND状态。第...

2017-07-29 15:26:11 329

原创 CRC校验

什么是CRC校验?CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。校验原则若设码字长度为N,信息字段为K位,校验字段为R位...

2017-07-29 15:01:43 408

原创 管道

什么是管道?在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为:限制管道的大小。实际上,管道是一个固定大小的缓冲区。代码#include<stdio.h> #include<unistd.h> #include<errno.h> #inc...

2017-06-17 20:42:04 281

原创 共享内存

什么是共享内存?共享内存顾名思义就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以...

2017-06-17 20:21:55 5708 1

原创 线程

什么是线程?“线程”有时候被称为轻量级进程,是程序执行流的最小单元,一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程...

2017-06-17 20:11:30 297

原创 线程死锁

什么是死锁?一般情况下,如果同一个线程先后两次调⽤lock,在第二次调用时,由于锁已经被占⽤,该线程会挂起等待别的线程释放锁,然⽽锁正是被⾃⼰占⽤着的,该线程又被挂起⽽没有机会释放锁, 因此就永远处于挂起等待状态了,这叫做死锁(Deadlock)。另⼀种典型的死锁情形是这样:线程A获得了锁1,线程B获得了锁2,这时线程A调⽤用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,⽽这时线...

2017-06-17 19:36:22 523

原创 task_struct结构注释

task_struct结构注释   ==========================   long state 任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。   long counter 任务运行时间计数(递减)(滴答数),运行时间片。   long priority 运行优先数。任务开始运行时counter = priority,越大运行越长。   long

2017-04-12 18:19:01 337

原创 linux下进度条

首先我们vim写代码 代码如下: 然后我们编译一下: 上图就是我们进度条是显示效果了。

2017-04-07 13:44:24 337

原创 linux中粘滞位及find的使用

什么是粘滞位?粘滞位(Stickybit),或粘着位,是Unix文件系统权限的一个旗标。最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。 linux下find命令的使用 ...

2017-03-29 14:20:20 299

原创 Linux下文件权限及三个时间:Access,Modify,Change

在网络操作系统中,出于安全性的考虑,需要给每个文件和目录加上访问权限,严格地规定每个用户的权限。同时每用户可以为自己的文件赋予适当的权限,以保证其他人不能修改和访问。访问权限规定三种不同类型的用户。文件属主(Owner):文件的所有者,称为属主。同组用户(Group):文件属组的同组用户。其他用户(Others):可以访问文件的其他用户。r(读):允许读取文件内容或者列目录。w(写):允

2017-03-29 12:37:15 718

原创 字符串替换空格

字符串替换空格: 请实现一个函数,把字符数组中的每个空格替换成“%20”。 例如输入“we are happy.”,则输出“we%20are%20happy.”。#include <stdio.h>#include <assert.h>#include <windows.h>voidmy_replace(char *arr, int cap){ assert(arr);

2016-11-04 19:49:00 289

原创 逆序打印字符串

有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”. 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。#include &lt;stdio.h&gt;#include &lt;assert.h&gt;#include &lt;windows.h&gt;voidstr_switch(char *sta...

2016-11-04 19:45:36 436

原创 预处理

一.熟悉预处理标识符: LINE //文件当前行号 FILE //进行编译的源文件 DATE //文件被编译的日期 TIME //文件被编译的时间 # //将其后面的宏参数进行字符串化操作 ## //把位于它两边的符号连接成一个符号二.宏和函数的区别 1)、代码长度:宏是完全替换,插入到程序里使得代码变长;函数代码是只出现在一个地方,使用时则去那里调用。 ...

2016-11-04 19:41:44 358

空空如也

空空如也

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

TA关注的人

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