自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++数据库连接池的设计与实现

项目背景 为了提高MySQL数据库(基于C/S设计)的访问的瓶颈,除了在服务器端增设缓存服务器缓存常用的数据之外(如redis),还可以增加数据库连接池,来提高MySQL Server的访问效率,在高并发的情况下,大量的TCP三次握手、MySQL Server连接认证、MySQL Server关闭连接回收资源以及TCP四次挥手所耗费的性能消耗是很明显的,增加连接池就是...

2020-02-26 14:54:18 1551 7

原创 剑指offer | 链表

文章目录链表结构的定义链表结构的定义对于链表的操作,在面试中经常会被提及,因为面试时间内有限,而链表代码的描述以及操作难度适中,所以在面试中被提及到的概率比较高,我将剑指offer上关于链表的操作做了以下总结:首先,我们先来定义一个链表结构:...

2019-12-05 15:36:55 130

原创 C++STL顺序容器——vecotr底层分析以及仿写

目录vector的基本数据结构vector的增删操作vector的基本数据结构1、vector采用的是简单线性连续空间,两个迭代器start和finish分别指向vector已使用的空间范围用end_of_storage指向整块儿的连续空间,其结构如下:template<class T, class Alloc = alloc>class v...

2019-11-26 19:55:11 390

原创 Linux进程间通讯

文章目录管道信号量基本概念管道信号量基本概念临界资源 任意时刻只能被一个进程(线程)访问的资源称为临界资源临界区当多个进程同时访问系统上的某个资源时,比如同时修改某个文件,就要考虑进程的同步问题,以确保任一时刻只有一个进程拥有对此资源的操作权限,对临界资源进行访问的这段代码就称之为临界区。原子操作指的是该操作不会在执行完成之前被其它操作或者任务所打断,也就是说不会执行的最小单...

2019-11-26 15:06:13 158

原创 epoll的使用方法及代码

一、epoll函数组解析1、epoll_create函数函数原型int epoll_create(int size)参数解释(1)size:此参数在现在已经没有是什么意义了(2)返回值:返回值为一个文件描述符,作为后面两个函数的参数函数作用此函数可以在内核中创建一个内核事件表,通过返回的内核事件表来管理2、epoll_ctl函数函数原型int epo...

2019-05-16 17:29:35 1945

原创 poll 的使用方法及代码

一、在谈epoll和poll网络编程代码之前,首先简单的介绍一下poll函数和epoll函数组1、poll函数原型使用此函数的头文件为#include<poll.h>poll函数原型如下:#include<poll.h>int poll(struct poll_fd *fds, nfds_t nfds, int timeout)参数解释(...

2019-05-16 13:53:07 7086 2

原创 C++海量数据处理——topk和查重问题分析

b

2020-06-10 10:31:41 1203

原创 nginx内存池源码剖析

nginx的简单介绍Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等,下面,我们将对Nginx的内存池部分源码进行剖析。nginx内存池之创建内存池源代码:ngx_pool_t *ngx_create_pool(size_t size, ngx_lo.

2020-05-28 01:54:05 182

原创 剑指offer | 统计数组中中的逆序对儿个数

什么是逆序对儿? 逆序对儿的定义为:在一个数组中,有两个数满足数组的下标满足i < j 时arr[i] > arr[j], 这样的一对儿数字称之为逆序对儿,再 为了有助于理解,再简单举个例子吧,有一数组arr中有四个元素,分别为7,4,8,6,那么7和4、7和6、8和6都是这个数组的逆序对儿,那么这个数组的逆序对儿个数就为3。那如何来求解他们的逆序对儿个数呢,请看下面的思路...

2020-03-22 13:34:12 301 2

原创 select、poll、epoll三组I/O复用的比较

这三组系统调用都能同时监听多个文件描述符。他们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回,返回值是文件描述符的数量。返回0代表没有事件发生。下面我们从事件集、最大文件描述符、工作模式以及具体实现等四个方面比较他们的异同。 这三组函数都通过某种结构体变量来告诉内核监听那些事件描述符上的事件,并使用该结构体类型参数来...

2020-03-13 11:25:46 148

原创 简析生产者消费者模式及代码实现

生产者消费者模式概念生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几点:1)生产者生产的时候消费者不能消费2)消费者消费的时候生产者不能生产3)缓冲区空的时候消费者不能消费4)缓冲区满的时候生产者不能生产代码实现下面我使用线程同步的原语条件变量和互斥锁来实现生产者消费者模式,用链...

2020-03-13 09:54:55 239

原创 剑指offer | 树(包含了书上所有的对树的操作)

