自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 TortoiseSVN打分支、合并分支、切换分支

TortoiseSVN打分支、合并分支、切换分支 ...

2019-09-08 16:48:28 502

转载 STL初探——__default_alloc_template内存池

S_chunk_alloc() 函数负责从内存池取出空间给free-list,如果内存池内存充足,则直接拿出足够的内存块给自由链表,如果内存不够所有需求但是对一小块需求能满足,则拿出一小块内存给自由链表并返回,如果一点儿内存也没有,则进行遍历压榨,最终如果真的没有,就只能求助于第一级配置器。代码如下:template <bool __threads, int __inst>...

2019-06-08 20:51:35 253

转载 SGI STL 的内存管理

1. 好多废话 在分析完nginx的内存池之后,也想了解一下C++的内存管理,于是就很自然得想到STL。STL是一个重量级的作品,据说当时的出现,完全可以说得上是一个划时代意义的作品。泛型、数据结构和算法的分离、底耦合、高复用… 啊,废话不多说了,再说下去让人感觉像王婆卖瓜了。 啊,还忘了得加上两位STL大师的名字来聊表我的敬意了。泛型大牛Alexander Ste...

2019-06-08 17:06:52 192

转载 【操作系统】内存碎片产生原因及终极解决办法

内存碎片通常分为内部碎片和外部碎片: 1. 内部碎片是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎片,通常内部碎片难以完全避免; 2. 外部碎片是由于某些未分配的连续内存区域太小,以至于不能满足任意进程的内存分配请求,从而不能被进程利用的内存区域。 现在普遍采用的段页式内存分配方式就是将进程的内存区域分为不同的段,然后...

2019-06-08 14:42:30 3251

原创 纵横字谜的答案 (UVa232)

纵横字谜的答案Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld &amp; %lluSubmit StatusDescription  Crossword Answers  A crossword puzzle consists of a rectangular grid of black and...

2018-07-29 21:21:35 423

原创 分数化小数

1、问题描述     输入 正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b &lt;= 10^6, c&lt;=100。输入包含多组数据,结束标记为a=b=c=0。     样例输入:     1 6 4     0 0 0     样例输出:     Case 1:0.16672、解决思路      模拟整数除法,反复地进行 求商 和 求余数 ...

2018-07-28 22:31:08 199

转载 Lua和C++交互详细总结

 转自:http://cn.cocos2d-x.org/tutorial/show?id=1474一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远...

2018-07-26 11:14:13 267

原创 去除输入字符中的多余星号

1、问题描述    将标准输入流的字符中的多余'*'号过滤,并显示到标准输出。比如输入***hell*o*wor******ld***!!*###,显示*hell*o*wor*ld*!!*###。2、有限状态机模型       其中s1、s2是状态,a1、a2是状态机的转换函数,c1、c2转换的条件,表示非'*'字符还是'*'字符。3、实现源码/* * Copyrig...

2018-07-18 11:27:45 1787

转载 有限状态自动机的C语言实现

嵌入式设计模式:有限状态自动机的C语言实现状态机模式是一种行为模式,在《设计模式》这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑。近日在看了一个开源系统时,看到了一个状态机的实现,也学着写了一个,与大家分享。 首先,分析一下一个普通的...

2018-07-17 16:57:24 1778

转载 第13章 结构型模式—享元模式

1. 享元模式(Flyweight Pattern)的定义(1)运用共享技术高效地支持大量细粒度的对象  ①对象内部状态:数据不变且重复出现,这部分不会随环境变化而改变,是可以共享的。  ②对象外部状态:数据是变化的,会随环境变化而改变,是不可以共享的。  ③所谓的享元,就是把内部状态的数据分离出来共享,通过共享享元对象,可以减少对内存的占用。把外部状态分离出来,放到外部,让应用程序在使用的时候进...

2018-07-10 00:10:55 223

转载 第12章 结构型模式—外观模式

1. 外观(门面)模式(Facade Pattern)的定义(1)为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。  ①这里说的界面是指从一个组件外部来看这个组件,能够看到什么,也就是外观。如从一个类外部看这个类,那么这个类的public方法或接口就是他的外观。  ②这里所说的“接口”是指外部和内部交互的一个通道(方法),可以是类的方...

2018-07-07 22:14:19 215

转载 第11章 结构型模式—装饰模式

1. 装饰模式(Decorator Pattern)的定义(1)动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。  ①装饰模式是为对象(而不是类)添加功能的。  ②用组合方式,而不是继承方式为对象添加功能。(2)装饰模式的结构和说明   ①Component:组件对象的接口,可以给这些对象动态地添加职责。  ②ConcreteComponent:具体的组件对象,实现...

