自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (9)
  • 收藏
  • 关注

转载 nginx 源码学习笔记(五)——nginx精粹-模块

我们之前说过模块的上下文分别对应四种结构体分别是ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、ngx_mail_module_t分别对应四类模块[cpp] view plaincopyprint?src/core/ngx_conf_file

2015-11-28 16:54:34 428

转载 nginx 源码学习笔记(四)——nginx精粹-模块

接下来,继续理解helloworld模块中的指令。[cpp] view plaincopyprint?helloworld中的代码  /* Commands */  static ngx_command_t  ngx_http_hello_world_commands[] = {      { ngx_string("hello_

2015-11-28 16:50:47 367

转载 nginx 源码学习笔记(三)——nginx精粹-模块

下面开始真正"nginx之旅",屏住呼吸吧!首先找好入手点,对于nginx的入手点就是ngx_module_t结构,他的声明在src/core/ngx_conf_file.h中(我的版本nginx-1.0.13)[cpp] view plaincopyprint?#define NGX_MODULE_V1          0, 0,

2015-11-28 16:49:34 423

转载 nginx 源码学习笔记(二)——nginx精粹-模块

看了一点nginx的源码发现,nginx的模块思想确实吸引了我,也不得不佩服俄罗斯人的想问题方式,要分析nginx源码,首先要搞懂的就是nginx的模块思想以及相关的数据结构。还记得我们上一次写的helloworld模块么?里面涉及最重要的数据就是ngx_module_t指针数组,这个指针数组包含了当前编译版本支持的所有模块,这个指针数组定义实在自动脚本生成的objs/ngx_module

2015-11-28 16:46:33 342

转载 nginx 源码学习笔记(一)——初识nginx helloworld模块

最近看完一本书,而且还是跟我一个学校的人写的关于nginx的内容,个人觉得内容可以更充实点,包括整本书的后半本没有太大的价值,但是总体来说还是不错的哈哈!(是不有点自恋),不费话了,今天记录下我刚刚编写的nginx hello_world模块内容,网上也没有源代码,就完全手敲了,累呀! 1.nginx模块首先nginx和apache最大的不同就是nginx的模块不能够动态添加,需要

2015-11-28 16:44:42 116

转载 Leveldb源码分析--13

8 FilterPolicy&Bloom之28.5 构建FilterBlock8.5.1 FilterBlockBuilder了解了filter机制,现在来看看filter block的构建,这就是类FilterBlockBuilder。它为指定的table构建所有的filter,结果是一个string字符串,并作为一个block存放在table中。

2015-11-26 20:33:41 441 1

转载 Leveldb源码分析--12

8 FilterPolicy&Bloom之18.1 FilterPolicy因名知意,FilterPolicy是用于key过滤的,可以快速的排除不存在的key。前面介绍Table的时候,在Table::InternalGet函数中有过一面之缘。FilterPolicy有3个接口:virtual const char* Name() const = 0; // 返回fil

2015-11-26 20:32:37 501

转载 Leveldb源码分析--11

7 TableCache这章的内容比较简单,篇幅也不长。7.1 TableCache简介TableCache缓存的是Table对象,每个DB一个,它内部使用一个LRUCache缓存所有的table对象,实际上其内容是文件编号{file number, TableAndFile*}。TableAndFile是一个拥有2个变量的结构体:RandomAccessFile*

2015-11-26 20:31:40 494

转载 Leveldb源码分析--10

6 SSTable之46.6 遍历Table6.6.1 遍历接口Table导出了一个返回Iterator的接口,通过Iterator对象,调用者就可以遍历Table的内容,它简单的返回了一个TwoLevelIterator对象。见函数实现:[cpp] view plaincopyIterator* NewItera

2015-11-26 20:29:58 422

转载 Leveldb源码分析--9

6 SSTable之36.5 读取sstable文件6.5.1 类层次Sstable文件的读取逻辑在类Table中,其中涉及到的类还是比较多的,如图6.5-1所示。图6.5-1Table类导出的函数只有3个,先从这三个导出函数开始分析。其中涉及到的类(包括上图中为画出的)都会一一遇到,然后再一一拆解。本节分

2015-11-26 20:28:36 113

转载 Leveldb源码分析--8

6 SSTable之26.4 创建sstable文件了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了。相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中。6.4.1 TableBuilder类构建sstable文件的类是T

2015-11-26 20:27:39 399

转载 Leveldb源码分析--7

6 SSTable之1SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模块。6.1 SSTable的文件组织作者在文档doc/table_format.txt中描述了表的逻辑结构,如图6.1-1所示。逻辑上可分为两大块,数据存储区Data Block,以及各种Meta信息。1)文件中的k/v对是有序存储的,并且被划分

2015-11-24 19:03:22 507

转载 Leveldb源码分析--6

5 操作Log 2 5.3 读日志日志读取显然比写入要复杂,要检查checksum,检查是否有损坏等等,处理各种错误。5.3.1 类层次先来看看读取涉及到的类图,如图5.3-1。Reader主要用到了两个接口,一个是汇报错误的Reporter,另一个是log文件读取类SequentialFile。> Reporter的接口只有一个

2015-11-24 19:01:39 488

转载 rtsp详解二之wireshark抓包分析

一、概述    RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。    RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。  基本的RTSP操作过程

2015-11-23 14:19:01 14224

转载 rtsp详解一

目录:概述RTSP简介协议特点协议细节典型的rtsp交互过程RTSP消息格式方法定义消息头定义状态码rtsp中常用方法举例SDP协议概述简介SDP协议格式SDP协议举例说明概述RTSP简介RTSP(Real Time Streaming Protocol), 实时流传输协议, 是TCP/IP协议体系中的一个应用层协议, 由

2015-11-23 14:16:48 1607

转载 Leveldb源码分析--5

5 操作Log 1分析完KV在内存中的存储,接下来就是操作日志。所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable。这样做有两个有点:1可以将随机的写IO变成append,极大的提高写磁盘速度;2防止在节点down机导致内存数据丢失,造成数据丢失,这对系统来说是个灾难。在各种高效的存储系统中,这已经是口水技术了。5.1 格式在

2015-11-23 09:07:23 449

转载 Leveldb源码分析--4

4 Memtable之24.6 Comparator弄清楚了key,接下来就要看看key的使用了,先从Comparator开始分析。首先Comparator是一个抽象类,导出了几个接口。其中Name()和Compare()接口都很明了,另外的两个Find xxx接口都有什么功能呢,直接看程序注释:[cpp] view plaincopy

2015-11-23 09:06:17 585

转载 Leveldb源码分析--3

4 Memtable之1Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数据在Memtable中是如何组织的,秘密在Skip list中。4.1 用途在Leveldb中,所有内存中的KV数据都存储在Memtable中,物理disk则存储在SSTable中。在系统运行过程中,如果Memtable中的数据占用内存到达指定值(O

2015-11-23 09:05:25 493

转载 Leveldb源码分析--2

3 Int Coding轻松一刻,前面约定中讲过Leveldb使用了很多VarInt型编码,典型的如后面将涉及到的各种key。其中的编码、解码函数分为VarInt和FixedInt两种。int32和int64操作都是类似的。3.1 Decode首先是FixedInt编码,直接上代码,很简单明了。void EncodeFixed32(char* buf, ui

2015-11-23 09:04:23 559

转载 Leveldb源码分析--1

【前言:看了一点oceanbase,没有意志力继续坚持下去了,暂时就此中断,基本上算把master看完了,比较重要的update server和merge server代码却没有细看。中间又陆续研究了hadoop的源码,主要是name node和写入pipeline。主要的目的是想看看name node对namespace的管理,以及hadoop在写入操作时,client、data nod

2015-11-23 09:03:06 582

转载 .properties 文件

在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的。比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通用性,那么以上信息就不能写死在程序里。通常我们的做法是用配置文件来解决。各种语言都有自己所支持的配置文件类型。比如Python ,他支持.ini 文件。因为他

2015-11-13 11:02:49 413

转载 java import、package作用与用法

有些人写了一阵子 Java,可是对於 Java 的 package 跟 import 还是不 太了解很多人以為原始码 .java 档案中的 import 会让编译器把所 import 的程式通通写到编译好的 .class 档案中,或是认為 import 跟 C/C++ 的 #include 相似,实际上,这是错误的观念。让我们先了解一下,Java 的 package 到底有何用

2015-11-13 10:56:43 440

转载 最详细的Log4j使用教程

一、入门实例1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下2、src同级创建并设置log4j.properties ### 设置###log4j.rootLogger = debug,stdout,D,E### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.Con

2015-11-13 10:42:55 377

转载 Tomcat的bin目录下的startup.bat和Tomcat7.exe的区别

情况:Tomcat解压后,启动bin目录的startup.bat正常,但是启动tomcat7.exe却启动不了,为什么?一、tomcat7.exe与startup.bat的区别:1、这两个都可以启动tomcat,但tomcat7.exe必须安装了服务才能启动,而startup.bat不需要2、另外一个区别是它们启动所使用的JAVA环境配置是分开的tomcat7.

2015-11-12 17:01:49 1959

转载 Tomcat中JVM内存溢出及合理配置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。一、Java JVM内存介绍JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是

2015-11-12 16:48:56 395

转载 jdk环境变量配置

jdk环境变量配置进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置:1、下载jdk(http://java.sun.com/javase/downloads/index.jsp),我下载的版本是:jdk-6u14-windows-i586.exe2、安装jdk-6u14-windows-i586.exe3、配置环境变量:右击“我的电脑”-->"高级"-->

2015-11-12 09:15:58 564

转载 跳表

为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前

2015-11-11 23:18:55 434

转载 模板类中的成员函数定义返回值为类中的typedef类型时候注意

如果模板类中的成员要访问类中的typedef类型必须加上关键字typename来指明它是一个类型。 如一下代码中的那个成员函数size。 [cpp] view plaincopy#include   #include     templatetypename Type>  class List  {

2015-11-09 22:44:41 2115

转载 Spring Hello World 实例

运行环境  1、myeclpise10.5 2、JDK63、 junit-4.11.jar 、hamcrest-core-1.3.jar 、 hamcrest-library-1.3.jar4、spring依赖的com.springsource.org.apache.log4j-1.2.15.jar5、spring3.056、准备需要的jar

2015-11-06 10:41:24 337

转载 C++中复制构造函数与重载赋值操作符总结

前言这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容:复制构造函数和重载赋值操作符的定义;复制构造函数和重载赋值操作符的调用时机;复制构造函数和重载赋值操作符的实现要点;复制构造函数的一些细节。复制构造函数和重载赋值操作符的定义我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数、析构函数、复制构造函数和重载赋值操作;即使在你没有明确定

2015-11-05 16:49:40 591

转载 C++设计模式——观察者模式

前言之前做了一个性能测试的项目,就是需要对现在的产品进行性能测试,获得测试数据,然后书写测试报告,并提出合理化的改善意见。项目很简单,我们获得了一系列性能测试数据,对于数据,我们需要在Excel中制作测试数据的折线图、饼状图和柱状图,以直观的表现出性能的变化。在实际操作时,我发现,如果我修改了一个数据,折线图、饼状图和柱状图就都发生了变换。这个是如何做到的?这就要说到今天总结的观察者模式了

2015-11-05 15:39:33 322

转载 C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。  堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没

2015-11-05 10:32:03 359

转载 Struts2与Servlet的关系

在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。 在action的方法中return一个字符串,该字符串对应struts.xml中的result标签的name相同,result标签中包含的就是跳转页面, 其原理,我的理解是这样的: 一.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输

2015-11-04 14:57:22 382

转载 使用do{ } while(0);有什么好处?

【gq414047080】:_Api(){ do { //do something }while(0);}这样的写法有什么好处啊?将楼主的问题扩展一下,do{} while(0);的用处都有什么?不仅限于楼主所贴代码的使用形式。这里整理一些(我觉得)比较有意义的回帖:【happynesslele】:有时

2015-11-03 11:13:59 536

微服务设计(中文完整版)

过去十年中,分布式系统的粒度变得越来越细,包含大量代码的单块应用逐渐转变为自包含的微服务。但开发微服务系统也有一些让人头疼的问题。本书通过大量的例子,全面讨论了系统架构师和管理员在构建、管理和演化微服务架构时必须考虑的问题,并给出了实用的建议。

2018-05-30

重构:改善既有代码的设计

本书清晰揭示了重构的过程,解释了重构的原理和践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。本书提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。

2018-05-24

effective c++(第3版)

《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)》内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。世界项级C++大师scott Meyers成名之作的第三版的确当得起这样的评价。

2018-05-24

MYSQL必知必会

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

2018-05-22

第一本Docker书带书签目录(完整版)

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2018-05-22

go语言圣经

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

2018-05-22

[精通正则表达式(第三版)].(美)佛瑞德.扫描版

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

2018-05-22

The_AWK_Programming_Language中文

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。

2018-05-22

sed与awk(第二版)

Awk、sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用。

2018-05-22

空空如也

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

TA关注的人

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