文章目录对树结构的定义对于节点的定义重建二叉树(面试题7)题目描述及思路代码实现二叉树的层序遍历(32题)题目及思路描述代码实现对树结构的定义对于节点的定义struct BinaryTreeNode{ int value; BinaryTreeNode *left; BinaryTreeNode *right;};重建二叉树(面试题7)题目描述及思路已知树的前中序遍历,重建...

2019-12-31 10:19:17 144

原创 剑指offer |栈的压入弹出顺序

文章目录题目描述及思路解析代码实现题目描述及思路解析输入两个整数序列,第一个序列代表的是栈的压入顺序,判断第二个序列是否为栈的弹出序列。例如,{1,2,3,4,5}是某栈的压入顺序,序{4,5,3,2,1}是该栈的一个弹出序列,而对于{4,3,5,1,2}就不可能是栈的弹出序列。需要一个辅助栈,首先我们将元素入栈,当入栈元素与要弹出的元素相同时,直接弹出,当与要弹出的元素不同时,就将元素先入辅...

2019-12-17 21:38:17 67

原创 剑指offer|空格替换(第五题)

文章目录题目描述解题思路时间复杂度为O(n2)的解题思路时间复杂度为O(n)的解题思路代码实现题目描述实现一个函数,把字符串中的每个空格替换成“20%”,例如:we are happy,则输出“we20%are20%happy”。解题思路时间复杂度为O(n2)的解题思路当我们看到这道题的第一个思路可能是从头开始遍历字符串数组,当遇到空格的时候就将空格替换成20%,这种解法,每次插入的时候...

2019-12-10 12:17:48 74

原创 迭代器以及迭代器失效问题的深度剖析

文章目录迭代器的应用实例(vector为例)迭代器基础概念vector迭代器简单实现string类迭代器简单实现迭代器失效问题什么是迭代器失效从底层源码理解迭代器失效如何处理迭代器失效问题迭代器的应用实例(vector为例)#include <vector>using namespace std;int main(){ std::vector<int> ve...

2019-11-29 20:11:05 557

原创 TCP协议详解

一、tcp头部结构1、tcp服务的特点①面向连接、字节流、可靠的传输②必须先建立连接,才能开始数据的读写,必须为该连接分配一定的内核资源。全双工通信。③tcp协议的这种连接是一对一的,所以基于广播和多播的(目标是多个主机地址)的应用程序应使用无连接协议udp。2、字节流与数据报的区别:表现为通信双方的读写次数是否相同。(tcp不同,而udp写一次必须读一次)3、t...

2019-11-22 19:34:53 185

原创 C语言函数指针与指针函数

在大家刚开始学习c语言的时候,总是分不清函数指针和指针函数,就算是知道了它们之间的区别,也不了解它们的使用场景,我写此博客帮大家缕一缕,也帮我自己缕一缕1、函数指针与指针函数的概念以及区别指针函数从名字上可以看出,首先它是一个函数,指针指的是返回值为指针函数指针从名字上可以看出,首先他是一个指针,并且是指向函数的指针2、函数指针与指针函数的区别①概念上的区别:函数指...

2019-05-17 13:32:23 1387

原创 C++的动态绑定与静态绑定

一、首先,说说为什么要实现动态绑定,动态绑定是为了实现多态的一种方式,在C++里,多态分为动态的多态和静态的多态:静态的多态:如函数重载,模板动态的多态:基类指针/引用,指向不同的派生类对象,通过指针调用派生类和基类的同名覆盖方法,基类指针指向哪个派生类对象,就能调用相应派生类重写的覆盖方法。二、动态绑定与静态绑定的区别静态绑定:发生在编译阶段动态绑定:发生在运行阶段(发生的条...

2019-05-04 12:23:46 945

原创 C++ STL库之容器二级空间配置器源码剖析

一、首先,我们来说说,为什么要使用二级容器空间配置器,了解过容器一级空间配置器的同学都应该知道容器一级空间配置器申请,与释放空间是通过malloc和free来实现的,在不断申请和释放小片空间后,如果要在申请表一块儿较大的空间时,就会产生内存碎片,如下图所示:二级空间就是来管理内存,提高内存的使用效率的。二、然后,我们来看看空间容器适配器的实现机制,如下图所示:三、接下来,...

2019-04-15 18:02:12 285

原创 C与C++的区别

如果问大家C语言与C++的区别有哪些?我想,大家的第一反应应该就是C语言是面向过程的语言,而C++是面向对象的语言,如果在面试里面试官问到时,这样回答也未必太简略了吧,下面是我总结的C语言与C++语言之间的区别1、C++语言有内联函数,而C++没有,那么内联函数与普通函数的区别有哪些呢?①内敛函数在调用处展开,而普通函数需要开辟栈帧②因为内联函数在调用处展开,所以无栈...

2019-04-05 18:34:07 117

空空如也

空空如也

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

TA关注的人

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