自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 CMake 报错处理

CMake Error: The current CMakeCache.txt directory /home/alex/soft/opencv-2.4.13.6/release/CMakeCache.txt is different than the directory /home/alex/tmp/opencv-2.4.13.6/release where CMakeCache.txt was...

2020-02-21 10:52:02 629

转载 xshell生成公钥和私钥

一.打开你的xshell工具,工具栏有一个工具选项,点开选择新建用户密钥生成向导(如下图所示)二.点开之后就会如上图所示一样,点击选择下一步,出现如下,再点击下一步点击完下一步会出现如下图所示密钥名称可以自己命名,然后输入密钥密码,(记住密钥密码),点击下一步,弹出如下界面点击保存为文件按钮,记住保存在哪,这个是公钥文件,公钥文件保存完成,点击完成按钮会出现如下界面...

2020-02-16 19:51:24 2258

转载 Linux下安装Erlang

一、升级openssl# cd /usr/local/# wget http://www.openssl.org/source/openssl-1.0.1s.tar.gz# tar -zxvf openssl-1.0.1s.tar.gz# cd openssl-1.0.1s# ./config --prefix=/usr/local/openssl# vim Makefile--...

2020-02-16 19:46:47 914

转载 C++中友元函数和成员函数的区别

什么是友元函数:指某些虽然不是类的成员却能够访问类的所有成员的函数为什么要使用:为了使其他类的成员函数来访问该类的私有变量什么时候使用:可以用于运算符重载两个类共享数据调用方式:不是类的成员函数,调用时不通过对象存在位置:可以在类内声明,类外定义,可放在类的私有段或公有段,放在私有段和公有段无区别。什么是成...

2020-02-14 11:46:42 2136

转载 C++ override 关键字用法

override关键字作用: 如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译。 举例子说明struct Base { virtual void Turing() = 0; virtual void Dijkstra() = 0; virtual void VNeumann(int g) = 0...

2020-02-14 11:26:27 475

转载 Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)

https://blog.csdn.net/qq_41453285/article/details/103001772?request_id=&utm_source=distribute.pc_feed.none-task

2020-02-13 16:49:52 231

转载 两种高效的服务器设计模型:Reactor和Proactor模型

I/O模型在文章《unix网络编程》(12)五种I/O模型中提到了五种I/O模型,其中前四种:阻塞模型、非阻塞模型、信号驱动模型、I/O复用模型都是同步模型;还有一种是异步模型。Reactor模型Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程/进程阻塞在多路复用器上;一旦有I/O事件到...

2020-02-13 16:34:38 542

转载 C++数组越界问题

你要首先了解内存分配的原理。 你在new操作之后,系统可能返回一个新分配的内存,也可能从已经分配并已经回收的内存中拿出来一个小块给你。 至于这块内存后面的那一部分(也就是a[3])是否能被访问,是不确定的。我举几个例子吧(不知道你能不能够理解,我尽力而为):1,这个内存后边的内存是非法内存,例如这个内存后面的部分还没有被你的程序申请过,它已经位于堆内存管理的末端,那么这种情况a[3]赋值程序直接...

2020-02-11 22:18:31 1134

原创 字符串BM算法

坏字符规则:generateBadChar(b,m,hash); //构建坏字符哈希表,对应字符在模式串中的位置,如相同则靠最右 for(j = m -1; j >= 0; --j) //模式串从后往前匹配 { if(a[i+j] != b[j]) break; //坏字符对应模式串中的下标是j ...

2020-02-10 13:42:43 161

转载 为什么函数式编程不用数组

链表是递归的数据结构,在上面的操作大部分可以用它的eliminator完成,最终效果就是数学归纳法因为函数式编程中大量的循环操作是依赖递归(和map)的,虽然map也是由递归实现的而这时候用链表这种递归定义的数据结构就是一种自然而然的事情了。但可达鸭眉头一皱,发现事情并不简单实际上,将链表换成数组也是能够正常使用的。但为什么我们还广泛的使用链表呢?因为在pure的环境下,对于数...

2020-02-07 14:36:35 190

转载 return *this和return this

别跟我说, return *this返回当前对象, return this返回当前对象的地址(指向当前对象的指针)。正确答案为:return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。return this返回当前对象的地址(指向当前对象的指针), 下面我们来看看程序吧:#include <iost...

2020-02-06 18:30:10 314

转载 C++this指针干什么用的

