摘要:几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客 阅读全文
posted @ 2016-06-22 15:25 红心李 阅读 (325759) 评论 (43) 编辑
摘要:[TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录。 MySQL主键设计原则 MySQL主键应当是对用户没有意义的。 MySQL主键应该是单列的,以便提高连接和筛选操作的效率 永远也不要更新MySQL主键 MySQL主键不应包含动 阅读全文
posted @ 2016-04-16 14:39 红心李 阅读 (14489) 评论 (2) 编辑
摘要:什么是CLR?CLR,公共语言运行时(Common Language Runtime)是一个由多种语言使用的“运行时”。他的核心功能包括(内存管理、程序集加载、安全性、异常处理和线程同步),可以被面向CLR的所有语言使用。这里的“运行时”,就是一个运行时环境,就像JAVA虚拟机一样。哦,错了,确切的... 阅读全文
posted @ 2015-07-27 18:07 红心李 阅读 (2588) 评论 (2) 编辑
摘要:学习参考:http://www.cnblogs.com/dudu/articles/4449.htmlhttp://www.cnblogs.com/anytao/archive/2007/04/19/must_net_03.html今天在讨论IPC通信契约的时候,卢工提到使用Attribute来描述... 阅读全文
posted @ 2015-07-21 14:29 红心李 阅读 (2118) 评论 (2) 编辑
摘要:英文好的直接看这里:http://www.codeproject.com/Articles/140911/log4net-Tutorial介绍log4net.是.NET下面最伟大的日志工具之一。简单、强大、可扩展,简直是日志工具的黄金标准. 在我看来唯一欠缺是一个比较直接的使用指南。 这个文档,在深... 阅读全文
posted @ 2015-06-30 18:23 红心李 阅读 (7065) 评论 (1) 编辑
摘要:共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信。因为是通过内存操作实现通信,因此是一种最高效的数据交换方法。共享内存在 Windows 中是用 FileMapping 实现的,从具体的实现方法上看主要通过以下几步来实现:1、... 阅读全文
posted @ 2014-10-11 11:05 红心李 阅读 (20305) 评论 (9) 编辑
摘要:WM_COPYDATA消息,在win32中用来进行进程间的数据传输。typedef struct tagCOPYDATASTRUCT { // cds DWORD dwData; DWORD cbData; PVOID lpData; } COPYDATASTRUCT;其中... 阅读全文
posted @ 2014-09-26 10:47 红心李 阅读 (7464) 评论 (0) 编辑
摘要:昨天看Q3的代码,看到有个_INTSAIZEOF的宏,着实晕了一阵。一番google后,终于明白,这个宏的作用是求出变量占用内存空间的大小,先看看_INTSAIZEOF的定义吧:#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(s... 阅读全文
posted @ 2014-08-26 14:38 红心李 阅读 (405) 评论 (0) 编辑
摘要:FiltersIoFilter 是MINA框架中一个核心的部分,如下图,对间于IoService和IoHandle之间,用于过滤所有的I/O事件和请求,其扮演的角色就像J2EE中的Servlet。MINA提供不少现成的过滤器:1、LoggingFilter :日志过滤器,用于记录所有的事件和请求日志.2、ProtocolCodecFilter:规约解析过滤器,用来将所有收到的ByteBuffer内容转换为POJO消息(对象),实现往来报文的编码和解码;3、CompressionFilter:压缩过滤器;4、SSLFilter…ProtocolCodecFilter相对比较常用的是Protoco 阅读全文
posted @ 2012-11-02 11:52 红心李 阅读 (12299) 评论 (5) 编辑
摘要:最近在进行监控平台的设计,之前一直觉得C/C++中最棘手的部分是内存的管理上,远不止new/delete、malloc/free这么简单。随着代码量的递增,程序结构复杂度的提高。各种内存方面的问题悄然滋生。而且作为平台,后期的插件扩展在所难免。长时间运行的采集平台的特性更是提出了对稳定性的高要求。不是c#、java,没有虚拟机为你管理内存,一切都要靠自己。于是想看看nginx、python、lua这些C的经典之作在内存管理这块“要地”又是如何处理的。 先来看看nginx吧,因为网上都说nginx的内存池设计的非常精巧:1、基本结构先来学习一下nginx内存池的几个主要数据结构:[见:./src 阅读全文
posted @ 2012-10-17 11:41 红心李 阅读 (19350) 评论 (6) 编辑
摘要:IoServiceIoService是一个接口,有两种实现:IoAcceptor和IoConnector;其中IoAcceptor是针对Server端的实现,IoConnector是针对Client端的实现;IoService的职责包括:1、监听器管理2、IoHandler3、IoSession管理4、FilterChain管理5、Statistics管理IoAcceptor主要用于创建新的连接。MINA提供了多种实现,所以几乎不需要我们自己再去实现:NioSocketAcceptor:无阻塞的Socket 传输Acceptor,针对TCPNioDatagramAcceptor : 无阻塞的S 阅读全文
posted @ 2012-10-16 09:03 红心李 阅读 (8764) 评论 (4) 编辑
摘要:Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。这个框架的优点:– 异步 – 无阻塞 – 事件驱动 – 支持TCP, UDP, APR, 串口… – 通过 过滤器(Filters)实现扩展性 – 同时提供协议框架总体框架之前的一个项目用到了MINA,最近想再系统的整理一下,主要参考MINA 2.0 User Guide基于MINA框架的应用程序架构应该是这样的:底层是基于JAVA的N... 阅读全文
posted @ 2012-09-06 21:17 红心李 阅读 (14767) 评论 (0) 编辑
摘要:环境:Windows7 旗舰版1、安装Gvim7.3 : 下载地址http://www.vim.org/download.php#pc。2、安装中文帮助:vimcdoc-1.8.0-setup.exe 地址http://vimcdoc.sourceforge.net/ 会自动识别gvim的安装路径, 安装完后,gvim菜单中文出现乱码,在_vimrcset文件中增加:" 配置多语言环境,解决中文乱码问题if has("multi_byte") " UTF-8 编码 set encoding=utf-8 set termencoding=utf-8 set 阅读全文
posted @ 2012-08-13 22:58 红心李 阅读 (105895) 评论 (20) 编辑
摘要:第2章、Programming in Objective-C// main.m// prog1//// Created by Steve Kochan on 1/30/11.// Copyright 2011 ClassroomM, Inc.. All rights reserved.//#import <Foundation/Foundation.h>int main (int argc, const char * argv[]){NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];NSLog (@"P 阅读全文
posted @ 2012-08-08 23:14 红心李 阅读 (424) 评论 (2) 编辑
摘要:现在Vim的最新版本是v7.3,而CentOS最新只能更新到v7.2,所以想自己编译安装一下试试,顺便安装gvim,不过最后gvim还是安装失败了。不知道为什么,先记录一下,后面再摸索摸索吧:1、下载vim源代码vim的官方网站是:www.vmunix.com/vim可以用这个链接下载源码包:ftp://ftp.jp.vim.org/pub/vim/unix/vim-7.0.tar.bz22、解压将 /usr/src/vim-7.3.tar.bz2 文件解压缩在 /usr/local 底下cd /usr/localtar -xvf /usr/src/vim-7.3.tar.bz23、配置./. 阅读全文
posted @ 2012-08-06 10:30 红心李 阅读 (5709) 评论 (1) 编辑
摘要:【ls】 -a 显示指定目录下的所有文件及子目录,包含隐藏文件(以“.”开头的) -l 除文件名外,同时列出文件及子目录的权限、使用者、大小等信息; 例子: 【pwd】 显示当前的工作目录,即当前所在工作目录的绝对路径; 【cd】 改变当前的工作目录,cd / 返回到根目录; 【date】 显示或修改系统时间和日期,其中只有超级用户才能修改系统... 阅读全文
posted @ 2012-07-27 11:23 红心李 阅读 (292) 评论 (0) 编辑
摘要:原文:http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagramInstagram的存储量非常大,差不多每秒25-90张照片。为了保证我们的重要的数据能够合理的存储以便快速的提取应用,我们对数据进行了分片 -- 换句话说,将数据放到很多小的桶(buckets)中,每个桶存储一部分的数据。我们的应用服务器跑的是Django ,后端数据库采用PostgreSQL 。我们决定采用分片后,第一个问题是我们是否还保留我们的主数据库,是否应该转换到其他的存储方案。我们评估了一些不同的NOSQL的解决方 阅读全文
posted @ 2012-07-10 11:02 红心李 阅读 (1863) 评论 (0) 编辑
摘要:第5课 大规模数据处理的难点 -- 内存和磁盘 单台Linux服务器瓶颈分析 1、查看平均负载 用top、uptime命令查看平均负载; 1、平均负载很低,系统吞吐量无法提升 --------->检查软件设置是否异常,网络、主机是否存在故障 2、平均负载很高,用sar或vmstat命令查看cpu使用率和I/O等待率 2、确认CPU、I/O是否存在瓶颈; >如果是CPU... 阅读全文
posted @ 2012-05-30 22:56 红心李 阅读 (6075) 评论 (0) 编辑
摘要:前一篇翻译了Instagram blog上的一篇文章《What Powers Instagram: Hundreds of Instances, Dozens of Technologies》,让我们对Instagram 的大致技术路线有了一个大体的了解。我觉得Instagram 的工程师能够在Instagram blog上将自己使用的技术和工具进行分享,真是难能可贵。同时,在网上看到了一份Mike Krieger在“AirBnB Tech Talk 2012”上演讲的PPT,感觉受益匪浅,有必要整理学习。相关统计用户规模:30+ million users in less than 2 ye 阅读全文
posted @ 2012-05-28 08:59 红心李 阅读 (3036) 评论 (4) 编辑
摘要:原文:http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances-dozens-of当我们与其他工程师偶遇和交流的时候,有一个问题经常被问及,“你们的技术架构(technology stack)是怎么样的”?我们觉得从较高的层次来描述Instagram的所有构成系统是一件有趣的事情;未来你可能期待更深入的描述这些系统。这就是我们的系统,仅仅1年时间,并且我们活了下来,其中有一部分我们一直在修改。一个小型团队的初创公司,可以在一年多一点时间发展到1400多 阅读全文
posted @ 2012-05-23 00:36 红心李 阅读 (4728) 评论 (3) 编辑
摘要:因为公司的主要业务是图像识别相关的,因此对图像处理、识别是我学习的重点。虽然写程序也不少年了,但是对于图像处理领域,我还是一个新兵。对很多基础的概念也还是存在盲区,所以想在边学边做的过程中,对一些概念的梳理和学习心得进行记录。 BMP文件格式 BMP(Bitmap-File)图形文件,又叫位图文件,是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。一个BMP文件由四部分组成: 位图文件头 位图信息段 调色板 位图数据 ... 阅读全文
posted @ 2012-05-09 09:07 红心李 阅读 (4711) 评论 (10) 编辑
摘要:今天在读《大规模Web服务开发技术》一书的时候,书中提到了sar这个命令,感觉很有用,有必要整理学习一下。(对于一位Linux初学者,不能放过任何一个学习机会 :P)打开自己的CentOS,敲入“sar”,表示很失望:[root@localhost ~]# sar bash: sar: command not found 竟然没有安装,不过还好linux下安装还是非常方便的。 [root@localhost ~]# yum install sysstat Loaded plugins: fastestmirror Loading mirror speeds from c... 阅读全文
posted @ 2012-04-29 15:16 红心李 阅读 (26207) 评论 (1) 编辑
摘要:装了个CentOS 5.5,想在上面搭个python的开发环境,可是还是遇到了很多问题,记录一下过程:1、python升级查看python版本python -VPython 2.4.3因为python3的变化很大,还是希望用新的版本,goole了一把,看到有一个指导贴:cd /usr/local/srcwget http://www.python.org/ftp/python/3.2/Python-3.2a1.tgz--14:51:31-- http://www.python.org/ftp/python/3.2/Python-3.2a1.tgzResolving www.python.or. 阅读全文
posted @ 2012-04-27 21:47 红心李 阅读 (25572) 评论 (3) 编辑
摘要:关于问答类的应用,最早接触的是stackoverflow和知乎 ,而Quora作为知乎的原型,因为其创始人来自FaceBook而吸引了我。事实上关于Quora的技术分析,冯大辉和陈皓都已经有所详细的阐述:《Quora 用了哪些技术 ?》《Quora使用到的技术》。通过他们的文章,我看到了一篇更详细的说明《Quora’s Technology Examined》。看完以后感觉有很多东西值得深入的去学... 阅读全文
posted @ 2012-04-27 16:47 红心李 阅读 (7591) 评论 (9) 编辑
摘要:关于http协议,相信一般的人都知道,相关的文章网上一抓一大把。但是对http协议的细节真的都清楚了吗?我自问了一下,很是惭愧,于是决定好好捋捋。刨开表层看内在,首先装上httpwatch亲眼目睹一下http的真容:访问google看看请求报头GET http://www.google.com/ HTTP/1.1Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint 阅读全文
posted @ 2012-04-25 21:22 红心李 阅读 (3017) 评论 (4) 编辑
摘要:动态脚本加速解释器将动态脚本解释成操作码(opcode)的这一过程也存在一定的开销;动态脚本加速就是将缓存的思路搬到操作码层,实现对操作码的缓存;PHP可以选择:APC 、eAccelerator、XCache等将opcode缓存在共享内存中。Python能选择什么?动态脚本加速技术主要用于解决CPU、内存的系统瓶颈,对I/O引起的系统瓶颈帮助非常有限。浏览器缓存尽可能地让Web站点的内容缓存在用户浏览器中,这样将在一定程度上减少了服务器的计算开销,也避免了有些由于不必要重复传输而带来的带宽浪费。IE:在用户本地设置临时文件目录,用于存放缓存。FireFox:采用二进制文件的方式来存储和管理缓 阅读全文
posted @ 2012-04-25 21:15 红心李 阅读 (476) 评论 (0) 编辑
摘要:缓存(cache)和缓冲(buffer)的区别:缓存(cache):缓存的目的是把需要花费昂贵开销的计算结果保存起来,在以后需要的时候直接取出,避免重复的计算。缓冲(buffer):目的在于改善各部件之间因为速度不同而引发的问题。起到将快速设备与慢速设备平滑衔接的作用。页面缓存(Page Cache)页面缓存就是将动态计算的结果进行缓存,避免动态内容不必要的重复计算,主要是针对动态生成的html页面和动态图片或动态XML数据等;缓存持久化和搜索 如果缓存文件非常多,cache目录下会拥挤大量的文件,如果缓存的文件的读写频度比较高,对CPU的影响是非常大的;解决的方案: 1、使用支持目录hash 阅读全文
posted @ 2012-04-25 21:11 红心李 阅读 (326) 评论 (0) 编辑
摘要:什么是带宽?误解:“数据在线路中的移动速度”、“数据的传输速度”我们所说的带宽是指数据的发送速度,比如百兆网卡,指网卡的最大发送速度是100Mbps,也就是说网卡在一秒钟最多可以发送100Mb的数据;相关的因素:数据发送装置将二进制信号传送到线路的能力,也称信号传输频率,以及另一端数据接收装置对二进制信号接收的能力,也包括线路对传输频率的支持程度;数据传输介质的并行度,等价于计算机系统总线宽度的概念;习惯与约定b:比特单位 bit;B:字节单位 Byte;1KB = 1024B;1kb = 1000b;M与K 的换算同上;什么是吞吐率?吞吐率(Throughput),是指web服务器单位时间内 阅读全文
posted @ 2012-04-25 21:09 红心李 阅读 (455) 评论 (0) 编辑
摘要:写这篇博客源于在阅读lighttpd源代码是遇到的一个关于assert应用的疑问。在阅读lighttpd源代码时,发现比比皆是的对malloc的调用结果进行assert检查,比如:Buffer.c:buffer* buffer_init(void) { buffer *b; b = malloc(sizeof(*b)); assert(b); b->ptr = NULL; b->size = 0; b->used = 0; return b;}这里的assert(b)似乎有问题,实际release版本在运行中难道不会发生malloc返回NULL的情况吗... 阅读全文
posted @ 2012-02-22 15:56 红心李 阅读 (2969) 评论 (4) 编辑
摘要:作为一个C的新手(虽然学的第一门语言就是C,可是用C实际开发项目却是最近的事情),对使用C过程中遇到的各类问题、疑惑、知识漏洞进行弥补无疑是非常有必要的,于是决定将每次遇到的知识漏洞写到博客上。今天在写代码的过程中对一个函数进行了重构,函数的用处是将一块内存中的内容打印成16进制表示的字符串;很悲哀的输入的是一个char指针:char* buffer;当调用Format("%02X",*buffer)的时候出现问题了,比如:0xB0输出变成了:“FFFFFFB0”;最后发现是char惹得祸;char取为unsigned char还是signed char是平台相关的,而我的 阅读全文
posted @ 2012-02-10 16:46 红心李 阅读 (5924) 评论 (0) 编辑
摘要:关于哈希表C实现,写了两篇学习笔记,不过似乎网上流传最具传奇色彩的莫过于暴雪公司的魔兽文件打包管理器里的hashTable的实现了;在冲突方面的处理方面,采用线性探测再散列。在添加和查找过程中进行了三次哈希,第一个哈希值用来查找,后两个哈希值用来校验,这样可以大大减少冲突的几率。在网上找了相关代码,但不知道其来源是否地道:StringHash.h 1 #include <StdAfx.h> 2 #include <string> 3 4 using namespace std; 5 6 #pragma once 7 8 #define MAXTABLELEN 1024 阅读全文
posted @ 2012-01-17 11:07 红心李 阅读 (10209) 评论 (7) 编辑
摘要:上次大致分析了一下哈希表的链地址法的实现,今天来分析一下另一种解决哈希冲突的做法,即为每个Hash值,建立一个Hash桶(Bucket),桶的容量是固定的,也就是只能处理固定次数的冲突,如1048576个Hash桶,每个桶中有4个表项(Entry),总计4M个表项。其实这两种的实现思路雷同,就是对Hash表中每个Hash值建立一个冲突表,即将冲突的几个记录以表的形式存储在其中;废话不多说,上代码和图示基本能说明清楚:完整的代码,请看:这里,一位圣安德鲁斯大学的讲师:KRISTENSSON博客这里截取几个主要的片段:主要的数据结构:struct Pair { char *key; c... 阅读全文
posted @ 2012-01-16 11:06 红心李 阅读 (7677) 评论 (3) 编辑
摘要:哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。具体的介绍网上有很详细的描述,如闲聊哈希表 ,这里就不再累述了;哈希表在像Java、C#等语言中是与生俱来的。可是在C的世界中,似乎只有自己动手,丰衣足食;在网上google了一把,大致有几个版本,我会一一来分析对比;首先先来交代一下哈希表实现中需要注意的一些概念:(主要参考:这里)哈希函数也叫散列函数,即:根据key,计算出key对应记录的储存位置 position = f(key)散列函数满足以下的条件:1、对输 阅读全文
posted @ 2012-01-13 09:32 红心李 阅读 (30821) 评论 (5) 编辑
摘要:今天在看云风的铁路订票系统的简单设计 时,看到他提到通过动态DNS实现负载均衡;感觉自己对负载均衡这块一直是模模糊糊,有必要补补钙。动态DNS(英语:Dynamic DNS,简称D-DNS)是一种把互联网域名指往可变IP地址的系统。简单的说,动态域名可以在你的电脑每次上网得到新的IP之后,自动设置了新域名的指向,使网上其他任何人访问该域名时,始终能定向到你机器的最新的正确IP上去,从而使得人们能使用一个能记忆的,对用户来说是永远不变的域名来访问你那台IP每天都在变化的机器。从而也就能实现了将个人电脑变成可以供任何人访问的“服务器”了。当然,我所关心的是动态DNS技术在负载均衡方面的应用,那么让 阅读全文
posted @ 2012-01-12 09:18 红心李 阅读 (2114) 评论 (0) 编辑
摘要:又是一年,似乎年底总是总结的时候。翻看去年这个时候写的TO-DO List,一度觉得这玩意不太靠谱。一些目标完成了,有些目标压根显得无关紧要了。也许是我自己的职业规划过于飘忽,很多去年的想法都已经改变了。套用一句台词:生活就像巧克力,你永远不知道下一颗是什么颜色!今年7月份,又换了工作,离开了自己混了7年的电力行业;加盟了老翁他们的公司,一家做铁路道岔监测的小公司。当然这个决定也一度让我纠结了几个月,不过最终考虑自己还是喜欢做技术(之前从研发 –>设计-> 需求分析 –>售前,一向不齿于30岁论的我,竟然也不知不觉的转型了,实在是人在江湖,身不由己),感觉这次就像是一根救命稻 阅读全文
posted @ 2011-12-31 00:00 红心李 阅读 (512) 评论 (0) 编辑
摘要:这几天在整理C#语言,发现还有很多东西由于没有真正用到,理解得都很肤浅。比如:委托,感觉就是一个函数指针,用来实现事件模型。直到今天看到一篇老外的文章,感觉理解加深了不少。于是决定结合自己的理解重新写一下,也算是总结吧。 紧耦合从前,在东海边有个村子,有个渔夫叫老李,世代以打渔为生。而村里的王员外是老李的老客户,每天都要向老李买鲜鱼。因为这个村子只有老李一个渔夫,所以老李的生意非常红火,以至于王员... 阅读全文
posted @ 2007-01-05 16:44 红心李 阅读 (57) 评论 (0) 编辑
摘要:[翻译] lover_P 2004-03-25 原著:Bill Venners、Bruce Eckel 2004.2.26原文:http://www.artima.com/intv/generics.html翻译:lover_P[人物介绍] Anders Hejlsberg,微软著名工程师,带领他的小组设计了C#(读作:C-Sharp)程序设计语言。Hejlsberg第一次登上软件界历史舞... 阅读全文
posted @ 2007-01-05 12:49 红心李 阅读 (153) 评论 (0) 编辑
摘要:程序员不是神,心态决定一切近来看了很多程序员的言论……感觉都是满腹牢骚,一肚子愤懑。我想要说的是,程序员不是神。时下一些程序员所能作的,其实大多数普通人通过一段时间的培训和学习都可以作。编程工具已越来越容易使用,编程思想越来越成熟,计算机书籍更是琳琅满目,开发过程中的规范性也已经越来越重要。作为一个普普通通的程序员,只是几个通宵的投入,1-2个月囫囵吞枣的学习,又能有什么理由能奢求太多? 其实当... 阅读全文
posted @ 2006-12-19 09:27 红心李 阅读 (115) 评论 (0) 编辑
摘要:写字楼里写字间,写字间里程序员, 程序员来写程序,写得程序换酒钱。酒醒只在网上坐,酒醉还来网下眠,酒醉酒醒日复日,网上网下年复年。但愿老死电脑间,不愿鞠躬老板前,奔驰宝马贵者趣,公交自行程序员。别人笑我忒疯癫,我笑自己命太贱,但见满街漂亮妹,哪个归得程序员。 --------唐伯虎做了程序员之后 阅读全文
posted @ 2006-12-14 09:39 红心李 阅读 (53) 评论 (0) 编辑
摘要:blogbus的搬家功能最终让我决定换个新家,我也决定以此为契机,重新开始我的blog,因为我始终觉得blog很能体现一个人的心态。昨天在搬家的时候,看了看自己这大半年写的文字,更多的是迷惘、烦躁和冲动。生活本来就不会顺心顺意,生活本身没有问题,有问题的是我自己,用五个字来形容最恰当:“成长的烦恼”。作为一个程序员是无法逃避成长的烦恼的。最近常常加班,加班尤其是没有兴趣支持的加班犹如一堆讨厌的苍蝇... 阅读全文
posted @ 2006-12-13 09:07 红心李 阅读 (52) 评论 (0) 编辑