自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Web服务器---TinyWebServer代码详细讲解(log模块)

Web服务器---TinyWebServer代码详细讲解(log模块)基础知识单例模式经典的线程安全懒汉模式局部静态变量之线程安全懒汉模式饿汉模式异步日志block_queue.h 代码解析log.cpp代码解析log是日志模块,一个合格的服务器当然少不了日志来记录错误异常等等信息。我们想设计一个日志模块,他能顺利写日志但是又不要占用主线程时间去写,所以我们设计异步写日志的模块。基础知识日志,由服务器自动创建,并记录运行状态,错误信息,访问数据的文件。同步日志,日志写入函数与工作线程串行执行,由于涉

2021-02-06 18:32:43 3207 4

原创 Web服务器---TinyWebServer代码详细讲解(timer模块)

TinyWebServer代码详细讲解(timer模块)基础知识设计思路定时器触发方式定时器的数据结构代码详解基础知识非活跃,是指客户端(这里是浏览器)与服务器端建立连接后,长时间不交换数据,一直占用服务器端的文件描述符,导致连接资源的浪费。定时事件,是指固定一段时间之后触发某段代码,由该段代码处理一个事件,如从内核事件表删除事件,并关闭文件描述符,释放连接资源。定时器,是指利用结构体或其他形式,将多种定时事件进行封装起来。具体的,这里只涉及一种定时事件,即定期检测非活跃连接,这里将该定时事件与连接

2021-01-27 17:35:28 2458

原创 Web服务器---TinyWebServer代码详细讲解(http模块)

TinyWebServer代码详细讲解(http模块)http模块设计思路http_conn.cppread业务函数集process_read函数parse_request_line函数总结这里的参照的代码是https://github.com/qinguoyi/TinyWebServer对于原代码的不足之处,我会在之后的文章中给出改进代码 在笔者fork的这版中,原代码作者对于代码作出了更细化的分类细节问题可以参考《APUE》《Linux高性能服务器编程》或者我之前的博客毋庸置疑,http模块

2021-01-27 17:08:36 5784

原创 Web服务器---TinyWebServer代码详细讲解(threadpool模块)

TinyWebServer代码详细讲解(threadpool模块)threadpool.h设计思路代码详解preactor与reactor总结这里的参照的代码是https://github.com/qinguoyi/TinyWebServer对于原代码的不足之处,我会在之后的文章中给出改进代码 在笔者fork的这版中,原代码作者对于代码作出了更细化的分类细节问题可以参考《APUE》《Linux高性能服务器编程》或者我之前的博客threadpool.h设计思路一个web服务器几乎离不开多线程了

2021-01-27 16:25:55 3180 3

原创 Linux网络编程:优雅的关闭连接

在这里插入代码片

2021-01-26 18:14:34 1705 6

原创 Web服务器---TinyWebServer代码详细讲解(main与WebServer)

编写一个Web服务器---代码模块详细讲解(上)config 独立参数模块ET与LT模式config.h代码解读config.cpp代码解读main 模块这里的参照的代码是https://github.com/qinguoyi/TinyWebServer对于原代码的不足之处,我会在之后的文章中给出改进代码在笔者fork的这版中,原代码作者对于代码作出了更细化的分类细节问题可以参考《APUE》《Linux高性能服务器编程》或者我之前的博客阅读任何源码一定要先从readme入手,如果没有rea

2021-01-26 17:51:32 13086 5

原创 Linux网络编程:事件处理模式与并发编程模式

事件处理模式与并发编程模式事件处理模式Reactor模式 — 异步I/OProactor — 异步I/O同步I/O模拟Proactor模式并发编程模式并发模式中的同步和异步半同步/半异步模式 或 半同步/半反应堆模式半同步/半异步模式工作流程半同步/半反应堆工作流程(以Proactor模式为例)领导者-追随者模式(Leader-Follower)还是游双大佬的《高性能Linux服务器编程》事件处理模式服务器端主要需要处理三类事件,I/O事件,定时事件和信号对于这些事件的处理,可以分成两种模式

2021-01-25 20:28:52 1100 2

原创 Linux网络编程:IO模型,IO多路复用思想

I/O部分详解以及代码实现参考书籍《后台开发 核心技术与应用实践》《Linux高性能服务器编程》 《APUE》之前唠到了socket,唠到了怎么建立连接。这篇文章就唠一下,怎么向socket中写数据,怎么从socket中读出数据...

2021-01-22 11:50:33 1237

原创 从零开始:编写一个Web服务器---【建立连接与关闭连接】详细解析与代码实现

【建立连接】详细解析与代码实现Socketsocket()参考书籍《后台开发 核心技术与应用实践》《Linux高性能服务器编程》 《APUE》SocketSocket是任何网络编程都绕不开的话题。在一切皆文件的Linux系统下,你可以视Socket为一个“文件”这个文件可以支持读和写,打开和关闭意味着我可以将我手中的数据写入socket:打开socket->写入数据可以读socket的数据:打开socket->读出数据作为文件,socket当然有自己的文件描述符,意味着它可以

