自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 B树和B+树

原文章地址:http://blog.csdn.net/v_JULY_v/article/details/6530142/作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。出处:http:

2016-04-30 11:07:13 857

原创 Linux下如何检测内存泄漏

Valgrind通常用来成分析程序性能及程序中的内存泄露错误一 Valgrind工具集简绍Valgrind包含下列工具:    1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。    2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。    3、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。

2016-04-30 01:17:45 2587

原创 内联函数和宏定义的区别

使用宏和内联函数都可以节省在函数调用方面所带来的时间和空间开销。二者都采用了空间换时间的方式,在其调用处进行展开:(1)  在预编译时期,宏定义在调用处执行字符串的原样替换。在编译时期,内联函数在调用处展开,同时进行参数类型检查。(2)  内联函数首先是函数,可以像调用普通函数一样调用内联函数。而宏定义往往需要添加很多括号防止歧义,编写更加复杂。(3)  内联函数可以作为某个类的成

2016-04-30 00:18:15 6928

原创 C++单例模式

因为在设计或开发中,肯定会有这么一种情况,一个类只能有一个对象被创建,如果有多个对象的话,可能会导致状态的混乱和不一致。这种情况下,单例模式是最恰当的解决办法。它有很多种实现方式,各自的特性不相同,使用的情形也不相同。今天要实现的是常用的三种,分别是饿汉式、懒汉式和多线程式。通过单例模式, 可以做到:1. 确保一个类只有一个实例被建立 2. 提供了一个对对象的全局访问指针 3. 在

2016-04-29 11:24:18 328

原创 单链表反转的非递归与递归算法