2018-07-07 21:14:33 261

转载 第9章 结构型模式—桥接模式

1. 桥接模式(Bridge Pattern)的定义(1)将抽象部分与它的实现部分分离,使它们都可以独立地变化  ①一般的“抽象”与“实现”是指父子类的继承关系。但这里,GoF所谓的“抽象”是如果引起一个类变化是多维度的因素(设为2维),就将其他变化因素抽象成一个接口,在“Abstraction类”中只留这个接口,然后通过对象组合(而不是继承)的方式去依赖这个接口。而“实现”是指在让另一个“Imp...

2018-07-06 21:17:41 203

转载 skynet 简介

写在最前面skynet是目前使用比较广泛的服务端框架,虽然目前网上资料众多,但是从自己的学习和使用经历来看,缺乏能够让自己系统了解该框架底层机制的资料,这段时间,趁着自己有时间,阅读了skynet底层的一些代码,现在将自己理解的部分总结并记录下来,以备日后使用。本文旨在捋清skynet框架的结构和主要流程,并不会涉及skynet的方方面面,一些论述,我贴上了一些源码加以论证,并在引用的源码里加入了...

2018-06-17 23:14:23 1151

转载 二叉树的最大深度和最小深度

转载:https://blog.csdn.net/xiongqiaochu/article/details/70313031二叉树的定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NUL...

2018-04-22 18:12:18 690

原创 二叉树的层次遍历

一、给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? Yes样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]解题思路:1、用队列保存遍历的结点2、创建一维vector用于保存每层的结点值3、将每个一维vect...

2018-04-22 17:54:56 451

原创 搜索二维矩阵

写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。您在真实的面试中是否遇到过这个题? Yes样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出 target = 3,返回 true思路:首先选取数组中右上角的数字。如果该...

2018-04-22 17:02:59 496

原创 在二叉树中寻找值最大的节点并返回

题目:在二叉树中寻找值最大的节点并返回。样例给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。解题思路:1、将初始最大值设置为root。 2、采用层序遍历。访问二叉树是从上到下,从左往右依次访问(FIFO)。3、每次访问一个结点,就把当前结点与原最大值结点进行比较。若当前结点的值大于原最大值结点的值,则...

2018-04-22 09:05:35 5573

转载 OSI七层与TCP/IP五层网络架构详解

转载:https://blog.csdn.net/cd520yy/article/details/12968923OSI和TCP/IP是很基础但又非常重要的网络基础知识,理解得透彻对运维工程师来说非常有帮助。今天偶又复习了一下:(1)OSI七层模型OSI中的层 功能 TCP/IP协议族应用层 文...

2018-04-19 12:52:56 163

原创 排序-堆排序

    堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] &gt;= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。算法描述    ①建堆,建...

2018-04-18 21:08:40 191

原创 排序-归并排序

    归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。算法描述把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列...

2018-04-18 12:37:40 313

原创 排序-希尔排序

    希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。    希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文...

2018-04-18 00:10:21 140

原创 排序-插入排序

    插入排序的思想:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原...

2018-04-17 23:33:53 136

原创 排序-冒泡排序

    冒泡排序基于比较的的简单排序算法。它的基本原理:通过相邻元素的两两比较,如果第一个元素比第二个元素大,则交换它们,排序这样将最大(最小)元素放到无序数据的末尾,若无数据交换,则实现数据全部有序。算法描述:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一...

2018-04-17 21:58:45 297

原创 排序-选择排序

    选择排序是一种基于比较的简单排序(不稳定)。 它的基本原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述:初始状态:无序区为R[1..n],有序区为空;第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n...

2018-04-17 21:45:53 190

转载 关于 STL 中的 map 和 hash_map

转:http://blog.jobbole.com/109058/在网上看到有关STL中hash_map的文章,以及一些其他关于STL map和hash_map的资料,总结笔记如下:1、STL的map底层是用红黑树实现的,查找时间复杂度是log(n);2、STL的hash_map底层是用hash表存储的,查询时间复杂度是O(1);3、什么时候用map,什么时候用hash_map?这个要看具体的应用...

2018-04-15 23:47:56 285

转载 C/C++ 对常见字符串库函数的实现

转载:https://blog.csdn.net/lyl_312/article/details/51419822在c中的string.h头文件中存在很多对字符串进行操作的函数,利用这些函数可以方便的对字符串进行操作。下面将对常见的字符串函数进行解释和实现。strcpy 函数原型:char* _strcpy(char* dest,char* src) 函数功能:将str所指由nullptr的字符串...

2018-04-13 16:04:24 661

转载 C/C++ memmove与memcpy的区别及实现

