- 博客(39)
- 收藏
- 关注
原创 设计模式的简单认识
fill:#333;color:#333;color:#333;fill:none;}如何学习设计模式学习目的在现有的设计模式基础上,更好地扩展代码做功能抽象时,如何选择设计模式重点关注方面该设计模式解决了什么问题稳定点变化点该设计模式的代码结构符合那些设计原则如何扩展代码应用场景。
2022-11-01 15:15:16
179
1
原创 从汇编的角度解决++i,i++是左值、右值问题
1、j = ++i,j = i++在编译级别的代码本质上是两步操作,理解两者的区别,对于c++级别就足够了。3、j=i++ 等价于 i+=1;j=(i多进行的一次mov保留的字面值)值得注意的是,不同优化等级的编译结果是相同的,这也方便我们去比较两者的区别;2、j = ++i 等价于 i+=1;注释不是很能说明问题,我们将其进行编译;
2022-10-23 10:16:56
510
原创 C++中的auto推导规则
1、auto声明多个变量从左向右推导,并且从右向左推导具有相同结果。C++需要了解auto的推导规则才能对auto进行正确的使用!2、auto声明优先拷贝,auto&&优先采用引用。3、auto&只对左值进行引用。
2022-10-22 10:20:18
1267
转载 lua-nginx-module
ngx_http_lua_module - Embed the power of Lua into Nginx HTTP Servers.This module is a core component of OpenResty. If you are using this module,then you are essentially using OpenResty.This module is not distributed with the Nginx source. Seethe installa
2022-10-18 21:30:59
1454
原创 异步请求池
当服务器运行时,难免会和大量其余中间件(mysql,redis...)或者其他服务器进行连接请求。但是如果每送一次连接,就等待其请求的返回,如下图,难免会造成服务器响应慢,任务堆积的问题,所以为了解决这一问题,可以制作一个异步的连接池!!!...
2022-07-04 15:44:34
290
原创 协程的相关问题
用epoll组件制作的协程,在不加入具体业务的情况下,速度是要略慢于epoll组件本身制作的reactor的,在加入具体业务之后,协程所带来的异步特性才会体现出来(注意,同步io人为改变成异步io实现的异步性能上只能接近于异步)理解了写成大致的制作思路,再初步的了解一下协程常用api...
2022-06-22 19:20:48
215
原创 STL标准模板库————set
所有元素都会在插入时自动被排序。本质set/multiset属于关联式容器,底层结构是二叉树结构set和multiset的区别: set不允许有重复元素 multiset允许有重复的元素set<int> s;pair<set<int>::iterator , bool> ret = s.insert(10);//set类型插入后返回pair形式的结果修改set/multi的排序规则class My...
2022-05-11 11:09:07
121
原创 STL标准模板库————list
将数据进行链式存储,list表示一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的构成:结点构成结点构成:数据+指针链表和数组的优缺点优点:可以对任意位置进行快速插入和删除缺点:1、空间遍历速度比数组慢 2、占用空间较多list的优缺点list 优点:1、采用动态存储分配,不会造成内存浪费2、链表执行插入和删除操作方便list缺点:1、链表灵活,空间和时间额外耗费大...
2022-05-10 14:46:14
192
原创 STL标准模板库————stack、queue
stack是 一种先进后出的数据结构,他只有一个出口。(不允许遍历)——只能访问栈顶queue是一种先进先出的数据结构,他有两个出口。——只能访问队头和队尾
2022-05-09 11:14:21
160
原创 STL标准模板库————deque
双端数组可以对头端进行插入删除操作deque和vector的区别1、vector对于头部的插入删除效率很低,数据量很大,效率很低2、deque相对而言,对头部的插入删除速度会比vector快3、vector访问元素的速度会比deque快,这和两者内部实现有关...
2022-05-08 13:32:10
76
原创 STL标准模板库————vector
vector数据结构和数组非常相似,也成为单端数组(前端封闭)vector与普通数组区别不同之处在于数组是静态空间,而vector可以动态扩展*****动态扩展:并不是在原空间之后续接新空间,而是寻找更大的内存空间,然后将原数据拷贝新空间释放原空间(这个可以通过reverse预留出充足的空间)vector<int> d;d.reserve(1000);//分配存放1000个int的空间vector赋值操作1、重载等号=赋值vector<i..
2022-05-07 18:27:41
283
原创 STL标准模板库————string
string是c++风格的字符串,并且string本质上是一个类string和char*区别1、char*是一个指针2、string是一个类,类内部封装了char*管理这个字符串,是一个char*型容器特点string类内部封装了很多成员办法例如:查找find,拷贝copy,删除delete......string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部负责构造函数1:无参构造string s1;2:const char *..
2022-05-06 10:53:57
490
原创 STL标准模板库————初识
STL的诞生1、软件界希望有可重复利用的东西2、C++的面向对象和泛型编程思想,目的就是复用性的提升3、没有一套标准,会导致数据结构和算法被迫从事大量重复工作4、为了有一套标准,诞生了STLSTL基本概念1、STL(standard template library)2、STL从广义上分为:容器(container),算法(algorithm),迭代器(iterator)3、容器和算法之间通过迭代器进行无缝连接4、STL几乎所有的代码都采用了模板类和模板函数..
2022-05-05 10:42:14
128
原创 模板————类模板(二)
类模板的作用: 建立一个通用模板,类中的成员、数据类型可以不具体制定,用一个虚拟的类型来代表;模板类的语法:类模板:template<class name,class age>//语法class person{public: person(name m_name,age m_age){ this->name = "xiaoming"; this->age = 12; } name m_...
2022-05-04 10:10:46
99
原创 MYSQL学习笔记
MYSQL学习笔记—引用大佬基础篇通用语法及分类DDL(数据定义语言)数据库操作注意事项表操作DML(数据操作语言)添加数据update优化(避免行锁升级为表锁)数据类型整型浮点型日期和时间字符串二进制类型权限一览表图形化界面工具安装小技巧基础篇通用语法及分类DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限DD
2022-04-29 13:30:47
847
原创 模板————函数模板(一)
C++的编程思想有: 1、面向对象2、泛型编程————主要是模板什么是模板?模板的定义: 1、模板就是建立通用的模具,大大提高复用性模板的特点: 1、模板不可以直接使用,它只是一个框架 2、模板的通用并不是万能的模板的类型(模板机制): 1、函数模板 2、类模板接下里认识函数模板:函数模板 作用:建立一个通用的函数,其函...
2022-04-29 12:23:05
259
原创 类与对象【多态】------多态、虚析构和纯虚析构、纯虚函数和抽象类
多态分为两类: 1、静态多态——函数重载和运算符重载,复用函数名 2、动态多态——派生类和虚函数实行运行多态静态多态和动态多态区别: 1、静态多态的函数地址早绑定——编译阶段确定函数地址 2、动态多态的函数地址晚绑定——运行阶段确定函数地址动态多态的条件: 1、有继承关系 2、子类重写父类的虚函数地址早绑定时:class animal{public: void...
2022-04-28 10:54:38
107
原创 MySQL-----------------------数据库设计三范式(二)
数据库设计三范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则叫做范式。范式一确保每列保持原子性;数据库表中的所有字段都是不可分解的原子性;例如:某表中有一个地址字段,如果经常需要访问地址字段中的城市属性,则需要将该字段拆分为多个字段,省份、城市、详细地址。省份、城市、详细地址——有原子性省份城市详细地址————无原子性范式二确保表中的每列都与主键相关,而不能只与主键的某一部分相关(组合索引)//不满...
2022-04-27 16:41:26
741
原创 MySQL-----------------------初识MySQL数据库(一)
定义:数据库:按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、共享的、统一管理的大量数据库的集合OLTP(online transaction processing)(联机事务处理)---------学习的初级阶段OLAP(On-line Analytical Processing)(联机分析处理)oltp与olap的关系: oltp是在数据库进行增添处理 ---------------------------后端开发 ...
2022-04-27 15:50:21
677
原创 类与对象【继承】-----语法、继承方式、构造析构、同名、菱形继承
类与类之间具有公共部分和非公共部分————我们定义多个类的时候,采用继承的方法,减少代码重复//继承的技术写相似结构体class base{public: void header(){ cout<<"----------head---------"<<endl; } void footer(){ cout<<"----------foot---------"<<endl; }.
2022-04-27 15:11:22
97
原创 http基于reactor的封装方法(部分实现)-----------------(四)
http协议和reactor的关系: reactor的结构可以拆分成如下主要结构: 1、ntyreactor_run——提供长时间运行 2、accept_cb 3、recv_cb——接受http请求 4、send_cb——返回http响应http的tcp连接的生命周期: accept_cb ----> recv_cb ----> send_cb...
2022-04-22 17:29:11
2082
原创 类与对象【封装】(二)———友元,运算符重载
友元:目的:让一个函数或类访问另一个类的私有成员关键字:friend实现方式: ——全局函数做友元 ——类做友元 ——成员函数做友元class Building{ //friend class frends;//使类成为友元 friend void friends::visit();//使成员函数成为友元 friend void myfriend(Buiding *buiding);//使全局函数成为友...
2022-04-22 10:26:52
156
原创 TCP服务器(reactor)单线程百万连接并发的实现(以栏目二代码为基础)--------(三)
(1条消息) (C++)利用TCP协议服务器(epoll),实现reactor(二)--------------------附直接实现代码_Gpangpangwa的博客-CSDN博客epoll组件的水平触发和边沿触发:水平触发:我们的fd的缓存buffer里面有数据的时候就是水平触发(epoll默认是水平触发);---------------大数据(buffer不能一次读完),listenfd的接受(防止客户端申请连接失败)边沿触发: 缓存buffer从无数据到有数据的触发是边沿触发,也就
2022-04-18 19:29:35
4640
1
原创 类与对象【封装】(一)———封装,对象特征,初始化和清理,this
C++面向对象的三大特性:封装、继承、多态。封装:1. 将属性和行为作为一个整体来表现一个事务,并加以权限来控制使用。2.struct与class的唯一区别是默认访问权限不同(struct默认公共,class默认私有)访问权限:public(公共权限) 类内可以访问 类外可以访问 protected(保护权限) 类内可以访问 类外不可以访问(子可访问) private(私有权限) 类内可以访问 类外不可以访问(子不可访...
2022-04-08 21:37:11
800
原创 动态规划(DP)
动态规划常用的方面:1.计数(count)-有多少种方法走到右下角-有多少种方法选出k个数使得和是sum2.求最大最小值(max、min)-从左上角走到右下角路径的最大数字和-最长上升子序列长度3.求存在性(bool)-取石子游戏,先手是否必胜-能不能选出sum为多少的k个数从这道题目出发,总结动态规划的大致表现;动态规划的思路:1. 确定状态...
2022-04-08 12:29:17
117
原创 (C++)利用TCP协议服务器(epoll),实现reactor(二)--------------------附直接实现代码
#include <errno.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>#include <sys/poll.h>#include &.
2022-04-07 15:33:38
2658
原创 C++函数的提高篇
函数提高涉及的内容:1.函数形参设置默认参数2.函数形参设置占位参数3.函数重载(对引用不是很理解先理解引用)C++的引用&_Gpangpangwa的博客-CSDN博客https://blog.csdn.net/weixin_43961989/article/details/123970113?spm=1001.2014.3001.5501------------------------函数形参可以设置默认参数------------------------int fu..
2022-04-06 10:16:51
68
原创 C++的引用&
引用&的本质:创建一个新的变量p指向一个已有的内存(内部实现有解释)智能指针特点:创建多个指针,指向同一个地址,并记录有几个指针指向这个位置(1条消息) 对智能指针的理解和简单应用_Gpangpangwa的博客-CSDN博客https://blog.csdn.net/weixin_43961989/article/details/123919558--------------------------基础知识---------------------------int d = 1;i.
2022-04-05 16:08:59
1026
原创 C++内存分区模型
C++内存 = 代码区 + 全局区 + 栈区 + 堆区代码区:存放CPU执行的机器命令(运行前) 1.共享的 2.只读的全局区:存放全局变量和静态变量和常量区(普通常量、const开头的全局变量)(运行前) 1.在程序结束之后由操作系统释放ps:const修饰的局部变量离局部变量比较近。栈区:函数的参数,...
2022-04-04 21:00:01
921
原创 lambda匿名函数的简单使用
通过代码看匿名函数的几种实现方式:#include <iostream>using namespace std;//匿名函数的基本语法为//[捕获列表](参数列表)->返回类型{函数体}void test1(){ auto Add = [](int a, int b)->int { return a + b; }; std::cout << Add(1, 2) << std::endl;
2022-04-04 12:31:46
277
原创 C++11的一些新特性(&&、move、forward、emplace_back)
引用与移动:C++11中引用了右值引用和移动语义,可以避免无谓的复制,提高了程序性能。区分表达式的左右值属性:如果可对表达式用&符取址,则为左值,否则为右值。在进入正题之前,首先得区分什么是左右值:左值 lvalue 是有标识符、可以取地址的表达式,最常见的情况有:**变量、函数或数据成员的名字**返回左值引用的表达式,如 ++x、x = 1、cout << ' '**字符串字面量如 "hello world"纯右值 prvalu...
2022-04-04 12:11:42
1000
原创 对智能指针的理解和简单应用
使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。unique_ptr,shared_ptr, weak_ptr是三种C++11支持的常用的智能指针,接下来分别观察它们的性质和一些简单应用,体会一下:shared_ptr: shared_ptr的实现:指向堆上创建的对象的裸指针(raw_ptr)和指向内部隐藏的、共享的管理对象(share_count_object)。①对shared_ptr...
2022-04-02 18:34:36
538
原创 理解TCP中socket对连接的作用
这里我们要知道我们的linux系统的组成如图:我们不妨吧内核当成我们编程语言里面的库。当我们调用的如socket等函数,其实就是调用内核中一个个封装好的函数,他们能对内核进行操作。以socket为例,常用于连接不同的机器中。那我们以TCP协议为例来理解socket的作用。一提到TCP协议,很容易就想到——3次握手,4次挥手(这是连接很可靠)——从图实现它:当完成连接时的三次握手时候,双方都会为彼此开辟对应的资源空间,以我的tcpsever为例:...
2022-04-02 13:12:20
3081
原创 利用TCP协议服务器从单用户到多用户的理解思路与解决办法(select\poll\epoll)(一)
在进行TCP协议的了解之前,首先要了解用到的基本函数:**socket函数是一种可用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源的函数int socket(int Adress_family,int type,int protocol);af:如AF_INET type:连接类型,通常是SOCK_STREAM或SOCK_DGRAM protocol:协议类型,通常是IPPROTO_TCP或IPPROTO_UDP返回值:socket的编号,为-1表示失败......
2022-04-01 20:42:28
2839
原创 对红黑树的简单认识与构建
红黑树是一个典型的key,value的结构,通过key去查找value,看上去是带颜色的二叉树。红黑树遍历的方式是中序遍历(从中间key值的根节点开始有序查找),所以查找起来更加快速。这里把红黑树构造理解为红黑树 = 根节点 + 基础结构;并且红黑树如下性质:①根节点为黑②叶子结点为黑③红色节点不相邻④红色的子支为黑⑤根节点到每一个叶子的路径上黑色节点数相同(黑高)构造如下:typedef int KEY_TYPE;typedef struc...
2022-03-31 18:03:55
704
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人