自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 给tcpdump加点颜色看看

发布一个与tcpdump配合使用的Python脚本,可以为tcpdump的输出结果着色.红色是IP头。绿色是TCP头的定长部分,黄色是TCP头的可变长部分,即可选项。白色就是应用层socket数据。

2014-08-24 22:59:04 1831 1

原创 一张图总结Google C++编程规范(Google C++ Style Guide)

Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比较全面的说明图,可以在短时间内快速掌握规范的重点内容。不过规范毕竟是人定的,记得活学活用。看图前别忘了阅读下面两条重要建议:1 保持一致也非常重要,如果你在一个文件中新加的代码和原有代码风格相去甚远的话,这就破坏了文件本身的整体美观也影响阅读,所以要尽量避免。2 一些条目往往有例外,比如下面这些,所以本图不能代替文档,有时间还是把PDF认真阅读一遍吧。

2014-07-13 21:31:54 54953 12

原创 从epoll构建muduo-1 mini-muduo介绍

前段时间看了陈硕写的muduo网络库(github, 书, blog),觉得这是一个学习网络编程的非常好的素材。为了更好的了解这个库,自己花了点时间,模仿其源码从零开始编写了一个极小的mini-muduo(起这名字没版权问题吧:-)),代码编写过程中有很多收获,我打算写几篇文章记录下心得。有几个问题先说明一下:Q1:网络库很多,为什么选择muduo?    1 库的功能相对完整,基

2013-04-10 16:36:51 14076 5

原创 剖析Mysql的InnoDB索引

本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档)。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。

2014-10-26 18:00:47 17693 13

原创 Paxos 学习总结

对Paxos算法做个总结,包括1-经典Paxos图示 2-论文阅读 3-Paxos实例与Mutl-Paxos 4-编号n的选择 5-Paxos优化 6-Paxos用法

2014-10-02 13:25:40 3924 1

转载 Paxos历史回顾

自Paxos提出,迄今已有20多年了,围绕着该算法曾经发生过一些非常有趣的事情,这些也已成为人们津津乐道的一段轶事,故事的主角自然是Paxos的提出者Lamport,当然Lamport的特立独行也是很早就出了名的。首先来讲述下这些有趣的八卦,之后会再理一下Paxos的整个发展过程,以及在这个过程中产生的一系列比较重要的论文,总共会涉及到十几篇论文,如果有时间还是最好都研读一下。由于时间关系,我也只

2014-09-28 22:54:23 2583

原创 Javascript推导Y-Combinator (来自Jim Weirich)

熟悉函数式编程的同学都了解lambda表达式,程序设计语言里的lambda表达式来源于1936年邱奇发明的lambda演算。Y-Combinator正是lambda演算里最富有神秘色彩的一种函数。它的作用是在只有匿名函数的lambda演算里实现递归函数调用。本篇向读者揭示了如何反复重构一个普通的阶乘函数从而推导出Y-Combinator。文章的推导方法来源于Jim Weirich在ruby conference 2012上的一次分享。

2014-09-21 12:55:37 3362

原创 tcpdump重要笔记

关于tcpdump的重要笔记,无关痛痒的参数就不写了。只说一些我认为值得注意的

2014-08-27 17:23:29 4020

翻译 JSON不是JavaScript对象

很多人都把JSON当作JavaScript对象,但它根本不是。JSON只是一种灵感来自JavaScript对象结构的字符串表示法。JSON被设计得简单松散,用来在服务器和浏览器之间传输数据。因为它得简洁性,也被用在浏览器和服务器之外的其他应用中。

2014-08-02 14:42:58 1259 3

原创 JavaScript 对象详解

从四个方面介绍了JavaScript的对象1 创建对象的方法2 内置对象的创建3 包装对象4 对象的类型

2014-07-30 10:07:36 1045

原创 JavaScript 原型详解

全面分析下JavaScript的原型系统。1 原型2 继承属性的写入3 添加还是覆盖4 创建对象的方法5 __proto__属性6 内置对象的创建

2014-07-26 22:38:20 1062

原创 JavaScript 常见陷阱

JavaScript 常见陷阱 总结1 数组2 函数级作用域3 this变量4 对象直接量和JSON5 undefined和null6 replace7 全局变量

2014-07-18 16:35:19 1256

