自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 资源 (7)
  • 收藏
  • 关注

原创 NAT穿透技术、穿透原理和方法详解

1、NAT分类1.1 基础型NAT 仅将内网主机的私有IP地址转换成公网的IP地址,并不将TCP/UDP端口信息进行转换,分为静态NAT和动态NAT。1.2 NAPT NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。1.2.1锥型NAT完全锥型(Full Cone NAT):在不同内...

2020-08-03 14:30:37 40452 4

原创 Hyperledger Fabric Chaincode开发详解(实例说明)

导言目前fabric开发主要分两大块,一是chaincode链上代码的开发,二是基于SDK的application开发;本文主要是介绍fabric chaincode api,对api的功能和参数进行说明,同时针对每个主要api都给出了使用例子。目标:熟悉fabric chaincode常用api的功能和使用方法; 熟悉fabric chaincode的开发流程以及能够编写cha...

2019-07-08 19:33:28 5943

原创 深入理解hyperledger fabric-1.4环境搭建的详细过程

1、导言: 为了学习fabric底层运行原理,这两天基于fabric 1.4版本手动部署了一个多机网络,期间遇到了很多各种各样的问题,同时也一个一个解决了,最终成功把多机fabric网络部署起来,也进行了一些简单交易测试。整个部署过程加深了本人的fabric网络的认识,再次特地把整个过程记录下来,方便以后复习;另外希望能帮助到有类似需求的人们。2、准备工作知识准备...

2019-07-04 18:58:02 22444 3

原创 git命令大全——git命令使用手册

Git设置ssh-keygen -t rsa -C “[email protected]” #生成密钥git init # 初始化本地git仓库(创建新仓库)git config --global user.na...

2019-06-12 16:21:18 572

原创 二分查找算法C++实现

二分查找(折半查找):对于已排序,若无序,需要先排序// 非递归#include <iostream>#include <vector>#include <set>using namespace std;/* * v:被查找数列 * value:被查找的值 * low:数列的最小下标 * high:数列的最大下标*/int BinarySearch(const vector<int> v, int value, int low,.

2021-03-03 11:09:15 428

原创 设计模式《二十三》——迭代器模式

简介 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。可以使用不同的方式来遍历整个整合对象。角色与职责Iterator:抽象迭代,定义访问和遍历元素的接口,一般都是固定接口:first,next,IsDone/lastConcreteIterator:具体迭代器,实现迭代器接口,完成容器元素的遍历Container:抽象容器,负责提供具体迭代器角色的接口,必然提供一个CreateIterator的方法。ConcreteContainer...

2020-07-10 21:33:11 308

原创 设计模式《二十二》——解析器模式

简介 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。即提供了评估语言的语法或表达式的方式角色与职责(1)Expression(抽象表达式):声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。(2)TerminalExpression(终结符表达式):实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口,主要是一个interpreter()方法。文法中每一个终结符都有一个具体终结表达式与之相对应。...

2020-06-28 22:11:49 190

原创 设计模式《二十一》——状态模式

简介当对象的内部状态改变时,同时改变其行为,对象看起来好像修改了它的类。其好处是可以通过改变状态来获得不同的行为。实现时需要将各种具体的状态类抽象出来。角色与职责State:实现类接口ConcreteState:具体实现类Context:实现切换。实现#include <iostream>using namespace std;class Worker;class State {public:virtual void doSomeT...

2020-06-26 09:09:09 168

原创 设计模式《二十》——访问者模式

