C++20设计模式-7-桥接模式
7.1 Primpl模式1234567891011121314151617181920212223242526272829303132333435363738394041#include <iostream>#include <string>#include <cstdio>struct Person{ std::string name; void greet(); Person(); ~Person(); class PersonImpl; PersonImpl *impl;};struct Person::PersonImpl{ void greet(Person* p);};Person::Person() : impl(new PersonImpl) {}Person::~Person() { delete impl; }void Person::gre ...
C++20设计模式-6-适配器模式
6.1 预想方案1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include <iostream>#include <vector>#include <memory>struct Point{ int x, y;};struct Line{ Point start, end;};struct VectorObject{ virtual std::vector<Line>::iterator begin() = 0; virtual std::vector<Line>::iterator end() = 0;};struct VectorRectangle : VectorObject{ VectorRectangle( ...
C++20设计模式-5-单例模式
5.1 作为全局对象的单例模式12345678910111213141516171819#include <iostream>struct Database{ Database() {}};Database& get_database(){ static Database database; return database;}int main(void){ Database& sf = get_database(); return 0;}
5.2 单例模式的经典实现1234567891011121314151617181920212223242526272829303132333435#include <iostream>/*struct Database{ Database() { static int instan ...
数据结构-红黑树
概念1.每个结点是红的或者黑的2.根结点是黑的3.每个叶子结点是黑的4.如果一个节点是红的,则它的两个儿子都是黑的5.对每个节点,从该结点到其子孙结点的所有路径上包含相同数量的黑节点
旋转1.左旋2.右旋
x 左旋-> y ↖ ↗ y <-右旋 x
项目琐屑-webserver
webserver所需要的基础知识编程语言
基本的C/C++语法
C++11的特性(智能指针、function等),能够掌握C++14/17更好
操作系统
基本的linux指令
常见的系统调用
计算机网络
TCP和UDP的连接机制及对应的函数
常见的服务器模式,单对单、多对单、多对多
抓包工具的简单使用,如tcpdump
数据库
常用的MySQL语句
数据库的安装
项目中的难点
一部分是去服务器网络框架、日志系统、存储引擎等一些基本系统的搭建,这部分的难点主要就是技术的理解和选型,以及一些开源的框架调整后应用到我的项目中去。
另一部分是为了提高服务器性能所做的一些优化,比如缓存机制、内存池等一些额外系统的搭建。这部分难点主要是找出服务器的性能瓶颈,然后结合自己的想法去突破这个瓶颈,提高服务器性能
针对项目做了哪些优化程序本身
减少了程序等待IO的事件: 非阻塞IO + IO多路复用
设计高性能网络框架,同步IO(主从reactor + 线程池) 和异步IO(proactor)
【减少系统调用】 避免频繁申请/释放内存: 线程池、内存池和缓存机制
...
工厂模式群
1.创建方法概念: 这类方法将”调用构造函数生成对象”这个过程进行包装作用: 将对象的创建细节进行隐藏, 并更好的体现代码意图, 从而增强代码的可维护性
模式图: Department(部门)
Programmer(程序员)
123456789101112131415struct Programmer {};struct Department { //核心: 封装了Programmer类对象的创建细节, 并为这个过程设置了与业务流程相关性更强的名字 auto createEmployee() { return new Programmer(); }};int main(void){ Department department{}; department.createEmployee(); //... return 0;}
2.静态创建方法概念: 将原有的, 作为类成员函数的创建方法修改为一个类静态方法
模式 ...
C++20设计模式-4-原型模式
4.2 普通拷贝123456789101112131415161718192021222324252627#include <iostream>class Address{public: std::string street, city; int suite;};class Contact{public: std::string name; Address address;};int main(void){ Contact worker{"", Address{"123 East Dr", "London", 0}}; Contact john = worker; john.name = "John Doe"; john.address.suite = 10; return 0; ...
Qt6 C++开发指南读书笔记-元对象系统概述
Qt的元对象系统的功能建立基础
QObject类是所有使用元对象系统的类的基类
必须在一个类的开头部分插入宏Q_OBJECT,这样这个类才可以使用元对象系统的特性
MOC为每个QObject的子类提供必要的代码来实现元对象系统的特性
构建项目时,MOC会读取C++源文件,当他发现类的定义里有Q_Object宏时,他就会为这个类生成另一个包含元对象支持代码的C++源文件,这个生成的源文件连同类的实现文件一起被标准C++编译器编译和连接。
QObject类简述QObject类是所有使用元对象系统的类的基类,也就是说,如果一个类的父类或上层父类时QObject,它就可以使用信号与槽、属性等特性。
QObject类与元对象系统特性相关的函数元对象QMetaObject *metaObject() 返回这个类的元对象QMetaObject staticMetaObject 这是类的静态变量,不是函数,存储了类的元对象
类型信息bool inherits() 判断这个对象是不 ...
C++20设计模式-3-工厂方法和抽象工厂模式
3.1 预想方案12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include <iostream>struct Point2D{ int x; int y;};class Wall{ Point2D start, end; int elevation, height;public: Wall(Point2D start, Point2D end, int elevation, int height) : start{start}, end{end}, elevation{elevation}, height {height} { }};enum class Material{ ...