原创 从epoll构建muduo-13 Reactor + ThreadPool 成型

本版是个里程碑版本,可以通过本版了解多线程是如何通过IO线程读/写网络数据的,在前一个版本v0.12重点介绍了基础知识的前提下,本篇着重分析多线程逻辑里最重要的三个方法EventLoop::runInLoop/EventLoop::queueInLoop/EventLoop::doPendingFunctors。下面逐步介绍本版本修改的细节,三个方法放在最后的EventLoop节。

2014-06-28 22:00:36 2833

原创 从epoll构建muduo-12 多线程入场

多线程代码被加入到mini-muduo,本篇主要介绍Linux多线程编程的5个类1 Mutex2 Condition3 BlockingQueue4 Thread5 ThreadPool

2014-06-12 23:29:00 4871

原创 从epoll构建muduo-11 单线程Reactor网络模型成型

mini-muduo v0.10版本,修整代码版本。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.10可切换到此版本,在线浏览此版本到这里。这个版本的改动不大,主要修改了命名规范问题,借着这个版本重点分析一下muduo里的三个文件描述符。

2013-12-08 19:08:27 3822 2

原创 你真的了解find命令吗

find 命令是很常用的shell命令,本文通过解决3个常见问题来剖析find的用法1 按照时间查找文件通过使用-ctime -mtime -atime可以指定特定时间这三个参数的使用方法是相似的,但是意义不同,使用man find来看其作用看上去atime比较明确,但是ctime和mtime差不多,下面是这三个参数针对的具体时间。ctime

2013-08-28 17:33:02 1478

原创 Socket连接出错总结

下面7种情况是我认为最容易出现的TCP/IP连接错误。[1] kill pid/应用崩溃/正常关机    这几种情况下操作系统会正常将连接关闭,主动发送FIN完成4次分组交换[2] 操作系统崩溃/机器断电    两种情况    1 如本端不再启动则不会有任何响应到对端,对端会执行[6]的超时重传重过程    2 如果机器后来又启动了,则会在对端写时返回RST

2013-05-30 21:08:08 2742

原创 从epoll构建muduo-10 Timer定时器

