自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 git版本控制器的基本操作

关于git版本控制器前言:最开始听到git版本控制器是在2021年6月份,当时觉得不重要或者有点麻烦且平时也不大用得到就没有真正的认真的学习过,等到自己想用git的时候每次都要搜博客从创建仓库的命令开始看,结果只是能push就为止了。后来反反复复多次需要使用的时候都不知道如何使用,且面试中基本上都会问到关于git的知识,所以我要系统的学习和使用git配置gitgit config --global user.name "...."#远程仓库的git config --global user.emai

2022-03-12 22:55:55 314

原创 定时器设计(红黑树,堆,时间轮)

定时器设计,红黑树,堆和时间轮的三种实现方法。适用于多线程中定时任务。

2022-03-02 23:42:57 836

原创 异步请求池

异步请求池同步异步的区别?概念:是两者之间的关系。例如进程和进程,或者客户端和服务器。调用或发送请求后是否会挂起等待返回。同步:进程调用接口后会挂起等待返回,此时两个线程是同时进行这个过程的,称为同步异步:进程调用后不会挂起等待,转而去执行其他的任务,等到有结果返回时,会通知此进程再接收处理。此时两个进程不是同时进行这个过程的,称为异步应用场景当业务器访问需要等待的业务时,业务访问线程需要等待挂起直到服务器给出反馈,例如对mysql,redis,http,dns等服务的请求,这些请求的返回需要

2022-02-27 21:22:18 561 2

原创 池式结构:内存池

从进程的虚拟内存空间看:栈的大小,生存周期是受限的。且被操作系统自动管理,所以申请全局的空间一般都是申请堆上空间,手动释放堆空间的隐患:频繁的使用(new,delete,malloc,calloc,free)会导致出现内存碎片。降低内存的利用率申请内存而忘记回收,会造成内存泄露,影响程序的效率。解决办法:内存池原理:在真正使用内存之前,预先申请分配一定数量、大小预设的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存,当内存释放后就回归到内存块留

2022-02-26 23:18:51 385

原创 运输层协议TCP与网络编程

运输层协议TCP与网络编程TCP1.TCP报文段结构应用进程通过套接字传递数据流,TCP将这些数据引导到该连接的发送缓存(send buffer),发送缓存是三次握手期间设置的,还有接收缓存(resv buffer)。TCP会是不是从其中取出一块数据进行发送。该数据块的大小受限于最大报文段长度MSS,MSS由本地发送最大的链路层帧长度(MTU)控制。一般MTU:1500字节,MSS:1460字节。TCP连接的组成:缓存,套接字2.连接的建立TCP只在端系统中运行,是一条逻辑连接。对于中间网络元

2022-02-20 17:17:26 1229

原创 epoll和reactor(反应堆)模型

epoll和reactor(反应堆)模型epoll的特点和工作方式:首先epoll是管理网络I/O的,还有select,poll等。他们关注的是网络I/O进而去处理事件。例如客户端/服务器中,在服务器端即是监听listenfd,接收连接请求后的clientfd通过epoll监听返回事件集合。并且遍历所有的fd寻找到对应的fd再进行读写事件的判断。server代码如下:#include<func.h>int main(int argc,char* argv[]){ ARGS_

2022-01-31 07:58:41 712

原创 Makefile的实际应用

实际项目中的应用例写一个complicated项目利用Makefile创建目录版本1:.PHONY:clean allMKDIR = mkdirDIRS = objs exesall:$(DIRS)$(DIRS): @$(MKDIR) $@2.对源文件进行编译版本2:.PHONY:clean allMKDIR = mkdirDIRS = objs exesCC = gccRM = rmRMFLAGS = -frSRCS = $(wildcard *.c)OBJS

2022-01-06 21:59:38 277

原创 Makefile基本概念,变量,模式,相关函数

Makefile三个概念:目标,依赖,命令版本1all: @echo "hello world"#简单的显示,all是目标(target)#@echo "hello world" 生成目标的命令语句Makefile的基本单元是规则一个规则是由目标,先决条件,命令组成;目标和先决条件是依赖关系,且先决条件可以是其他目标版本2//foo.cvoid foo(){ cout << "hello world" << endl;}//main.cext

2022-01-04 16:04:57 388

原创 设计模式(C++实现):单例模式,策略模式,责任链模式,装饰器模式

