- 博客(93)
- 资源 (2)
- 收藏
- 关注
转载 C++设计模式——代理模式
什么是代理模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问。结合上面的游戏代理的例子和下面的图,我们来进行分析一下。以前你是这样玩游戏:现在有了游戏代理,你是这样玩游戏:代理服务器干了什么?它代替你去和游戏服务器进行交互。它访问游戏服务器的速度比你使用校园网访问游戏服务器的速度快很多。所以,你的游戏延...
2018-10-19 15:35:54
2650
1
转载 C++设计模式——享元模式
什么是享元模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对享元模式是这样说的:运用共享技术有效地支持大量细粒度的对象。就如上面说的棋子,如果每个棋子都new一个对象,就会存在大量细粒度的棋子对象,这对服务器的内存空间是一种考验,也是一种浪费。我们都知道,比如我在2013号房间和别人下五子棋,2014号房间也有人在下五子棋,并不会因为我在2013号房间,而别人在2014号房间,...
2018-10-19 15:32:48
1526
1
转载 C++设计模式——外观模式
前言在实际开发时,面对一个大的系统,总是会将一个大的系统分成若干个子系统,等子系统完成之后,再分别调用对应的子系统来完成对应的整体功能,这样有利于降低系统的复杂性;最终进行实现某个具体的功能时,我们将对应的子系统进行组合就好了;但是,子系统那么多,关系那么复杂,组合形成一个完整的系统,是存在难度的。我们在使用visual studio进行编译C++代码时,你只是在菜单中选择了Build,然...
2018-10-19 15:31:07
1447
转载 C++设计模式——装饰模式
前言在实际开发时,你有没有碰到过这种问题;开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作;而有一些非核心的操作,可能会使用,也可能不会使用;现在该怎么办呢?将这些非核心的操作全部放到类中,这样,一个类就包含了很多核心的操作和一些看似有关,但是又无关的操作;这就会使核心类发生“爆炸”的现象,从而使核心类失去了一定的价值,也使使用核心类的客户在核心操作和非核...
2018-10-17 18:22:42
2334
转载 C++设计模式——组合模式
问题描述上图,是一个公司的组织结构图,总部下面有多个子公司,同时总部也有各个部门,子公司下面有多个部门。如果对这样的公司开发一个OA系统,作为程序员的你,如何设计这个OA系统呢?先不说如何设计实现,接着往下看,看完了下面的内容,再回过头来想怎么设计这样的OA系统。什么是组合模式?在GOF的《设计模式:可复用面向对象软件的基础》一书中对组合模式是这样说的:将对象组合成树形结构以...
2018-10-17 18:20:53
2361
转载 C++设计模式——桥接模式
问题描述现在要去画一个图形,图形有长方形、圆形和扇形等等;而图形又可以加上不同的颜色,然后,我们就可以画出红色的长方形,绿色的长方形;红色的圆形,绿色的圆形等等。而这种图形的形状在变化,图形的颜色也在变化,当使用代码去实现时,如何面对这种多方面的变化呢?这就要说到今天的桥接模式了。什么是桥接模式?对于上述的图形与颜色的问题时,很多时候,我们让各个图形类继承颜色类,比如:cl...
2018-10-17 18:18:54
2662
转载 C++设计模式——适配器模式
生活中的适配器买笔记本电脑,买手机时,都有一个电源适配器,电源适配器又叫外置电源,是小型便携式电子设备及电子电器的供电电压变换设备,常见于手机,笔记本电脑上。它的作用是将家里的220V高电压转换成这些电子产品能工作的5V~20V左右稳定的低电压,使它们能正常工作。就是说,如果没有这个电源适配器,我们的手机和电脑就不能进行充电了。之前同事去日本出差,由于工作需要,就将自己的笔记本带过去了。到...
2018-10-17 18:15:22
2992
转载 C++设计模式——原型模式
什么是原型模式?在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,最重要的一个词是“拷贝”,也就是口头上的复制,而这个拷贝,也就是原型模式的精髓所在。举一个最简单的例子来说明原型模式:记得上小学的时候,老师把需要做的课外习题写到黑板上,而下面的我们都要把这些题抄写到自己的本子上,回家做好,第二天交上来...
2018-10-17 18:06:50
2570
2
转载 C++设计模式——建造者模式
建造者模式在GOF的《设计模式 可复用面向对象软件的基础》中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这句话,似懂非懂的。一个复杂对象的创建,其通常是由很多的子对象构成;如果一个对象能够直接就创建好了,那么也不会称之为复杂对象。由于项目中需求的变化,这个复杂对象的各个部分经常会发生剧烈的变化,但是,不管怎么变化,将它们组合在一起,组成一个复杂的对...
2018-10-17 18:03:27
4093
1
转载 C++设计模式——单例模式
问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的。在C++中,可以构造一个日志模块的全局变量,那么在任何地方就都可以用...
2018-10-17 18:00:52
6643
11
转载 C++设计模式——抽象工厂模式
问题描述之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理;由于工厂方法模式创建的对象都是继承于Product的,所以工厂方法模式中,每个工厂只能创建单一种类的产品,当需要生产一种全新的产品(不继承自Product)时,发现工厂方法是心有余而力不足。举个例子来说:一个显示器电路板厂商,旗下的显示器电...
2018-10-17 17:52:13
7609
6
转载 C++设计模式——工厂方法模式
问题描述之前讲到了C++设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品;那么,首先是不是需要在产品枚举类型中添加新的产品类型标识,然后,修改Factory类中的switch结构代码。是的,这种对代码的修改,对原有代码的改动量较大,易产生编码上的错误(虽然很简单,如果工...
2018-10-17 17:50:41
5876
11
转载 C++设计模式——简单工厂模式
问题描述之前在公司做了一个windows 8平台的阅读器。首先,需要将电子书中的内容渲染到屏幕上,而电子书每一页都包含各种各样的内容,比如:图形、图像和文字等等;不同的内容,就是不同的对象;在将不同的内容渲染到屏幕上之前,就需要new操作,建立不同的对象,然后再在屏幕上进行描绘。这个时候,就需要进行很多new操作,new操作分布在代码的不同地方,管理起来很麻烦,而且也很乱,到后期扩展和维护的时...
2018-10-17 17:46:35
11945
7
转载 编辑控件(edit)的事件
概述:编辑框(Edit)控件实际上是一个简易的文本编辑器,用户可以在编辑框中输入可添加或插入文本。还有复制、粘贴、剪切、删除等编辑功能。 应用程序用 CreateWindowEx 创建编辑框控件时,可根据控件的用途在下表中选择部份常数来设定其风格属性(style)。 常数 说明 ES_MULTILINE ...
2018-09-11 16:28:59
4743
转载 旋转数组的二分查找
旋转数组是指原来排好序的数组经过旋转后形成局部有序的数组,形如【4,5,6,7,1,2,3】就是【1,2,3,4,5,6,7】经过旋转后得到的数组。题目:给定一个数x能否在log(n)内找到这个数是否存在于旋转数组中 分析:这个题目的难点在于如何二分地查找一个数,显然局部有序这个条件是十分有用的。我们先定义数组的左边部分为从左往右一直递增的数组,如上述例子的左边部分为【4,5,6,...
2018-08-29 12:20:31
416
原创 一段dump数据的代码留着备用
void hexdump(const void *p, size_t len){ int count = 1; while (len--) { if (count == 1) fprintf(stderr, " %p: ", p); fprintf(stderr, " %02x", *(unsigned char*...
2018-08-16 16:46:29
250
原创 分布式网络OpenDHT源码解析
OpenDHT源码解析简介OpenDHT具有以下特性:以分布式网络的形式共享key->value数据存储同时支持IPV4和IPV6value可以是任意二级制,并且最多64KB,key最长可达160位相同的key可以对应不同的value,这些value可以被一个64位的keyID进行区分每一份数据都有对应的”数据类型”.每个数据
2018-08-13 15:51:03
1830
转载 C++类头文件不暴露私有变量的一种写法
在类的头文件中不暴露私有变量,目的一般有两个: 1. 提供给别人的dll对应的头文件中,不希望在头文件中暴露私有变量的名称; 2. 因为私有变量的类型需要包含另一个头文件,所以不希望在头文件中包含其它头文件;一般可以用下面的方法来隐藏私有变量。 TWebSocketServer.hclass TWebSocketServer{public: TWebSocke...
2018-06-26 15:41:39
2298
转载 C++11 std::function和std::bind
关于std::function 的用法:其实就可以理解成函数指针 1. 保存自由函数void printA(int a){ cout<<a<<endl;}std::function<void(int a)> func;func = printA;
2018-06-26 15:28:22
240
转载 libutp源码简析
libutp是uTorrent使用的类似TCP的传输层实现。它基于UDP提供可信的、有序的点对点的传输,并具有最少的时延。需要注意的是utp和另一个基于UDP的传输协议QUIC的实现思路和优势并不一样,例如QUIC更强调连接建立的快速性,建立连接时只需要1至2次握手,又如QUIC将TLS整合到协议中,实现了0RTT,而基于HTTP2的协议需要2/3RTT。QUIC还允许在用户层面配置各种拥塞控制算...
2018-06-05 16:35:27
1090
转载 Merkle Tree莫尔克树
原文地址:http://www.cnblogs.com/fengzhiwu/p/5524324.html/*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为接触时间不长,对Merkle Tree的理解也不是很深入,如果有不对的地方,希望各位大神指正*/Merkle Tree概念 Merkle T...
2018-05-29 10:55:31
529
转载 微信paxos类库PhxPaxos实现原理与解析
原文链接:https://blog.csdn.net/chdhust/article/details/51779687#comments微信最近开源了其paxos类库PhxPaxos,具体参考资料:phxpaxos github的地址:点击打开链接微信自研生产级paxos类库PhxPaxos实现原理介绍 : 点击打开链接下面是我看源码时写的几篇博文Basic p...
2018-05-25 15:29:31
346
转载 微信自研生产级paxos类库PhxPaxos实现原理介绍
原文地址:微信自研生产级paxos类库PhxPaxos实现原理介绍 微信重磅开源生产级paxos类库PhxPaxos,本文用科普的口吻向大家介绍PhxPaxos背后的实现原理以及一些有意思的细节。 开源地址: https://github.com/tencent-wechat/phxpaxos前言 本文是一篇无需任何分布式以及paxos算法基础的人可以看懂的。...
2018-05-24 16:38:06
416
转载 区块链技术基础:分布式账本简介
原文链接:区块链技术基础:分布式账本简介了解这种改变游戏规则的技术和如何开始使用它每个人都认为区块链技术会彻底改变公司和大学等组织的业务交易方式。让我们来了解一下区块链网络的工作原理,如何利用它,以及 IBM 如何帮助改进该技术。我们首先介绍一下相关背景。分布式账本是什么?分布式账本是一种在网络成员之间共享、复制和同步的数据库。分布式账本记录网络参与者之间的交易,比如资产或数据的交...
2018-05-24 15:32:31
12783
转载 200行代码实现一个简单区块链
原文链接:A blockchain in 200 lines of codeThe basic concept of blockchain is quite simple: a distributed database that maintains a continuously growing list of ordered records. However, it is easy to ge...
2018-05-24 14:38:02
1483
原创 win32 socket 随机获取一个可用的端口号
将一个socket 绑定到本机,使用getsockname获取此socket关联的端口号// GetPort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdio.h>#include <Winsock2.h
2018-05-21 18:51:57
2986
1
转载 C++ std::find_if
template <class InputIterator, class UnaryPredicate> InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred); Find element in range Returns an iterator to ...
2018-05-16 16:55:56
1996
转载 C++ std::pair的用法
转载自:https://www.cnblogs.com/lvchaoshun/p/7769003.html1 pair的应用pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first seco...
2018-05-16 11:36:58
1943
转载 C++11系列 make_shared
转载自:http://bitdewy.github.io/blog/2014/01/12/why-make-shared/C++11 中引入了智能指针, 同时还有一个模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr, 那与 std::shared_ptr 的构造函数相比它能给我们带来什么好处呢 ?优点效率更高shared_ptr 需要维护引用计数的...
2018-05-15 18:20:34
9978
1
转载 C++11系列 使用emplace
转载自:https://blog.csdn.net/windpenguin/article/details/75581552在C++开发过程中,我们经常会用STL的各种容器,比如vector,map,set等,这些容器极大的方便了我们的开发。在使用这些容器的过程中,我们会大量用到的操作就是插入操作,比如vector的push_back,map的insert,set的insert。这些插入操作会涉及...
2018-05-15 18:03:39
827
转载 C++11系列 常量表达式constexpr
转载自:http://towriting.com/blog/2013/09/17/constexpr/C++11有一些这样的改善,这种改善保证写出的代码比以往任何时候的执行效率都要好。这种改善之一就是生成常量表达式,允许程序利用编译时的计算能力。假如你熟悉模板元编程,你将发现constexpr使这一切变得更加简单。假如你不知道模板元编程,也没什么。constexpr使我们很容易利用上编译时编程的优...
2018-05-15 12:22:54
389
转载 C++11系列 Lambda表达式用法
转载自:https://www.cnblogs.com/alwayswangzi/p/7137427.htmlC++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable或exception声明 -> 返回值类型 {函数体}可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符...
2018-05-14 14:22:31
437
转载 At the Heart of Ring: OpenDHT — A Distributed Hash Table :OpenDHT原理
This article aims to explore OpenDHT technology, briefly explain its underpinning theoretical logic, and explain why cryptography is vital to it.The need for efficient public distribute...
2018-05-09 19:26:28
1048
转载 多播,IP_MULTICAST_TTL,IP_ADD_MEMBERSHIP,IP_MULTICAST_IF,IP_DROP_MEMBERSHIP
11.3 多播单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。11.3.1 多播的概念多播,也称为"组播",将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同...
2018-05-08 11:27:38
678
原创 UE 使用 方法 更新 科学使用
最简单的方法,把这个dll下载下来,替换UE安装目录的这个dll即可正常使用https://download.csdn.net/download/coderaldrich/10622529******************************************************************************************************...
2018-03-28 11:55:45
80685
63
转载 获取windows未导出函数地址标准方法
http://www.4hou.com/system/10590.htmlhttps://msdn.microsoft.com/zh-cn/library/ms679291.aspxhttps://bbs.pediy.com/thread-188881.htmhttps://bbs.pediy.com/thread-189324.htm
2018-03-09 10:51:37
2049
原创 利用GetProcessMemoryInfo 获取进程内存使用
GetProcessMemoryInfo functionRetrieves information about the memory usage of the specified process.SyntaxC++BOOL WINAPI GetProcessMemoryInfo( _In_ HANDLE Process, _Out_ PPROCESS...
2018-02-28 17:54:20
6563
转载 Delete和delete []的区别
当调用delete的时候,系统会自动调用已分配的对象的析构函数。当我们用new [] 分配的对象是基本数据类型时,用delete和delete [] 没有区别。但是,当分配的对象是自定义对象时,二者不能通用。一般来说使用new分配的对象,用delete来释放。用new[] 分配的内存用delete [] 来逐个释放。delete与delete[]需要注意的地方 1:首先来说一个大家容易
2017-12-14 17:47:17
554
转载 使用VS进行远程调试
转自:http://blog.csdn.net/fm0517/article/details/50405206开发环境在A主机上(有源码,已安装VS),运行环境在B主机上(无源码,未安装VS,只有可执行程序exe或dll,以及对应的pdb文件)。在A主机上使用相同版本的源码,对B主机上正在运行的程序进行调试。1. 找到A主机上的远程调试监视器程序,通常在目录 D
2017-12-06 10:46:39
503
原创 SSL/TLS握手过程
SSL(Secure Socket Layer)最初是由Netscape公司开发的一个协议,其目的在于为互联网提供一个安全的通信机制。
2017-11-13 21:44:34
4202
1
C++静态代码分析工具PVS-Studio
2018-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人