mini-muduo v0.09版本,实现了Timer定时器。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.09可切换到此版本,在线浏览此版本到这里。这个版本是一个里程碑版本,到这个版本为止,可以说一个单线程的Reactor模式网络库基本成型,程序里的类各司其职,协同完成网络数据的首发。后续版本只是在此基础上增加了多个工作线程(耗费CPU

2013-05-21 14:35:10 5943 7

原创 从epoll构建muduo-9 加入onWriteComplate回调和Buffer

mini-muduo v0.08版本,这个版本完善了缓冲区的实现。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.08可切换到此版本,在线浏览此版本到这里 本版本有两处重要修改,首先实现了IMuduoUser的onWriteComplate回调,这样当用户一次传送大量数据到网络库时,用户会在数据发送完成后收到通知。当然了发送小量数据完成时也

2013-05-14 23:11:38 2886

原创 从epoll构建muduo-8 加入发送缓冲区和接收缓冲区

mini-muduo v0.07版本,这个版本是加入了发送缓冲区和接收缓冲区的初始版本,后续v0.08完善了缓冲区的实现。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.07可切换到此版本,在线浏览此版本到这里1 为什么要有发送缓冲区和接收缓冲区,muduo作者已经在>节中详细介绍过了。建议有条件的同学直接看书。我觉得这部分知识非常重要所以

2013-04-27 17:24:25 3700 5

原创 从epoll构建muduo-7 加入IMuduoUser

mini-muduo v0.06版本,这个版本应该算是一个里程碑版本,最重要的修改是将库和库的用户分离。完整可运行的示例可从github下载,使用命令git checkout v0.06可切换到此版本,在线浏览此版本到这里1 在这个版本中,我们的网络库才真正的能被称为“库”。整个mini-muduo程序现在被分成了两部分,一边是库,另一边是库的用户。EchoServer这个类就是用户了,用户关

2013-04-25 16:50:00 2991 1

原创 从epoll构建muduo-6 加入EventLoop和Epoll

mini-muduo v0.05版本,完整可运行的示例可从github下载,使用命令git checkout v0.05可切换到此版本,在线浏览此版本到这里 本版将程序的主要类都加入进来了,这个版本可以作为一个里程碑版本,最重要的修改是加入了两个类EventLoop和Epoll。加入这两个类后,程序代码逻辑就相对清晰多了。为了有个更直观的了解,我们对照之前介绍的最简单epoll示例(从epoll构

2013-04-24 00:11:07 3822 2

原创 从epoll构建muduo-5 加入Acceptor和TcpConnection

mini-muduo v0.04版本,这是个版本最重要的修改是加入了两个类Acceptor和TcpConnection。完整可运行的示例可从github下载,使用命令git checkout v0.04可切换到此版本,在线浏览此版本到这里1 回顾下v0.03版本,所有的socket事件都是在TcpServer::OnIn(命名不规范后续会改动)里处理的,包括接受新连接和读写数据,那实在是没

2013-04-16 23:15:21 3341

原创 从epoll构建muduo-4 加入Channel

mini-muduo v 0.03版本,这是个版本最重要的修改是加入了一个名为Channel的类。完整可运行的示例可从github下载,使用命令git checkout v0.03可切换到此版本,在线浏览此版本到这里介绍一下Channel类,先看其声明,这里特别要注意_events和_revents,前者是要关注的事件,后者是发生的事件,不仔细看容易混淆。名字的来源是poll(2)的struc

2013-04-15 12:56:58 4428

原创 从epoll构建muduo-3 加入第一个类,顺便介绍reactor

mini-muduo v 0.02版本,这个版本添加的内容非常少,完整可运行的示例可从github下载,使用命令git checkout v0.02可切换到此版本,在线浏览到这里#include "TcpServer.h"int main(int args, char** argv){ TcpServer tcpserver; tcpserver.start();

2013-04-13 00:01:14 4456

原创 从epoll构建muduo-2 最简单的epoll

mini-muduo v 0.01版本,这是mini-muduo的第一个版本,整个程序是一个100行的epoll示例下面粘贴的代码省略了头文件引用,完整可运行的示例可从github下载,使用命令git checkout v0.01可切换到此版本,在线浏览到这里#define MAX_LINE 100#define MAX_EVENTS 500#define MAX_LISTENFD

2013-04-12 14:07:58 5943 2

原创 可以运行的linux-0.00和linux-0.11

这两个版本的linux都是根据 赵炯的>修正版V3.0 整理出来的.已经在Ubuntu 12.04.1版本(bochs 2.4.6)上运行过https://github.com/voidccc/linux0.00https://github.com/voidccc/linux0.11linux 0.00说明:这是一个假想中的版本, 并不是由Linus所写,因为当

2013-03-13 15:32:22 2326 3

原创 你真的了解xargs命令吗

shell里的xargs命令大家都很熟悉,最常见的使用场景就是文件内查找文本find . -type f -name "*.c" | xargs grep abc这行命令首先通过find程序在当前目录(含子目录)下查找所有.c文件,然后运行grep程序在所有文件内容里搜索文本"abc"。A:就是这么简单吗?B:是啊,很简单,要不然无名师怎么会对来访的程序员说“Unix传统上认为一行

2013-03-01 14:02:14 3075

原创 RST与epoll的EPOLLHUP事件

当socket的一端认为对方发来了一个不存在的4元组请求的时候,会回复一个RST响应,在epoll上会响应为EPOLLHUP事件,目前我已知的两种情况会发响应RST[1] 当客户端向一个没有在listen的服务器端口发送的connect的时候 服务器会返回一个RST 因为服务器根本不知道这个4元组的存在 [2] 当已经建立好连接的一对客户端和服务器,客户端突然操作系统崩溃,或者拔掉

2013-02-27 22:11:42 17397 2

原创 到底该如何理解socket的阻塞/非阻塞/同步/异步

这4个名词的解释网络上有很多种版本和很多种比喻,个人不太喜欢打比方的方式来理解技术问题,因为很难有贴切的比喻,稍不注意就把人带到沟里.我们这里只通过技术模型来理解这4个术语,忽略这些名词广义上的定义,通过分析下面这个具体的场景来分享下我对他们的理解:场景:假设要通过一个socket发送的数据是5k大小的一段文本,内核的发送缓冲区4k.首先要搞明白一个基础问题,当我们在socket上

2013-02-27 21:40:03 1399

空空如也

空空如也

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

TA关注的人

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