- 博客(25)
- 收藏
- 关注
转载 C++工厂模式总结-简易版反射
工厂模式解决了很多问题,但每当需要增加一个新功能时候,需要修改工厂类,违反了开闭原则,具体为什么见:blog.sina.com.cn/s/blog_48ebca64010005of.html文中解决工厂问题主要采用两种方法:1、为每个功能创建一个Creator,该Creator继承自抽象Creator,用户可以使用抽象Creator创建各个功能的Creator,好处是保证了开闭原则,当新增
2016-05-26 08:14:49
3175
转载 c++工厂模式
以下是我自己学习设计模式的思考总结。简单工厂模式简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型,工厂类就会返回需要的产品类,但客户端看到的只是产品的抽象对象,无需关心到底是返回了哪个子类。客户端唯一需要知道的具体子类就是工厂子类。除了这点,基本是达到了依赖倒转原则的要求。 假如,我们不用工厂类,只用AbstractP
2016-05-26 07:55:59
340
转载 sqlite关闭数据库连接
sqlite3_finalize int sqlite3_finalize(sqlite3_stmt *pStmt);这个过程销毁前面被sqlite3_prepare创建的准备语句,每个准备语句都必须使用这个函数去销毁以防止内存泄露。在空指针上调用这个函数没有什么影响,同时可以准备语句的生命周期的任一时刻调用这个函数:在语句被执行前,一次或多次调用sqlite_reset之后,或
2016-05-26 07:26:45
2190
转载 设计模式概述
总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并
2016-05-26 07:22:41
266
转载 关闭TCP连接
从TCP协议角度来看,一个已建立的TCP连接有两种关闭方式,一种是正常关闭,即四次挥手关闭连接;还有一种则是异常关闭,我们通常称之为连接重置(RESET)。 首先说一下正常关闭时四次挥手的状态变迁,关闭连接的主动方状态变迁是FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT,而关闭连接的被动方的状态变迁是CLOSE_WAIT->LAST_ACK->TIME_
2016-05-07 06:38:53
1095
转载 浅析ICMP洪水攻击
一、什么是ICMP协议?ICMP全称Internet Control Message Protocol(网际控制信息协议)。提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网
2016-05-04 21:41:25
1028
转载 ICMP(网络控制信息协议 internet control message protocol)
1.IMCP协议介绍前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。IC
2016-05-04 21:37:21
805
转载 网关,DNS,子网掩码等
顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。 按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。那么网关到底是什么 呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为 “192.168.1.1~192.168.1.254”,子网掩码为255.255.25
2016-04-25 22:41:35
511
转载 路由器数据转发过程
路由器转发IP报文的依据是路由表,通过匹配路由表里的路由项来实现对IP报文的转发。如图1所示,当路由器收到一个IP报文的时候,将报文中的目的IP地址提取出来,然后与路由表中路由表项包含的目的地址进行比较。如果与某路由项中的目的地址相同,则认为与此路由项匹配;如果没有路由项能够匹配,则丢弃该IP报文。 图1 路由器多跳转发流程图IP报文中的
2016-04-25 22:33:45
31704
转载 MAC地址
1. MAC地址解释每个网卡拥有全球唯一的MAC以示区别,6个字节,数据链路层负责mac地址,MAC(Medium/Media Access Control)地址,或称为 MAC地址、物理地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。 其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位),也称为“编制上唯一的
2016-04-24 17:11:32
508
转载 socket可读,可写的条件
socket可读可写条件,经常做为面试题被问,因为它考察被面试者对网络编程的基础了解的是不是够深入。要了解socket可读可写条件,我们先了解几个概念:1.接收缓存区低水位标记(用于读)和发送缓存区低水位标记(用于写):每个套接字有一个接收低水位和一个发送低水位。他们由select函数使用。接收低水位标记是让select返回"可读"时套接字接收缓冲区中所需的数据量。对于TCP,
2016-04-23 18:20:36
4826
转载 TCP/UDP 伪首部
伪首部,通常有TCP伪首部和UDP伪首部。在UDP伪首部中,包含32位源IP地址,32位目的IP地址,8位协议,16位UDP长度。通过伪首部的校验,UDP可以确定该数据报是不是发给本机的,通过首部协议字段,UDP可以确认有没有误传。1. 伪首部并非TCP&UDP数据报中实际的有效成分。伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅
2016-04-23 18:17:46
1483
转载 子网掩码
一、 子网掩码的概念及作用 子网掩码 (subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,是一个应用于 TCP/IP 网络的 32 位二进制值。它可以屏蔽掉 IP 地址中的一部分,从而分离出 IP 地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。它必须结合 IP 地址一起使用。二、 为什么需要使用子网掩码 虽然我们说子网掩码可以分
2016-04-23 17:50:35
584
转载 IP/TCP/UDP协议帧格式
互连网早期的时候,主机间的互连使用的是NCP协议。这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能。为了改善这种缺点,大牛弄出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图所谓的协议就是双方进行数据传输的一种格
2016-04-23 14:08:43
2172
转载 ARP协议与RARP协议
ARP:地址解析协议对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址。ARP协议为IP地址到对应的硬件地址之间提供动态映射。工作过程在以太网(ARP协议只适用于局域网)中,如果本地主机想要向某一个IP地址的主机(路由表中的下一跳路由器或者直连的主机,注意此处IP地址不一定是IP数据报中的目的IP)发包,但是并不知道其硬件
2016-04-23 08:27:20
737
转载 sqlite3事务实例
函数:sqlite3_exec(),称为便捷函数,封装了好多任务。 函数声明: int sqlite3_exec( sqlite * , const char * sql , sqlite_callback , void *data , char ** errmmsg) ; 其中 sqlite* 表示打开的数据库; s
2016-04-20 22:19:02
642
转载 sqlite3函数sqlite3_exec
函数:sqlite3_exec(),称为便捷函数,封装了好多任务。 函数声明: int sqlite3_exec( sqlite * , const char * sql , sqlite_callback , void *data , char ** errmmsg) ; 其中 sqlite* 表示打开的数据库; s
2016-04-20 22:01:54
4154
转载 sqlite3数据存储与读取
SQLite3是嵌入在iOS中的关系型数据库,对于存储大规模的数据很有效。SQLite3使得不必将每个对象都加到内存中。基本操作:(1)打开或者创建数据库sqlite3 *database;int result = sqlite3_open("/path/databaseFile", &database);如果/path/databaseFile不存在,则创建它,否则打开它。
2016-04-20 21:57:15
2854
转载 sqlite3函数sqlite3_prepare
这个函数将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。这个接口需要一个数据库连接指针以及一个要准备的包含SQL语句的文本。它实际上并不执行(evaluate)这个SQL语句,它仅仅为执行准备这个sql语句函数定义(仅列出UTF-8的)int sqlite3_prepare( sqlite3 *db, /* D
2016-04-20 21:52:19
6051
转载 sqlite函数sqlite3_step
这个过程用于执行有前面sqlite3_prepare创建的准备语句。这个语句执行到结果的第一行可用的位置。继续前进到结果的第二行的话,只需再次调用sqlite3_setp()。继续调用sqlite3_setp()知道这个语句完成,那些不返回结果的语句(如:INSERT,UPDATE,或DELETE),sqlite3_step()只执行一次就返回函数定义int sqlite3_step(sq
2016-04-20 21:50:37
13880
转载 sqlite获取 sqlite3_step 结果中的某列的值
首先执行 sqlite3_prepare_v2再执行 sqlite3_step然后-----------------------------------------------------------------------------------这个过程从执行sqlite3_step()执行一个准备语句得到的结果集的当前行中返回一个列。每次sqlite3_step得到一个结果
2016-04-20 21:48:20
6418
转载 sqlite关闭数据库连接
sqlite3_finalize int sqlite3_finalize(sqlite3_stmt *pStmt);这个过程销毁前面被sqlite3_prepare创建的准备语句,每个准备语句都必须使用这个函数去销毁以防止内存泄露。在空指针上调用这个函数没有什么影响,同时可以准备语句的生命周期的任一时刻调用这个函数:在语句被执行前,一次或多次调用sqlite_reset之后,或
2016-04-20 21:33:57
3298
转载 sqlite线程模式
SQLite支持3种线程模式: 单线程:这种模式下,没有进行互斥,多线程使用不安全。禁用所有的mutex锁,并发使用时会出错。当SQLite编译时加了SQLITE_THREADSAFE=0参数,或者在初始化SQLite前调用sqlite3_config(SQLITE_CONFIG_SINGLETHREAD)时启用。 多线程:这种模式下,只要一个数据库连接不被多个线程同时使用就是安全
2016-04-20 20:57:20
1154
转载 sqlite异常掉电相关问题(2)
相信很多使用SQLite3当做数据库的人都会一个现象,那就是当SQLite3有做写入的动作时,SQLite3会自动产生一个名为"数据库名称-journal"的暂存档。这是做什么用的呢?答案是用来Rollback ,换句话说,就是当数据写入数据库有失败动作时,透过journal档案予以复原到未更动前(原始)数据,来确保数据完整与一致性。如果在每次写入的时间很长或频繁的进行数据库写入情况下,因
2016-04-20 20:41:43
4152
转载 sqlite异常掉电相关问题(1)
sqlite3默认会开启journal,为了进行rollback。但是在突然断电的情况下,journal文件很容易就损坏了。目前还没有发现数据库文件本身被损坏的情况。一旦journal文件损坏,就没法打开数据库文件了。但是可以把journal机制关闭。一旦journal文件损坏,还会造成文件系统损坏,journal文件都无法删除掉。对journal文件所在目录进行ls的时候,会
2016-04-20 20:34:04
4014
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人