2021-01-21 14:19:32 1459

原创 从零开始:编写一个Web服务器---Sever端与Client端详解与代码实现

Sever端与Client端详解与代码实现Server端Client端总结参考资料:《后台开发 核心技术与应用实践》《Linux高性能服务器编程》Server端Server端实现的功能很简单:调用http的解析,返回http的处理结果当然这篇文章不牵扯线程池,IO,socket具体的使用,仅从业务逻辑上介绍Sever端应该做什么在程序中,Server端会被封装成一个类。在具体实现中,这个Server会new出http的对象,然后调用http的解析函数,当http解析完成后,delete掉对应的

2021-01-21 13:53:10 1763

转载 C++继承模型的内存布局

C++继承模型的内存布局对于多继承情况考虑示例代码struct Base1 {...};struct Base2 {...};struct Derived : Base1, Base2 {...};有如下内存布局首先出现的是派生类Derived类的虚表指针vptr(这里插入一个提醒:一直以来vptr都被国人翻译为虚函数表指针但是vtbl英文原文是virtual table并非virtual function table。为什么呢因为这个表不只是为了虚函数而准备的一切虚拟化技术都会用这个表

2021-01-20 18:01:33 382 1

原创 从零开始:编写一个Web服务器---HTTP部分详细讲解以及代码实现(二)

HTTP部分详细讲解以及代码实现(二)Web服务器中的有限状态机HTTP有限状态机从状态机主状态机在此之前,我希望你可以读一下我的另一篇文章:Linux网络编程:状态机本文介绍了Web服务器中的状态机参考书籍《后台开发 核心技术与应用实践》参考代码 https://github.com/qinguoyi/TinyWebServerWeb服务器中的有限状态机Web服务器中的有限状态机体现在两个方面:http和tcphttp有限状态机体现在业务逻辑处理tcp有限状态机体现在对于连接情况的

2021-01-17 20:04:08 3031 3

原创 Linux网络编程:状态机

Linux网络编程:状态机

2021-01-17 14:07:14 2013 1

原创 从零开始:编写一个Web服务器---HTTP部分详细讲解以及代码实现(一)

HTTP部分详细讲解以及代码实现HTTP---Hyper Text Transfer Protocol(超文本传输协议)HTTP请求过程HTTP请求分类状态码(Status-Code)如何实现HTTP部分?分析功能Client与Server共有功能Client专属功能Server专属功能代码实现本文是从零开始Web服务器的第二篇,本篇将正式从代码入手讲解整个网络编程给出笔者学习期间接触到的Web服务器代码(C/C++)连接https://github.com/EZLippi/Tinyhttpdht

2021-01-16 22:00:21 4309 2

原创 从零开始:编写一个Web服务器---了解Web服务器

从零开始:编写一个Web服务器---1.了解Web服务器什么是Web Server?用户如何与Web Server通信HTTP协议的基本过程(应用层)TCP协议的基本过程(运输层)在看完Linux网络编程之后,突然想做一个有挑战性的项目,实现一个高性能的Web服务器。于是我萌生了一边自己学着写服务器,一边详细的写出一个Web服务器的整体流程。本系列文章推荐的参考书有:《Linux高性能服务器编程(游双)》 《APUE》《CSAPP》阅读本系列文章不需要全部弄懂这几本书,只需要有一个大概框架即可,参考

2021-01-16 17:15:38 2104

原创 STL学习-----list使用简要总结

文章目录List使用简要总结(链表)List 介绍List 构造函数List 赋值和交换List大小操作List插入和删除List数据存取List反转和排序List使用简要总结(链表)List 介绍List采用动态存储分配,不会造成内存浪费和溢出,可以通过修改指针来完成插入和删除,但是对于遍历消耗较大。同时,list的插入和删除都不会造成原有的迭代器失效(与vector不同)List 构...

2020-02-03 15:36:46 314

原创 STL学习-----stack容器简要使用总结

文章目录Stack (栈)构造函数赋值操作数据存取大小操作Stack (栈)构造函数stack<T> stk; //采用模板类实现,stack对象的默认构造形式stack(const stack &stk); //拷贝构造赋值操作stack& operator=(const stack &stk); //重载=数据存取push(el...

2020-02-03 14:48:43 297

原创 STL-----Deque容器使用简要总结

文章目录Deque容器使用简要总结Deque容器的基本概念Deque构造函数函数原型示例Deque赋值操作函数原型示例Deque大小操作函数原型示例Deque容器使用简要总结Deque容器的基本概念双端数组,可以对头端进行插入删除操作(双端队列)头文件为dequedeque与vector的区别vector对于头部的插入与删除效率极低vector访问元素的速度要比deque快,这与内...

2020-02-03 12:34:22 442

原创 STL学习-----Vector容器使用简要总结

文章目录Vector 使用简要总结Vector 构造函数Vector 常用的赋值操作v.assign() 调用重载=操作符Vector 使用简要总结Vector 构造函数 vector<T> v;//采用模板类实现类实现,默认构造函数 vector(v.begin(), v.end());//将v[begin(),end())区间中的元素拷贝给本身 vector(n, ele...

2020-02-02 22:05:00 333

原创 STL学习-----String容器使用简要总结

文章目录String容器使用简要总结String基本概念String构造函数构造函数原型示例String 赋值操作赋值函数原型示例String字符串拼接函数原型示例String查找和替换函数原型示例String 字符串比较比较方式函数原型示例字符存取函数原型示例String 插入和删除函数原型示例获取子串函数原型示例String容器使用简要总结String基本概念本质:string是C+...

2020-02-02 18:57:17 845

原创 C++ STL初识

文章目录STL的诞生STL的基本概念STL六大组件STL中容器、算法、迭代器容器:算法迭代器STL的诞生长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量的重复工作为建立数据结构和算法的一套标准,诞生了STLSTL的基本概念STL(Standard Template ...

2020-02-02 15:41:29 235

原创 函数模板

文章目录函数模板语法语法解释示例函数模板案例函数模板语法函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表语法template <typename T>解释template ---- 声明创建模板typename ---- 表明其后面的符号是一种数据类型,可以用class代替T ---- 通用数据类型,名称可以替换,通...

2020-02-02 11:36:25 158

原创 5 C++文件操作

文章目录文件类型文件打开方式操作文件写文件读文件程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化C++中对文件操作需要包含头文件<fstream>文件类型文本文件 --文件以文本的ASCII码形式存储在计算机中二进制文件 – 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们文件打开方式打开方式解释...

2020-02-01 22:25:32 103

原创 4.7.6 多态案例3--电脑组装

文章目录案例描述示例案例描述电脑的组成:CPU,显卡,内存条将每个零件封装成抽象基类,并且提供不同的厂商生产不同的零件,创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口测试时组装三台不同的电脑进行工作示例#include <iostream>#include <vector>#include <cstdlib>#include &lt...

2020-02-01 21:22:01 358

原创 4.7.5 虚析构和纯虚析构

文章目录虚析构和纯虚析构的共性:虚析构和纯虚析构的区别语法示例虚析构纯虚析构多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码解决方式:将父类中的析构函数改为虚析构或者纯虚析构虚析构和纯虚析构的共性:可以解决父类指针释放子类对象都需要有具体的函数实现虚析构和纯虚析构的区别如果是纯虚析构,该类属于抽象类,无法实例化对象语法虚析构语法v...

2020-02-01 19:34:02 280

原创 4.7.4 多态案例2--做奶茶

案例描述利用多态技术实现,提供抽象制作饮品基类,提供子类制作咖啡和茶叶示例#include <iostream>#include <vector>#include <cstdlib>using namespace std;class AbstractDrinking{public: //烧水 virtual void Boil() = ...

2020-02-01 14:40:37 331

原创 4.7.3 纯虚函数和抽象类

在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。因此可以将虚函数改为纯虚函数纯虚函数语法:virtual 返回值类型 函数名 (参数列表) =0;当类中有了纯虚函数,这个类也成为抽象类抽象类特点无法实例化对象子类必须重写抽象类中的纯虚函数,否则也属于抽象类示例//以计算器类为例class AbstractCaculator{public: vi...

2020-02-01 14:28:57 121

原创 4.7.2 多态案例--计算器类

4.7.2 多态案例--计算器类案例描述多态的优点示例案例描述分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类多态的优点代码组织结构清晰可读性强利于前期和后期的扩展以及维护示例#include <iostream>#include <vector>#include <cstdlib>using namespace st...

2020-02-01 12:29:10 403

原创 DW数据结构与算法学习任务----Task01:数组

Task01:数组(1天)理论部分理解数组的存储与分类实现动态数组,该数组能够根据需要修改数组的长度答1:数组元素在内存中顺次存放,它们的地址是连续的。元素间物理地址上的相邻,对应着逻辑次序上的相邻。练习部分1.利用动态数组解决数据存放问题编写一段代码,要求输入一个整数N,用动态数组A来存放2~N之间所有5或7的倍数,输出该数组。示例:输入:N = 100 输出:5 ...

2020-01-06 13:06:12 425

转载 C++后台开发学习路线

C++后台开发学习路线学习建议C++基础数据结构与算法数据结构算法刷题操作系统操作通用知识Linux内核计算机网络数据库设计模式作者:玩铁的搬砖工链接:https://www.nowcoder.com/discuss/164781?type=2来源:牛客网学习建议对于技术岗,软件基础知识可以说是个人的硬实力,是你能通过面试的一个大前提。而说到软件基础的学习,对于很多还没有基础的同学可能会...

2019-12-19 20:26:01 1569

空空如也

空空如也

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

TA关注的人

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