解惑

解己之惑,解人之惑

作者:cherami (第79页共82页)

监控服务器的状态防止停止服务

虽然搞了这么多年的java,但是还没有真正的接触过大负载情况,而服务器在大负载的情况下很可能由于不堪重负而倒下,如果应用的质量不高,系统资源使用太高服务器可能也会崩溃,这个时候权益之计就是监控服务器的状态了,而且一般情况下也比较现实,想让服务器7X24的工作一点问题没有是不太可能的,因此写一个简单的脚本监控服务器的关键的进程是否死掉、服务器返回的内容是否正确,服务器的内存使用是否正常都是可行的,而且可以把这几项综合起来,在某种情况发生时进行相应的处理,这样服务器能够正常工作的情况就比较多了,以后我会将这方面的经验都写出来,并且最终的监控脚本也会贴出来,现在还在实践阶段,效果还不是很理想,例如还不能防止DOS攻击等等。

打印Linux服务器当前使用的内存总量的命令

echo `date '+%y-%m-%d %H:%M:%S'` "Current total used memory:" `free -omt|grep Total|awk '{print $3}'`"M"

根据Bean生成页面?

Hibernate有一个很好的工具就是根据Bean中的扩展的javadoc生成相应的hbm配置文件,当然这个实际的转换工作是由xdoclet完成的,那么我们可以再多加一些扩展,根据bean的配置信息生成目标的jsp页面。
我原来所在的公司做过一个工具,我们负责的一个项目由于数据库的表太多,而业务不是很复杂,主要是单据太多,系统的设计者就根据这个特点做了一个工具,一个单据会对应一个或者多个表,这几个表之间一般是主从表,或者主从从表,这个工具就是配置单据需要哪些表,表的主键是什么,主表和从表的外键是什么,表的哪些字段是出现在列表页面的,那些是出现在编辑页面的,字段类型是什么,是否为空等等,然后另外有程序会根据这个配置信息生成最终的JSP页面(包括数据有效性检查的js),而如果页面有什么额外的JS检查系统不支持的可以修改plugin式js文件,而单据的主要的增、删、改、查工作是系统的公共的功能,如果单据有特殊的要求,那么也是通过增加plugin式的类来完成,这个也是可以配置的。总的而言,系统的设计是成功的,我们可以借鉴这个思想,采用spring+hibernate+xdoclet来做一个类似的框架,应该会有比较好的效果,那个设计是以数据驱动的,而这个新的系统就是模型驱动的了。有时间我会再研究一下具体的可行性,应该是一个比较不错的设计。

使用plugin的方式提高系统的可扩展性

plugin的方式从硬件中学习而来,但是也可以很好的应用于软件的设计,jive中的过滤器的设计就有点plugin的路子,我所做的另外一个项目也是使用的类似的思路,重量级的task完成共通的任务,例如数据库的增、删、改、查,还有文件上传等等系统中普遍使用的功能,而轻量级的event就plugin到task的前后,针对共通的task进行一些修正,可以是修改参数值、预处理或者完成一些task不会完成的任务,而eclipse的设计中也是采用的这种非常灵活的方式,今天看到一个plugin的框架:JPF,正在研究中。

需要掌握的软件开发技术

虽然现在有很多的软件开发技术需要我们掌握,但是就我而言,有如下几个需要掌握的技术,因为只有掌握这些,你才能得到一个比较好的系统设计,系统的灵活性、协调性、可扩展性、稳定性才能得到比较好的保证。
 

  • 设计模式:这个是这几年一直在被热炒的技术,虽然今年似乎热度有所下降,但是这个实在是非常重要的技术,你不一定精通所有的经典模式,但是对于常见的几种一定需要掌握。 
  • 重构:这个在XP中可能强调得比较多,在其它的场合提出得比较少,但是它实在是防止过度设计和优化系统设计的一个利器,需要强调的是重构必须建立在单元测试的基础上,否则系统的稳定性将得不到保证。 
  • 单元测试:这个是保证系统质量的最关键的一个因素,也是保证有效的重构的基础。 
  • IoC:就我的理解,就是要加大对配置的依赖而非代码间的直接依赖,虽然这样做以后系统的总体结构和代码间的关系变得不像以前那么清晰,但是这个确实是使得系统更加灵活和可扩展的不二法宝。 
  • AOP:虽然我还没有真正使用过,但是实在是喜欢它,因为这个可以很好的实现动态的Plugin结构,也是提高系统的灵活性和可扩展性的法宝,而且可以将一些共通的杂项延迟到以后考虑。 
  • 重用:虽然这个不应该算一种技术,但是我想强调项目组内的代码重用,这个是保证系统的行为一致和协调的关键因素,就像我在另外一篇文章提升项目组的开发效率中所强调的那样。

J2EE世界的现状:生机勃勃的生态系统