转载:https://www.cnblogs.com/lyl-312/p/5514988.html1.与字符串函数strcpy区别:memcpy与memmove都是对内存进行拷贝可以拷贝任何内容,而strcpy仅是对字符串进行操作。memcpy与memmove拷贝多少是通过其第三个参数进行控制而strcpy是当拷贝至'\0'停止。2.函数说明:         memcpy函数的功能是从源src所...

2018-04-13 16:01:41 292

转载 C++ 虚函数表解析

C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel  前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试...

2018-04-12 16:01:37 133

转载 C++ assert宏实现原理

转载:https://blog.csdn.net/dacxu/article/details/27313799assert(expression);若expression表达式为false,当前进程会调用abort终止运行,并且会向stderr写一条消息。这条消息根据不同的实现有所不同,但是至少会包括,assert所在的源文件的文件名,行号,及对对应的expression。另外,若在release...

2018-04-08 12:43:53 272

原创 lua逻辑运算符

        lua的逻辑运算符与传统的程序语言逻辑运算符的运算有点区别。在C语言中与、或、非的结果是布尔值,而在lua中逻辑运算的结果可以不为布尔值。下表列出了 Lua 语言中的常用逻辑运算符,设定 A 的值为 true,B 的值为 false:操作符描述实例and逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。(A and B) 为 false。or逻辑或操作符。 若 A ...

2018-03-02 22:24:17 1383

原创 协程实现并发下载

    在单线程的程序中,采取的是顺序执行方式。对于下载程序来说,单线程的效率是极其低的,原因是它只能在下载完一个文件后才可以读取该文件。当接收一个远程文件时,程序将大部分时间花费在等待数据接收上。更明确地说,将时间用在了对receive阻塞调用上。因此,如果一个程序可以同时下载所有文件的话,效率就会大大提升。当一个连接没有可用数据时,程序可用处理其它连接。    在Lua中,可用协同程序实现并发...

2018-02-25 23:59:44 1245

原创 HTTP远程下载

    实现HTTP远程下载文件,需要通过socket。 在Lua中,可以通过LuaSocket接口与远程站点建立连接,然后发送下载文件的请求,并接收文件(数据块),最后关闭连接。    示例代码如下:-- 加载LuaSocket库require "socket"-- 定义主机和下载的文件host = "www.w3.org"file = "/TR/TRC-htm132.html"-...

2018-02-25 22:19:05 751

转载 深入解析ARP欺骗攻击

深入解析ARP欺骗攻击 - 51CTO.COM http://netsecurity.51cto.com/art/201304/387383.htm

2017-10-18 11:42:38 305

转载 Linux的SOCKET编程详解

Linux的SOCKET编程详解1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(message)、共享存储区(shared

2017-09-17 16:21:12 763

转载 关于IP选项

[摘要]一般教科书都介绍四种IP选项:路由记录选项、时间戳选项、松散源路由选项和严格源路由选项但对IP选项的介绍都比较简洁,而且多是抄袭steven的Unix环境,对于使用Windows的学习比较有困难这里我用《科来》说明一下IP选项的情况[关键词] IP选项 IP包分析 网络分析 科来网络分析软件一、带IP选项的数据包的产生首先要说明的是,并非任何IP包都带有IP选项的,事实上,正好相反,正

2017-09-11 22:48:57 578

原创 分组转发算法

路由分组转发算法(1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。 (2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其它的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据包封装为MAC帧,再发送此帧);否则就是间接交付,执行(3) (3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一

2017-09-09 16:57:06 4256

原创 高质量的代码(2)

面试题12:打印1到最大的n位数题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999.解法1:解决大数常用的方法是用字符串或者数组表达大数。当字符串表达数字的时候,最直观的方法就是字符串里每个字符都是‘0’ 到 ‘9’ 之间的某个字符,用来表示数字中的一位。因为数字最大是n位的,因此我们需要一个长度为n+1的字符串(字符串中

2017-09-09 16:33:44 190

原创 高质量的代码(1)

代码的规范性:(1)清晰的书写(2)清晰的布局(3)合理的命名代码的完整性:(1)功能测试(2)边界测试(3)负面测试(性能测试、非法测试) 例如:把字符串转换成正整数时,基本的功能测试应包括零、正数和负数三种情况。“打印1到最大的n位数”,应注意大数溢出问题。 常见的错误处理方法: 优点缺点返回值和系

2017-09-08 15:53:03 303

原创 数据结构-位运算

位运算 位运算包括六种运算:与、或、异或、按位取反、左移和右移。 10.(二进制中1的个数)请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2。考虑负数情况! 代码1:int NumberOf1(int n){ int count = 0; unsigned int flag = 1

2017-08-18 21:15:46 397

空空如也

空空如也

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

TA关注的人

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