<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[逆风飞扬]]></title><description><![CDATA[关注 Unix高性能服务器/Big Data/数据挖掘/海量数据处理/用户行为分析/个性化推荐算法]]></description><link>https://blog.youkuaiyun.com/wangfaqiang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangfaqiang]]></copyright><item><title><![CDATA[Rocksdb源码剖析一----Rocksdb概述与基本组件]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/50096377</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/50096377</guid><author>wangfaqiang</author><pubDate>Sun, 29 Nov 2015 16:38:59 +0800</pubDate><description><![CDATA[因为本人对一些经典的开源项目很有兴趣，也想从大牛设计的开源系统中学习架构设计经验，所以喜欢分析一些开源代码，这次因为项目中需要使用rocksdb，故在使用的时候仔细分析了rocksdb的实现细节，从2015年11月11日下决心整理出这一系列的blog，也算是对工作的总结吧。分享出来希望能帮到有需要的朋友。因为之前已经读完LevelDB的源码，读的过程中也参考了网上的相关文章，此小节的介绍会与Lev]]></description><category></category></item><item><title><![CDATA[GNU c   __attribute__详解]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/43024947</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/43024947</guid><author>wangfaqiang</author><pubDate>Thu, 22 Jan 2015 20:16:08 +0800</pubDate><description><![CDATA[GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性（Function 
 Attribute）、变量属性（Variable Attribute）和类型属性（Type Attribute）。
