<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SHIroh的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SHIroh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SHIroh]]></copyright><item><title><![CDATA[Nignx Web IM 调研（续）]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/8103096</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/8103096</guid><author>SHIroh</author><pubDate>Tue, 23 Oct 2012 15:21:39 +0800</pubDate><description><![CDATA[最近在用LIBEVENT 写一个底层的模块 。 正好需要加一个HTTP 的功能 然后 GOOGLE的时候查到了以下的东西，看上去能实现当初想做的设计。







自己用C实现的comet http server,基于libevent



基于libevent 1.3e, 利用了libevent里面现成的http库编译方法，先安装libevent,然后
    cc]]></description><category></category></item><item><title><![CDATA[2012.10.19 事故分析]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/8096537</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/8096537</guid><author>SHIroh</author><pubDate>Sun, 21 Oct 2012 23:21:47 +0800</pubDate><description><![CDATA[事情起因：
前一个礼拜MoNET升级了一个 overdue user blocking的功能 ， 经过反复测是和小范围生产环境测试没问题，然后就上了 ，这是来公司以后除了手头上的那个MoNET代码迁移以外地一个实际上线的小功能。
功能的具体作用是  ， billing team 提供一个目前大小为， 1 ,200,000用户数的list 然后，新增加一个服务叫 BSP ，作为Proxy，每小时]]></description><category></category></item><item><title><![CDATA[Nginx Web IM 调研]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7910152</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7910152</guid><author>SHIroh</author><pubDate>Sun, 26 Aug 2012 23:36:46 +0800</pubDate><description><![CDATA[需求是一个 基于 Epoll的 高并发的 Push 的 Web IM服务器 ， 打算是用 Nginx实现，经过2个星期的调研，最终是放弃了的 ，同事找到了一套用Jetty 的更成熟的架构。
Epoll简介，
他是一个Linux 2.6以后才有的新的IO机制。 大体原理是把所以的连接放在一个数组，或者队列中，给每个连接一个回调函数， OS API 负责对产生事件响应的连接进行回调。
和sele]]></description><category></category></item><item><title><![CDATA[Linux AutoMake]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7768913</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7768913</guid><author>SHIroh</author><pubDate>Fri, 20 Jul 2012 21:17:57 +0800</pubDate><description><![CDATA[对于一个UNIX/Linux下C程序员来说，一个比较麻烦的工作就是写自己的Makefile。可能你有如下经验：写一个简单的C程序，自己多写几行gcc命令就把程序变成可执行的了；写一个稍微复杂点的程序，源文件个数可能在30个左右，还是写一行行的gcc命令就麻烦了，你可能想到写个makefile，你可能也在这样做着；但你某一天会发现你写的这个Makefile可能不是一个所有 UNIX/Linux类操作]]></description><category></category></item><item><title><![CDATA[C++ Exception]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7661579</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7661579</guid><author>SHIroh</author><pubDate>Thu, 14 Jun 2012 14:05:47 +0800</pubDate><description><![CDATA[void fun(SimpleClass*)
在DEBUG中使用Assert可以 用#define NDBEUG 在release版本中关掉这个功能



#include 
#include 
using namespace std;

class MyError : public runtime_error
{
	public: 
		MyError(const string& ms]]></description><category></category></item><item><title><![CDATA[Ubuntu 12.04 G++ Hello World 配置]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7548283</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7548283</guid><author>SHIroh</author><pubDate>Wed, 09 May 2012 01:04:18 +0800</pubDate><description><![CDATA[在Terminal 里输入 sudo apt-get install synaptic
会安装 synaptic package management 这个软件
然后进入软件
先后安装 build-essential,vim , autoconf, subversion , automake ,cvs  后面几个都是可选的版本控制，连接器等软件。
第一个是G++， GCC编译代码必要的库]]></description><category></category></item><item><title><![CDATA[Effective C++ 第三版中文版 笔记]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7544583</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7544583</guid><author>SHIroh</author><pubDate>Tue, 08 May 2012 01:17:08 +0800</pubDate><description><![CDATA[条款54 TR1 和 条款55 Boost


TR1 即 Technical Report 1 是 C++ standard committee 推出C++“0x”（与此类似的还有C++“89”，即89年的C++标准版本，这里指200X年讲推出的新版本） 之前的 一份技术文档那个，我们可以从中发现一部分即将被实现和规范的内容


C++标准程序库 包含了 STL , iostream]]></description><category></category></item><item><title><![CDATA[程序员必知8大排序3大查找（二）]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7544553</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7544553</guid><author>SHIroh</author><pubDate>Tue, 08 May 2012 00:37:03 +0800</pubDate><description><![CDATA[6、快速排序

 

（1）基本思想：选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描，将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

（2）实例：









上图中将待排序列分成两部分,一部分比基准元素小,一部分大于基准元素,然后对这两部分]]></description><category></category></item><item><title><![CDATA[程序员必知8大排序3大查找（一）]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7544548</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7544548</guid><author>SHIroh</author><pubDate>Tue, 08 May 2012 00:35:59 +0800</pubDate><description><![CDATA[1、直接插入排序

 

（1）基本思想：在要排序的一组数中，假设前面(n-1) [n>=2] 个数已经是排

好顺序的，现在要把第n个数插到前面的有序数中，使得这n个数

也是排好顺序的。如此反复循环，直到全部排好顺序。

（2）实例




 

2、希尔排序（也称最小增量排序）




（1）基本思想：算法先将要排序的一组数按某个增量d（n/2,n]]></description><category></category></item><item><title><![CDATA[C++内存管理]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7439269</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7439269</guid><author>SHIroh</author><pubDate>Mon, 09 Apr 2012 01:29:28 +0800</pubDate><description><![CDATA[http://www.cnblogs.com/wonderKK/archive/2012/03/18/2405196.html




[导语]

内存管理是C++最令人切齿痛恨的问题，也是C++最有争议的问题，C++高手从中获得了更好的性能，更大的自由，C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨，但内存管理在C++中无处不在，内存泄漏几乎在每个C++程序中都会发生，因此]]></description><category></category></item><item><title><![CDATA[指针作参数的常见错误]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7409574</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7409574</guid><author>SHIroh</author><pubDate>Fri, 30 Mar 2012 01:44:41 +0800</pubDate><description><![CDATA[一、对参数指针的地址修改

参数的地址是可以修改的，修改后的地址是不可能传回给调用处的指针变量。也就是说，可以修改参数地址所指的单元的值，这是可以传回到调用处的变量里面的。

#include 
#include 
#include 

int subFunc(int arr[3]);

//交换两整数
void change(int *data1, int *data2) {
    in]]></description><category></category></item><item><title><![CDATA[不定参数的应用]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7409430</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7409430</guid><author>SHIroh</author><pubDate>Fri, 30 Mar 2012 00:00:57 +0800</pubDate><description><![CDATA[不定参数当年做为C/C++语言一个特长被很多人推崇，但是实际上这种技术并没有应用很多。除了格式化输出之外，我实在没看到多少应用。主要原因是这种技术比较麻烦，副作用也比较多，而一般情况下重载函数也足以替换它。尽管如此，既然大家对它比较感兴趣，我就简单总结一下它的使用和需要注意的常见问题。

原理

刚学C语言的时候，一般人都会首先接触printf函数。通过这个函数，你可以打印不定个数的变量到]]></description><category></category></item><item><title><![CDATA[What's stdcall, cdecl, etc....]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7409427</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7409427</guid><author>SHIroh</author><pubDate>Thu, 29 Mar 2012 23:58:08 +0800</pubDate><description><![CDATA[在C语言中，假设我们有这样的一个函数：

int function(int a,int b)

调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是，当高级
语言被编译成计算机可以识别的机器码时，有一个问题就凸现出来：在CPU中，计算机没
有办法知道一个函数调用需要多少个、什么样的参数，也没有硬件可以保存这些参数。
也就是说，计算机不知道怎么给这]]></description><category></category></item><item><title><![CDATA[拷贝构造函数及其参数类型]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7405282</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7405282</guid><author>SHIroh</author><pubDate>Wed, 28 Mar 2012 23:34:50 +0800</pubDate><description><![CDATA[拷贝构造函数的参数类型必须是引用，而且通常情况下还是const的，但是const并不是严格必须的。

#include 

#include 

using namespace std;

 

class CClass

{

public:

         CClass() : a(1), b("Hello, world.")

         {]]></description><category></category></item><item><title><![CDATA[函数指针的几种用法]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7405278</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7405278</guid><author>SHIroh</author><pubDate>Wed, 28 Mar 2012 23:33:45 +0800</pubDate><description><![CDATA[什么是函数指针?

函数指针指向的是特殊的数据类型，函数的类型是由其返回的数据类型和其参数列表共同决定的，而函数的名称则不是其类型的一部分。

 

一个具体函数的名字，如果后面不跟调用符号(即括号)，则该名字就是该函数的指针(注意：大部分情况下，可以这么认为，但这种说法并不很严格)。

 

函数指针的声明方法

// 定义函数指针pf

int (*pf)(cons]]></description><category></category></item><item><title><![CDATA[关于《程序员面试宝典》中一道面试题的答案]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7405274</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7405274</guid><author>SHIroh</author><pubDate>Wed, 28 Mar 2012 23:32:27 +0800</pubDate><description><![CDATA[说明：

本文是前段时间发表在优快云上的文章。后来通读了《程序员面试宝典》，发现里面给出的错误答案很多，所以除非是你特别明确的问题，不要轻易相信其中的结论：）

 

今天一朋友拿着《程序员面试宝典》来和我商量一道题目，以前听说过这本书的大名，一直无缘得见，今日一见，信手一翻，对于求职的程序员来说的确是一本不错的书：)

下面就是朋友谈及的那个问题(括号中的中文是作者翻译的)：]]></description><category></category></item><item><title><![CDATA[友元函数和友元类]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7405269</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7405269</guid><author>SHIroh</author><pubDate>Wed, 28 Mar 2012 23:30:56 +0800</pubDate><description><![CDATA[本文是在http://www.cppblog.com/twzheng/articles/21020.html的基础上，增加了两个示例代码。

 

采用类的机制后实现了数据的隐藏与封装，类的数据成员一般定义为私有成员，成员函数一般定义为公有的，依此提供类与外界间的通信接口。但是，有时需要定义一些函数，这些函数不是类的一部分，但又需要频繁地访问类的数据成员，这时可以将这些函数定义为该函数的友]]></description><category></category></item><item><title><![CDATA[动态分配资源的自动释放 – auto_ptr的实现原理]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7405253</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7405253</guid><author>SHIroh</author><pubDate>Wed, 28 Mar 2012 23:26:21 +0800</pubDate><description><![CDATA[动态分配资源的自动释放的英文是 Resource Allocation In Initialization，通常缩写成RAII。

根据《C++ Primer》第4版：

“

During stack unwinding, the function containing the throw,
 and possibly other functions in the call cha]]></description><category></category></item><item><title><![CDATA[使用auto_ptr需要注意的事项]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7405244</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7405244</guid><author>SHIroh</author><pubDate>Wed, 28 Mar 2012 23:24:21 +0800</pubDate><description><![CDATA[a. auto_ptr定义于头文件memory中；

 

b. auto_ptr只能用来管理单个动态创建的对象，而不能管理动态创建的数组；

 

c. 和其他copy和assign不同，auto_ptr的copy和assign会改变右边的操作数，assignment符号的两边的auto_ptr均为左值；There
 is a crucially important diffe]]></description><category></category></item><item><title><![CDATA[花括号({...})在自动资源释放中的作用]]></title><link>https://blog.youkuaiyun.com/SHIroh/article/details/7405242</link><guid>https://blog.youkuaiyun.com/SHIroh/article/details/7405242</guid><author>SHIroh</author><pubDate>Wed, 28 Mar 2012 23:23:44 +0800</pubDate><description><![CDATA[在C/C++，我们司空见惯地甚至想当然地使用{}，一般大家都认为只要 { 和 } 成对出现就可以了。诚然，{ 和 } 必须成对出现，但有些时候，尤其是在使用RAII的时候，它代表了RAII对象的作用域。关于RAII的原理说明，请见：
http://patmusing.blog.163.com/blog/static/13583496020101824142699/
 
参考下面代码，并注意其]]></description><category></category></item></channel></rss>