基础技术
叶紫真
庶民的反击
展开
-
OpenSSL自签名成CA服务与CA给服务器客户端生成证书
1.生成CA私钥,私钥中包含了公钥 openssl genrsa -out CA.key 20482.生成CA自签名证书请求文件 openssl req -new -key CA.key -out CA.csr -subj "/C=CN/ST=SC/L=CD/O=westone/OU=ops/CN=*.westone.com/emailAddress=yan.hai@qq.com"3.生成CA自签名证书 openssl x509 -req -days 3650 -in CA.csr -sig...原创 2021-04-13 16:39:23 · 404 阅读 · 2 评论 -
使用哨兵节点的插入排序算法
之前在网上看到的利用哨兵节点提高插入排序性能的算法都是错误的直接上源码// 插入排序void insert_sort(int *a, const int &left, const int &right){ int i, j, temp; for (i = left + 1; i <= right; ++i) { // 将a[left]作为哨兵 temp = a[left]; a[left] = a[i]; for (j = i - 1; a[j]原创 2020-05-09 00:35:54 · 397 阅读 · 0 评论 -
深入理解Nginx模块开发与架构解析第2版(书签导航正确)
目前可以下载到的 深入理解Nginx模块开发与架构解析第2版.pdf 都是同一个出处,所以书签导航都是错误的,这里有我重新设置了书签导航,保证正确,欢迎大家下载链接:https://pan.baidu.com/s/1Ib02Ie9bG5hXQjq_6JE7bA提取码:o3v6...原创 2019-11-25 23:27:23 · 1626 阅读 · 6 评论 -
C++命令模式(Command)
UML类图(仅供参考)如下:命令模式解决的问题:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令源码#include <...原创 2019-05-25 21:59:17 · 341 阅读 · 0 评论 -
C++职责链模式(ChainOfResponsibility)
UML类图(仅供参考)如下:职责链模式解决的问题:为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接...原创 2019-05-25 22:17:06 · 371 阅读 · 0 评论 -
C++中介者模式(Mediator)
UML类图(仅供参考)如下:中介者模式解决的问题:用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个...原创 2019-05-25 22:31:48 · 264 阅读 · 0 评论 -
C++享元模式(Flyweight)
UML类图(仅供参考)如下:享元模式解决的问题:主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。运用共享技术有效地支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请...原创 2020-03-23 17:18:44 · 187 阅读 · 0 评论 -
C++访问者模式(Visitor)
UML类图(仅供参考)如下:访问者模式解决的问题:我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。主要将数据结构与数据操作分离。稳定的数据结构和易变的操作耦合问题。源码#include <li...原创 2019-05-26 00:06:15 · 986 阅读 · 0 评论 -
C++备忘录模式(Memento)
UML类图(仅供参考)如下:备忘录模式解决的问题:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,适当的时候可以让已经改变的对象恢复到之前的状态源码#include <string>#include <iostream>// 备份类,和需要备份的类一一对应class CMemento{public:...原创 2019-05-22 23:53:10 · 186 阅读 · 0 评论 -
C++组合模式(Composite)
UML类图(仅供参考)如下:组合模式解决的问题:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,比如QT桌面应用开发框架中的控件源码#include <iostream>#include <vector>// Component抽象基类,相当于所有图形界面控件的公共父类一样c...原创 2019-05-23 23:57:56 · 297 阅读 · 0 评论 -
C++怎么可以让一个类不能被继承
在使用C++编写程序时,如果有一种需求为实现一个类不能被继承,实现方式如下:方式一class CNoInherit{protected: // 显示定义无参构造函数 CNoInherit() {} // 只要是基类,最好是虚析构函数 virtual ~CNoInherit() {}};// 注意必须是 virtual private// ------就是想让这个CT...原创 2019-09-21 22:43:28 · 1533 阅读 · 0 评论 -
C++状态模式(State)
UML类图(仅供参考)如下:状态模式解决的问题:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为,这个状态的判断不需要放在一个类中,而是在一系列类中判断,并且把这些行为在不同的多态中实现源码#include <list>class CContext;// 抽象状态类// 用来处理工作类的一种状态class CSt...原创 2019-05-16 22:54:24 · 1732 阅读 · 0 评论 -
C++抽象工厂模式(AbstractFactory)
UML类图(仅供参考)如下:抽象工厂模式解决的问题:一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂,主要解决接口选择的问题源码#include <iostream>#include <string>// 抽象产品Aclass CProductA{public: virtual ~CProductA() {} v...原创 2019-05-16 22:37:52 · 304 阅读 · 0 评论 -
C++桥接模式(Bridge)
UML类图(仅供参考)如下:桥接模式解决的问题:抽象类之间为聚合关系,将抽象部分与实现部分分离,使它们都可以独立的变化,这样他们的子类就可以任意聚合在一起源码#include <iostream>// 抽象类,桥的一部分class CAbstractionImplement{public: virtual ~CAbstractionImpl...原创 2019-05-25 21:26:00 · 281 阅读 · 0 评论 -
C++策略模式(Strategy)
UML类图(仅供参考)如下:策略模式解决的问题:如果系统中的一些类仅仅在行为或算法上面有微微的不同,那么我们可以把这些相似的类和这些行为或算法抽象出来,然后在程序运行的过程中动态的选择使用哪种行为或算法源码#include <iostream>// 抽象算法class CStrategy{public: virtual ~CStrategy...原创 2019-04-27 23:15:08 · 221 阅读 · 0 评论 -
C++装饰器模式(Decorator)
UML类图(仅供参考)如下:装饰器模式解决的问题:给一个对象动态的增加功能,使用装饰器模式源码#include <iostream>#include <string>// 手机抽象类class CPhone{public: virtual ~CPhone() {} virtual void ShowDecorator() =...原创 2019-04-28 22:15:26 · 698 阅读 · 0 评论 -
C++代理模式(Proxy)
UML类图(仅供参考)如下:代理模式解决的问题:由于某些原因,一个类(A)不能直接被客户端使用,所以我们可以创建这个类的代理类(B),实际上B就是A的影子而已源码#include <iostream>#include <string>// 接口class CImage{public: CImage(const std::st...原创 2019-05-04 19:07:32 · 825 阅读 · 0 评论 -
C++工厂模式(Factory)
UML类图(仅供参考)如下:工厂模式解决的问题:它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象源码#include <iostream>// 抽象产品class CProduct{public: virtual ~CProduct() {} virt...原创 2019-05-04 23:53:01 · 794 阅读 · 1 评论 -
C++原型模式(Prototype)
UML类图(仅供参考)如下:原型模式解决的问题:用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。实际上就是由于各种原因,你只是想克隆一个对象(深拷贝或浅拷贝),而不是想调用构造函数创建新对象,也不想关心对象的初始化等等源码#include <iostream>#include <strin...原创 2019-05-06 22:20:10 · 209 阅读 · 0 评论 -
C++适配器模式(Adapter)
UML类图(仅供参考)如下:适配器模式解决的问题:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作源码#include <iostream>// 目标类,就是用户最终需要的类class CTarget{public: CTarget() {} virtual ~CTarget(...原创 2019-05-21 00:16:05 · 282 阅读 · 0 评论 -
C++外观模式(Facade)
UML类图(仅供参考)如下:外观模式解决的问题:为了达到一个稍微复杂点的功能(或者是实现一个简单的功能的过程比较复杂),需要调用几个对象方法来实现,但是调用者不想关心这个功能到底是怎么实现的,或者是为了降低这个调用者和这些对象之间的耦合度,我们可以重新定义一个新的类A(外观模式)来包装这个功能,调用者只需要知道类A就行,相当于提供了一个一致界面源码#include...原创 2019-05-11 17:48:48 · 257 阅读 · 0 评论 -
C++建造者模式(Builder)
UML类图(仅供参考)如下:建造者模式解决的问题:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示,就是一个对象的初始化太麻烦,可以使这种麻烦用一个类解决掉源码#include <string>#include <iostream>// 假如我想创建下面这个类的对象// 但是这个对象有很多成员需要在初始化的时候赋...原创 2019-05-12 00:20:49 · 203 阅读 · 0 评论 -
C++观察者模式(Observer)
UML类图(仅供参考)如下:观察者模式解决的问题:当有很多个对象依赖于一个状态值时,为了在状态值改变时统一的通知这些对象作出相应的改变,类似广播通知源码#include <list>#include <string>#include <iostream>#include <algorithm>// 观察者抽...原创 2019-05-12 19:43:22 · 223 阅读 · 0 评论 -
C#调用C++动态库 dll 时遇到的一些常见问题以及解决方案
在 C# 调用 C++ 生成的 dll 时,如果是新手,会有如下一些问题需要解决:一:参数匹配的问题,特别是字符串与 char* 参数类型二:编译时提示没有找到相关的函数名字三:C#如何注册C++回调函数 解决方案:首先给大家推荐一款软件,叫做CLRInsideOut,其中一个的功能就是把C++下的结构体或者函数声明转换成C#下的定义,效果如下:一:指针、地址相...原创 2018-10-19 00:18:38 · 6083 阅读 · 2 评论