Arcrest's profileWho Moved My CheesePhotosBlogListsMore ![]() | Help |
|
February 12 如何准备软件工程师的面试如何准备软件工程师的面试2006年10月13日 上午 09:33:00 发表者:王忻,Google 工程师
(作者简介: 王忻,Google 工程师。北京出生,五岁时跟随父母移居美国。中学期间跳了三级,十五岁进入了加州理工大学,加入 Google 前曾在微软等公司工作。) 六月份的时候,我曾经在黑板报上介绍过“如何写一份好的工程师简历”, 今天想跟大家来谈谈如何准备软件工程师的面试?假设,现在您的杀手简历 (killer resume)已经吸引了某大公司的注意并约你面试。那么接下来该如何准备呢? 我在 Google(以前是微软)工作期间面试了不下 300人,其中某些应聘者确实表现非凡,但有些却显得准备不足。当然许多面试准备不足的人最后依然获得了录用通知,因为他们本身确实才华出众。但如果应聘者能提前准备妥当,那么面试过程将更为保险和轻松。以下所列出的就是我根据多年经验总结得出的建议: 1.使用相同的工具(如铅笔和纸张)和时间限制(例如半个小时)模拟面试训练 Google 和微软都会让应聘者在白板上手工解答编程问题,但通常大部分的应聘者都是习惯于在电脑上利用编程工具系统编写程序。因此面试的时候,某些应聘者离开了熟悉的电脑光标,站在白板前感觉手足无措不知该如何起行。又或者他们不习惯在编程之时旁边有人观看,这会让他们感到紧张而无法正常思考。 在现实生活中,如果你想要横渡英吉利海峡,自然不能总是在室内游泳池练习。你必须投身于大海在波涛之中训练,在准备面试的时候也是如此。:) 在面试开始之前你最好向招聘单位询问面试形式和面试问题。如果招聘单位让你在某个房间考试且仅提供没有汇编程序的编辑器,那么就应该在家中按照这种情景进行练习。如果招聘公司单位让你在白板上回答问题并会安排考官在旁监督,那么你就要找一位软件工程师来扮演考官配合你练习。即使找来的考官经验不如你也没有关系,他们依然能帮助你消除在他人面前出错所带来的紧张感,这样可以让你适应有人在旁边盯着看的面试氛围。 如果你恰巧认识我并希望由我来帮你联系,那我的条件就是必须请我吃饭:如果你已经工作了就吃日本寿司大餐;如果你还是学生,那么吃比萨饼也可以。:) 2.在面试过程中不要对细小错误耿耿于怀 我曾不止一次的在面试过程中碰到这种情况:当应聘者知道编程问题后,他马上就想到了最佳的方案、确定了边界条件,然后开始编写程序。但在编写过程中,应聘者犯了诸如首先检查是不是操作顺序错误或忘记设定某变量等无关大局的小错误,当我指出其错误之后,应聘者立刻变得十分紧张,这种焦虑情绪影响了他在后面环节的正常发挥。 其实这种恐惧心理完全不必要。一名优秀的程序员在编程过程中出现错误也是很正常的,就像是小提琴手在演奏高难度的巴赫交响乐时也会偶尔失误。音乐会的听众可能会觉察到这些错误,但是听众绝对不会因为这种细小失误就把出色的小提琴手看作是门外汉。 即便应聘者彻底搞砸了某个编程问题,面试考官也可能会提出不同的问题并会容忍应聘者在某个问题上的失误。再退一步说,就算某次面试彻底失败,你也有机会在其它面试上补救。 我的一位同事(一个项目的技术负责人)最近面试了一个人,在开始面试时他觉得面试者的交流方式存在问题,因此开始表现的相当不友好。但经过了整个面试过程后,面试者证明了自身的能力,而我的那位同事也成了那位面试者最坚定的支持者。在过去的一年中,我从未见过这位同事如此强烈的支持哪位面试者。 所以,因此就算面试进展不顺,也务必坚持到底不要放弃。 3.在面试过程中不要失礼 这似乎是不用说的问题,但在面试过程中我确实碰到过影响很不好的失礼行为。曾有一位前来应聘软件工程师的人看到我就说:“哇,我真不敢相信你这么年轻!你看上去好小!!我觉得你才 18 岁!” 面试者的这种言行实在要不得。 面试者也要注意不要说出诸如此类的话:“哇,你真的就是考官吗?你看上去好老!”“哇,你真的是来面试我的,你看上去好胖!”(相信应该不会有人说这样的话)。 在我的另外一次面试中,应聘者的手机在面试开始 15 分钟之后就响了,她没有理会,手机连续响了 20 秒,这样不免会对面试造成影响。5 分钟之后,她的手机又响了,她依然没有理会;5分钟之后,手机第三次响起。最后她终于抓过手提包在里面翻出了手机。我想:“是时候关掉手机了,她在进来之前就应该把手机关掉。”但是她在手提包中拿出手机之后却旁若无人的打起电话来,而且就在面试过程中间! 这种情况唯一可接受的理由就是他有什么非常紧急的事,但是即便情况如此,那么他也应该在面试开始之时就讲清楚,让面试官有所准备。 4.不要在面试中喧宾夺主 我曾经面试过几个应聘者,他们好像铁了心肠一定要告诉我他们最近的“超级项目”。当我开始发话他们就立刻打断:“我想让你了解我们近期处理的超级项目,10年之前当这个项目开始之时还默默无闻……”,然后接下来的5分钟时间都在那里滔滔不绝唾沫横飞。 有时应聘者好像打定主意要给每个考官详细描述其引以为豪的项目,然后一整天都在那里翻来覆去的说这个项目。 记住:面试官在面试过程中有具体的问题需要询问。但是如果应聘者喧宾夺主,那么考官就可能无法获得充分的信息来做出判断,同时这种行为也会让考官觉得应聘者很难共事。 如果你确实想谈论自己的项目,那么就应询问面试官:“我觉得最近的某某项目能充分体现我的能力,我能不能用 10分钟的时间来描述一下具体情况?”这样就会给面试官空间来调整面试过程,由此也避免毫无征兆就让面试离题万里。 5.在回答需要具体答案的问题之时,记得首先要有总括性的发言 有时我会问一个答案可以很简练的问题,例如:“在你的那个成功项目中总共有多少人参与?”但应聘者往往会就此打开话匣:“恩,张三参与了这个项目,他负责UI部分,当然我也会给他一些指导。李四也在项目中,她在宾州远程工作,负责后端服务器。两年之后我们又有新人王五加入……” 在应聘者滔滔不绝的讲了三分钟之后,我还是不知道这个项目到底有多少人参与。 因此首先要简练的回答问题,然后再展开描述:“在我接手项目时有三个人,但当我离开项目时人数已经增加到12人。” 当然如果能简练的回答问题,然后征询意见之后再展开论述那就更好了:“在我接手项目时有三个人,但当我离开项目时人数已经增加到 12 人。我可以讲一下各人在项目中的具体分工吗?” 6.(不是特别重要)在面试中要衣着得体,舒适的商务便装是最佳的选择 人们有时候会为衣着犯愁。但是最重要的是要让自己感觉舒适。如果需要具体的建议,那么我建议穿衬衫甚至T恤衫。对于某些公司(例如 Google),西装革履显然是太隆重了。 这条建议不必太看中,因为面试官不会管应聘者穿什么。最好应该询问人事招聘部门穿什么合适,因为不同国家有不同习俗,就算美国东海岸和西海岸的公司着装文化也会有差别。像 Google 这样的公司在着装方面更加随意,因此如果你穿着“三件套”的经典西服去 Google 面试,考官可能会有异样的感觉。因此如果你真的具备软件工程的本领,穿什么其实并不重要。某个应聘者曾经穿着皱巴巴脏兮兮的T恤就跑来面试,他的T恤衫上还有着许多破洞。但最后他还是拿到了录取通知(当然我绝不建议如此穿着)。 最后的一个小故事 最后我想讲一场极为尴尬的面试。在看完之后,我希望你能这样想:无论你的面试如何糟糕,你至少要比这位应聘者幸运。 以前我还在微软的时候,我们通常会为应聘者准备一些饮料,某位暂称其为 Jeff 的应聘者要了一听百事可乐。我们走进面试房间后,他就在桌前坐下了。接下来我们简要的谈了谈他的工作经历,然后他开始在白板上解答编程问题,此时他还没有打开他的可乐。 我们俩站在白板前,然后杰夫开始在上面写程序。在写程序之时他沉浸在对整体构架的思考中,下意识的退了一步来查看整个白板。在后退时他不小心碰到了桌子,放在桌上的百事可乐掉到了地上。 因为可乐还没有打开,因此当可乐罐落地的时候,可乐罐炸开了。 可乐罐在地上打转,泡沫喷的到处都是。你可以想象当时的场景,可乐喷到了墙上、书架还有我电脑的键盘上。我俩楞在那里,手都半伸着(根本来不及抓到可乐罐),眼睁睁的看着可乐弄得到处都是。 我们花了 5 分钟的时间用纸巾来清理现场(虽然我的书本自那天之后都粘页了,而墙壁也不再是干净的了)。 随后我们重新开始白板测试。杰夫此时已非常紧张(换了谁都会紧张吧?)。他写了几行程序,然后擦掉,然后再写。他是用自己的手擦拭白板而不是用板刷。他急得额头冒汗,然后他又用刚刚擦过白板的手擦汗。在面试过程结束之时,他的脸上布满了红色、绿色和蓝色的颜料。 我说:“你的手上粘了很多颜料,我带你去卫生间洗洗吧,”然后我把他领到洗手间让他从镜中看到了自己的尊容。 July 27 微妙的隐式转换C++虽然是强类型语言,但是却还不如Java、C#那么足够的强类型,原因是允许的隐式转换太多
除开上面的五种隐式转换外,C++的编译器还非常聪明,当没法直接隐式转换的时候,它会尝试间接的方式隐式转换,这使得有时候的隐式转换非常的微妙,一个误用会被编译器接受而会出现意想不到的结果。例如假设类A有一个non-explicit constructor,唯一的参数是类B,而类B也有一个non-explicit constructor接受类型C,那么当试图用类型C的实例初始化类A的时候,编译器发现没有直接从类型C构造的过程,但是呢,由于类B可以被接受,而类型C又可以向类型B隐式转换,因此从C->B->A的路就通畅了。这样的隐式转换多数时候没什么大碍,但是不是我们想要的,因为它可能造成一些微妙的bug而难以捕捉。
为了在培训的时候展示栈上析构函数的特点和自动资源管理,准备下面的一个例子,结果测试的时候由于误用而发现一些问题。(测试的IDE是Visual Studio 2005) class A { public: A(){ a = 100; } int a; void f(); };
A * pa = new A(); std::auto_ptr<A> p = pa; //无意这样使用的,本意是std::auto_ptr<A> p(pa) p->f();
这个写法是拷贝构造函数的形式,显然从T*是不能直接拷贝构造的auto_ptr的,但是编译器会尝试其他的路径来转换成auto_ptr来拷贝构造,因此如果存在一个中间的类X,这个类能接受T*的构造,而类X同时也能接受auto_ptr的构造,那编译器就会很高兴的生成这样的代码。 这段代码在VC6上是通不过的,因为VC6的auto_ptr实现就只有一个接受T*指针的explicit constructor. 但是C++ Standard的修正规范中,要求auto_ptr还应该有个接受auto_ptr_ref的constructor。那么这个auto_ptr_ref是什么呢?按照C++ Standard的解释: Template auto_ptr_ref holds a reference to an auto_ptr. It is used by the auto_ptr conversions to allow auto_ptr objects to be passed to and returned from functions. 参考Scott Meyers 的"auto_ptr update page"( http://www.awprofessional.com/content/images/020163371X/autoptrupdate%5Cauto_ptr_update.html )讲诉auto_ptr的历史故事
再回到前面的代码,本来应该是通不过的编译,但是VC2005的编译器却没有任何怨言的通过(即使把警告等级设置到4)。结果运行的时候却崩溃了,出错在auto_ptr的析构函数,delete的指针所指向地址是100,而如果在p->f()后面加上一句 cout << pa->a << endl; 发现输出结果为0。 为什么会这样,原因就是前面所诉的间接的隐式转换造成,这与VC 2006的auto_ptr和auto_ptr_ref实现有关,看看P.J.Plauger是怎么实现的: // auto_ptr_ref template<class _Ty> struct auto_ptr_ref { // proxy reference for auto_ptr copying auto_ptr_ref(void *_Right) : _Ref(_Right) { // construct from generic pointer to auto_ptr ptr } void *_Ref;// generic pointer to auto_ptr ptr };
// construct auto_ptr from an auto_ptr_ref object auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0() { // construct by assuming pointer from _Right auto_ptr_ref _Ty **_Pptr = (_Ty **)_Right._Ref; _Ty *_Ptr = *_Pptr; *_Pptr = 0; // release old _Myptr = _Ptr; // reset this }
这样代码通过编译的原因也就清楚了,A* -> void * -> auto_ptr_ref -> auto_ptr -> copy constructor -> accept. 好长的隐式转换链, -_-, C++编译器太聪明了。 那么为什么最后会出现指针被破坏的结果呢,原因在auto_ptr的实现,因为按照C++ Standard要求,auto_ptr_ref应该是包含一个auto_ptr的引用,因此auto_ptr的构造函数也就假设了auto_ptr_ref的成员_Ref是一个指向auto_ptr的指针。 而auto_ptr中只有一个成员就是A*的指针,因此指向auto_ptr对象的指针相当于就是个A**指针,因此上面auto_ptr从auto_ptr_ref构造的代码是合理的。 但是由于罪恶的void*造成了一条非常宽敞的隐式转换的道路,A*指针也能够被接受,因此把A*当作A**来使用,结果可想而知, A*指向地址的前4个字节(因为32位OS)被拷贝出来,而这四个字节被赋值为0( *_Pptr=0 )。 所以出现了最后的结果是_Myptr 值为100,而pa->a为0。 如果要正确执行结果,只要保证是个A**指针就行了,有两个方法 第一,auto_ptr_ref所包含的引用是指向的auto_ptr对象 A * p = new A(); std::auto_ptr<A> pt( new A() ); std::auto_ptr_ref<A> ra( pt ); std::auto_ptr<A> pb = ra ; pb->f();
第二,直接用二级指针 A * p = new A(); std::auto_ptr<A> pb = &p; //这句话后, p将等于0 pb->f();
当然第二种是利用了VC2005的实现而造出来的,看着很别扭,:)。 我不明白P.J.Plauger为什么用void *,而不是用auto_ptr<T>&,因为任何指针都能隐式转换为void *,这样的危险性大多了。并且如果用了auto_ptr<T>&,从auto_ptr_ref构造也容易写得更简单清楚,看看以前的实现方式吧,仍然是P.J.Plauger的,但是版本低了点: template<class _Ty> struct auto_ptr_ref { // proxy reference for auto_ptr copying
auto_ptr_ref(auto_ptr<_Ty>& _Right) : _Ref(_Right) { // construct from compatible auto_ptr } auto_ptr<_Ty>& _Ref; // reference to constructor argument }; auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0() : _Myptr(_Right._Ref.release()) { // construct by assuming pointer from _Right auto_ptr_ref }
这样的实现方法,显然不能接受任何指针的隐式转换,也就防止一开始的那种错误写法,并且也是符合C++ Standard的要求的。 而SGI STL的auto_ptr_ref的实现则是包含了一个T*的指针,构造auto_ptr时候直接从auto_ptr_ref中拷贝这个指针,因此这样的实现可以上代码编译通过,运行也正确,不过不符合C++ Standard。
总结一下,危险的隐式转换应该被杜绝的,最危险的两个就是void *的隐式转换和构造函数的隐式转换,因此建议是:
June 16 如何写一份好的工程师简历(转载) 2006年6月14日 上午 10:15:00
发表者:王忻,Google 工程师
最近三年作为 Google(谷歌)的软件工程师,我每周会帮人事部门审查简历,决定要不要给他们面试。Google 这几年的发展让很多许多优秀的工程师都前来申请。到目前为止,我已经看了上千份简历,有些简历留下的印象比别的好很多。尤其是最近亲戚朋友常常问我如何修改他们的简历,所以我积累了一些常见的错误避免的提议,在此跟大家交流一下。
1.谈到你做过的技术时,应该提到用的程序语言、你的个人贡献和产品细节。
有时我看到有人把过去的经验在简历上一笔带过,比如说:
• 在三人小组里,为电子邮件软件写了些 features。
这是远远不够的,看简历的人希望了解你做的工作的难度和对本公司有多少联系,所以你最好写的具体一些。譬如:
• 用 C++ 语言写了网络电子邮件的自动 backups。在三人小组里,专门负责设计和写储存服务器。从设计开始, 一年后把这个功能 feature 的用户推到了三千。
2.多讲事实, 少用形容词。
看简历的人读你的简历时,需要做判断,所以在简历里需要事实和数目。如果你写“迅速的提高了软件的操作效率”,看简历的人很难判断你成就的难度。但如果你写“在3个星期内,把软件的操作效率提高了40%” 就好多了。
有些谦虚的朋友们不愿意把话说满,所以你也可以用这个办法。你如果说自己“突出”或“在项目上常常被请去救火”,听起来难免会有点骄傲。但你也可以用不能否认的事实来说明你的观点,如“《纽约日报》评这个产品为‘突出’”,或“加入了三个原本已落后于计划的项目小组,但经过努力和组员一起把它们都按时完成了。”
3.你获得的奖、商业的荣誉或表扬、受用户欢迎的产品和你做过的有难度的业余项目都该包括在简历里。
我有位朋友在硅谷一个著名的硬件公司做了六年,她设计的 IP phone(网络电话)为公司赚了上亿的收入,被公司与商业报道多次评了奖。我有一次在旧金山的高速公路上驾车时,看到路边有她产品的广告牌;还有一次我去上海度假时,竟然发现上海公路边上也有!
不久,这位朋友决定换工作,请我看看她的简历。我惊讶的发现,她居然轻描淡写的写了一句-- "1998 – 2004:网络电话产品的硬件工程师组长" 和她的职责。
"产品赢的奖呢?它为公司赚的钱呢?" 我追问到。
"那些也该写吗?" 她说。
当然该写。
有人问,业余时间做的项目可不可以写?我觉得只要你的项目有代表性能说明对你的能力,都该包括。
4.分清主次,删掉相比之下不起眼的成绩,以免冲淡更加突出的成绩。
有朋友问,写简历是不是写的越多越好?譬如:
在甲公司做暑假实习生——
* 改善电子游戏的数值分类算法, 减少了内存要求 10%。 * 用 Java 写了 3000 行用户界面程序。 * 每周做两小时的人工测试。 你在申请软件工程师的职位时,我觉得前两点比较相关,第三点其实就不必写了。有时我看到有的简历里会提到,"按时完成了任务,产品符合原计划规格"。但读简历的人通常会认为这是理所当然的,而你把这些声明出来反而减弱简历的效果。
写一份简历不容易,但写好了也会带来成就感 (和好工作!)。 Google (谷歌)在中国广召各方面的人才,你不妨可以给我们投个简历!我们不但在信息检索方面招雇工程师,还有计算机图形、用户界面、硬件、Windows、质量保证员和系统管理员等方面。更多信息,请您访问这里。
谢谢阅读!大家感兴趣的话,下次我可以介绍“如何预备软件工程师的面试”。
OOP ->OOP+GP本着同时学习STL和复习数据结构的目的,买了这本很早就想买的《STL源码剖析》,一周内快速的看完了大部分内容,很过瘾,侯捷的书就是好:清晰流畅的文笔,准确精细的技术讲解,贴心醒目的排版。相对比的另一本书是《C++ Standard Template Library》的中文版,好早就买过,不过买来以后3年都没看完1/4,原因是太难懂了,看得一头雾水,看了的几乎都忘了,虽然书中也列出了不少STL的源码,但是讲解却不如前者易懂或者说是深入浅出吧(剖析2字很传神,:)),加上译者的技术和侯捷的差距(可能他自己都没搞懂多少,计算机书籍不欢迎非技术人员的翻译)。后者的作者都是鼎鼎大名的GP专家,里面的精华应该也不少,作为进一步学习应该相当好,当时对我来说太难了点,以为撑过了《Inside the C++ Object Model》看这本也没问题。其实当时连C++ Template根本没掌握多少,即使现在也是GP的newbie,也就是侯捷归结的GP的第一阶段,只会用点STL的容器,用得还不怎么样,从那本影印版的《Effective STL》中倒是看了不少条effective指南,就是很多都忘了,原因是用得少,不理解GP,不理解STL的幕后,不理解某些容器算法迭代器实现的幕后,理解了还用记么。 看这本书等于是迈向第二阶段(理解GP的内涵和STL的内幕),对我同时也是学习GP初步,其中提到的一大把术语一个不懂,什么partial specialization, argument deducation, 等等... 现在终于有些了解,原来GP里面还有这么多玩意儿,C++的另外一个重大方向是GP编程真是一点不假(惭愧,作为C++的拥护者却对它如此重要的一个方向了解得如此肤浅),而functor, iterator adapter, functor adpator的威力和巧妙也见识到了(以前每次看到bind2nd就纳闷这是啥玩意儿这么神秘)。哎,看来那本比较基础的《C++ Standard Library A Tutorial and Reference》还得多多参考。 第二章allocator和第三章iterator实在精彩,看完后不仅了解到了它们的内幕,对STL中的两个常用技法也有了解,一个是参数推导,另外一个是traits和type traits编程, 刚看到这种类似于多态的表现但是却是在编译时刻的静态绑定的技术时候觉得好巧妙,难怪侯捷称之为开启STL源码宝库的钥匙。值得再回顾~ 这本书至少会在2方面影响我的编程风格,第一是更多的用STL,STL确实很迷人,高重用性,低耦合,不仅仅是容器,还有算法,functor,adpater,比如多用for_each+functor,轮子不能再造,就是你发明一个也很难比得上STL的,很可能是方的或者扁的轮子,-_-。第二是逐步将GP融入到OOP,嗯,这方面买了另外一本好书《Modern C++ Design: Generic Programming and Design Pattern Applied》,翻译自侯捷。Design Pattern本来就是我的热爱的方向之一,相信它会带来不少惊喜。 虽然还没多少GP经验,但是已经喜欢上了GP了,所以要好好的补补C++的Template,包括《C++ Standard Library A Tutorial and Reference》和《C++ Standard Template Library》。是的,GP作为C++所拥有的另外一种programming idiom,会象OOP一样逐步广泛运用的。 完毕,庆祝买了本好书~ 哦~,对了还有任务~,一定要试试新买的刀~
June 05 “世界爱眼日”:眼睛保健全攻略健康是公平的,人人有权享有。
健康是无价的,胜过你的财富。尊重自己,爱护家人。优质工作50年,健康生活100年。您的健康需要权威指点。新闻晨报为您开出“名医讲坛”,凭借强势媒体的平台,遍邀中外名医,———指点您规避疾病,强健身心。
■现代生活方式让都市人处于视觉“亚健康”
●视觉与都市化环境相适应
人类社会发展到今天有一个明显的特点,就是居住的环境都市化程度越来越高,人类在不断改变着环境的同时,本身又受变化了的环境影响。都市化的环境,包括自然环境和人文社会环境,在带给人类各种方便的同时,也对人类自身的功能和行为产生一定的影响。
谈到视觉,大家都知道就是看不看得见东西,其实视觉和生物进化是密切相伴随的过程。人类的视觉是在生物界发展得最完美、最高水平的视觉,不但能看见东西,还有立体视觉和视觉认知过程。人类在远古时代,要有很好的远视力、追踪能力、运动视觉、夜视力才能适应当时的生存条件和生产方式。现在进入了现代化社会,大中城市已进入都市化阶段,生活方式的改变对视功能、视觉也有了新的要求。
人类接受外界信息,其中80%的信息来自于视觉器官。古代中国人就造词“聪明”,代表一个人有思想、有智慧,“聪”代表有很好的听力,“明”代表视力,其实古代的人就知道了,一个人学习能力的高低、接受知识的能力与他的听力、视力的好坏密切相关。
艺术家说,眼睛是心灵的窗户。从医学生物学的角度讲,眼睛确实是心灵的窗户,因为人的全身唯一能够用肉眼看到的血管就是眼底血管,通过眼底检查可以发现动脉硬化等一些全身疾患,唯一能看见的神经也是颅神经中的视神经。当一个人丧失了视力,他所累及的不是一个人,而会给家庭、社会带来压力。
●视觉“亚健康”值得每个人关注
科技的发展带给人类更多的视觉感受,都市里的人们享有比农村的人们更缤纷复杂的外部世界,视觉认知得到了前所未有的发展。虚拟现实技术,带给人类更多的视觉体验。从普通意义上讲,近几年随着人们自我保健意识的提高,越来越多的人关注眼的健康,人们可以通过各种媒体得到有关视觉健康的知识。
环境对人们视功能的影响呈多方面和多层次。都市化带给人类视觉功能和疾病的变化也是显而易见的。最明显的例子是近视眼的发病率越来越高,糖尿病眼病、高血压眼病、以及目前非常“流行”的“干眼症”亦逐渐增多。
反过来,由于卫生条件的不断改善,都市中传染性眼病如沙眼和营养不良性眼病的发病率逐渐降低。
越来越多的人开始关注视觉的“亚健康”问题。许多人的眼睛并没有明显器质性损害,但却影响平时的生活质量。北京同仁医院眼科中心曾对门诊的病人进行了调查,发现60%的人患有不同程度的干眼症状,他们感觉眼睛不舒服,眼睛出现干涩,易疲劳,充血。另外,长期视疲劳还会引起黑眼圈。
●都是都市生活惹的祸
都市化的文明已造成了人类眼部疾病和功能的变迁,近视眼的发病率逐渐升高。近视眼的发生除与遗传有关外,与环境的关系亦非常密切,特别是和长时间近距离阅读有关。随着社会的进步,本世纪近视眼的发病率还会逐渐增高,从人类进化的角度讲,这也是发展的必然趋势,因为与我们的祖先相比,我们越来越依赖近距离的视觉功能,远视力的功能用的时间相对较少,特别是都市化的环境进一步限制了我们一部分视功能的发展。
虽然我们的“眼球”结构没有发生太大的变化,但视功能却发生了一定的变化,人类的运动视觉亦可能有不同程度的退化,可能不能像长期生活在具有宽阔视野的环境中的人们有那么灵敏的扫视功能。
都市中的人们受环境、饮食结构和生活习惯的影响,糖尿病的发病率逐渐升高,与之相关的糖尿病眼病的发病率逐渐增高,已成为第3位的致盲眼病。
大气环境的污染、电脑屏幕的辐射、环境中各种反光材料等造成角结膜及泪腺功能的下降,“慢性结膜炎”、“干眼症”的发病情况亦不容忽视。
随着都市交通的发展,眼外伤的数量亦不断增加,同时由于活动范围的扩大,接触对眼睛有害的机会增多,增加了眼受伤的机会。
●视频终端综合征———办公一族抵挡不了
视频终端综合征,是指由于长期注视电脑或者电脑屏幕,眼瞬目动作减少,泪液不能很好地均匀分布在眼表,导致眼干、眼涩、疲劳,慢性结膜炎等眼部不适症状,这些症状也可能是干眼症的一种。
长时间用眼对眼睛的危害是很大的,比如现在很多人来就诊的时候就说,觉得自己看电视时间长了眼睛就会特别涩、特别干,有时候也有头疼、眼睛疼的状况,看东西也很模糊,长时间操作电脑、玩电子游戏机或看电视后常会有眼睛疲劳、干涩、发痒、灼痛、畏光等问题出现,令办公室一族防不胜防。
由于视觉环境的改变,因长时间看电视、看电脑所造成的“视频终端综合征”,越来越成为青少年视力下降的主要原因。眼科医生在临床治疗中发现,由于视觉环境的改变,“视频终端综合征”的发生将大量增加。
由于电脑荧光屏由小荧光点组成,眼睛必须不断地调整焦距,以保证视物清晰,时间过长,眼肌就会过于疲劳。同时在注视荧光屏时,眨眼的次数会降低10%,减少了泪液的产出;而眼球长时间暴露在空气中,使水分蒸发过快,造成眼睛干涩不适,严重的甚至会损伤角膜。办公楼环境中空调的频繁使用导致眼泪水加速被吹干。
预防电脑终端综合征,首先需要注意以下几方面:
■保持电脑屏幕跟眼睛的距离50~60厘米;
■配备专用的电脑椅,调整好座位高度和靠背角度;
■荧光屏的几何中心最好位于视平面以下,但在15度角以内;
■最重要的一点是一次使用电脑的持续时间不要太长,每隔50分钟休息10分钟。
■应特别强调定时休息的重要性,这是预防眼睛疲劳的最有效方法,最好每隔一小时左右站起来走一走,到窗口远望一会儿。不仅对眼睛有好处,对健康也大有益处。还可以滴一些可以使眼部保持润滑的眼药水。对于驾驶、阅读等视力疲劳引起的眼睛不适,也可以用定时休息的办法来调节。
●白领患上“老年病”
许多疾病与老化密切相关,而且目前的情况是,白领中老年眼病的发生率越来越高,不过许多眼疾如果能早发现、治疗,便可以避免或减轻。
白领最常见的“老年”眼疾包括高度近视、老花眼、白内障、青光眼等。高度近视导致玻璃体出现浑浊,眼前有飞蚊,这与白领对眼睛保健的重视程度不够有关,应定期检查。
老花眼一直是老年人的常发病。一定年龄后,由于晶体老化失去弹性,调适能力降低.导致看近物时模糊。但有很多未到40岁却已有老花眼症状的人,与所配眼镜度数不正确有一定关系。
白内障是晶体老化浑浊而导致的。目前并无药物可以医治,手术治疗是惟一有效的治疗方法。对于严重的白内障影响日后生活与工作的人来说,手术可以帮助病患恢复极佳的视力。轻度白内障病患可配戴适当的眼镜及太阳眼镜,点眼药水及口服药物可延缓白内障进展。白领在平时出门就应该戴上太阳眼镜,防止紫外线过度照射伤害眼睛。
青光眼的成因是老化使泪水出口阻塞,眼球内水分无法顺利排出,造成眼内压升高,进而压迫视神经,导致视野、视力受损,中国人似乎更易发作青光眼,情绪是其中的一个诱发因素。40岁以上的人至少每年要检查一次眼压,如果早期发现可以采用医疗手段控制眼压,防止恶化。
■近视是生活方式关联性疾病
数据显示
■近视眼的发生率越来越高,上海、北京等大中城市近视率可达50%-60%,在医学院校,近视率甚至高达70%-80%,小学3、4年级的近视率也达到30%-40%。
■最近的一份调查显示:我国小学生的近视发病率为22.78%,中学生为55.22%,而大学生高达76.74%。
■我国是近视眼的患病大国,1995年的调查显示有3亿人患有近视眼,占世界近视眼病人的33%,其中病理性近视眼超过200万人。
■一些资料显示,女性的近视眼发病率要高于男性。东方人、犹太人较多,而黑人较少。城市明显高于农村,与社会经济发展水平、职业、教育水平等亦存在联系。
●大城市近视率越来越高
近视眼是一种最常见的屈光不正,人们对它的认识已经有几千年历史了。随着现代社会的文明化进程,近视眼的发病率不断增长,成为当今世界范围内发病率最高的一种眼病,WHO已把它列入亟待解决的可致盲性眼病之一。
对近视的成因,现在有很多种说法,但比较公认的原因是与长时间的近距离工作密不可分,这样可以导致睫状肌在极度调节的状态下工作,初期可以成为调节性近视(就是一般说的假性近视),不能缓解后就发展成为病理性近视。也有人认为黄种人的基因对近视的易感性比较高。现在已经筛查到了很多基因突变点,但对近视的真正成因还没有定论。
在城市,大家把很多精力花在近距离阅读上,近视眼的发生率越来越高,上海、北京等大中城市近视率可达50%-60%,在医学院校,近视率甚至高达70%-80%,小学3、4年级的近视率也达到30%-40%。
在大都市中,我们依赖的信息大多来自书本、网络,可以说,90%的信息是依靠近距离阅读而获取的。所以视力依赖于近距离阅读,由于生活方式的改变,对近距离阅读的进一步依赖,要适应这样的生活方式,人就产生了新的所谓的现代文明病———近视眼。
●应正确看待近视眼
现在很多人对于近视眼还有误区,一旦近视了就被认为眼睛有毛病。
其实,西方人对待近视眼非常坦然,因此西方国家对近视的关注度没有亚洲国家来得高。西方人对戴眼镜看得很平常,甚至没把近视当病,把戴眼镜当做戴帽子、打伞一样自然。而东方人就不一样了,有些人觉得戴了眼镜就不完美了,与众不同了,很难接受。
怎样正确看待近视眼这个问题呢?近视眼是一种生活方式关联性疾病,是人类为了适应现代生活方式采取的一种适者生存的进化,你为了应付近距离工作,必须要有很好的近距离阅读能力,但适应性过度了就造成了疾病。
为了揭示近视眼对人们生活的影响,各国的眼科学家分别进行了近视眼的流行病学调查。结果发现近视眼的发病率在不同人群、地区和种族之间存在着较大差异。
我国是近视眼的患病大国,1995年的调查显示有3亿人患有近视眼,占世界近视眼病人的33%,其中病理性近视眼超过200万人。
一些资料显示,女性的近视眼发病率要高于男性。东方人、犹太人较多,而黑人较少。城市明显高于农村,与社会经济发展水平、职业、教育水平等亦存在联系。
美国约25%的成人有近视眼,全美国每年用于近视眼检查和矫正的费用是46亿美元。中国尚未见此方面的报告,但由于中国的人口和近视眼的患病率都远远高于美国,尤其是北京、上海等大城市人口密度大,近视眼的发病率高,加上每年医疗费用的递增,估计在中国用于近视眼检查和矫正治疗的费用也会远远超过美国。由此可见,近视眼对我们的工作、生活和经济产生着越来越大的影响。近视眼的防治研究工作也显得越来越重要了。
●遗传并非近视决定因素
我们常把近视眼分为单纯性近视和病理性近视,病理性近视常伴发视网膜疾病、白内障及青光眼等各种合并症从而严重影响视功能。
近视眼是不是可以遗传?目前,说法很多。但是近视眼发病率的种族差异从侧面提示,近视眼是一类和遗传有关的眼病,特别是病理性近视大多具有家族遗传性。
有研究显示,父母单方或双亲均有近视眼病史的观察对象比无近视的父母的观察对象具有更高的近视眼易感性。也就是说,高度近视者的子女是近视的高危人群。
大于600度的高度近视眼遗传倾向比较大,父母高度近视的人是近视发病的高危人群。可以说,在父母双方都是高度近视的情况下,小孩又有近距离阅读的环境,他发生近视的几率就会大大高于其他人。相比起遗传因素来说,生活方式对近视的影响更大。
●儿童屈光不正可能来自胎儿时期
人在刚出生时眼球是扁的,几乎百分之百都是远视眼。随着人的长大,眼球逐渐被拉长,变成正视眼,长过头的就成了近视眼。而不少眼球拉过头造成的近视眼,是由于现代人普遍运动少,从怀孕时期起,就已经被种下祸根,成长期又被进一步恶化。
从前准妈妈怀孕时,大多一直劳作到临盆前,而现在的准妈妈比较娇生惯养,在孕期就坐着不动,长时间躺在床上,缺乏活动,一方面会使婴儿发育不良增多,同时准妈妈不良的体质也可能遗传给下一代。
根据统计,出生时体重小于2500g的小样儿和早于7个半月的早产儿,其眼球更易缺氧,在青春期的近视率会比正常孩子高出近3.6倍。同时,准妈妈的少动,以及现代独生子女的缺乏锻炼,使得孩子的眼球晶体弹性减弱,在发育过程中,眼球容易长过头而发生近视。
在屈光不正高发的情况下,要尤其注意预防青少年的屈光不正,一旦发现儿童看物体的姿势古怪,家长最好尽快送去医院检查。
孩子的古怪看姿主要有如下3种:1、歪头斜脑看东西。2、眯着眼睛看物体。3、冲着头看东西。一旦发现上述情况,家长应尽快带孩子去做瞳孔放大验光检查,确定孩子是远视、近视还是散光,并尽早在医生指导下治疗,不能轻信虚假的医疗广告。
●夜间灯光可导致青少年近视率升高
视觉环境与近视眼有密切关系。我国近视的发病率位居世界之首。最近的一份调查显示:我国小学生的近视发病率为22.78%,中学生为55.22%,而大学生高达76.74%。
青少年近视的发生除部分是由于父母亲有高度近视的遗传外,大部分还属于用眼不当所造成,尤其是与近距离工作有关,如照明不足、阅读距离过近、阅读时间过久、字体不清或过小以及姿势不良等都与近视的发生、发展有关。
都市内缺少可以提供给青少年极目远眺的环境。而且,在城市中,由于马路、公用设施等建筑物,常彻夜通明,改变了光线的自然节律性的昼夜变化。城市中并没有真正的“黑夜”。已有大量的研究表明,光线的明亮程度可以明显地干扰动物的生物节律,干扰人体松果体内褪黑激素的分泌。并有试验证明在夜间开灯睡眠的孩子中,近视眼的发病率高。
我国著名学者胡诞宁教授在八十年代中期,对我国青少年进行过近视眼的流行病学调查,表明近视眼的发生与学生课业负担过重、近距离用眼具有明显的关系。。
●单纯近视并不可怕
单纯性近视并不可怕,你只要戴眼镜,如果有特殊工作需要,就戴隐形眼镜,甚至做准分子激光手术都可以。麻烦的是中高度近视,即近视发展到一定程度,引起眼轴变长,视网膜、脉络膜发生变性的时候,就进入病理性近视,带来视网膜脱离、眼底出血、玻璃体液化后脱离等后果,甚至失明。所以中高度近视不得不成为老百姓和眼科工作者高度关心的问题。
没有近视眼家族史和其他遗传性危险因素的近视儿童,成年后大多只发展成为中度近视,但是那些具有危险因素以及近视眼的进程发展较快的儿童则很可能将受到高度近视和病理性近视的困扰,因此对这一部分人群的治疗和干预就显得尤为重要。人类预防和阻碍近视眼的努力已经持续了几个世纪,但有关用眼卫生、眼部保健操、某些滴眼液和仪器的使用多只能起到微弱的作用,而且对病理性近视无效。
●近视矫正需正视
家长给孩子验光后,发现有了200°的真性近视,但家长不让孩子配眼镜,认为一戴上眼镜,度数就会越来越深。有的老师为让孩子看得清楚,也会把孩子的座位从后排换到前排,还有的人时戴时不戴,这些行为都是错误的,会影响到孩子的视觉发育,除了会导致近视加重,还会发生斜视、弱视。
我认为,戴眼镜是矫正视力较好的方法。因此,一旦发现孩子得近视眼了,就应戴上眼镜矫正视力。
手术矫正近视眼成为很多希望摘掉眼镜的病人新的选择,但并非通过手术治愈了近视眼。值得注意的是手术后虽然视力得到了提高,但近视眼的并发症的可能依然存在。近十年来角膜屈光手术已广泛应用于矫正视力,对于这些手术的适应范围、长期效果随访和安全性的评价还多在进行中。我个人的态度是既不提倡也不反对。
●戴隐形眼镜要关注透氧率
戴了隐形眼镜后,会出现一些问题。如角膜缺氧,角膜原先是靠直接从空气中摄取氧气来呼吸的。现在,你在上面盖了一层东西,虽然氧气还是能通过,总是变少了。根据研究,大多数人戴了隐形眼镜后,角膜能使用的氧气,只剩下原来的三分之一。那怎么办呢?身体对抗局部缺氧的方法,就是增加局部血流量(让血管扩大),或者是长新血管,好让血液能把氧气和养分多送一点过去。就好像如果要增加公路的运能,一是拓宽,一是新建。结果,不管是血管扩张或是长出新血管,所谓的“红丝”(就是血管)就变得明显可见了。
戴隐形眼镜还会出现结膜发炎。软式隐形眼镜上的蛋白质过敏、隐形眼镜本身造成的慢性外物刺激、洗眼镜的药水、杀菌的药水、附在隐形眼镜上没被杀掉的细菌、霉菌、阿米巴等都会引起结膜的发炎反应。一发炎,红、肿、热、异物感、痛、分泌物都会出现。
●激光治近视有“禁区”
“三十秒摘掉眼镜”,对患有近视的人来说总是显得特别具有诱惑力,但并不是所有患有近视的人均可进行准分子激光手术,它对治疗对象的选择有严格要求。
部分近视眼患者往往会伴有一些眼底病或其他眼病,他们并非适合准分子激光手术。根据上万例手术资料统计,在前来进行准分子激光治疗的近视患者中约有10—15%不适合该手术。如果勉强接受手术,术后早期视力可能也很理想,但在1至2年后就可能出现诸多并发症,如视网膜脱离、圆锥角膜等,严重损害视力健康。
对于术后视力情况,除了少数先天条件较好的近视患者外,并不像有些宣传那样人人都可以恢复至1.5视力。根据近几年的上万例手术记载:85%的近视患者术后第一天视力可达到0.8以上,90%在术后一周达到1.0以上,98%在术后三个月达到1.0以上。专家建议,近视患者选择激光治疗近视时,应到眼科实力强的医院进行,进行准分子手术前,最好先了解一下医院的设备、成像质量的检验仪器、手术先进程度,再予以选择。不要轻信广告,务必要了解手术可能存在的风险,成功率不是100%,而术后裸视1.0也不代表成像好、看物体会清楚。同时,术前进行全面系统的检查,以选择合适的治疗方法。只有这样,手术的安全性才能得到充分保证。当然,矫正视力最好的手段还是戴眼镜。
进行准分子激光手术对象条件·年龄18-55周岁;·近视2000度、散光800度、远视800度以内者;·近2年内近视度数稳定;·镜片最佳矫正视力0.5以上(高度近视眼底病变者视力在0.3以上);·经全面专业检查,无眼部炎症、青光眼、视网膜脱离、糖尿病等眼部和其它影响手术的身体疾病;·戴软性隐形眼镜者须停戴3天以上,戴硬性隐形眼镜者须停戴2周以上;·有接受治疗愿望而无不切实际的期望者。
■眼睛保健全攻略
●创造眼睛保健的环境
要创造一个适合眼睛保健的小环境,提供望远的机会,让睫状肌有松弛的可能。
像北京、上海这些城市,在家面对电视机是近距离,在办公室也是近距离对着电脑,出门楼对楼还是近距离,这样的环境对眼睛保健不利。
工作中应注意改善工作环境和调整工作方法,办公室应保持通风和一定湿度,工作注意适当休息,每工作1—2小时休息10—15分钟(闭眼或向远方注视)。工作时注意调整好显示器高度,并将键盘靠近显示器,这样可以缓解眼疲劳和眼干症状。
在夜间看电视时,最好在电视机的背侧开一盏灯,在15瓦-30瓦左右,灯光要柔和,这样能起保护眼睛的作用。
●选择眼药水学问大
眼药水有非处方用药和处方用药。一般来说,即使是保健型的眼药水也不能经常点,而且不能点很长时间,因为里面有一些防腐剂,长时间使用对眼睛不利。所以挑选眼药水的时候要注意看说明书,上面是否写了含有防腐剂。
治疗性的眼药水就更得在医生的指导下使用了,随着人们健康保健意识的提高,在大多数居民家中,可能都备有一到两种眼药水,用于“消疲劳”或者“消炎”。殊不知,眼科疾病千变万化,仅凭外眼的观察而不能把握病的根本就随意用药,常可祸害终身。如“红眼”可能是结膜炎,也可能是角膜炎、角膜溃疡、结膜下出血、急性虹膜睫状体炎,也可能是急性闭角型青光眼。
有一些眼痒或者慢性结膜炎的患者,因视力无碍,便自行到药店买药,药店工作人员并非眼科医生,也并不完全知道病人的用药时间长短,便根据病人需要给药,就这样,一大批的“皮质类固醇性青光眼”就产生了,而且,这种类型的青光眼往往不易及时发现,至晚期才被确诊为青光眼,此时,损害的视力已无可挽回。
我建议,在目前的医疗条件下,家庭中没必要备有眼科用药,有眼部问题出现,应及时找眼科医生进行咨询或者诊治,即使家庭中备有药物或需长期使用,也应不定期地进行眼科咨询。
我记得曾有一位八十岁老翁,曾因“眼红”在医院开了一瓶妥布霉素,3天后好转了。3个月后,再次眼红,便如法炮制,继用此药,3天后“中风”了,此时的“眼红”非彼时“眼红”,是结膜下出血,这是高血压脑出血的一个先兆。
●点眼药水的正确方法也必须普及
我觉得正确的点眼药水的方法是一个必须普及的知识,不正确的点滴方法可能会给我们带来很多问题。
点眼药水以前一定要洗手,最好是躺着点,打开眼药水以后第一滴眼药水不要使用,可以用第一滴眼药水把瓶口可能存在的污染物给冲洗掉。然后用食指拉开下眼睑,眼睛往上看,把眼药水滴在下眼睑的沟槽里面,千万不要把眼药水直接点在黑眼珠上。点完后还要用手轻轻拉一下上眼皮,这样可以使眼药水均匀地涂抹在眼睛表面。最后还要记住点完药水要用棉签放在眼内眦处挤压3-5分钟。
这样做因为眼睛和鼻腔是相通的,而且正好是在眼角处相通,如果不按压住眼角,滴入的眼药水很快就会到达鼻腔、喉咙。通常一次点一滴眼药水就足够了。点药水时往往会长期保持一种固定的体位,时间长了也会引起身体不适。
●吃好也能防眼病
民间有“吃什么补什么”的说法,虽然并无什么科学道理,但眼睛是一个高耗能、高耗氧的器官,所以我们一日三餐都应该保证健康的饮食,包括有蛋白质、淀粉、脂肪、维生素、微量元素等,比例要合适。
在肝脏、蛋黄、胡萝卜里面含有大量的维生素A,对于因为缺乏维生素A而导致眼病的人来说,吃一些这类食物肯定是对眼睛有帮助的。对于老年患者来说可多吃一些水果,由于水果里面含有很多维生素C、D、E,在抗氧化和抗老化方面有一定作用。枸杞子有养肝明目的作用,长期服用对眼睛保健是有益的。美国已有实验室专门在研究枸杞子、银杏等植物对眼睛的帮助。
从中医的角度来说,蛇胆有清肝明目的作用,但是这种明目作用是需要用辩证的观点来看的,还要跟其它药物放在一起协同发挥作用,且需要的时候才能吃。
我不主张眼睛不好的人靠吃蛇胆这种东西来达到明目的作用。胆汁应该是入药以后再食用,像南方有些地区吃新鲜的胆是很危险的,有可能感染疾病。
●远离烟酒危害
据研究,在烟气中含有750多种化学成分,其中包括许多有毒物质。通过对动物实验和临床病人的观察,这种有毒物质能直接影响眼部组织新陈代谢功能,发生双眼无痛性、进行性视力减退、色觉障碍等。长期吸烟者,尤其是同时伴有饮酒过量或者营养不良者,将会形成烟草中毒性弱视。
抽烟还可引起眼压升高,有研究表明,在青光眼患者中,抽一支烟即引起眼压升高超过5mmHg者达37%。在正常人中,抽一支烟仅有11%的人眼压升高超过5mmHg。因此,有青光眼病史或者家族史者,应尽量避免抽烟。
酒精可使血管痉挛,加上心情兴奋促进痉挛加重、血压升高,糖尿病、高血压的病人,由于存在不同程度的动脉硬化,血管更容易破裂,导致视网膜出血。如果出血发生在后极部可使视力极度下降,发生在黄斑部则会导致失明。另外,长期过量饮酒,特别是经常大量饮烈性酒,可引起消化吸收功能减退,体内维生素B族缺乏,出现结膜炎、视神经炎,发生视力障碍和视野缺损。
当然少量饮酒也会对眼睛有好处,可能具有所谓“活血”的功能。已有研究证实,饮酒可以导致暂时性的眼压下降,尤其对青光眼患者,下降幅度更大。
●不当饮食引发眼部炎症
我们发现,一些刺激性的食物,如辛辣食物可以成为眼部“麦粒肿”和“急性泪囊炎”的诱因。而一些海鲜类的食物,可能与葡萄膜炎发生和复发密切相关。因此,对有葡萄膜炎病史,尤其是复发性葡萄膜炎患者,应注意节制自己的饮食习惯。
老人中有25%到40%的人患有慢性结膜炎。喝酒后眼部血管扩张充血,球结膜充血,造成眼睛干涩难受。所以结膜炎患者要注意少饮酒,并少吃辛辣食物。
对于老年人,尤其是具有糖尿病、高血压等心脑血管疾病高危因素的患者,建议多吃素食,因为油腻食物,容易使血粘稠度增加,形成血栓,进而可导致视网膜中央动脉或中央静脉阻塞。
对于开角型青光眼,尤其是目前被医学上诊断为正常眼压性青光眼的患者,更应以无脂饮食和素食为主,无脂饮食不仅可以降低眼压,还可以改善眼局部血流状态。有研究表明,茶水一般不引起眼压升高,但咖啡可导致短暂的轻度的眼压升高,海洛因和大麻却可以降低眼压。
由于糖分在体内的代谢需要大量的维生素B1,并降低体内钙的含量,维生素B1的缺乏会加剧近视程度,而钙量减少会使眼球壁弹力减弱,促使近视的发展。
●情绪影响眼睛
我们常在历史小说或电影中看到,过度的悲伤、抑郁或者情绪的大起大落之后,常可导致一夜“暴盲”。现在,我们知道所谓“一夜暴盲”可能是“急性的视网膜中央动脉阻塞”,伴有剧烈头痛者则可能为“急性闭角型青光眼”。这两种疾病,是眼科最重的急症,发病急,数小时内即可导致不可逆转性失明。中国人的眼轴相对较短,易诱发此病。
因此建议年龄在40岁以上的人群,一方面应定期进行眼科检查,另一方面,如果发现自己存在心理问题,要及时地通过各种方法进行心理状态的调整。一旦发病,还要争分夺秒地到就近的大医院进行就诊。当然,对于老年人来说,除了定期进行眼科检查外,还要注意避免一次性长时间地近距离用眼和低头作业。
●运动能减缓眼病
运动可以降低血压,防治冠心病、糖尿病等,那么运动对眼病会带来什么影响呢?运动对视功能的影响,未见确切的报道,但一篇文章报道了3名晚期青光眼患者出现了运动时视力下降,两名患者运动前后有完整的眼科检查资料。2名患者的中心视力、中心凹的光敏度及视野具有明显的下降,但运动停止后完全或者几乎完全恢复。
对于青光眼患者,进行适当的跑步运动,可以至少相当于少一种降眼压药物。但是青光眼病人不能进行举重和“蹲马步”,两者都可使眼压升高,甚至导致球结膜出血和视网膜的出血。另外,体位倒立锻炼,可导致眼压升高。特别是晚期青光眼的病人,应该限制活动量。
●外出时的眼部防护
随着环境污染加重,大气层中臭氧遭到破坏,紫外线辐射增强。已经证实,老年黄斑变性和白内障的发生、发展均与紫外线照射有关。老年性黄斑变性目前在治疗上尚无理想措施,是美国等发达国家的首位致盲眼病。
老年性白内障虽然手术摘除技术相当成熟,术后可以获得较理想的视敏度,但调节力差,影响生活质量,而且面临手术的可能风险。因此,外出到南方或者高原地区,应配戴防护镜。还应避免较长时间暴露于强日光照射环境或者看日食,以免引起日照性视网膜炎。
随着人们生活水平的提高,冬季来临时,户外滑雪等活动也越来越普遍,也应注意眼睛的防护,避免雪地的紫外线损害视网膜,形成所谓“雪盲”。
●高度近视至少三个月检查一次
高度近视应格外重视眼睛保健,除了上述谈到的保健方法之外,还要特别注意避免一些体育项目。高度近视的人绝对不能进行跳水运动,还应避免做举重等负重性的运动,避免剧烈碰撞也同样重要,否则都会导致视网膜脱离。
很多高度近视的人平时从不去医院检查,相当一部分人只有当出现眼部异常症状时才会去医院,这是要特别指出的。正确的做法是:至少每隔三个月做一次眼科检查,出现症状时要随时检查。
在“爱眼日”到来之际,我们提议每个人都应当关心自己的“视觉健康”问题,不要等到出现问题了才去关注。通过改善不良生活方式,完全可以大大减少眼部疾病的发生率。(记者 陈里予 崔颖录音整理)
《新闻晨报》2004年6月7日
May 16 历届Jolt获奖图书Year: 2005 16th
BOOKS GENERAL Jolt Winner: Prefactoring by Ken Pugh (O'Reilly)
Productivity Winners:
Innovation Happens Elsewhere: Open Source as Business Strategy by Ron Goldman, Richard P. Gabriel (Morgan Kaufmann) Producing Open Source Software: How to Run a Successful Free Software Project by Karl Fogel (O'Reilly) The Art of Project Management by Scott Berkun (O'Reilly) BOOKS TECHNICAL
Jolt Winner: Agile Web Development with Rails by Dave Thomas, David Hansson, Leon Breedt and Mike Clark (Pragmatic Bookshelf)
Productivity Winners:
Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries by Krzysztof Cwalina and Brad Abrams (Addison-Wesley) Practical Common Lisp by Peter Seibel (Apress) Why Programs Fail: A Guide to Systematic Debugging by Andreas Zeller (Morgan Kaufmann) Year 2004 Books: General Jolt Winner: -- Head First Design Patterns by Elisabeth Freeman, Eric Freeman, Bert Bates and Kathy Sierra (O'Reilly) Productivity Winners: -- Joel on Software by Joel Spolsky (Apress) -- Refactoring to Patterns by Joshua Kerievsky (Addison-Wesley Professional) -- Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools by Jack Greenfield, Keith Short, Steve Cook, Stuart Kent, John Crupi (Wiley) Books: Technical
Jolt Winner: -- Better, Faster, Lighter Java by Bruce A. Tate and Justin Gehtland (O'Reilly) Productivity Winners: -- C++ Coding Standards: 101 Rules, Guidelines, and Best Practices by Herb Sutter and Andrei Alexandrescu (Addison-Wesley Professional ) -- Hibernate: A Developer's Notebook by James Elliott (O'Reilly) -- Java Developer's Guide to Eclipse, Second Edition by Jim D'Anjou, Scott Fairbrother, Dan Kehn, John Kellerman, Pat McCarthy (Addison-Wesley Professional) Year 2003 14th
Books - General Jolt Award: Waltzing with Bears: Managing Risk on Software Projects by Tom DeMarco and Timothy Lister (Dorset House) Productivity Award: The Art of UNIX Programming by Eric S. Raymond (Addison-Wesley) Productivity Award: Lean Software Development: An Agile Toolkit by Mary Poppendieck and Tom Poppendieck (Addison-Wesley) Productivity Award: Pragmatic Starter Kit by Dave Thomas and Andy Hunt (The Pragmatic Programmers) Books - Technical
Jolt Award: Test-Driven Development: A Practical Guide by David Astels (Prentice Hall) Productivity Award: About Face 2.0 by Alan Cooper and Robert Reimann (Wiley) Productivity Award: Agile Database Techniques: Effective Strategies for the Agile Software Developer by Scott W. Ambler (Wiley) Productivity Award: Code Reading: The Open Source Perspective by Diomidis Spinellis (Addison-Wesley) Year: 2002 Books, Practical/General Developer Interest Jolt Award: Agile Software Development: Principles, Patterns and Processes, Robert C. Martin Productivity Awards: Documenting Software Architectures: Views and Beyond by Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Robert Nord and Judith Stafford; Patterns of Enterprise Application Architecture by Martin Fowler; Test-Driven Development: By Example by Kent Beck. Books, Technical
Jolt Award: Thinking in Java (3rd edition) by Bruce Eckel Productivity Awards: Core Java 2, Vol. 1: Fundamentals (6th edition) by Cay Horstmann and Gary Cornell; PHP and MySQL Web Development by Luke Welling and Laura Thomson; Understanding Web Services by Eric Newcomer. Year: 2001 JOLT WINNER: Effective Java, by Joshua Bloch, published Addison-Wesley House
PRODUCTIVITY AWARDS: Agile Software Development by Alistair Cockburn, published by Addison-Wesley Software Craftmanship by Pete McBreen, published by Addison-Wesley Under Press and On Time by Ed Sullivan, published by Microsoft Press Year: 2000 JOLT WINNER: Adaptive Software Development, by James A. Highsmith III, published by Dorset House
PRODUCTIVITY AWARDS:
Don't Make Me Think! A Common Sense Approach to Web Usability by Steve Krug, published by New Riders Publishing
Secrets and Lies by Bruce Schneier, published by John Wiley & Sons Writing Effective Use Cases by Alistair Cockburn, published by Addison Wesley Longman Year:1999 JOLT WINNER: Software for Use: A Practical Guide to the Models and Methods of Usage Centered Design, by Larry Constantine and Lucy Lockwood (Addison-Wesley)
PRODUCTIVITY AWARDS:
Extreme Programming Explained: Embrace Change, by Kent Beck (Addison-Wesley)
Software Requirements, by Karl E. Wiegers (Microsoft Press) After the Gold Rush: Creating a True Profession of Software Engineering, by Steve M. McConnell (Microsoft Press) Year:1998
JOLT WINNER: Component Software—Beyond Object-Oriented Programming, by Clemens Szyperski (Addison-Wesley)
PRODUCTIVITY AWARDS: Anti-Patterns: Refactoring Software, Architectures, and Projects in Crisis, by William J. Brown, Raphael C. Malveau, Hays W. McCormick, and Thomas Mowbray (John Wiley & Sons)
Software Architecture in Practice, by Paul Clements, Rick Kazman, Ken Bass and Len Bass (Addison Wesley Longman) Thinking in Java, by Bruce Eckel (Prentice Hall) Year:1997 JOLT WINNER: Object-oriented Software Construction, by Bertrand Meyer (Prentice Hall)
PRODUCTIVITY AWARDS: The Deadline: A Novel about Project Management, by Tom DeMarco (Dorset House Publishing)
UML Distilled (Addison Wesley Longman) Building Object Applications That Work, by Scott Ambler (SIGS Books) Year:1996 JOLT WINNER: Rapid Development, by Steve McConnell (Microsoft Press)
PRODUCTIVITY AWARDS: Creating a Software Engineering Culture, by Karl Weigers (Dorset House Publishing Co.)
Pattern-Oriented Software Architecture, by Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal(Wiley Computer Publishing) The Essential Distributed Objects Survival Guide, by Robert Orfali, Dan Harkey, and Jeri Edwards (Wiley Computer Publishing) Year:1995 JOLT WINNER: Thinking in C++, by Bruce Eckel (PTR Prentice Hall Inc.)
PRODUCTIVITY AWARDS: About Face: The Essentials of User Interface Design, by Alan Cooper (IDG Books Worldwide Inc.)
A Discipline for Software Engineering, by Watts Humphrey (Addison-Wesley Publishing Co.) What Every Programmer Should Know About Object-Oriented Design, by Meilir Page-Jones (Dorset House Publishing) Year:1994
JOLT WINNER: Essential Client/Server Survival Guide, by Robert Orfali, Dan Harkey, and Jeri Edwards (Van Nostrand Reinhold).
PRODUCTIVITY AWARDS: Debugging the Development Process, by Steve Maguire (Microsoft Press).
Design Patterns, by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (Addison-Wesley Publishing Co.). The Design and Evolution of C++, by Bjarne Stroustrup (Addison-Wesley Publishing Co.). Year:1993
JOLT WINNERS: Code Complete, by Steve McConnell (Microsoft Press).
Object-Oriented Design and Analysis with Applications, 2nd Edition, by Grady Booch (Benjamin/Cummings Publishing Co.) PRODUCTIVITY AWARDS: Applied Cryptography, by Bruce Schneier (John Wiley & Sons).
Programming on Purpose, Vols. I and II, by P.J. Plauger (PTR Prentice Hall). Writing Solid Code, by Steve Maguire (Microsoft Press). Year:1992 JOLT WINNERS: Undocumented Windows, by Andrew Schulman, David Maxey, and Matt Pietrek (Addison Wesley Publishing Co.).
Decline and Fall of the American Programmer, by Ed Yourdon (Yourdon Press) PRODUCTIVITY AWARDS: Object-Oriented Software Engineering: A Use-Case Driven Approach, by Ivar Jacobson, Magnus Christerson, Patrik Jonsson, and Gunnar Overgaard (ACM Press).
Liter Programming, by Donald Knuth (Stanford University Center for the Study of Language and Informaiton). Effective C++, by Scott Meyers (Addison Wesley Publishing Co.). Year:1991 JOLT WINNER: Object-Oriented Design with Applications, by Grady Booch (Benjamin/Cummings Publishing).
PRODUCTIVITY AWARDS: Advanced C++: Programming Styles and Idioms, by James Coplien (Addison Wesley Publishing Co.).
Object-Oriented Modeling and Design, by James rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy, and William Lorensen (PTR Prentice Hall). Object Lifecycles: Modeling the World in States, by Sally Shlaer and Steve Mellor (Addison Wesley Publishing Co.). Year:1990 JOLT WINNER: Annotated C++ Reference Manual, by Margaret Ellis and Bjarne Stroustrup (Addison Wesley Publishing Co.).
PRODUCTIVITY AWARDS: The Art of Human-Computer Interface Design, Edited by Brenda Laurel (Addison Wesley Publishing Co.).
Programming Windows, 2nd Ed., by Charles Petzold (Microsoft Press). Turbo C++ DiskTutor, by Greg Voss and Paul Chui (Osborne McGraw-Hill). 好多经典书籍~,计划网上购买几本,当然买之前都得先预览预览电子版本,hei~ 相关连接:The 16th Annual Software Development Jolt Product Excellence Awards
May 11 仙剑诗词集仙剑三: 1. 星沉月落夜闻香 素手出锋芒 前缘再续新篇 心有意 爱无伤
江湖远 碧空长 路茫茫 闲愁滋味 多感情怀 无线思量
2 大梦初醒已千年 凌乱罗衫 料销风寒 放眼难觅旧衣冠 疑真疑幻 如梦如烟
看朱成碧心迷乱 莫问前生 但惜因缘 魂无归出为情牵 贪恋人间 不羡神仙
3 身世飘零叹孤独 回顾盼相扶 雷霆易逝 雨过云舒
相思不忍轻离别 携手更如初 风急波涌 扁舟不系 终恋江湖
4 碧水连天净无浪 转东风 滟纹微涨 个中趣 莫遣人知 年年日日 兰舟共上
平生书癖已均恙 解名缰 更逃羁网 春近也 梅柳频看 花间闲度 细雨流光
5 情眷恋 古往今来相看 几度流光人更远 伤离方寸乱
回梦空传幽怨 依旧尘缘未断 碧落黄泉寻觅遍 愁来天不管
6 纷纷雪落人飘坠 同生死 共玉碎 前尘后世君莫问 愁肠百结如醉 情丝未断 尘缘难了 萦绕千千岁
舍却残生犹不悔 身已空 尽成泪 路长梦短无寻处 总是情愁滋味 眉间心上 柔肠百结 尽付东流水
7 弃剑封刀 大隐归闹市 自觉逍遥 断江湖旧梦 任六界风飙 金窗绣户看妖娆 情丝暗生 心事难描 佳期晚 怕流年暗消年少
春到 人未老 回首仙家 自是人间好 旧雨新知 两难分付 别有一丝烦恼 几度轮回误尘缘 换巢鸾凤教偕老 羡鸳鸯 纵千金难买一笑
May 10 time to plan 颓废,不知道做什么好。
什么技术都很诱惑,好多书都很不错,到底精通哪一样,到底以后要干什么。 虽然有个考研的目标,却迟迟未开工。
薪金不多,确实做的事情也不算多;空闲时候太闲,忙的时候太忙;做测试,我不适合,用的地方不对,那该是怪谁呢?怪你的程序不够好,怪你没文档,怪你。。。
有改好程序的想法,却常常因为个人懒惰和杂乱无章的民工代码和“改出问题了谁负责“而退步,那你学的重构学的设计模式拿来干吗?
似乎做的项目都不值钱,那学到的东西多吗? 好想知道魔兽争霸是怎样炼成的。。。
缺乏毅力,缺乏魄力,有时还缺乏自信,缺乏热情。
Abstraction,Flexibility,Extensiblity,你的项目有吗?真的还差得很远
你能够很自豪的说:"oh,that's my baby!" 吗?
放弃不现实的杂念,如果计算机软件真是你的兴趣和热情所在,那么请也热情的付出、明智的付出。
计划下半年:
unix,永远的unix,大师们都是从这里出来的. shell,grep,sed,awk 工作自动化
perl,windows下的文本和自动化工作交给你了。
c++,我还是那么爱你,stl,我一直都想看懂你的魔法
Xerces,开源项目研究主题
ews,如果时间允许,你会变得更优雅。如果时间允许,你会有更多好的管理特性加入
编译原理,我很后悔大学没好好的学习你,再次学习你还是因为考研。高数,重新拾起的感觉应该还好吧? 政治,永远都是那么不想看到你却又无可奈何。英语,补补单词就够了。
数据库原理,还记得第三范式吗?
Pattern and Refactor,设计短路的时候会想起你们的。。。
想学却觉得没时间的
Direct X : 好久以前的一个Tower of Sorceres 梦, 玩游戏就是在想这是怎么做的,真棒!
Hibernate: 面向对象主义者, 如果C++上能够有的话。。。
CSS: 其实也想有个个人主页
please reference onenote notebook for detailed plans.
March 27 XML Attribute vs Child ElementAttributes are used to provide additional information about elements. Attributes often provide information that is not a part of the data. Attribute values must always be enclosed in quotes, but either single or double quotes can be used. There are no rules about when to use attributes, and when to use child elements. But use child elements if the information feels like data. Prefer storing data in child elements to attributes. Some of the problems with using attributes are:
If you use attributes as containers for data, you end up with documents that are difficult to read and maintain. Try to use elements to describe data. Use attributes only to provide information that is not relevant to the data. metadata (data about data) should be stored as attributes, and that data itself should be stored as elements.
March 26 Eliminate the Gap Between Xerces-C and Xalan-C 这几天是1个多月来电子工单项目最闲的时候, 也有时间研究Apache的Xerces-C和Xalan-C,准备用到项目里面,用于通信格式的基础和配置文件等.
以前做windows的开发,觉得portable没什么用,但是逐渐发现portable,platform-independent是多么美好,我可以在windows用习惯的工具开发测试好了,再放到服务器上测试~, 因此决定好好研究Xerces-C.它支持的平台也包括了hp-ux,正好是项目所需. 公司领导估计是比较反对这些, 我可不管了, 看着ews_getprofilestring好烦, 换成configuration.getString多好,:).
Xerces-C自带的例子很多,从CreateDOMDocument到SCMPrint,应有尽有~,只看了DOM相关的,毕竟使用起来顺手点.很多方法名称都很熟悉,因为它是首先是完全遵从w3c DOM标准. 从读取文件解析,内存字符串解析,保存等都测试后,发现少了一个很重要的东西,XPath,于是满工程的搜索,倒是找到了evaluate等和Xpath相关的方法,不过一看源代码,简单的抛出not support的exception, -_-. 看来还是得去用xalan-C,真有点不明白为什么把xpath的功能写到了xalan里面和xslt混在一起, 还有专门的为了重用xerces-c的一大把的类.
xalan-c中使用xpath也很简单直观,只是用的不是DOMDocument,而是XalanDocument,追溯到顶层父类分别为DOMNode和XalanNode,但是两者没有任何关系.麻烦了,我想要的功能是用dom解析xml文件,使用 xpath方便的定位节点,修改节点值,并且再保存回去. 但是xalan里面却始终找不到一个象DOMWriter方便的类,并且XalanNode不能调用setNodeValue的方法.,再想到xalan本身也是用了xerces解析xml的,于是搜索工程,找出了XalanNode的所有派生类,果然... 分成了2批,一批是和xslt相关的,另外一批是和dom联系的, 例如XercesElementWrapper等等,里面的实现中对多数方法都是直接抛出异常,而对少量只读属性的方法做了特殊实现. 好了,再在SourceInsight强大功能帮助下,翻出了两者之间联系的根源,xalanNode的派生类XercesXXXWrapper都会和每一个domnode的对象相联系, 获取的方法是 强制转换为对应的XercesXXXWrapper类调用getXercesNode方法的setNodeValue就可以了,而建立它们联系的类就是XercesDOMWrapperParsedSource . 下面是使用的方法:
void testXalanBridge(DOMDocument * pDocument)
{ printDOM(pDocument); XPathEvaluator::initialize(); XercesDOMSupport theDOMSupport; XercesParserLiaison theLiaison; XercesDOMWrapperParsedSource wrapper(pDocument,theLiaison,theDOMSupport); XalanDocument* const theDocument = wrapper.getDocument(); // namespace prefix, if needed..
XalanNamespacesStack xns(*(XMLPlatformUtils::fgMemoryManager)); xns.pushContext(); xns.addDeclaration(XalanDOMString("ex"),XalanDOMString("www.exme.com")); XalanNamespacesStack::PrefixResolverProxy thePrefixResolver(xns,XalanDOMString("www.exme.com")); XPathEvaluator theEvaluator;
XalanNode * theContextNode = theEvaluator.selectSingleNode(theDOMSupport, theDocument, XalanDOMString("/").c_str(), thePrefixResolver); if( theContextNode )
{ cout<<theContextNode->getFirstChild()->getNodeName()<<endl; NodeRefList lst; theEvaluator.selectNodeList( lst, theDOMSupport, theContextNode, XalanDOMString("ex:company/category/text()").c_str(), thePrefixResolver ); for( int i = 0; i < lst.getLength(); ++i ) { XalanNode * pNode = lst.item(i); cout<<pNode->getNodeName()<<" - "<<pNode->getNodeValue()<<endl; DOMText * pText = const_cast<DOMText*> (((XercesTextWrapper*)pNode)->getXercesNode()); pText->setNodeValue(XalanDOMString("like a shit").c_str()); } } else { cout<<"error selectSingleNode"<<endl; } // print again, in order to compare the result
printDOM(pDocument); XPathEvaluator::terminate(); } 第一次printDOM的结果:
<?xml version="1.0" encoding="UTF-16" standalone="no" ?>
<ex:company xmlns:ex="www.exme.com"> <product>Xerces-C</product>
<category idea="great"><XML解析器></category>
<developedBy>Apache Software Foundation</developedBy>
</ex:company>
第二次printDOM的结果:
<?xml version="1.0" encoding="UTF-16" standalone="no" ?>
<ex:company xmlns:ex="www.exme.com"> <product>Xerces-C</product>
<category idea="great">XML parsing tools</category>
<developedBy>Apache Software Foundation</developedBy>
</ex:company>
里面还有个xpath解析namespace支持的使用方法,本来是没打算用的,可是没想到我测试CreateDOMDocument的时候无意加上了namepspace,结果用到xpath的时候始终有问题,后来又是搜索派生类的方法,找出了XalanNamespacesStack,解决了namepspace解析的问题
虽然有sourceinsight的帮助,找这些东西也够累的,不过也顺便了解了一些xerces和xalan的类设计思想, 说不出滋味, 感觉很复杂, 又觉得有些设计很奇怪, 摸不着头脑, 并且对matin fowler的那句话感触更深: 面向对象的初学者看有经验的面向对象的人写的程序的时候,感觉处处都是delegate和indirection,找了半天也发现不了几句做实实在在功能的代码,但是程序却是的确实现了功能. 虽然不是新手,但是和Xerces的大师级设计者们差距也很大吧,呵呵,除了无话可说外就是多多学习了. 好了,下一步就是在Xerces和Xalan的基础上再做一小层封装用在项目中了...
|
|||||
|
|