自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 行为型--命令模式、解释器模式、中介模式

命令模式、解释器模式、中介模式。这 3 个模式使用频率低、理解难度大命令模式定义:命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象)。使用场景:比如,异步、延迟、排队执行命令、撤销重做命令、存储命令、给命令记录日志ps:和策略模式,工厂模式很像。要从使用场景来看区别。该由两部分组成:第一部分是应用场景,即这个模式可以解决哪类问题;第二部分是解决方案。策略,工厂,命令差异。工厂注重创建,创建的未必是策...

2020-10-13 17:13:57 3

原创 行为型--备忘录模式

应用场景也比较明确和有限,主要是用来防丢失、撤销、恢复等定义:在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。tnputText 捕获snapshothold状态,snapshothold用栈。如何优化内存和时间消耗:只备份必要的恢复信息,结合最新的数据来恢复全量备份和增量备份相结合,低频全量备份,高频增量备份,两者结合来做恢复...

2020-10-13 17:11:52 4

原创 行为型--反问者模式

定义:允许操作应用到一组对象上,解耦操作和对象本身。应用场景:操作经常增加,对象本身稳定。特点:利用了重载,是在编译期间,由参数的声明类型决定的,而非运行时,根据参数的实际类型决定的。优点:增加新的操作,可以不要修改对象。非常方便。Single patch和double patch:Single 执行哪个对象的方法,根据运行时对象类型确定;执行对象的哪个方法,根据编译时的入参类型确定;Double 执行对象的哪个方法,根据运行时入参类型确定。c++和j...

2020-10-13 17:10:42 9

原创 行为型--迭代器模式(Iterator Design Pattern)

迭代器的意义:是为了遍历;迭代器和集合是组合关系,使得遍历的职责单一。迭代器模式的意义:对于类似数组和链表这样的数据结构,遍历方式比较简单,直接使用 for 循环来遍历就足够了。但是,对于复杂的数据结构(比如树、图)来说,有各种复杂的遍历方式。比如,树有前中后序、按层遍历,图有深度优先、广度优先遍历等等。如果由客户端代码来实现这些遍历算法,势必增加开发成本,而且容易写错。如果将这部分遍历的逻辑写到容器类中,也会导致容器类代码的复杂性。应用:针对图的遍历,我们就可以定义 DFS..

2020-10-13 17:08:16 10

原创 关于链接

#include"liba.h"#include<stdio.h>void funca(){ printf("liba\n");}void funcc(){ printf("liba c\n");}#include<stdio.h>#include"libb.h"void funcb(){ printf("libb\n");}void funcc(){ printf("libb c\n");}#include.

2020-10-10 11:03:08 6

原创 行为型--状态模式

概念:有限状态机,Finite State Machine,缩写为 FSM,简称为状态机它有 3 个部分组成:状态、事件、动作;事件触发状态的转移及动作的执行方式:if else状态的二维数组: 列:状态 /行:事件/ 元素:动作状态模式应用:超级玛丽 状态: 小玛丽,大玛丽,火焰玛丽;事件: 吃蘑菇,吃火焰,遇到小兵; 动作:。。。...

2020-09-29 10:38:35 4

原创 行为型--职责链模式

定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。实现:链表 or 数组找到能处理的对象,处理并退出 or 每个对象都处理应用场景:..

2020-09-29 09:07:11 9

原创 行为型--模版模式和策略模式

模板模式定义:算法(逻辑,步骤)骨架(模版);具体的步骤,在子类实现,不改变步骤顺序。目的:复用在父类,拓展子类。ps:可以备注,避免子类重写,or 必须重写。模板模式基于继承关系来实现,子类重写父类的抽象方法,是一种类之间的关系。同步回调指在函数返回之前执行回调函数(和模版类似);回调基于组合关系来实现,把一个对象传递给另一个对象,是一种对象之间的关系;异步回调指的是在函数返回之后执行回调函数。类似观察者模式回调基于组合,更灵活回调是一种双向调用关系...

2020-09-28 19:19:11 6

原创 行为型--观察者模式

观察者模式

2020-09-24 15:00:27 14

原创 结构型模式2

门面模式目的:定义一组高层接口让子系统更易用。举例:A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用。应用:易用,符合接口隔离和迪米特法则。性能好,如果调用者要走网络,把三个接口一次性调用完,显然性能更高解决事务问题,要么都成功,要么都失败。ps:接口:太大会导致接口不可复用,太小会导致接口不易用。可以把门面接口和底层接口放在.

2020-09-23 20:17:42 8

原创 创建模式