设计模式:单例模式保证一个类只有一个实例,并提供一个该例的全局访问点。代码版本1 class Singleton{ public: static Singleton* getInstance(){ if(_pInstance == nullptr){ _pInstance = new Singleton(); } return _pInstance; }

2021-12-17 16:57:38 1089

原创 设计模式(C++的实现):模板方法 和 观察者模式

设计模式(C++)设计模式依托于设计原则,最主要的是设计原则的理解,在设计模式中理解原则,使用原则尤为重要。模式设计原则:依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖抽象抽象不应该依赖具体实现,具体实现应该依赖于抽象开发封闭原则:一个类应该对扩展开发,对修改关闭面向接口编程:不将变量类型声明为某个特定的具体类,⽽是声明为某个接⼝。客户程序⽆需获知对象的具体类型,只需要知道对象所具有的接⼝。减少系统中各部分的依赖关系,从⽽实现“⾼内聚、松耦合”的类型设计⽅案

2021-12-15 15:45:26 1159

原创 排序算法:希尔排序 快速排序

希尔排序核心思想:将数据分组,例12个数的数组,先分6组再分3组再分1组,这样越往后数组越趋于有序。例:每一次排序之后,数组都比上一次更加有序,相对应的交换次数也会减少。int shell_sort(vector<int>& arr){ int gap = 0; int length = arr.size(); for(gap = length / 2;gap > 0; gap /= 2){//分多少组 for(i

2021-12-11 20:36:53 325

原创 2021/7/24 ~ 2021/9/22linux服务器编程读书笔记

7/28一.高级I/O函数1.1pipe函数创建管道,用于进程间通信,通过pipe创建的一对文件描述符是阻塞的#include<unistd.h>int pipe(int fd[2]);1.2dup函数和dup2函数#include<unistd.h>int dup(int file_descriptor);//创建一个新的文件描述符,该文件描述符与原文件描述符指向相同的文件,管道或网络连接,返回系统可调用最小的整数值int dup2(int file_des

2021-09-22 09:42:46 159

原创 定时器详解

定时器2021/9/13定义:服务器程序管理众多定时事被触发件,有效组织这些定时事件,使之能在预约时间点被触发而不影响服务器主逻辑。1.定时器分类:linux下三种定时方法socket中的SO_RECVTIMEO和SO_SNDTIMEOSIGALRM信号I/O复用系统调用的超时重传机制基于升序链表的定时器时间轮时间堆2.Linux下三种定时方法使用2.1socket中的SO_RECVTIMEO和SO_SNDTIMEO使用限制:这两个宏或选项只对与数据的接收发送相关的soc

2021-09-15 23:59:41 745

原创 线程池的C++实现

//先看主体流程,再细分到具体函数的实现。//首先初始化线程池,里面涉及到初始化任务队列,然后开启线程池,即循环创建线程//准备工作做完后,就可以处理客户端的请求了。建立TCP监听套接字,并且初始化一下//即bind绑定ip,port//再用epoll去管理套接字,进入while(1)循环,处理具体的客户端请求//以下是以传输文件为任务实现的工作线程。int main(int argc,char* argv[]){ ARGS_CHECK(argc,4); int threadN

2021-09-12 17:29:06 509

原创 STL_alloctor空间配质器源码解析

STL_alloctor空间配质器源码解析使用工具:Notepad++ SlockEdit源代码,方便阅读,将一些代码段去除了。template <class _Tp>class allocator { typedef alloc _Alloc; public: _Tp* allocate(size_type __n, const void* = 0) { return __n != 0 ? static_cast<_Tp*>(_

2021-08-27 15:03:45 137

原创 C++ 多态(1)

多态什么是多态?多态性( polymorphism )是面向对象设计语言的基本特征之一。多态性可以简单地概括为“一个接口,多种方法”。通俗的说是指对于同一个消息、同一种调用,在不同的场合,不同的情况下,执行不同的行为 。多态的两种形式C++支持两种多态性:编译时多态和运行时多态。编译时多态:也称为静态多态,像函数重载、运算符重载就是采用的静态多态,C++编译器根据传递给函数的参数和函数名决定具体要使用哪一个函数,又称为先期联编(early binding)。运行时多态:在一些场合下,编译器无

2021-08-24 22:50:57 161

原创 2021-07-24-------读书笔记

7/23三.TCP协议详解3.1tcp服务的特点传输层协议有两个tcp和udp,tcp相对udp协议特点是:面向连接,字节流和可靠传输tcp协议通信双方都必须为连接分配必要的内核资源,用以管理连接状态和数据传输,tcp连接是全双工的tcp协议连接是 一对一的字节流服务:应用程序对数据的发送和接收没有边界限制。udp是数据报服务,发送端应用程序每一次写操作都会封装成一个udp数据报并发送,接收端必须执行读操作,否则就会丢包。两者区别:在实际编程中体现为通信双方是否执行相同次数的读写,tcp协

2021-07-24 10:20:35 96

原创 2021-07-22

7/226.1DNS工作原理--------分布式域名服务系统:将域名转换为IP地址每个DNS服务器上存放了大量的机器名和IP地址映射且动态更新,网络客户端通过DNS协议向DNS服务器查询目标主机IP地址。问:TCP/IP中使用的是IP地址和端口号来确定网络上某一台主机上的某一个程序,不免有人有疑问,为什么不用域名来直接进行通信呢?\1. 因为IP地址是固定长度的,IPv4是32位,IPv6是128位,而域名是变长的,不便于计算机处理。\2. IP地址对于用户来说不方便记忆,但域名便于用户使用,

2021-07-22 17:14:19 147

原创 2021-07-21

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-07-21 15:05:10 122

空空如也

空空如也

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

TA关注的人

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