class Test{public: void func(){ cout<<"mvalue:"<<mvalue<<endl; }private: int mvalue;}; int main(){ Test t1,t2; t1.func(); t2.func(); retu...

2020-02-06 18:11:34 131

转载 c++中extern用法总结

extern关键字的作用是共享代码。一个c++程序可以包含多个文件,在一个文件中已定义的变量,如果要在另一个文件中调用,就要先声明一下变量,此时用extern这个关键字来声明。(注意:在一个程序中,变量只能被定义一次,但可以多次声明)区分是定义还是声明关键在于看计算机是否为变量分配了存储空间。int i;//这是定义extern int i;//这是声明ext...

2020-02-06 17:07:20 740

原创 forgottenserver源码解析

处理连接和收包:mainLoader(otserv.cpp) => ServiceManager::add(server.h) =>ServicePort::open =>ServicePort::accept =>ServicePort::onAccept(这三个函数都在server.cpp) =>Connection::accept =>Con...

2020-02-05 22:07:28 214

转载 使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

你是否遇到过这样的情况:从终端软件登录远程的Linux主机,将一堆很大的文件压缩为一个.tar.gz文件,连续压缩了半个小时还没有完成,这时,突然你断网了,你登录不上远程Linux主机了,那么前面的半个小时就会前功尽弃,你非常气愤……在Linux下,如果你要执行的shell命令耗时特别长,并且:(1)你的网络不稳定,随时可能断网;或者(2)你在执行了shell命令之后必须要关闭终端软件(...

2020-02-05 18:52:59 308

转载 为什么IO复用要搭配非阻塞IO和应用层buffer

为什么IO多路复用要搭配非阻塞IOselect、poll_wait、epoll_wait返回可读≠read去读的时候能读到。如果不用非阻塞,程序会永远卡在read上。以上情况可能出现在多进程同时监听一个socket,只有一个进程可以accept,别的都会block。假如socket的读缓冲区已经有足够多的数据,需要read多次才能读完,如果是非阻塞可以在循环里读取,不用担心阻塞在read上,等...

2020-02-03 20:35:40 231

转载 使用epoll时需要将socket设为非阻塞吗?

我觉得只有边沿触发才必须设置为非阻塞。边沿触发的问题:1. sockfd 的边缘触发,高并发时,如果没有一次处理全部请求,则会出现客户端连接不上的问题。不需要讨论 sockfd 是否阻塞,因为 epoll_wait() 返回的必定是已经就绪的连接,所以不管是阻塞还是非阻塞,accept() 都会立即返回。2. 阻塞 connfd 的边缘触发,如果不一次性读取一个事件上的数据,会干扰下一...

2020-02-03 20:29:12 825

转载 什么是死锁和如何解决死锁

如果一组进程中每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。举例来说:有两个进程A和B,A持有资源a等待b资源,B持有资源b等待a资源,两个进程都在等待另一个资源的同时不释放资源,就形成死锁。形成死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3...

2020-02-03 19:43:46 596

转载 epoll比select和poll高效的原因

我们通过比较select、poll和epoll处理I/O的过程来剖析其中的原因:1. 用户态将文件描述符传入内核的方式:select:创建3个文件描述符集并拷贝到内核中,分别监听读、写、异常动作。这里受到单个进程可以打开的fd数量限制,默认是1024。poll:将传入的struct pollfd结构体数组拷贝到内核中进行监听。epoll:执行epoll_create会在内核的高速cac...

2020-02-02 17:09:46 591

转载 epoll模型水平触发、边沿触发优缺点对比

epoll模式下的水平触发、边沿触发1,epoll默认是水平触发2,水平触发通俗来讲:只要有数据,epoll_wait函数就一直返回;边沿触发通俗来讲:只有socket状态发生变化,epoll_wait函数才会返回。3,水平触发优、缺点及应用场景:优点:当进行socket通信的时候,保证了数据的完整输出,进行IO操作的时候,如果还有数据,就会一直的通知你。缺点:由于只要还有数据...

2020-02-02 17:03:55 1591

转载 muduo网络框架分析

概要muduo是一个纯异步、多线程、多路复用网络框架,主线程负责监听网络连接事件,子线程负责处理已建立的连接的网络读写事件。采用eventfd实现父、子线程之间的通信。子线程之间是不能直接进行通信的,原因在于,子线程之间互相不知道对方是否已经析构,也就是一个子线程很有可能向另外一个已经退出的子线程递交任务,这样就会造成程序崩溃。muduo网络框架是基于生产者消费者模型的。每一个线程都维护了...

2020-02-01 16:46:20 679

转载 红黑树 vs 最小堆

不谈内存,从算法上来讲红黑树插入是最坏情况要比较2logN次(最高的高度)外加不超过两次旋转,最小堆最坏情况是logN次红黑树删除不需要比较只需要不超过3旋转,查找最小值需要遍历logN,如果删除最小值树调整一般很小最小堆查询顶节点是O(1),而删除顶节点在任何情况下都是个最坏的情况,需要比较2logN次红黑树的最坏情况在旋转中不断调整变化,插入性能比最小堆差,但删除最小性能却比最...

2020-02-01 15:10:43 1570

转载 sizeof() 类大小,空类大小

一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小.首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等...

2020-02-01 11:14:21 433

空空如也

空空如也

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

TA关注的人

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