template class ListNode{ public: ListNode *next; T elements;};非递归ListNode *ReverseList1(ListNode *root){ ListNode *link,*prev=nullptr; while(root){ link=root->next;

2016-04-29 10:48:07 344

原创 C++空类默认有哪些成员函数?

实际上,C++的一个空类并不会默认产生任何成员函数,只有在调用的时候根据编译器的需要生成。   class A{};A a; //编译器会生成默认构造函数,实际上默认构造函数所做的事就是为这个实例添加一个字节的数据class A{};A a1;A a2(a1);//编译器会生成拷贝构造函数,实际上拷贝构造函数所做的事就是把a1中的数据(一个char类型)拷贝到a2中去然而

2016-04-29 10:12:43 1634

原创 DFS与BFS遍历

深度优先遍历 1.深度优先遍历的递归定义  假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶

2016-04-29 09:43:23 6972

原创 Linux用户态和内核态间的转换

因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录、页表等,这些操作显然不能随便让任何程序都可以做,于是就产生了特权级别的概念,与系统相关的一些特别关键性的操作必须由高级别的程序来完成,这样可以做到集中管理,减少有限资源的访问和使用冲突。Intel的X86架构的CPU提供了0到3四个特权级,而在我们Linu

2016-04-29 08:57:21 5996

原创 最小生成树prim算法实现

边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。最小生成树(MST):权值最小的生成树。生成树和最小生成树的应用:要连通n个城市需要n-1条边线路。可以把边上的权值解释为线路的造价。则最小生成树表示使其造价最小的生成树。构造网的最小生成树必须解决下面两个问题:    1、尽可能选取权值小的边,但不能构成回路;    2、选取n-1条恰

2016-04-28 22:37:36 734 3

转载 Dijkstra算法介绍

迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。基本思想     通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。     此外,引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则

2016-04-28 21:33:07 1067

转载 linux下用core和gdb查询出现"段错误"

有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误"。当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。什么是core dump?core的意思是内存,dump的意思是扔出来,堆出来。为什么没有core文件生成呢?有时候程序down了,但是core文

2016-04-28 20:41:36 506

转载 AVL树详解

AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。       对二叉树的平衡调整过程,主要包含四种旋转操作:LL,LR,RR,RL 。 LR由当前节点左儿子的一次RR旋转和当前节点的一次LL旋转

2016-04-28 15:43:25 626

转载 DHCP协议原理及其实现流程

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Se

2016-04-28 12:01:32 630

原创 C++中的dynamic_cast 操作符

C++提供了四种强制转型的方式,除了dynamic_cast是在运行中被决议,其它三种在编译期即可被决议。联想C++中多态的实现,可以想到既然能在运行中决议,必然和RTTI有关(RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法),而RTTI存在又存在于虚表当中。所以可以知道由dynamic_cast负责转化的类型在其继

2016-04-28 11:35:44 318

原创 select,poll和epoll分析

select()和poll() IO多路复用模型select的缺点:单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差;(在linux内核头文件中,有这样的定义:#define __FD_SETSIZE    1024)内核 / 用户空间内存拷贝问题,select需要复制大量的句

2016-04-27 21:37:11 477

转载 TIME_WAIT状态原理

转载自 http://elf8848.iteye.com/blog/1739571通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。下图是以客户端主动关闭连接为例,说明这一过程的。   

2016-04-24 10:19:42 376

转载 c++的重载、覆盖和隐藏

转载自:http://blog.csdn.net/wanghuiqi2008/article/details/28419645为了说明这三者的区别,引入函数签名的概念函数签名主要包括1、函数名;2、参数的个数、数据类型和顺序但是注意,函数签名不包括返回值1、重载在同一个类中,或者在顶层函数(与main函数同层)中,如果(1)函数名相同(2)函

2016-04-23 00:03:45 442

原创 如何提高UDP的可靠性

关键在于两点,从应用层角度考虑:1 提供超时重传,能避免数据报丢失。2 提供确认序列号,可以对数据报进行确认和排序。本端:首先在UDP数据报定义一个首部,首部包含确认序列号和时间戳,时间戳是用来计算RTT(数据报传输的往返时间),从何计算出合适的RTO(重传的超时时间)。然后以等-停的方式发送数据报,即收到对端的确认之后才发送下一个的数据报。当时间超时,本端重传数据报,同时RT

2016-04-16 11:53:01 3697

原创 能不能在构造函数和析构函数中调用虚函数?

可以,但是达不到想要的效果,应该尽可能避免在构造函数和析构函数中调用虚函数。class base{public: base(){ cout<<The size is size()<<endl; }private: virtual size_t size(){ return sizeof(*this); }};class

2016-04-16 10:52:22 2638

原创 C++中如何避免资源泄漏

请看下面一段代码{ object *p = new object(); ... delete p;}如果在执行delete这行代码之前该片段产生异常,程序会在发生异常点停止并产生栈展开,所以不会执行delete语句,造成资源泄漏。解决的方法如下{ share_ptr p(new object()); ...}用智能指针替代普通指针,当发生异常

2016-04-16 09:53:37 1725

原创 C++中不能声明为虚函数的有哪些函数

首先明确一点,在编译期间编译器完成了虚表的创建,而虚指针在构造函数期间被初始化。如果构造函数是虚函数,那必然需要通过虚指针来找到虚构造函数的入口地址,但是这个时候我们还没有把虚指针初始化。因此,构造函数不能是虚函数。

2016-04-09 20:49:21 1588

原创 extern "C" 的作用

extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名,当然前提是C++编译器能够访问C

2016-04-09 09:49:48 322

转载 Linux命令详解

http://www.cnblogs.com/ggjucheng/archive/2012/08/18/2645321.html

2016-04-08 23:41:25 231

转载 awk命令详解

简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。awk其名称得自于它的创始人 Alfred Aho

2016-04-08 23:37:28 342

原创 Linux环境下多进程和多线程的优缺点

在Linux下编程多用多进程编程少用多线程编程。         IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更

2016-04-08 00:39:20 2558

转载 Linux下异步I/0: Linux上的AIO简介

文章出处:http://blog.sina.com.cn/s/blog_6028e2630100y0d1.html本节将探索 Linux 的异步 I/O 模型,从而帮助我们理解如何在应用程序中使用这种技术。在传统的 I/O 模型中,有一个使用惟一句柄标识的 I/O 通道。在 UNIX® 中,这些句柄是文件描述符(这对等同于文件、管道、套接字等等)。在阻塞 I/O 中,我们发起了

2016-04-07 11:22:13 1287

转载 2017滴滴出行实习面试总结(测试岗,拿到offer)

一面(四十几分钟):1 、自己设计实现一个信号量(口述思路)2 、Linux创建进程的几种方式,之间的区别3 、多态的实现机制4、malloc 和 new 的区别5、不同类的占用内存大小6、指针数组(是数组)和数组指针(是指针)的定义7、升序链表的插入8、一道算法题9、 Linux ( cd .. )基本操作指令10、

2016-04-04 23:32:54 12592 1

转载 2017爱奇艺实习面试总结(搜索开发,拿到offer)

一面-大概下午两点多1、  实习做得服务器架构2、  实习主要做了哪些事情3、  实习开发的服务器并发量多大?中有碰到过因为大量并发连接而造成的宕机吗?4、  TCP/IP 的了解,连接 3 次握手和关闭 4 次挥手, time_wait 的作用5、  One loop per thread + threadpool 的理解6、  One loop 

2016-04-04 23:08:52 6085

空空如也

空空如也

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

TA关注的人

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