自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 下载及配置maven环境

下载及配置maven环境下载地址:http://maven.apache.org/download.cgi 不需要源码则下载如图。下载后解压到一个文件夹中。我的路径F:\javatools\apache-maven-3.6.0配置环境:右键计算机——》属性——》高级系统设置——》环境变量系统变量中新建:添加变量名和变量值——》确定在用户变量中单击Path...

2019-02-23 20:02:05 259

转载 STL---空间配置器

原文转自:https://blog.csdn.net/yusiguyuan/article/details/45080767STL的设计非常巧妙,组件间互取短长,形成了一个世界,这是这个世界里的组件:1. containers(容器):所谓容器,是指存放数据的地方,将数据以一定的方法组织存放。根据不同的组织方式,可以把容器分为顺序容器,如vector、deque、list,关联容器,如set...

2018-09-14 23:36:07 258

转载 C++中的纯虚函数

原文转载:https://blog.csdn.net/ithomer/article/details/6031329C++中的纯虚函数在C++中的一种函数申明被称之为:纯虚函数(pure virtual function).它的申明格式如下:class CShape{public:    virtual void Show()=0;};注意红色部分,在普通的虚函数后...

2018-09-12 09:46:21 14426

原创 大小端判断

大小端的概念:大端:低地址存放高字节数小端:低地址存放低字节数以数字 0x12345678来说大端低地址 ---------------高地址0x12 | 0x34 | 0x56 | 0x78小端低地址 --------------高地址0x78 | 0x56 | 0x34 | 0x12 如何判断是大端还是小端1、利用强制转换来判断bool I...

2018-09-11 18:06:06 468

原创 str_reverse函数

题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。例如:I am a student   =>     student a am I思路:先将整个句子逆置,一下,再将每个单词逆置。过程:I am a student   =>  sneduts a ma  I 。再将每个单词逆置:student a am Ivoid s...

2018-09-11 17:46:39 1180

原创 Myatoi函数

