<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[The time is passing]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/iteye_3185</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; iteye_3185]]></copyright><item><title><![CDATA[MySQL分组排序求Top N]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82616991</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82616991</guid><author>iteye_3185</author><pubDate>Thu, 02 Apr 2015 20:58:03 +0800</pubDate><description><![CDATA[
表结构
 
按照grp分组，按照num排序，每组取Top 3，输出结果如下：
 
 
源代码：
SELECT * FROM score AS t3 
WHERE ( 
	SELECT COUNT(*) FROM score AS t1 
	LEFT JOIN score AS t2 
	ON t1.grp = t2.grp AND t1.num &amp;lt; t2.num 
...]]></description><category></category></item><item><title><![CDATA[screen的配置]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82601965</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82601965</guid><author>iteye_3185</author><pubDate>Tue, 05 Aug 2014 21:08:14 +0800</pubDate><description><![CDATA[
# Set default encoding using utf8
defutf8 on

## 解决中文乱码,这个要按需配置
defencoding utf8
encoding utf8 utf8
 
#兼容shell 使得.bashrc .profile /etc/profile等里面的别名等设置生效
shell -$SHELL

#set the startup mes...]]></description><category></category></item><item><title><![CDATA[Yaf源码阅读之请求的处理（二）]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82550651</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82550651</guid><author>iteye_3185</author><pubDate>Sun, 24 Nov 2013 02:23:27 +0800</pubDate><description><![CDATA[
上一篇文章 我们分析了Yaf框架的启动，包括配置文件的初始化以及框架类的加载。本文将分析Yaf
处理一次Web请求的详细过程，这是一个Web框架最核心的部分，理解了这点，就理解了Yaf的实现原理。
 
（一）框架类的实例化
在上一篇文章提到了Yaf框架类的加载，类加载完成后，还要实例化，
我们逐一分析Yaf各个框架类的构造函数。
 
不急于分析各种调用关系，我们先看下Applic...]]></description><category></category></item><item><title><![CDATA[Yaf源码阅读之框架的启动（一）]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82550620</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82550620</guid><author>iteye_3185</author><pubDate>Sat, 23 Nov 2013 19:54:47 +0800</pubDate><description><![CDATA[
（一）Yaf是什么
Yaf，全称 Yet Another Framework，是一个C语言编写的、基于PHP扩展开发的PHP框架，
相比于一般的PHP框架，它更快，快到被誉为最快的PHP开发框架。
它提供了Bootstrap、路由、分发、视图、插件功能。
 
Yaf由惠新宸（传说中的鸟哥）开发，隆重介绍下，惠新宸，PHP开发组核心成员,
PECL开发者, Zend公司外聘顾问, 曾...]]></description><category></category></item><item><title><![CDATA[Java静态内部类]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82374245</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82374245</guid><author>iteye_3185</author><pubDate>Sun, 22 Jul 2012 22:17:50 +0800</pubDate><description><![CDATA[两种内部类
Java的内部类有两种，一种是静态内部类，另一种是普通内部类，普通内部类可以获得外部对象的引用，
所以在普通内部类能够访问外部对象的成员变量 ，也就能够使用外部类的资源，可以说普通内部类依赖
于外部类，普通内部类与外部类是共生共死的，创建普通内部类的对象之前，必须先创建外部类的对象。
创建普通内部类的代码如下：
Outer o = new Outer();
Outer.In...]]></description><category></category></item><item><title><![CDATA[Virtualbox下Windows和Linux实现文件互传]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82372137</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82372137</guid><author>iteye_3185</author><pubDate>Tue, 17 Jul 2012 21:05:54 +0800</pubDate><description><![CDATA[1 Windows安装好Linux虚拟机
 
2 在Linux下运行一个 Python 实现的http服务器，代码如下：
 
 
#!/usr/bin/env python

&quot;&quot;&quot;Simple HTTP Server With Upload.

This module builds on BaseHTTPServer by implementing the standard G...]]></description><category></category></item><item><title><![CDATA[Paxos算法]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82310400</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82310400</guid><author>iteye_3185</author><pubDate>Wed, 18 Apr 2012 10:59:10 +0800</pubDate><description><![CDATA[分布式系统的核心问题是数据一致性，解决一致性有很多算法，而 Paxos 算法
无疑是最著名的，Google 工程师曾说，所有一致性算法都可以归结为 Paxos 算法
的一个特列。可见，很有必要学习 Paxos 算法。
 
Paxos 算法是由 Lamport 提出来的，他得论文 Paxos made simple 是最好的
学习资料。我在阅读的过程中遇到很多困难，文中的一些逻辑推论隐藏得...]]></description><category></category></item><item><title><![CDATA[编程之美3.1  字符串移位包含的问题]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82297014</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82297014</guid><author>iteye_3185</author><pubDate>Mon, 12 Mar 2012 23:26:14 +0800</pubDate><description><![CDATA[题目
给定两个字符串 s1 和 s2, 要求判定 s2 是否能够被通过 s1 作循环移位 ( rotate )
得到的字符串包含. 例如, 给定 s1 = AABCD 和 s2 = CDAA, 返回 true; 给定
s1 = ABCD 和 s2 = ACBD, 返回 false.
 
 
解法1
直接模拟, 对 s1 进行循环移位, 在判断字符串 s2 是否在移位后的字符串中.
...]]></description><category></category></item><item><title><![CDATA[Memcached源码分析之网络模型篇]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82293038</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82293038</guid><author>iteye_3185</author><pubDate>Fri, 02 Mar 2012 01:46:48 +0800</pubDate><description><![CDATA[memcached 采用多线程的工作方式, 主线程接收连接, 然后把连接平摊给
工作线程, 工作线程处理业务逻辑, memcached 使用 libevent 处理网络
事件, 主线程和工作线程都有一个 event base, 这是 libevent 的核心数据
结构, event base 能够监听多个 socket 的网络事件, 概括起来, 
memcached 大体框架如 图1 所示...]]></description><category></category></item><item><title><![CDATA[Memcached源码分析之内存管理篇]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82282411</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82282411</guid><author>iteye_3185</author><pubDate>Sun, 26 Feb 2012 15:04:18 +0800</pubDate><description><![CDATA[使用命令 set(key, value) 向 memcached 插入一条数据, memcached 内部是如何组织数据呢
 
一 把数据组装成 item
memcached 接受到客户端的数据后, 把数据组装成 item, item 的格式如下:
  		 图1 struct item 的结构
 
源码中这样定义 struct item:
 
/**
 * Structure ...]]></description><category></category></item><item><title><![CDATA[多线程与volatile变量]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82282188</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82282188</guid><author>iteye_3185</author><pubDate>Sat, 25 Feb 2012 17:07:41 +0800</pubDate><description><![CDATA[ 
volatile 修饰的变量表示改变量的值是易变的，编译器不对其进行优化，
访问该变量的时候不会从寄存器读取， 而是直接从内存读取变量。

在多线程环境下，每个线程都有一个独立的寄存器，用于保存当前执行的指令。
假设我们定义了一个全局变量，每个线程都会访问这个全局变量，这时候线程的
寄存器可能会存储全量变量的当前值用于后续的访问。当某个线程修改了全局变
量的值时，系统会立即更新该...]]></description><category></category></item><item><title><![CDATA[memcopy 和 memmove 的实现]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82279391</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82279391</guid><author>iteye_3185</author><pubDate>Sat, 18 Feb 2012 14:25:55 +0800</pubDate><description><![CDATA[一 memcopy 的实现
 
memcopy 不考虑源内存和目标内存之间的重叠, 逐字节地拷贝, 代码比较简单
 
 
void my_memcopy(void *src, void *dst, int size)
{
	char *psrc, *pdst;

	psrc = (char *)src;
	pdst = (char *)dst;

	while (size-...]]></description><category></category></item><item><title><![CDATA[cookie 实现验证码的原理]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82242261</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82242261</guid><author>iteye_3185</author><pubDate>Thu, 05 Jan 2012 20:58:56 +0800</pubDate><description><![CDATA[验证码技术用来解决网络中的恶意注册或者 DDOS 攻击，主要原理是，让用户

输入图片中的文字，如果通过了验证，服务器就在客户端浏览器保存一个验证 cookie，

比如叫做 &amp;lt;secure_session, 9HcxOGJMhn5j7UpmguyA4ABD&amp;gt;


以后用户访问服务器其他页面的时候，服务器先获取这个 cookie， 如果存在，

说明验证通过，
不存...]]></description><category></category></item><item><title><![CDATA[SkipList 跳表]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82164982</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82164982</guid><author>iteye_3185</author><pubDate>Sun, 09 Oct 2011 01:08:17 +0800</pubDate><description><![CDATA[为什么选择跳表
目前经常使用的平衡数据结构有：B树，红黑树，AVL树，Splay Tree, Treep等。
 
想象一下，给你一张草稿纸，一只笔，一个编辑器，你能立即实现一颗红黑树，或者AVL树
出来吗？ 很难吧，这需要时间，要考虑很多细节，要参考一堆算法与数据结构之类的树，
还要参考网上的代码，相当麻烦。
 
用跳表吧，跳表是一种随机化的数据结构，目前开源软件 Redis 和 L...]]></description><category></category></item><item><title><![CDATA[Erlang 学习笔记]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82162912</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82162912</guid><author>iteye_3185</author><pubDate>Sun, 02 Oct 2011 23:29:37 +0800</pubDate><description><![CDATA[函数的返回值
函数不会显示地返回值，函数中最后一条语句的执行结果将作为函数的返回值。
 
main(_) -&amp;gt;
    {A, B} = test(),
    io:format(&quot;A = ~w, B = ~s~n&quot;, [A, B]).

test() -&amp;gt;
    {2,&quot;hello&quot;}.
 
 
函数的分支
同一个函数中，并列的逻辑分支之间，用分号 “;”...]]></description><category></category></item><item><title><![CDATA[web聊天室]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82162798</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82162798</guid><author>iteye_3185</author><pubDate>Sun, 02 Oct 2011 14:57:34 +0800</pubDate><description><![CDATA[web 聊天室支持多人在线聊天，某个人发了一条消息，在线的所有人都能实时看到。
 
tornado 自带的 demo 演示了如何实现一个 web 聊天室， 通过源码，我总结一下它设计方案。

服务器端
维护一个消息缓存，用来保存所有人发的消息。
维护一个等待队列，用来保存等待新消息的用户。
如下图所示：

(1) 添加消息
服务器把用户发送的消息加入消息缓存，同时唤醒等待队列中...]]></description><category></category></item><item><title><![CDATA[守护进程的实现]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82161817</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82161817</guid><author>iteye_3185</author><pubDate>Fri, 30 Sep 2011 01:43:15 +0800</pubDate><description><![CDATA[6个步骤
 
步骤1：创建子进程，杀死父进程，目的是为了步骤2中调用setsid可以成功。
 
步骤2：创建新会话，并自任组长。目的是脱离控制终端
               会话组长调用 setsid 会失败，步骤1创建的子进程必然不是会话组长，
               这就保证了 setsid 可以成功。
 
步骤3：修改工作目录为根目录。
             ...]]></description><category></category></item><item><title><![CDATA[非阻塞connect的实现]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82161813</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82161813</guid><author>iteye_3185</author><pubDate>Fri, 30 Sep 2011 01:12:20 +0800</pubDate><description><![CDATA[步骤1： 设置非阻塞，启动连接
实现非阻塞 connect ，首先把 sockfd 设置成非阻塞的。这样调用 
connect 可以立刻返回，根据返回值和 errno 处理三种情况：
(1) 如果返回 0，表示 connect 成功。
(2) 如果返回值小于 0， errno 为 EINPROGRESS,  表示连接
      建立已经启动但是尚未完成。这是期望的结果，不是真正的错误。...]]></description><category></category></item><item><title><![CDATA[Memcached内存管理机制]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82161722</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82161722</guid><author>iteye_3185</author><pubDate>Thu, 29 Sep 2011 20:57:31 +0800</pubDate><description><![CDATA[Slab 分配机制
 
Memcached 不是把所有大小的数据都放在一起的，而是预先分配一系列的 slab，每个
slab 负责一定范围内的数据存储。

初始时，Memcached 为每一个 slab 分配 一个Page（1M） 的内存， slab内再把page切分
成一个一个 Chunk, 组成 Chunk数组，每个Chunk 的大小等于该 slab 的数据存储范围
的最大值。...]]></description><category></category></item><item><title><![CDATA[(转)一致性哈希算法及其在分布式系统中的应用]]></title><link>https://blog.youkuaiyun.com/iteye_3185/article/details/82161658</link><guid>https://blog.youkuaiyun.com/iteye_3185/article/details/82161658</guid><author>iteye_3185</author><pubDate>Thu, 29 Sep 2011 19:02:59 +0800</pubDate><description><![CDATA[原文地址： http://www.cnblogs.com/leoo2sk/archive/2011/08/11/consistent-hashing-intro.html
 
Consistent hashing算法非常简洁，如果你有一系列服务器，需要把很多 keys (objects)映射到这些
服务器上。这时Constent hashing就派上用场了。典型的例子包括 memcached...]]></description><category></category></item></channel></rss>