null 没有查找or不存在,到是一种正常而非异常的行为 可以用空对象替代运行时异常 变异时异常直接吞掉、直接往上抛出、包裹成新的异常抛出pulic需要参数保护,private可以用契约规避。 单例设计模式(Singleton Design Pattern)构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;考虑对象创建时的线程安全问题;考虑是否支持延迟加载;考虑 getInstance() 性能是否高(是否加锁)。...

2020-09-23 18:56:29 34

原创 结构型1

待写

2019-07-31 22:50:43 53

原创 分工和贸易

一、经济学是科学吗?经济学不是科学,因为定理不可证伪;比如定理价格和需求成反比,在买豪车这件事上成立;在上学这件事情上不成立。经济学原理总能早到反例,但是不能说定理被证伪了,因为又总是能够通过找到其他影响因素解释通,或者换一个场景还是适用,所以经济学定理是不可证伪的,不是科学定理。经济学是社会科学,不是自然科学。经济学定理是一套解释性框架,它可以解释部分经济事件,它不可证伪但是他并非不靠谱...

2019-07-31 22:50:12 85

原创 想做的事情

1.研究系统。2.研究libevent库。3.学习得到APP,写摘要,写博客。

2019-07-30 23:30:20 30

转载 libevent

https://www.cnblogs.com/lfsblack/p/5498556.html

2019-06-04 20:00:25 32

转载 epoll

epoll简介epoll是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大量应用程序请求时能够获得较好的性能( 此时被监视的文件描述符数目非常大,与旧的 select 和 poll 系统调用完成操作所需 O(n) 不同, epoll能在O(1)时间内完成操作,所以性能相当高),...

2019-06-01 17:30:01 36

原创 内存和地址

什么是指针,指针是存放地址的变量。什么是地址,地址就是内存编号。什么是内存,就是便于访问的存储空间。内存为什么是4g?因为32根地址总线的cpu支持2的32次方寻址。即有4g个字节。每个字节8位。因此一个int是32位需要4个字节来表示。一个char8位只要一个字节。一个指针也是32位,需要4个字节表示。指针类型表示如何解释内存中的内容,已经变量占内存的长度。...

2019-05-15 00:28:28 925

转载 slab

转自:http://www.cnblogs.com/tolimit/    之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请者,而且我们知道也可页框大小为4K(也可设置为4M),这时候就会有个问题,如果我只需要1KB大小的内存,页框分配器也不得不分配一个4KB的页框给申请者,这样就会有3KB被白白浪费掉了。为了应对这种情况...

2018-11-23 17:20:07 328

原创 os2

结论:0.-O2不使用ebp来记录返回地址,直接使用esp的偏移~~节省寄存器1.开了O2会导致,info line *失败~但是bt还是可以的2.-O2 -Os的堆栈还是用到ebp寄存器的 开O2优化(gdb) info reax            0xb      11ecx            0xffffffff       -1edx         ...

2018-11-19 17:31:41 150

原创 sqlite3

http://www.runoob.com/sqlite/sqlite-alter-command.htmlCREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS ...

2018-11-19 14:30:34 35

原创 svn&git