题目描述:实现Myatoi函数,将字符串转成数字,比如"123"->123,"12a3"->12。遇到第一个非数字字符转换结束。可以处理前面的空格字符和负号。int Myatoi(char *s){ if(s==NULL) { return 0; } int tmp=0;//记录到时返回的值 int tag=1;//记录正...

2018-09-11 17:37:05 755

原创 链表---判断单链表是否有环

题目:判断一个单链表是否有环思路:定义两个指针,一个指针每一次走一步,一个指针每一次走两步。如果两个指针相遇了,就说明有环。否则如果当慢指针或快指针等于NULL了,说明链表没有环。空间复杂度O(1),时间复杂度O(n)。bool hava_ring_list(P plist){ node * p1=plist;//快指针 node * p2=plist;//慢指针 while...

2018-09-09 11:55:30 164

原创 链表---删除链表中重复节点

题目:删除单链表中重复的节点,如  1 -> 2 -> 2 ->2 -> 3 -> 5,删除后变成 1-> 2 -> 3 -> 5思路:定义两个指针 p1,p2,比较两个节点的元素值,相同就删除。void delete_same_node(P plist1){ if(NULL == plist1 || NULL==plist1->...

2018-09-09 11:41:59 246

原创 链表---单链表的逆置

关于单链表的题目是面试过程中比较爱出的算法题,因为代码不会很多,大概都能在十分钟之内给出答案,所以会受到面试官的青睐,如果再增加难度,就是关于二叉树的操作了。所以对链表和二叉树的的经典题是我们应该掌握的。 本章对于单链表的逆置进行详细分析。思路:遍历单链表,利用头插的方式将遍历到的节点插入但链表中指针:p=NULL;指针:q=NULL;每遍历head链表上的节点,将节点...

2018-09-09 11:14:16 596

原创 select/poll/epoll的区别

select:在一段时间内,监听用户感兴趣的文件描述符上的可读、可写和异常事件。poll:和select类似,也是在一段时间内轮询一定数量的文件描述符,监听是否有就绪的文件描述符。epoll:使用一组函数来完成任务,epoll把关心的文件描述符的事件放入内核事件表中,每次只用监听内核事件表中的就绪事件即可。1、三者函数原型不同int select( int nfds  ,stru...

2018-09-04 18:42:45 214

转载 函数调用堆栈

一、堆和栈 (1)首先要清楚的是程序对内存的使用分为以下几个区: 1、 栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。栈用于维护函数调用的上下文,离开了栈函数调用就没法实现。 2、 堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。与数据结构中的堆是两码事,分配方式类似于链表。堆是用来容纳应用...

2018-09-01 09:52:31 1021

原创 静态库和动态库的区别

在介绍两种库时首先说一下库的概念。库:就是已经写好的,现有的方法的集合。从本质上说库是一种可执行代码的二进制形式,可以被操作系统加载到内存上执行。库有两种:静态库(.a ,.lib)和动态库(.so ,.dll)。为了更好的理解静态库和动态库两者的区别,先来看一张编译链接过程图:静态库:在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。特点:静态...

2018-08-31 15:02:49 472

原创 Linux重要命令

1、进程 | 线程操作ps               默认查看当前终端中运行的线程ps  -eLf      带上参数L可以查看正在运行的线程id top            系统检测工具top  -H      显示应用程序的每一个线程信息top  fj        显示进程或线程在哪个cpu上运行 2、调试程序gdbl ---------显示代码   ...

2018-08-31 13:27:00 218

原创 设计一个不能被继承的类

设计一个不能被继承的类:要求是该类可以像普通类一样正常使用,但是不能被继承先看一下第一个代码:class Base{private: Base(int val=0):_val(val){}private: int _val;};class Dreive:public Base{public: void print() { c...

2018-08-21 23:55:04 1221

原创 C++---new和malloc的区别

本文从用法和区别两方面介绍new和malloc1、malloc/free和new/delete用法:int main(){ int *p=(int *)malloc(sizeof(20));//指向整型的指针p指向一个大小为100字节的内存的地址 assert(p!=NULL);//申请空间一般都要断言是否成功 int arr[]={12,23,34,45,5...

2018-08-21 23:19:44 234

转载 C++11新特性---右值引用(二)

本文摘自博客:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/index.html1、新特性的目的右值引用是C++11中引入的新特性,它实现了转移语义和精确传递 消除两个对象交互式不必要的对象拷贝,节省存储资源,提高效率;2、左值和右值的定义左值是非临时对象,可以取地址,可以被赋值;右值是临时对象,只在...

2018-08-20 20:20:50 224

转载 C++11新特性---右值引用&类型推导(一)

本篇文章摘自博客:https://blog.csdn.net/hzyong_c/article/details/8273884一、右值引用,move语义1、左值(lvalue)和右值(rvalue)的概念C++11引入了右值引用。Type&&,const Type&&,区别于之前的&标识的左值引用。左值:在表达中,表达式结束时不会消失,如ob...

2018-08-20 17:23:50 466

原创 并发处理请求---多进程、多线程、异步

完成并发处理请求的三种方式:多进程方式、多线程方式、异步方式多进程方式:服务器每当接收到一个客户端时,就由服务器主进程生成一个子进程出来和该客户端建立连接进行交互,直到断开连接,该子进程就结束了。优点:设计和实现相对简单,各个子进程之间相互独立,处理客户端请求的时候彼此不受干扰,当一个子进程有问题时不会影响到其他进程,当子进程退出时,其占用资源会被操作系统回收,不会留下任何垃圾。缺点:...

2018-08-20 11:01:16 1561

转载 海量数据处理---从Trie树(字典树)谈到后缀树

 文章转载博客:https://blog.csdn.net/v_july_v/article/details/6897097第一个问题: 一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。    之前在此文:海量数据处理面试题集锦与Bit-map详解中给出的参考答案:用trie树统计每个词出现的次数,时间复杂度是O(n*le)(l...

2018-08-19 11:32:04 485

转载 海量数据处理之Bloom Filter详解

文章转载博客:https://blog.csdn.net/v_JULY_v/article/details/6685894一、什么是Bloom Filter    Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个位阵列(Bit array)中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就...

2018-08-19 11:26:00 192

原创 海量数据处理---Trie树

trie树又被称为前缀树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串,所以经常被搜索引擎系统用于文本词频统计。它的3个基本性质:根节点不包括字符,除根节点外每个节点都只包含一个字符 从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串 每个节点的所有子节点包含的字符都不相同 树的构建假设有 b,abc,abd,bcd,abcd,efg,hil这...

2018-08-19 11:23:16 371 1

原创 海量数据处理---Bit-Map

原理:Bit-Map就是用一个位来表示某个元素对应的值。采用bit为单位存储数据,大大的节省了空间。如图所示:例:假设对0-7内的5个元素{3,5,1,6,4}进行排序(不重复)。我们可以使用Bit-Map来做,要表示8个元素,要1个字节空间(8位),故首先开辟1Byte空间,将里面的每一位都置为0。遍历一次元素,将元素的值对应的位变成1。现在已经将每一个元素对应的位改为1了,所以...

2018-08-19 10:22:18 503

原创 海量数据处理---布隆过滤器

布隆过滤器的概念和原理概念:布隆过滤器是一种空间效率较高的数据结构,它利用位数组表示一个集合。可以很容易的判断一个元素是否属于这个集合。但是它的这种高效有一定的代价:再判断一个元素是否属于这个集合时,有可能将不属于这个集合的元素误认为属于这个集合,因此,布隆过滤器不适合那些“零错误”的场景,而在能忍受低错误率的情况下,布隆过滤器通过极少的错误率换取存储空间的极大节省。实现原理:在初始化时,...

2018-08-19 08:46:22 292

转载 进程间通信---消息队列

从以下4个函数来说消息队列:msgget、msgrcv、msgsnd、msgctl1、msgget函数:创建消息队列原型:int msgget(key_t key,int msgflg)参数: key:为键值,可设置成常数IPC_PRIVATE,或由ftok获取;例(key_t)1234 msgflg是标志位,设定的权限,      标志位如下:      IPC_C...

2018-08-17 17:17:05 194

原创 进程间通信---共享内存&shmget

介绍这一部分主要从它的几个函数入手:概念:共享内存是在物理内存上开辟一块区域,这段被多个进程映射到自己进程的虚拟地址空间上,这些进程就可以直接访问该共享内存区域,从而通过该区域实现各进程间的通信。共享内存是进程间最快的一种通信方式,一个进程向共享内存上面写数据,共享这块内存的所有进程都可以看到其中的内容,这块共享内存的页面,出现在所用共享该页面进程的页表中,给人一种就是在访问自己地址空间里面的...

2018-08-17 12:43:30 509

原创 进程间通信---有名管道&无名管道

顾名思义,管道就像是将数据放入到一个长长的管子中一样,肯定会有一端写入数据,称为写端,有一段读出数据,称为读端。既然是说像管子一样那么它肯定有大小吧,资源不是无穷无尽的,默认下管道的大小是64k,用ulimit -a 可以查看。1、无名管道:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立两个管道 无名管道只能用于父子进程之间(因为父子进程共享打开的文件描述符) 无名管...

2018-08-16 13:41:55 862

原创 进程间通信---两个重要的信号SIGALRM信号&SIGCLD信号

1、SIGALRM信号alarm函数实现了定时发送SIGALRM信号的功能。(每一个进程都有一个唯一的计时器)unsigned int alarm(unsigned int seconds)参数seconds:设定定时时间,超过这个时间时发送SIGALRM信号返回值:返回定时器剩余描述结合一个示例:#include<stdio.h>#include<...

2018-08-16 11:48:37 908

原创 进程间通信--信号

这篇文章从以下几个方面来了解信号1、什么是信号2、信号的产生3、信号的处理4、发送信号5、信号处理函数安全 1、什么是信号?信号是一种事件通知机制,当接收到该信号的进程会执行相应的操作2、信号的产生由硬件产生,如从键盘输入Ctrl+C可以终止当前进程 由其他进程发送,例如,在shell进程下,使用命令kill  -信号值 PID 异常,当进程异常时发送信...

2018-08-16 11:24:11 1798

原创 TCP/IP详解---数据链路层&MTU

数据链路层主要从三个方面来说:作用 常用协议 最大传输单元MTU1、作用:主要有3个目的为IP模板发送和接收数据 为ARP模板发送ARP请求和接收ARP应答 为RARP模板发送RARP请求和接收RARP应答2、常用协议:ARP:地址解析协议,将网络层的IP地址转换成MAC地址供本层使用。因为网络层使用IP地址唯一识别一个主机,而数据链路层使用MAC地址唯一识别一个主机。...

2018-08-15 12:29:17 653

原创 TCP/IP详解--网络层&IP首部格式

1、IP协议概述IP是TCP/IP协议族中最核心的协议,不管是TCP、UDP、ICMP数据最终都是以IP数据报格式传输。IP提供不可靠、无连接、无状态的数据报传输服务不可靠:它不保证数据报能成功的到达目的地(如果发生某些错误,比如路由器用完了缓冲区,IP处理方法就是丢弃,然后发送ICMP差错报文给信源端。所有的可靠性都由上层来保证)无状态:IP并不维护后续数据报的状态信息,每个数据...

2018-08-15 10:53:03 3117

原创 BF算法、KMP算法、改进的KMP算法

BF算法、KMP算法、改进的KMP算法,以上几种算法都是模式匹配算法,即找模式串在主串中第一次出现的位置。BF算法:如上图所示 主串:”abcaba”   子串:”aba”思路:从主串第一个开始和子串第一个匹配,如果相等则两个串都向后走一步,继续匹配。如果不相等则主串从i-j+1开始、子串从头开始重新匹配。可以看到每当失配时,主串的i需要从开始匹配的下一个字符开始,重新和子串开始匹...

2018-08-14 17:48:43 2762

原创 socket编程流程(使用TCP协议为例)

先来简单回忆一下上一次说到的TCP协议TCP协议:面向连接、可靠的、流式服务UDP协议:无连接的、不可靠的、数据报服务 会发现UDP协议和TCP协议恰好相反,但是既然有了可靠的TCP协议,为什么又要另外一个不可靠的UDP协议呢???因为UDP有它自己的优点UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,使用起来会更快捷,方便,如一般的聊天软件。 下面编写一个编程...

2018-08-13 22:02:53 1073

原创 TCP/IP详解---传输层&tcp报头&协议详解

TCP协议是传输层上重要的一个协议,所以下面我就对TCP协议总结一下。一、TCP服务特点:(1)面向连接的。面向连接就是通讯双方必须先建立连接,才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。(2)可靠的。可靠性体现在TCP协议提供了超时重传机制和发送应答机制。(3)流式服务。当接收端收到一个或多个TCP报文段后,TCP模板将它们携带的...

2018-08-13 21:41:48 1079

原创 TCP/IP详解---四层协议体系结构、常用协议、对应设备

在说TCP/IP协议体系结构之前我们首先来看看最早用的OSI七层参考模型,自底向上依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。下图则为由OSI七层参考模型到TCP/IP体系结构产生过程。               OSI                                      TCP/IP  TCP/IP体系结构的优点:(1)简化了计...

2018-08-13 21:27:00 12322 2

原创 链表---链表的倒数第k个节点

找链表的倒数第k个节点???思路:遍历一遍链表,得到链表的长度len, 再用长度len减掉k就是需要走多少步就能倒数第k个节点的位置了。 如图有一个链表,有效数据长度 len为5;假设现在要找倒数第三个节点。即k为3;如果当前指针指向头节点,则需要走len-k+1步(值为3),才能到倒数第k个节点如果指向的是第一个有效数据节点,则需要走len-k(值为2)步。node...

2018-08-13 17:14:23 177

原创 链表---判断两链表是否相交

判断两个链表是否相交??思路:如果两个链表相交,则它们在交点之后节点必然是公共的,所以遍历完两个链表,判断它们最后的节点是否相同就能判断两个链表是否相交。如图 typedef struct ListNode{ int data; node* next;}ListNode;bool list_intersect(ListNode* list...

2018-08-12 17:17:12 225

原创 构造函数、析构函数抛出异常的问题

首先下说一下结论:构造函数可以抛出异常 析构函数不能抛出,也不应该抛出异常。 构造函数为什么可以抛出异常?用new创建对象时要经历两个操作:分配内存和调用构造函数。若是在new分配内存时出错,则会抛出bab_alloc异常;如在调用构造函数初始化时出错,new运算符会保证不出现内存泄漏: T *p = new T;将被编译器转换成类似下面这个样子:void alloc...

2018-08-11 18:10:30 368

原创 C+的4种强制类型转换

首先看一下C语言下的类型转换将浮点类型值赋给整型变量时,舍弃其小数部分 将整型值赋给浮点型变量,值不变,但是以指数形式存储 将double类型赋值给float类型变量时,注意数值溢出 字符型赋值给整型,则存入的是字符的ASCll码 将一个int、short、long类型的值赋给char类型变量,只是将低8位放入到char中 将有符号的值赋给类型相同的无符号类型变量时,连同符号位一同传...

2018-08-10 17:37:47 3840 1

原创 TCP/IP详解--三次握手、四次挥手和TIME_WAIT状态

首先看一个三次握手建立连接的过程第一次握手:主动打开方发送SYN同步报文段,表示我要和你连接了,自己进入SYN_SENT状态第二次握手:被动打开方收到SYN报文,恢复ACK报文,自己也发送SYN报文表示我也要连接,进入SYN_RECV状态。第三次握手:主动打开方收到对方ACK和SYN,自己再发送对SYN的确认。自己就可以进入ESTABLISHED状态表示自己可以通信了。被动打开方收...

2018-08-09 17:29:28 715

原创 gdb调试

基础调试命令:l                   :显示源文件的代码b  linenum          : 给指定行添加断点b  func(函数名)   :给函数func加断点info b               :查看断点信息n                   :单步执行r                    :运行,会在断点处停下来c       ...

2018-08-08 22:53:25 195

空空如也

空空如也

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

TA关注的人

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