__attribute__书写特征是：__attribute__前后都有两个下划线，并切后面会紧跟一对原括弧，括弧里面是相应的__attribute__参数。]]></description><category></category></item><item><title><![CDATA[redis 持久化机制AOF/RDB详解]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/41547391</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/41547391</guid><author>wangfaqiang</author><pubDate>Thu, 27 Nov 2014 15:43:21 +0800</pubDate><description><![CDATA[Redis作为一个使用广泛的KV内存存储，其也支持一定的数据持久化，这里试着介绍一下Redis在源码层面对持久化的实现机制。

总的来说，Redis支持的将其数据库里面的KV数据存储到磁盘，但可能会有短时间的丢失。官网关于持久化的介绍可以参考这里“Redis Persistence”,这篇文章介绍一下其在代码层面的实现。

其支持2中不同的持久化机制：

第一种RDB数据快照持久化。R]]></description><category></category></item><item><title><![CDATA[redis源码分析-rehash过程详解]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/41546943</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/41546943</guid><author>wangfaqiang</author><pubDate>Thu, 27 Nov 2014 15:31:09 +0800</pubDate><description><![CDATA[hash table是一种高效的数据结构，被广泛的用在key-value存储中，Redis的dict其实就是一个典型的hash table实现。

rehash是在hash table的大小不能满足需求，造成过多hash碰撞后需要进行的扩容hash table的操作，其实通常的做法确实是建立一个额外的hash table，将原来的hash table中的数据在新的数据中进行重新输入，从而生成新]]></description><category></category></item><item><title><![CDATA[程序员可以在周末做的 8 件事]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/40452513</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/40452513</guid><author>wangfaqiang</author><pubDate>Sat, 25 Oct 2014 14:18:37 +0800</pubDate><description><![CDATA[我希望，如果你是一个程序员，你的周末计划，可以说一下你的想法。



1. 把时间给家人和朋友。



在平日技术领域的程序员通常都很忙,所以周末的时间就留给你的家人和朋友。这也是其他领域的人该做的。

2. 一天没有电脑（无电脑日）




有些人曾试图没有科技，这意味着在白天不使用任何技术。电脑完全断开这可能是不现实的，
但至少有一些是可以避免的。不接触电脑基本]]></description><category></category></item><item><title><![CDATA[TinyXML：一个优秀的C++ XML解析器]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/40451613</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/40451613</guid><author>wangfaqiang</author><pubDate>Sat, 25 Oct 2014 12:06:05 +0800</pubDate><description><![CDATA[/*
读取和设置xml配置文件是最常用的操作，试用了几个C++的XML解析器，个人感觉TinyXML是使用起来最舒服的，因为它的API接口和Java的十分类似，面向对象性很好。
TinyXML是一个开源的解析XML的解析库，能够用于C++，能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件，然后在内存中生成DOM模型，从而让我们很方便的遍历这棵XML树。
DOM模型即文档对]]></description><category></category></item><item><title><![CDATA[Dynamic Programming: From novice to advanced]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/40451215</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/40451215</guid><author>wangfaqiang</author><pubDate>Sat, 25 Oct 2014 11:27:30 +0800</pubDate><description><![CDATA[Dynamic Programming: From novice to advanced


An important part of given problems can be solved with the help of dynamic programming (DP for
 short). Being able to tackle problems of this type wo]]></description><category></category></item><item><title><![CDATA[Linux并发模型]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/40451197</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/40451197</guid><author>wangfaqiang</author><pubDate>Sat, 25 Oct 2014 11:25:01 +0800</pubDate><description><![CDATA[Linux并发模型

　　目前可以实现并发程序的方法有Apache模型（Process Per Connection，简称PPC），TPC（Thread PerConnection）模型，以及select模型和poll模型、Epoll模型。


各种模型优缺点

　　Apache模型和TPC模型是最容易理解的，Apache模型在并发上是通过多进程实现的，而TPC模型是通过多线程实现的]]></description><category></category></item><item><title><![CDATA[linux sort 命令 指定分隔符]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/38114603</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/38114603</guid><author>wangfaqiang</author><pubDate>Fri, 25 Jul 2014 13:10:41 +0800</pubDate><description><![CDATA[linux下的sort命令可以对文本的某些字段进行排序，而字段之间的分隔符默认是空格，如果想换成别的，则需要加参数-t。

但是对于tab分隔符，还是得稍微注意一下。比如下面的命令：

$sort -t '\t' -k3,3n a.txt >a.sort

sort: multi-character tab `\t'  (出错）


这个不能按照tab分隔符进行字段排序，换成如下]]></description><category></category></item><item><title><![CDATA[linux 同步IO：sync、fsync与fdatasync]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/26505253</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/26505253</guid><author>wangfaqiang</author><pubDate>Wed, 21 May 2014 20:16:49 +0800</pubDate><description><![CDATA[传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存，大多数磁盘I/O都通过缓冲进行。当将数据写入文件时，内核通常先将该数据复制到其中一个缓冲区中，如果该缓冲区尚未写满，则并不将其排入输出队列，而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时，再将该缓冲排入输出队列，然后待其到达队首时，才进行实际的I/O操作。这种输出方式被称为延迟写（delayed write）（Bach ]]></description><category></category></item><item><title><![CDATA[Redis 数据结构之ziplist]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25910383</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25910383</guid><author>wangfaqiang</author><pubDate>Thu, 15 May 2014 19:17:20 +0800</pubDate><description><![CDATA[Redis中压缩链表ziplist数据结构与API相关文件是：ziplist.h, ziplist.c, t_zset.c。


一、ziplist的构成






是一个4字节无符号整数，用来存储整个ziplist占用的字节数；

是一个4字节无符号整数，用来存储ziplist最后一个节点的相对于ziplist首地址偏移量；

是一个2字节无符号整数，存储zipli]]></description><category></category></item><item><title><![CDATA[Redis 数据结构之 zipmap 内存布局分析]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25909357</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25909357</guid><author>wangfaqiang</author><pubDate>Thu, 15 May 2014 18:56:37 +0800</pubDate><description><![CDATA[Redis被称为key/value应用中的瑞士军刀，除了其丰富的数据结构支持，更重要的是高效的内存使用，分析源码可以发现作者使用每一个 byte都精打细算。在hashtable实现中，Redis引入了zipmap数据结构，保证在hashtable刚创建以及元素较少时，用更少的内存 来存储，同时对查询的效率也不会受太大的影响。下面就以源码和例子结合的方式来分析一下zipmap的内存布局。

先来]]></description><category></category></item><item><title><![CDATA[redis数据结构之 intset]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25880491</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25880491</guid><author>wangfaqiang</author><pubDate>Thu, 15 May 2014 11:40:42 +0800</pubDate><description><![CDATA[整数集合intset用于有序、无重复地保存多个整数值，根据集合中元素的值自动选择使用整数类型来保存元素，例如：如果intset中绝对值最大的整数可以用int32_t来保存，那么整个intset中所有元素都使用int32_t来保存。

如果当前intset所使用的类型不能保存一个即将加入到该intset的新元素时候，需要对intset进行升级，比如新元素的类型是int64_t，而当前intset]]></description><category></category></item><item><title><![CDATA[用python查看和更改系统默认编码]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25700395</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25700395</guid><author>wangfaqiang</author><pubDate>Tue, 13 May 2014 12:01:30 +0800</pubDate><description><![CDATA[python在安装时，默认的编码是ascii，当程序中出现非ascii编码时，python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)，python没办法处理非ascii编码的，此时需要自己设置将python的默认编码，一般设置]]></description><category></category></item><item><title><![CDATA[GBK与UTF8编码互转的C++版]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25408313</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25408313</guid><author>wangfaqiang</author><pubDate>Fri, 09 May 2014 16:42:18 +0800</pubDate><description><![CDATA[下面是GBK与UTF8互转的C++实现，]]></description><category></category></item><item><title><![CDATA[Hadoop Streaming 使用介绍]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25399279</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25399279</guid><author>wangfaqiang</author><pubDate>Fri, 09 May 2014 15:29:13 +0800</pubDate><description><![CDATA[Hadoop Streaming

Hadoop streaming is a utility that comes with the Hadoop distribution. The utility allows you to create and run Map/Reduce jobs with any executable or script as the mapper and/or t]]></description><category></category></item><item><title><![CDATA[Python里的string 和 unicode --2]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25398209</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25398209</guid><author>wangfaqiang</author><pubDate>Fri, 09 May 2014 15:19:45 +0800</pubDate><description><![CDATA[先说一下，前面提到，print(string)的时候，如果string是按当前环境编码方式编码的，可以正常输出，不会乱码；如果string不是当前编码的，就会乱码。而print(unicode)是不会乱码的。why？应为print(unicode)的时候，会把unicode先转成当前编码，然后再输出。我没看过print的源码，不过估计是这样的。

string转unicode或者unicode]]></description><category></category></item><item><title><![CDATA[Python里的string 和 unicode]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/25398087</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/25398087</guid><author>wangfaqiang</author><pubDate>Fri, 09 May 2014 15:19:05 +0800</pubDate><description><![CDATA[在python里，string object和unicode object是两种不同的类型。

string object是由characters组成的sequence，而unicode object是Unicode code units组成的sequence。

string里的character是有多种编码方式的，比如单字节的ASCII，双字节的GB2312等等，再比如UTF-8。很明]]></description><category></category></item><item><title><![CDATA[Linux进程间通信]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/24810495</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/24810495</guid><author>wangfaqiang</author><pubDate>Wed, 30 Apr 2014 19:25:26 +0800</pubDate><description><![CDATA[一、进程间通信概述
进程通信有如下一些目的：
A、数据传输：一个进程需要将它的数据发送给另一个进程，发送的数据量在一个字节到几M字节之间
B、共享数据：多个进程想要操作共享数据，一个进程对共享数据的修改，别的进程应该立刻看到。
C、通知事件：一个进程需要向另一个或一组进程发送消息，通知它（它们）发生了某种事件（如进程终止时要通知父进程）。
D、资源共享：多个进程之间共享同样的资源。为了作]]></description><category></category></item><item><title><![CDATA[Redis安装部署]]></title><link>https://blog.youkuaiyun.com/wangfaqiang/article/details/24810411</link><guid>https://blog.youkuaiyun.com/wangfaqiang/article/details/24810411</guid><author>wangfaqiang</author><pubDate>Wed, 30 Apr 2014 19:23:10 +0800</pubDate><description><![CDATA[1       概要

Redis服务器环境的安装。指导系统部署和维护使用，

以64位Linux环境下安装使用

2       缩略语和术语






缩略语/术语



全  称



说  明







append only file(aof)



全持久化模式



 








]]></description><category></category></item></channel></rss>