推荐雅虎邮箱里的记事本功能

August 30th, 2010

google doc有时候用不了,用用这个也挺好,甚至有更好,更简单更方便。

设计模式的一个大bug

August 25th, 2010

斗胆说一下,设计模式的立意不对,软件设计不能和建筑设计类比。
1. 一个建筑怎么着也得撑个上百年,修好后一般不会大改,也改不了;
2. 建筑要追求美,为什么要追求美? 你要是一个不美的东西在那耸立个上百年,那不是给某著名建筑师脸上抹黑吗?所以这玩意得精雕细琢。
3. 软件不一样,软件要实用,公司要讲究投入产出比。另外软件更新快,特别是公司里做的软件,某人只会为软件的某个版本负责,做得就算不好,也不会像个建筑在那里耸立个上百年。
所以如果一定要拿设计软件通设计建筑类比,那也应该是同设计宿舍楼比

宿舍楼的特点有:
1. 实用,投入产出高,能满足用户的需求
2. 用户多,要能适应高负载,能防火防盗

所以,各位造宿舍楼的民工就不要像造教堂的民工那么纠结了。

失而复得的itouch

August 20th, 2010

上上周五,在公司把itouch给弄丢了,今天接到前台电话,说捡到了。。。人品。。啊

std::string和char *是可以做==比较的

August 17th, 2010

炸一看,不行,其实是可以的,== 是不是重载了?

烂代码

August 15th, 2010

代码一般总是烂的,也烂得各有特点。
我想少量用户的产品会比有大量用户更烂,
没有用户的产品会比有少量用户的产品更烂,
未发布的产品会比已经发布的产品更烂,
有大量用户的产品再怎么烂,它也是活的,被公司和用户高度关注,所以如果烂,也会烂得有道理,并且有希望改进的良好愿望。
而没有人使用的产品,如果烂的话,就会烂得一塌糊涂,会有些闭门造车那感觉。

重复,新鲜

August 10th, 2010

百度又搞了个hao222.com导航站,不能不说这个产品很有创意。
重复的东西也可以让人觉得新鲜。

c10k

August 8th, 2010

c10k问题原文请参考 http://www.kegel.com/c10k.html

本文仅仅是个开始,希望同学们评论,或增加新的注意点。

五种处理并发请求的模式:
serve one client with each server thread, and use blocking I/O
a. 将每个fd交给一个线程处理,用阻塞io

Serve many clients with each thread, and use nonblocking I/O and level-triggered readiness notification
b. select/pool +多线程+非阻塞io

Serve many clients with each thread, and use nonblocking I/O and readiness change notification
c. epool +多线程 +非阻塞io+边沿触发

Serve many clients with each server thread, and use asynchronous I/O
d. aio+多线程

Build the server code into the kernel
e. 将服务器代码放到内核中

注意点:
1. a方案的缺点是浪费资源,因为有多少请求就有多少线程,每个线程有自己的栈,线程在被阻塞时也会占用一定内存。

2. b方案的缺点有:
FD_SETSIZE宏大小的限制;
并行处理请求太多的话,需要遍历FD SET,浪费cpu;
SELECT可能需要增加一个管道,在有新fd来时候向管道发送数据,让select返回并把新的fd添加到SET,增加了一点点编程复杂度;

3. epoll 相对于select来说,通过设置回调,不需要遍历,能直接得到可读的fd;

4. aio相对于epoll来说更进一步,直接把用户空间的内存mmap到内核空间,这样在用户得到通知的时候,buffer里已经有数据了,不用再像epool那样从fd里读数据,减少了一次读数据的时间;

5. 方案的好坏不是绝对的,传说如果活动的fd数量足够多(例如>60%)epool性能会没有pool好,也就是说这个时候设置回调没有直接遍历来得快。

6.一般对于web服务器来说,活动fd数量应该不会占太大比例。

7.一般select的fd都会设置成非阻塞,因为fd可读只是一个hint,并不是一定就可以读的。

8.有两种触发方式,水平触发和边沿触发。水平触发指的是只要这个fd还有数据可读,就会再次通知用户;边沿触发只会通知一次。

http response head要注意两点

August 5th, 2010

1. 要有Content-length字段
2. http head 要以\r\n\r\n结尾
否则,浏览器可能解析不了,就出不来页面。

培训结束了

August 5th, 2010

两个星期,写了一个星期的代码,读了一个星期的代码,今天终于写了张ppt,做了新人串讲。
好几年都没有正儿八经的讲过ppt了,汗。。。

你轻松和快乐吗?

July 30th, 2010