mysql的BASE64编码和解码实现
http://wi-fizzle.com/downloads/base64.sql
下面的代码来自Gist https://gist.github.com/1724446
当然了,除非特殊需要,不推荐这么使用。如果技术够的话,可以写成UDF。
汉字等还需要注意编码

转自:http://www.yexiwei.com/post/219/
留下备用
1、迅雷专用链接编码
在原地址前面加”AA”,后面加”ZZ”(不包括引号),地址变为
AAhttp://www.yexiwei.com/10k.jpgZZ
此地址base64编码为
QUFodHRwOi8vd3d3LnlleGl3ZWkvMTBrLmpwZ1pa
迅雷专链即在上地址前加thunder://,即
thunder://QUFodHRwOi8vd3d3LnlleGl3ZWkvMTBrLmpwZ1pa
2、快车专用链接编码
在原地址前后都加上”[FLASHGET]“(不包括引号),地址变为
[FLASHGET]http://www.yexiwei.com/10k.jpg[FLASHGET]
此地址base64编码为
W0ZMQVNIR0VUXWh0dHA6Ly93d3cueWV4aXdlaS5jb20vMTBrLmpwZ1tGTEFTSEdFVF0=
快车专链即在上地址前加flashget://,注意后面还要加上”&符号”,符号怎么得出不清楚,在最后面加的是我的个人信息,至今未有人报告转换错误,即
Flashget://W0ZMQVNIR0VUXWh0dHA6Ly93d3cueWV4aXdlaS5jb20vMTBrLmpwZ1tGTEFTSEdFVF0=&yexiwei
全文总结
来自淘宝数据共享平台blog内的一篇文章对上述Nginx源码剖析之内存池,与内存管理总结得很好,特此引用之,作为对上文全文的一个总结:
Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。
3.1、创建一个内存池
nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。
//该结构用来维护内存池的数据块,供用户分配之用。
typedef struct {
u_char *last; //当前内存分配结束位置,即下一段可分配内存的起始位置
u_char *end; //内存池结束位置
ngx_pool_t *next; //链接到下一个内存池
ngx_uint_t failed; //统计该内存池不能满足分配请求的次数
} ngx_pool_data_t;
//该结构维护整个内存池的头部信息。
struct ngx_pool_s {
ngx_pool_data_t d; //数据块
size_t max; //数据块的大小,即小块内存的最大值
ngx_pool_t *current; //保存当前内存池
ngx_chain_t *chain; //可以挂一个chain结构
ngx_pool_large_t *large; //分配大块内存用,即超过max的内存请求
ngx_pool_cleanup_t *cleanup; //挂载一些内存池释放的时候,同时释放的资源。
ngx_log_t *log;
};
有了上面的两个结构,就可以创建一个内存池了,nginx用来创建一个内存池的接口是:
2.1、创建内存池
ngx_pool_t *例如,调用ngx_create_pool(1024, 0x80d1c4c)后,创建的内存池物理结构如下图:
ngx_create_pool(size_t size, ngx_log_t *log)
{
ngx_pool_t *p;
p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
//ngx_memalign()函数执行内存分配,该函数的实现在src/os/unix/ngx_alloc.c文件中(假定NGX_HAVE_POSIX_MEMALIGN被定义):
if (p == NULL) {
return NULL;
}
p->d.last = (u_char *) p + sizeof(ngx_pool_t);
p->d.end = (u_char *) p + size;
p->d.next = NULL;
p->d.failed = 0;
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
//最大不超过4095B,别忘了上面NGX_MAX_ALLOC_FROM_POOL的定义
p->current = p;
p->chain = NULL;
p->large = NULL;
p->cleanup = NULL;
p->log = log;
return p;
}


作者:July、dreamice、阿波、yixiao。
出处:http://blog.csdn.net/v_JULY_v/。
Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。
读者可以到此处下载Nginx最新版本的源码:http://nginx.org/en/download.html。同时,本文本不想给源码太多注释,因为这不像讲解算法,算法讲解的越通俗易懂越好,而源码剖析则不同,缘由在于不同的读者对同一份源码有着不同的理解,或深或浅,所以,更多的是靠读者自己去思考与领悟。
ok,本文之中有任何疏漏或不正之处,恳请批评指正。谢谢。
typedef struct { //内存池的数据结构模块
u_char *last; //当前内存分配结束位置,即下一段可分配内存的起始位置
u_char *end; //内存池的结束位置
ngx_pool_t *next; //链接到下一个内存池,内存池的很多块内存就是通过该指针连成链表的
ngx_uint_t failed; //记录内存分配不能满足需求的失败次数
} ngx_pool_data_t; //结构用来维护内存池的数据块,供用户分配之用。
struct ngx_pool_s { //内存池的管理分配模块
ngx_pool_data_t d; //内存池的数据块(上面已有描述),设为d
size_t max; //数据块大小,小块内存的最大值
ngx_pool_t *current; //指向当前或本内存池
ngx_chain_t *chain; //该指针挂接一个ngx_chain_t结构
ngx_pool_large_t *large; //指向大块内存分配,nginx中,大块内存分配直接采用标准系统接口malloc
ngx_pool_cleanup_t *cleanup; //析构函数,挂载内存释放时需要清理资源的一些必要操作
ngx_log_t *log; //内存分配相关的日志记录
};
当即早已进入10月份,十一过后,招聘,笔试,面试,求职渐趋火热。而在这一系列过程背后浮出的各大IT公司的笔试/面试题则蕴含着诸多思想与设计,细细把玩,思考一番亦能有不少收获。
上个月,本博客着重整理
本人正在一步一步整理本文中50多道题的答案,希望诸君各位与我一起做这些题。已经做出来的题目我会把答案即时更新到文章中。诸君,一起努力吧。谢谢。July、2011.10.14更新。