今天在CSDN上看到一个以这个为标题的新闻,猛然间觉得一语道破了长久以来对Java界的感觉。一直以来总在看到关于Java和.Net的讨论和比较,但是总觉得Java更好一些,一则是担心.Net是MS一家控制的,二则对MS的垄断也比较反感,三则自己很欣赏开源精神,四则Java的核心类库的源代码都是公开的,遇到问题可以研究源代码。虽然平心而论,微软的产品在易用性上确实比较高,而且开发工具的功能也很全,MSDN的开发文档更是非常的丰富完善,但除了上面说到的原因外总感到有其它的因素,那就是Java界其实在思路上比.Net要活跃得多,跟随MS的技术人员在遇到不能解决或者不方便的时候更多的是等待MS拿出新的API或者规范,而Java界不然,SUN的东东功能远远不能满足大家的需要,这个其实给了别人以机会,他可以有很多对Java的功能进行补充的余地,而且不用担心SUN以后拿出相同的功能时一下子将自己掐死,因为SUN没有那个能力,而MS有(这种情况已经发生了不知道多少次)。正是SUN给追随者留下的这个空间使得大家有很多的发挥余地,也促进了这个生态的循环。证明这个观点的一个现象就是.Net下的开发者会抄袭Java界的成果,例如JUnit,Hibernate,Ant等等,都被冠以N后拿到.Net下,但是好像还没有听说什么.Net下很好的东西被Java所抄袭。所以说,Java世界更像一个生机勃勃的生态系统,有很多相互依存的关系,而MS的架构则更像一个供给系统,MS供,而MS的开发者消费。

广博和精深

一个人要想做到既广博又精深几乎是不可能,虽然人类历史上曾经出现过像阿基米德、达芬奇、拉斐尔之类的奇人,但是那是在知识相对匮乏的时代,对于现代人而言,能通一门科学或者学科已经是非常的不易。虽然鱼与熊掌不能兼得,但是也不是水火不容,无论从事什么工作,都可以追求广博,对世界的方方面面都有所接触不会是坏事,而且可能会对你的性格造成一定的影响,就我而言,感觉可以让人更加大度一些,不会让自己有不可一世的感觉,也不会让自己萎靡不振;而追求精深可以很好的树立自己的自信,可以表明自己的能力,也可以解除生活之虞。万事在于把握一个度,过犹不及。

从硬件转向软件

我大学的专业是电子工程,但是大三发生的一件事情可能永远的改变了我的人生轨迹:让我从硬件设计转向了软件设计。

大三的时候我报名参加了大学生电子设计大赛,在暑假的封闭提高中,我们所做的一个练习项目出了问题,问题出在我们的电源工作不稳定,使用示波器测试发现有太大的纹波,老师说可能是因为电源和其它组件在同一个电板上导致干扰,将电源独立出来试试,我们照着老师的建议将电源独立了出来,但是问题依旧,老师让再附加电容电路进行稳压,问题依旧。。。这次的经历让我很疲惫,而最后,我放弃了,因为我担心以后还会遇到这样莫明其妙的问题,现实中已经有太多我无法把握的事情了,我不想以后的职业道路也是一样充满不确定因素,好在我还有其它的路可以选择。因为我们是电子系,要修很多计算机系的课程,而且我的第二专业就是计算机(学校要求每个人都要修第二专业,但是没有学位),最重要的是我对计算机情有独钟,高考以后就买了书自学DOS,到了大学后自学所有的计算机课程,因此我的选择很明显就是走软件设计这条路了。
现在经常听到做软件的不如什么什么,但是我热爱编程,因为只要我的设计是正确的,那么结果就是正确的,否则肯定是我的设计有漏洞。这个让我这个非常理想化的人找到了理想的职业。到现在为止,我从来都没有后悔我的选择,只有很少数的情况下我会担心一下被同行所热炒的35岁问题。

Blog的问题

目前Blog的功能还没有达到我的预期,最严重的一个问题就是速度了,感觉比较慢,这个很浪费我的时间。另外就是排版的功能,JR已有的一些功能要加到这里来,也许我改抽点时间把内容过滤的功能做成一个通用的类库。还有就是定制的范围,可以修改的地方很少,只能使用他提高的一些宏和变量,但是他提供的那些太有限了。

本来是想下手改的,但是还没有掌握Roller的结构,根据他的网站的内容看要对他进行修改可能比较困难,可能比jive要难改很多,他用的第三方的组件比较多,还使用了我不太喜欢的velocity,难道我要自己写一个Blog吗?

所见即所得和手工排版

这个Blog虽然有各种编辑器供使用,但是感觉没有一种编辑器足够好用,总是有缺少某些我想要的功能,因此我还是更愿意自己在写文章的时候自己使用html排版,还好写好的html格式的东西把源代码贴过来就可以,而看到的文章也可以自己把页面的源代码摘出来就行了,虽然有时候显得不太方便,但是对于我这样喜欢DIY的人未尝不是好事。

没有限制是最好的事情了

更早的文章 更新的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