qqwx

导航

2016年12月26日 #

智能指针剖析

摘要: 已经废弃。原因是它行为上是"排它性"指针,但又允许编译器实现拷贝操作,拷贝后的右值会被赋空。即将“传递”语义掩盖在“拷贝”动作之下。 即a=b时,作为右值的b的物理指针会是NULL。 会造成使用它的容器混乱。 这是典型的设计缺陷。既然是“传递”语义,就不应以“拷贝"形式出现。 另一方面,它对于数组的 阅读全文

posted @ 2016-12-26 22:53 qqwx 阅读(398) 评论(0) 推荐(0) 编辑

2016年11月27日 #

https基础流程

摘要: 背景: https基于SSL,目的是保护http通信的过程,防止中间人篡改信息,或假冒服务端的问题。 要解决的问题: 1. 客户端如何证明是与正确的服务端进行通信 2. 客户端如何确认收到服务端的信息没有经中途某人篡改 3. 如何保证即使消息被中间人截获,也不能知道消息的内容 通信流程: 0. 在目 阅读全文

posted @ 2016-11-27 21:29 qqwx 阅读(629) 评论(2) 推荐(0) 编辑

2016年11月6日 #

误用的volatile

摘要: 在嵌入式编程中,有对某地址重复读取两次的操作,如地址映射IO。但如果编译器直接处理p[0] = *a; p[1] = *a这种操作时,往往会忽略后一个,而直接使用前一个已计算的结果。这是有问题的,因为地址a由于映射了端口,每一次读取都不同,都必须从地址上读取,不能让编译器进行优化。volatile因 阅读全文

posted @ 2016-11-06 23:44 qqwx 阅读(292) 评论(0) 推荐(0) 编辑

tcp连接listen的backlog剖析

摘要: TCP连接中,最重要的是连接TCP连接上,两个方向之间的各个状态及各个系统调用与状态之间的关系。往往可以以两种图表示,第一种是状态转换图,第二种是连接时序图。如下: 状态图: 时序图: 可见,listen状态是服务器接收连接建立的必经之路。调用listen后,服务器即进入了LISTEN状态。 lis 阅读全文

posted @ 2016-11-06 23:03 qqwx 阅读(4294) 评论(0) 推荐(1) 编辑

2016年5月24日 #

分布式入门之5:paxos

摘要: paxos是去中心化协议。目的是在没有中心节点统筹的情况下,通过约定的算法推进流程,使所有节点达到一个一致的状态(批准某个值) proposer, accepter是其中的主要角色。前者发起投票,后者批准投票。 核心思想是,一旦超过半数的accepter同意某个投票,整个流程结束,批准的那个结果则是 阅读全文

posted @ 2016-05-24 23:52 qqwx 阅读(680) 评论(0) 推荐(0) 编辑

2016年5月11日 #

分布式入门之4:二阶段提交

摘要: 1. 背景: 初时提出,是为解决分布式数据库的事务问题。单机数据库事务可靠日志技术,MVCC技术实现。分布式情况下,就需要额外的手段来保证,这才出现了二阶段提交。 2. 流程: 从角色上,二阶段提交分为两种角色:协调者(coordinate),参与者(participant)。流程思路上很简单: 1 阅读全文

posted @ 2016-05-11 16:23 qqwx 阅读(447) 评论(0) 推荐(0) 编辑

2016年4月6日 #

分布式入门之3:副本控制

摘要: 按某特定流程控制副本数据的读写行为,使副本满足一定的可用性及一致性的分布式协议。 中心化副本控制协议: primary-secondary协议 只有一个副本作为主副本,其余都是从副本。主副本作为中心节点负责数据更新、控制协调一致性。 四大问题: 1. 写 > 写由主完成 > 外部写请求发给主 > 主 阅读全文

posted @ 2016-04-06 10:43 qqwx 阅读(1013) 评论(0) 推荐(0) 编辑

2016年4月5日 #

分布式入门之2:Quorum机制

摘要: 1. 全写读1(write all, read one) 全写读1是最直观的副本控制规则。写时,只有全部副本写成功,才算是写成功。这样,读取时只需要从其中一个副本上读数据,就能保证正确性。 这种规则需要解决一个问题:如果是一个kv系统,对某个key的第i次写如果只有部分成功,那么系统中既存在次i次写 阅读全文

posted @ 2016-04-05 15:08 qqwx 阅读(1984) 评论(0) 推荐(0) 编辑

2016年3月23日 #

分布式入门之1:Lease机制

摘要: 引子: 分布式系统中,如何确认一个节点是否工作正常? 如果有3副本A、B、C,并通过中心结点M来管理。其中A为主副本。 未接触过分布式的直观的处理方法是在每个副本与中心节点M中维护一个心跳,期望通过心跳是否存在而判断对方是否依旧存活。 心跳方法其实根本无法解决分布式下的这个问题。考虑如下场景: M在 阅读全文

posted @ 2016-03-23 23:36 qqwx 阅读(4274) 评论(0) 推荐(0) 编辑

2015年9月7日 #

vim如何配置go语言环境

摘要: go语言没有如source insight般优秀的编辑器,试用了多种,vim算最好的,其次可以用liteide(有反查变量函数引用点、修改行变色功能),两者可配合使用。 更新:最好的是idea+go插件 下面是一步步搭建vim go语言编辑环境的过程。 ubuntu为例,前提:go开发环境配置好、g 阅读全文

posted @ 2015-09-07 21:27 qqwx 阅读(2911) 评论(0) 推荐(1) 编辑