简介 访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。例如,使用访问者类改变元素的执行算法,通过这种方式,元素的执行算法可以随着访问者改变而改变。角色与职责抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。具体访问者(ConcreteVisitor)角色:实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作。抽象节点(Element...

2020-06-14 09:07:26 165

原创 设计模式《十九》——备忘录模式

简介在不破坏封装的前提下,捕获对象的内部状态,并在对象之外保存这个状态,以便在适当的时候恢复对象。角色与职责Originator:原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值;Memento:备忘录类;CareTaker:存储备忘录的类,持有Memento类的实例。实现#include <iostream>#include <vector>using namespace std;//需保存的信息c..

2020-06-13 21:08:04 197

原创 设计模式《十八》——观察者模式

简介 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在主题对象的状态发生变化时,所有依赖于它的对象都得到主题对象的通知并被自动更新。角色与职责Subject(目标)目标知道它的观察者。可以有任意多个观察者观察同一个目标; 提供注册和删除观察者对象的接口。Observer(观察者)为那些在目标发生改变时需获得通知的对象定义一个更新接口。ConcreteSubject(具体目标)将有关状态存入各ConcreteObserver对...

2020-06-09 21:55:07 182

原创 设计模式《十七》——中介者模式

简介 中介者模式类似现实生活中的房产中介,买房者通过中介与卖房者进行交流。其用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。角色与职责mediator:中介者抽象对象;ConcreteMediator:中介者具体实现;Colleague:同事类,同事类知道他的中介者(即持有中介者引用),同事类之间需要通信时,需要与它的中介者通信。实现#include <iostream> ...

2020-05-28 20:40:28 210 1

原创 设计模式《十六》——策略模式

简介策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。其定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。角色与职责Strategy:算法抽象类OperatorAdd:具体算法实现类实现#include <iostream>using std::cout;using std::endl;class Strategy {public:virtual void Cryp...

2020-05-26 20:51:56 144

原创 设计模式《十五》——责任链模式

简介 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。角色与职责Handler:处理请求的接口,接口中定义一个方法,以设定和返回对下一家的引用。ConcreteHandler:具体处理者接到请求后,可以选择将请求处理掉,也可以将请求传给下家。实现#inc...

2020-05-22 20:48:47 123

原创 设计模式《十四》——命令模式

简介 命令模式(Command)是一种数据驱动的模式,Command的类封装了对目标对象的调用行为以及调用参数。其目的是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。角色与职责Invoker:调用者;Comma...

2020-05-20 21:37:16 134

原创 设计模式《十三》——模板模式

简介 一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现。其目的是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。角色与职责AbstractClass:提供抽象的接口;ConcreteClass:实现类,继承自抽象类,实现抽象类的接口。实现#include <iostream>// 网购class OnlineShopping {public:...

2020-05-14 21:13:20 143

原创 设计模式《十二》——享元模式

简介用于减少创建对象的数量,实现对象的共享,当对象多的时候可以减少内存占用和提高性能。角色与职责Flyweight:描述一个接口,通过这个接口flyweight可以接受并作用于外部状态; ConcreteFlyweight:实现Flyweight接口,并为定义了一些内部状态,ConcreteFlyweight对象必须是可共享的;同时,它所存储的状态必须是内部的;即,它必须独立于ConcreteFlyweight对象的场景; UnsharedConcreteFlyweight:并非所.

2020-05-09 22:12:41 238

原创 设计模式《十一》——外观模式

简介 观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度。角色与职责Facade:为方便调用,定义的统一包装接口SubSyntem:功能提供者,指提供功能的类群。使用场景客户端与系统端解耦时,客户端不需要知道系统内部的复杂联...

2020-05-07 21:11:50 166

原创 设计模式《十》——组合模式

简介 组合模式又叫部分-整体模式,用于把一组相似的对象当作一个单一的对象,依据树状结构来组合对象。使得用户对单个对象和组合对象的使用具有一致性。例如,公司职员组织关系。角色与职责Component:组合类中的抽象接口,在适当的情况下,实现所有类共有接口的默认行为Composite:有枝节点行为,用于存储子部件,在Component接口中实现与子部件有关的...

2020-05-01 22:35:00 201

原创 设计模式《九》——桥接模式

简介 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。...

2020-04-25 20:04:40 145

转载 C++命名规则

转自:https://www.cnblogs.com/ggjucheng/archive/2011/12/15/2289291.html如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。活跃在生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的大量有识先辈们都曾经无数次地以实际行动证明了以上公理的正确性。除了...

2020-04-25 20:01:34 163 1

原创 设计模式《八》——适配器模式

简介适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。角色与职责实例#include <iostream>#include <string>using namespace std;class Current18v {p...

2020-04-23 21:45:22 130

原创 Linux Cgroups详解

1、导言:Linux系统每个进程都可以自由竞争系统资源,有时候会导致一些次要进程占用了系统某个资源(如CPU)的绝大部分,主要进程就不能很好地执行,从而影响系统效率,重则在linux资源耗尽时可能会引起错杀进程。因此linux引入了linux cgroups来控制进程资源,让进程更可控。2、Linux cgroups基础知识Linux Cgroup 可​​​让​​​您​​​为​​​系​...

2020-04-20 16:22:36 1725

原创 设计模式《七》——装饰模式

简介顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。角色与职责Component:抽象接口,可以给这些对象动态地增加职责。ConcreteComponent:Component的具体对象,也可以对这个对象添加一下职责。Decorator:装饰抽闲类,继承自Component,从Decora...

2020-04-19 11:59:40 174

原创 设计模式《六》——代理模式

简介: 其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。角色与职责:Subj...

2020-04-15 21:45:43 153

原创 设计模式《五》——原型模式

简介 原型模式虽然是创建型的模式,但是与工厂模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。角色与职责Protoytpe:抽象接口ConcretePrototype:具体实现类,注意针对指针时深拷贝和浅拷贝的问题。使用范围一个复杂对象,具有自我复制功能,统一一套接口。用原型实例指定创建...

2020-04-12 20:51:20 107

原创 设计模式《四》——建造者模式

简介建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象角色与职责Director:使用Builder接口的对象。Builder:为创建产品的各个部分,统一抽象接口。ConcreteBuiler:具体创建产品的各个部分,如A部分和B部分。定义了创建产品的过程和其他。Product:表示被构造的复杂对象。工程...

2020-04-09 20:02:33 120

原创 设计模式《三》——抽象工厂方法

1、简介工厂方法的绝点是只能生成一类产品,不同生成不同类别的产品,而抽象工厂便可以解决此问题。工厂方法模式和抽象工厂模式不好分清楚,他们的区别如下:工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一...

2020-04-08 10:05:46 211

原创 设计模式《二》——工厂方法

简介 简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。角色与职责实现#include <iostream&...

2020-04-06 20:31:44 143

原创 设计模式《一》——单例模式

简介单例对象(Singleton)是一种常用的设计模式。其保障一个类只有单个对象被创建,在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个...

2020-04-06 15:52:45 119

原创 设计模式——简单工厂模式

简介 简单工厂模式又叫做静态工厂方法(Static Factory Method)模式。该模式不属于23种GOF设计模式,但是可以被认为是一种特殊的工厂方法模式。 简单工厂模式最大的缺点是违背了“开闭原则”,当增加了新的产品时,需要去修改简单工厂类的结构。工厂方法模式主要是针对单一产品结构的情景,而抽象工厂模式是针对多级产品结构的场景。角色与职责实现...

2020-04-05 20:31:19 116

原创 设计模式总概述

前言最近想写一个设计模式的专栏,在写具体设计模式前还是写写设计模式的总分类吧。六大原则开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口。 里氏替换原则:基类可以被子类替换,使用抽象类继承,不使用具体类继承。 依赖倒转原则:要依赖于抽象,不要依赖于具体,针对接口编程,不针对实现编程。 接口隔离原则:使用多个隔离的接口,比使用单个接口好,建立最小的接口。 迪米特法则:一个软件实...

2020-04-05 16:10:10 104

原创 ZeroMQ资料引导

简介: ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。提供的套接字可以在多种协议中传输消息,如线程间、进程间、TCP、广播等。你可以使用套接字构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。 ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/...

2020-03-30 17:55:20 169

转载 stl之algorithm库函数集合

不修改内容的序列操作:修改内容的序列操作:划分操作:排序操作:二分法查找操作:集合操作:堆操作:最大/最小操作:巡防算法for_each(容器起始地址,容器结束地址,要执行的方法) #include<iostr...

2020-03-19 21:05:46 254

转载 一文搞懂Raft算法

目录raft算法概览 leader election term 选举过程详解 log replication Replicated state machines 请求完整流程 safety corner case stale leader State Machine Safety leader crash 总结 references正文...

2020-03-19 10:43:49 160

转载 值得推荐的C/C++框架和库

值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz...

2020-03-19 10:02:52 154

原创 模板类使用友元函数重载操作符需要注意的问题

当我们在同一个cpp文件里使用friend函数重载操作符,但是声明和实现分开时,我们需要对friend函数的声明做特殊处理,否则会产生如下错误:模板类friend函数在外面.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > &amp...

2020-03-15 21:28:58 345 1

原创 C++ Pimpl 惯用模式

介绍: Pimpl idiom意为“pointer to imprementation”,即指向实现的指针,这样方法是把某个类分割成两个classes,一个只提供接口,另一个负责实现该接口,这样便实现了接口与实现分离,这个分离方式的关键在于以“声明的依存性”替换“定义的依存性”,从而达到编译依存性最小化的目的。可以说Pimpl是C++的一种惯用模式。实现: ...

2020-03-12 18:31:59 347

原创 static_cast,reinterpret_cast,const_cast与dynamic_cast的使用

1.static_cast 用来进行比较“自然”和低风险的转换,比如整形和实数型、字符型之间互相转换。用来处理隐式转换,类型C语言的(newType)expression。在相关类型之间的转换中使用,不能在不同类型的指针之间互相转换,也不能用于整型和指针之间的互相转换,也不能用于不同类型的引用之间的转换,但可以在void*与其他指针之间转换。 对类的转换只能...

2020-02-04 09:28:58 124

原创 C++11 lambda表达式

lambda语法:[ 捕 获 列 表 ]( 参 数 列 表 ) mutable throw(异 常 类型) -> 返 回 类 型 {函数体…}捕获列表方式:• [] 空捕获列表• [name1, name2, . . . ] 捕获一系列变量• [&] 引用捕获, 让编译器自行推导捕获列表• [=] 值捕获, 让编译器执行推导应用列表参数列表...

2020-01-19 09:57:41 152

lv_conf.h配置文件详解.pdf

littleVGL-7.9配置文件lv_conf.h详细说明

2021-05-11

libtorrent api开发手册

描述libtorrent最主要的类,涉及类的功能,类方法的详细说明,对基于libtorrent开发的项目有很大帮助。

2018-10-23

C++计算字符串和文件的CRCR32值

用C++进行计算字符串,以及文件的CRC32值,实用性强。

2015-03-02

不同球机的各种云台协议

收集了各种云台协议的命令,对监控行业的人很有作用

2012-07-15

高速球云台程序

完整的高速球云台源代码,包括OSD菜单,电机控制,机芯控制。

2012-07-15

普通单片机IO口模拟UART程序

利用单片机IO口模拟UART程序,系统用了一个定时器和一个外部中断,外部中断主要是用来检测串口起始位的到来。

2011-05-05

VC编写的网络通信程序

VC编写的网络通信程序,分为服务器和从机程序,两者能进行连接,相互收发数据。

2011-05-05

空空如也

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

TA关注的人

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