svn co xx -rxxsvn infosvn update -rxxsvn revert -R ./*svn log -lxxx git clone xxxgit checkout   (类似于revert)git add -A ./*git commit -m"xxxx"git push origin master:master

2018-11-16 15:56:20 58

原创 socket

默认socket调用read, sendto 等函数都是阻塞的服务端使用select,同时客户端断开tcp连接,read不会阻塞,会返回0;从上面可以看出select的不足:1. 检测一个就绪套接字,你需要给所有的套接字FD_ISSET(),若套接字少还行,一旦多了,那就是直接拖速度啊2. 能够监听的套接字数目有限制,一千多个的套接字对于大一点的网络服务器就是‘呵呵‘了其实还有缺点并...

2018-10-23 10:12:08 56

翻译 select

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式...

2018-10-17 09:46:14 47

转载 multable

multable虽然在日常的工作中很少用到,但是毕竟multable属于c++语法中的一个关键自所以,在大多数的面试中经常被提到,所以如果你要重新找工作了还是要了解这个关键字的再了解multable之前我们要先认真的回顾一下什么叫常函数,常函数无非就是带const修饰的函数罢了,为什么要有常函数这个概念,因为为了封装的良好性,优势我们用到的一些函数并不需要我们去改变类中的参数,和成员变量,仅仅只...

2018-10-02 16:55:32 371

转载 volatile

一、volatile 介绍参看:volatile详解参看:C Language KeywordsIndicates that a variable can be changed by a background routine.Keyword volatile is an extreme opposite of const.It indicates that a variable ma...

2018-10-02 16:34:49 41

原创 Markdown:typroa

可以画流程图 PTZ===# first## second### third```sequenceA-&gt;B:createB-&gt;&gt;C:newC-&gt;C:Savec--&gt;d:appd--&gt;c:wc```

2018-09-14 13:40:05 256

转载 返回引用的意义

1.可以作为左值CardID()=c int &amp; CardID()    {        static int iCardID;        return iCardID;    } 引用作为返回值,必须遵守以下规则:(1)不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。(...

2018-08-27 23:29:57 964

原创 类之间的关系(代码层面)

1.继承2,组合    我创建,我销毁      人new眼睛(成员变量)3.聚合    我创建,你使用    人new孩子(成员变量)4.关联    你创建,你销毁(成员变量)    人use女朋友5.依赖    传惨,临时变量...

2018-06-12 11:59:31 95

原创 stl 仿函数

仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。如for_each sort...

2018-06-12 11:19:22 95

转载 session

1,session 在服务器端,cookie 在客户端(浏览器)2,session 默认被存在在服务器的一个文件里(不是内存)3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)4,session...

2018-06-12 10:54:06 78

原创 c++ STL

1.vect和list,duquea.vect和duque支持随机访问,但插入麻烦。duque比vect多一个push_topb.list不支持随机访问,读取麻烦;但是插入方便。

2018-05-27 21:01:45 78

转载 重载和重写

重载:函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部。重定义:也叫做隐藏,子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) ,指派生类的函数屏蔽了与其同名的基类函数。发生在继承中。重写:也叫做覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数。...

2018-05-18 09:02:28 54

转载 偏特化

模板偏特化,与模板特化的区别在于,模板特化以后,实际上其本身已经不是templatized,而偏特化,仍然带有templatized。有指针的偏特化和const的偏特化。模板函数没有偏特化,用重载#include &lt;iostream&gt;using namespace std;// 一般化设计template &lt;class T, class T1&gt;class TestClass...

2018-05-17 21:03:06 110

原创 template

1.template 编译期多态,需要满足隐式接口; class 运行期多态,满足显示接口。template&lt;typename T&gt; void do(T param){    param.size(); //隐式接口} 2.template&lt;typename T&gt; void do(T param){    std::IP  ip("10.33.8.2")//编译不过,因为不...

2018-04-23 19:48:44 61

原创 备忘录模式

1.定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先的状态。2.角色a.主角(Originator)只有主角可以修改存档。是存档的友元。b.存档(Memento)c.存档器(Caretaker)保存存档,不修改。一个存档的数据结构。3.类图

2018-04-19 20:19:52 42

转载 访问者模式

#include &lt;iostream&gt;using namespace std;class Element; class Visitor{public:    virtual ~Visitor(){}    virtual void visitConElemA(Element* elm)=0;    virtual void visitConElemB(Element* elm)=0;p...

2018-03-26 19:48:23 71

原创 c++对象模型

1. 子类的数据是父类优先。2.虚函数地址是程序运行时候动态申请的,非虚函数是编译阶段就确定了的。汇编代码可以看出来。所以虚函数取地址打印出来的不是代码段的地址,而是在虚表中的序号。3.子类虚函数是父类优先,如果new一个子类赋给父类指针,那么子类的会替代父类的同名虚函数。但是,对于默认参数而言,虚函数还是会调用父类的,因为默认参数是在编译时候就确定了的。4.父类的析构函数要是虚的,不然子类的析构...

2018-03-02 16:44:32 75

原创 std::string

http://www.cplusplus.com/reference/string/string/1.stringa.打印数据结构p *(string._M_rep())p  (string._M_data()) b.写时拷贝string a=“test”;string b(a);两者的data指向同一块内存,此时引用计数_M_refcount = 1;...

2018-02-07 19:37:58 108

转载 大小端

大小端存储模式精解计算机系统中内存是以字节为单位进行编址的,每个地址单元都唯一的对应着1个字节(8 bit)。这可以应对char类型数据的存储要求,因为char类型长度刚好是1个字节,但是有些类型的长度是超过1个字节的(字符串虽然是多字节的,但它本质是由一个个char类型组成的类似数组的结构而已),比如C/C++中,short类型一般是2个字节,int类型一般4个字节等。因此这里就存在着一

2018-02-07 19:03:03 5169 2

原创 查静态变量的地址

nm debug | grep "变量名"c++filt 变量 == 变量名地址强转的类型,通过系统类型的变量取地址来确定

2018-01-22 19:43:30 340

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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