- 博客(14)
- 收藏
- 关注
原创 c++中类的拷贝/移动/赋值/销毁
前言第一次看C++ Primer时拷贝控制这章完全没看明白,只是很粗略地过了一遍。时隔一年,具备了一定的工程经验后,再次看这一章对于类的拷贝构造/赋值函数、移动构造/赋值函数以及析构函数有了完全不一样的认识,在博客里记录一下,C++ Primer每看一遍都会有不同的收获倒真不是乱说。拷贝构造/赋值函数拷贝构造函数第一个参数必须是一个引用类型,且通常是一个const的引用。另外,拷贝构造函数会在很多情况下被隐式地使用,不应该为explicit函数。当我们没有显式地定义一个拷贝构造函数时,编译器会为我们定
2020-12-07 22:15:30
489
原创 golang线程池在IO多路复用中的应用
前言之前介绍过基于reactor模式的IO多路复用技术,reactor模式本质上就是循环监听-处理的过程,当处理过程代价很小(比如echo服务器),服务端实际上长期阻塞于监听环节,这样会导致客户端感觉自己的请求是被立即处理的。如果需要服务端支持IO阻塞型应用,单线程的reactor模式就显得不太适合了,因为某个客户端会长期占据IO而使得其余客户端的请求无法及时得到响应。这时候可以对这部分请求单独分配线程池进行处理,以保证轻量的请求不被阻塞。golang线程池传统的线程池在golang中可以用更为轻量的
2020-10-11 21:18:49
2071
1
原创 基于reactor以及IO多路复用(Kqueue)的echo服务器
前言前面介绍了unix系统中的IO复用技术(Kqueue),并且基于此技术实现了两种简单的echo服务器同步、单线程的echo服务器。允许多个client连接,但是同时只能处理一个client的请求,需要该client断开连接后才能继续处理下一个客户端的请求异步、多线程的echo服务器。允许多个client连接并且同时可以处理多个client的请求,是一个比较贴近实际场合的echo服务器,但是多线程会带来频繁的线程间切换以及加解锁,实际开销比较大仔细观察思考,实际上上述两种方法程序的时间大多也是
2020-09-16 19:25:30
342
原创 使用IO多路复用(Kqueue)实现简单的多线程echo服务器
前言上一篇博客提到了Kqueue的基本原理并用一个小的编程例子进行实现,对于Kqueue的基本使用尚不熟练的小伙伴可以回头看一下这篇博客。下面言归正传,用Kqueue实现一个能实用的echo服务器,并讨论多客户端连接的应用场景。单线程echo服务器设计思想:服务端创建一个套接字监听来自客户端的连接,并将其放入内核事件队列中,每次接到客户端的连接请求,创建套接字放入监听列表待其活跃之后进行读写。注意:在单线程的服务器中,多个客户端同时连接,服务器会阻塞在第一个进行读写的客户端,直至该客户端断开连接后才
2020-09-09 20:44:01
481
原创 go实现Kqueue和IO复用
Kqueue背景Kqueue是unix系统上高效的IO多路复用技术,关于IO多路复用的原理网上有很多优秀的理解,这里不再赘述。常见的io复用有select、poll、epoll、kqueue等。其中epoll为Linux系统独有,kqueue则在众多unix系统中存在,我们这里选择Kqueue进行切入主要是方便mac上IDE即时编译调试,其原理与epoll类似。Kqueue参数概览go语言中kqueue相关代码位于syscall库中event_t是Kevent()操作的最基本的事件结构。kque
2020-09-02 18:52:18
951
原创 muduo安装
muduo安装安装前的准备编译安装安装前的准备由于组里的服务器是多人共用,为了排除宿主机环境对muduo的影响以及root权限的获取,选择在docker进行muduo的安装。docker镜像:ubuntu16.04依赖库的安装//muduo采用camke编译,安装camkeapt-get install cmake//muduo依赖boost库apt-get install libboost-dev libboost-test-dev//三个非必须的依赖库:curl、c-ares DNS、
2020-08-16 10:11:12
359
原创 从零开始学Nginx(二):安装配置Nginx
从零开始学Nginx(二):安装配置Nginx安装nginx想要使用nginx的常用功能,必须确保系统安装gcc、pcre、zlib、openssl这四个库,以centos系统为例来进行安装yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl spenssl-devel直接从官网获取最新的下载源码包并解压wget http://nginx.org/download/nginx-1.19.1.tat.gzta
2020-07-12 18:42:09
125
原创 从零开始学nginx(一):为什么要选择nginx
从零开始学nginx(一):为什么要选择nginx以《深入理解Nginx》为基础,记录从零开始学习Nginx,作为一个系列记录更新web服务器web服务器是通过HTTP协议处理用户web请求的程序。除了Nginx外,主流的web服务器有:Apche、Lighttpd、Tomcat、Jetty、IIS。由于设计阶段和资源的限制,各自都有其定位和不同的发展方向。Tomcat和Jetty面向Java,先天为重量级web服务器,性能比较低IIS只能在Windows操作系统上运行。而Windows作为服务
2020-07-10 00:03:19
302
原创 实用的git命令总结
实用的git命令总结从接触git到现在也有一段时间了,记录一下趟过的坑和常用的命令操作,持续更新中~新建仓库并与远程仓库关联//本地新建文件夹并进入git initgit remote add origin XXXX //远程仓库的地址//如果远程仓库有文件,包括可能是新建仓库存在的readmegit pull --rebase origin master最最最常用的git三连~git add . //可以根据需要指定具体的文件或者文件夹git commit -m"修改的内容"
2020-07-07 22:43:53
126
原创 代理服务总结
代理服务总结前言为什么要有代理过滤器访问控制安全防火墙web缓存反向代理内容路由器转码器匿名传输代理的分类正向代理反向代理前言最近想深入了解ngnix,在代理这块的理解有点模糊,对代理比较直观的印象是客户端可以通过一个正向代理访问受限的资源(翻墙)。为了进一步了解ngnix提供的代理功能,不同情况下需要使用的代理类型、功能、应用场景和其作用都需要有一个比较透彻的掌握,对学习ngnix以及之后的工作中也有好处。为什么要有代理代理服务器位于客户端和服务器之间,扮演中间人的角色,在各个断点之间来回传输数据
2020-07-05 21:45:58
414
原创 算法总结之贪心算法
算法总结之贪心算法贪心算法概要贪心算法,顾名思义,就是做出对当前最有利的选择。贪心算法并不从整体最优考虑,而是一定意义上的局部最优解。当然在很多情况下,贪心算法得到的最优解也是整体上的最优解,如最短路径问题、最小生成树问题,一些情况下,贪心算法得到的即使不是全局最优解,其结果也是最优解的很好近似。当问题的精确求解变得非常困难时,使用贪心算法对问题进行求解,也是一种可行的办法。但是需要注意的是...
2020-01-28 17:53:19
562
原创 算法总结之动态规划
算法总结之动态规划动态规划基础0-1背包问题完全背包问题多重背包问题leecode 1143 Longest Common Subsequenceleecode 121 122 123 188 309 714 best time to buy and sell stockleecode 121 best time to buy and sell stockleecode 122 best time...
2020-01-09 21:51:47
304
原创 算法总结之分治法
算法总结之分治法什么是分治法分治法的典型问题求解寻找旋转排序数组中的最小值二叉树距离最大值二叉树局部最小凸边形划分方式显著逆序数对什么是分治法分治,分治,分而治之。这句话应该是分治法的核心所在。当给定一个问题之后,首先是观察最简单的实例。如果能够解决最简单的实例,那接下来思考能不能将大的实例分解为小的实例?能否将小实例组合形成大的实例的解?如果两个问题的答案都是能的话,那么可以说大的实例能够...
2020-01-09 21:08:04
726
原创 c++后台开发菜鸡到找到实习总结
距离投递简历到找到现在开始总结实际上已经快三周了,从最开始的对自己不自信到后来慢慢找到面试的感觉,我感觉成长还是很大的。实习投了五家公司(字节跳动、百度、猿辅导、搜狗、快手),除了百度是同学发的实习JD、字节跳动在官网直接投递,其余的都是在牛客实习广场上找到的(大赞牛客),除了猿辅导均接到面试邀请(一直怀疑猿辅导的日常实习是否存在),搜狗和字节跳动拿到offer、百度二面之后没消息(应该是凉了)...
2019-12-16 11:28:46
741
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人