转:理解inode

一、inode是什么?

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

二、inode的内容

inode包含文件的元信息,具体来说有以下内容:


  * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置


可以用stat命令,查看某个文件的inode信息:


  stat example.txt


总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。

阅读剩余部分...

转:迅雷、快车下载地址加密算法

转自: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

转:Nginx源码剖析之内存池,与内存管理(3)

全文总结

    来自淘宝数据共享平台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用来创建一个内存池的接口是:

    ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log)(位于src/core/ngx_palloc.c中);

调用这个函数就可以创建一个大小为size的内存池了。

   

阅读剩余部分...

转:Nginx源码剖析之内存池,与内存管理(2)

Nginx源码剖析之内存管理




ngx_pool_t *
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;
}
例如,调用ngx_create_pool(1024, 0x80d1c4c)后,创建的内存池物理结构如下图:

3.jpg3.jpg

紧接着,咱们就来分析下上面代码中所提到的:ngx_memalign()函数。

阅读剩余部分...

转:Nginx源码剖析之内存池,与内存管理(1)

作者:July、dreamice、阿波、yixiao。
出处:http://blog.csdn.net/v_JULY_v/

引言    


    Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。  


    其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx,以及诸多暂不曾得知的玩意儿。

    读者可以到此处下载Nginx最新版本的源码:。同时,本文本不想给源码太多注释,因为这不像讲解算法,算法讲解的越通俗易懂越好,而源码剖析则不同,缘由在于不同的读者对同一份源码有着不同的理解,或深或浅,所以,更多的是靠读者自己去思考与领悟。

    ok,本文之中有任何疏漏或不正之处,恳请批评指正。谢谢。


Nginx源码剖析之内存池


1、内存池结构


    内存相关的操作主要在文件 os/unix/ngx_alloc.{h,c} 和 core/ngx_palloc.{h,c} 中实现,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;       //内存分配相关的日志记录
};

再来看看大块数据分配的结构体:
struct ngx_pool_large_s {
    ngx_pool_large_t     *next;
    void                 *alloc;
};

#define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1)  //在x86体系结构下,该值一般为4096B,即4K

上述这些数据结构的逻辑结构图如下:

阅读剩余部分...

转:2011年10月百度,阿里巴巴,迅雷搜狗最新面试七十题(1)

引言


   当即早已进入10月份,十一过后,招聘,笔试,面试,求职渐趋火热。而在这一系列过程背后浮出的各大IT公司的笔试/面试题则蕴含着诸多思想与设计,细细把玩,思考一番亦能有不少收获。

    上个月,本博客着重整理,此次重点整理百度,阿里巴巴,迅雷和搜索等公司最新的面试题。同上篇一样,答案望诸君共同讨论之,个人亦在慢慢思考解答。多谢。

    本人正在一步一步整理本文中50多道题的答案,希望诸君各位与我一起做这些题。已经做出来的题目我会把答案即时更新到文章中。诸君,一起努力吧。谢谢。July、2011.10.14更新。


第一辑:


1.十月百度:一个数组保存了N个结构,每个结构保存了一个坐标,结构间的坐标都不相同,请问如何找到指定坐标的结构(除了遍历整个数组,是否有更好的办法)?(要么预先排序,二分查找。要么哈希。hash的话,坐标(x,y)你可以当做一个2位数,写一个哈希函数,把(x,y)直接转成“(x,y)”作为key,默认用string比较。或如Edward Lee所说,将坐标(x, y)作为 Hash 中的 key。例如(m, n),通过 (m,n) 和 (n, m) 两次查找看是否在 HashMap 中。也可以在保存时就规定 (x, y) , x < y ,在插入之前做个判断。)

2.百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。(编程珠玑上有此类似的一题,如果有足够的内存的话可以用位图法,即开一个1亿位的bitset,内存为100m/8== 12.5m, 然后如果一个数有出现,对应的bitset上标记为1,最后统计bitset上为0的即可。)

3.Alibaba笔试题:给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号;再给定N个英文单词关键字,请说明思路并编程实现方法
String extractSummary(String description,String[] key words)
目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。(不限编程语言)20分。(扫描过程始终保持一个[left,right]的range,初始化确保[left,right]的range里包含所有关键字则停止。然后每次迭代:
1,试图右移动left,停止条件为再移动将导致无法包含所有关键字。
2,比较当前range's length和best length,更新最优值。
3,右移right,停止条件为使任意一个关键字的计数+1。
4,重复迭代。
编程之美有最短摘要生成的问题,与此问题类似,读者可作参考。)

阅读剩余部分...

PHPStorm 3.0 发布,PHP 集成开发工具

    PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具。此IDE是基于java的,但是占用内存和速度等方面都做得很好。JetBrains公司的软件都是精品,如开发java的IntelliJ IDEA,开发python的pycharm等。

PhpStorm 3.0 给我们带来了很多新功能和修复,一共有700改动让这个IDE变得更加易用,更加智能。


PHP UML


phpstorm uml

Profiler


New PHP formatting options


支持Zend,Pear和其他标准的PhpDoc格式化。


VCS News


Platform Improvements


支持MAC OS X LION

阅读剩余部分...

    Page :
  1. 1
  2. 2