九天没有动笔了,总得写点什么吧

看了下上次博客发布的时间,9月9号,今天已经18号了。这几天一直在做一个模块,是对Ajax请求做响应的,后台的逻辑处理比较复杂,所以最近一直比较忙。 现在那个模块功能基本上已经完成了,写点东西来总结下。

先说前台:

以前从来没用过ajax,原理也比较简单,就是用javascript模拟一个http请求,然后从服务器返回的response中读取返回值并显示在某个DIV里。 现在的处理方式是在后台把数据的表示形式都拼好然后再通过response写回给浏览器。 觉得这种实现方式好丑陋,.java文件里一堆的html代码,应该有更好的方法,研究中。

再说后台:

后台的逻辑是按照基本设计书的描述来做的,从一个过程化的描述分析出一个个的domain确实是个挺痛苦的事情,有时候好多对象都是被创建删除多次。在创建对象的过程中,我一直把尽量把逻辑放在与之紧密相关的对象中(难道这又是贫血模型的思想?),这样在后期调试的时候,出了bug能够很快定位到与之相关的代码,而且最大可能地重用了代码。

收到消息,下面又要进那个大的国际项目了,公司对这个项目比较重视,希望能够看到一个清晰的程序架构,能够从老员工学到一些东西。 抽空再看看《深入java虚拟机》,多了解下底层的东西,为自己增添些砝码。

解决一问题——Oracle中 Char 与 Varchar

给一个现有的项目添加新功能,需要对数据库做更新: 写SQL语句,创建PreparedStatementd对象,绑定参数,执行statement,提交事务,很简单的一件事。 然而这里问题出现了,log里生成的SQL语句看起来 异常地正确,但是却不能对数据库里的数据更新,JUnit运行失败。 这个项目的框架构建者对PreparedStatement自己再做了层封装,实现了一个logable的PreparedStatement, 所以日志里的sql都是和参数绑定好的,拿来在SQLDeveloper里运行,很完美,数据被更新了,得到了预想的结果。 怎么会这样?挠头中

分析原因:

SQL不正确?没有提交事务?仔细检查下代码,两个假设很快就被否定了。 想什么招呢?从更新条件下手,总共有三个更新条件(where A= ? and B=? and C=?) 先把要更新的数据库表里的数据备份,然后修改SQL语句的更新条件成(where A = ?),运行JUnit,更新成功! 然后慢慢增加更新条件,最终将问题锁定在条件B,只要加上条件B,JUnit就失败了, 再看绑定B的那段代码:

ptmt.setString(2,XXX);

再看数据库里的B对应的那个列的类型,是 Char(12) 查看了下Oracle官方网站里对数据类型的解释:

CHAR(size) Fixed length character data of length size bytes. This should be used for fixed length data. Such as codes A100, B102…

Char型是定长的,在这里DB里的数据都是12位的,长度小于的12的数据被存放到这个域时,oracle会自动用空格补足称12位.

“abc     “和’abc’当然是不相等的 修改sql语句,改为TRIM(B)= ? ,再运行,更新成功。 这个问题虽然不难解决,但是解决问题的方法却也是值得mark下的。

恩,要常动脑筋

遇到这样一个需求:

A = 1时,B=1
A=2时:
  C(一个小时内的一个时间点)在00~29之间时、B=1。
  C在30~59之间时、B=2
A=3时:
  C在00~19之间时、B=1。
  C在20~39之间时、B=2。
  C在40~59之间时、B=3。
A=4时:
  C在00~14之间时、B=1。
  C在15~29之间时、B=2。
  C在30~44之间时、B=3。
  C在45~59之间时、B=4。

看起来一个稍复杂的需求,难道用if else或者switch? 我周围真有人这么干的。再仔细观察下,用如下程序可以解决:

int B= (C+1)/(60/A);
if((C+1)%(60/A) > 0){
  //对B取上界
  B++;
}

小聪明而已,写下这个只是想提醒下自己,在编程时”要用最少的代码最好地完成最多的事”

Apache的ab能够查看tomcat运行状态

在javaeye上看到个讨论事务的帖子,帖子中提到了通过查看 tomcat线程数来判断事务设置是否合理,于是回帖问了下如何查看tomcat运行状态,楼主回帖说用 apache的 ab,现在还没时间,抽空了解一下

今天又进来一批新员工

08年的新员工今天入司了,我已经成老员工了,看着他们个个脸上新奇的,清澈的目光,唉,去年我也是那样的。 一个人一年时间能改变多少呢?回想过去,在学校呆一年,浑浑噩噩就过去了,在公司呆一年,做了大大的小小几个项目,却学到了不少的东西。 现在后悔当初在学校有大把的时间,大把的资源,不好好用来学习知识,真是莫大的浪费啊。在这工作的一年里,工作之余我投了大把的时间学习框架,以及软件开发理论,还颇有点小的成就感。 当前三大学习目标: VOA ,TDD,Refactor, 2009 ,努力。 昨天晚上,吃完饭赶忙拿起 中午收到的《TDD》看起来,由于这本书的内容相对更理论一点,我的英文水平读起来还是有点吃力,所以抱着本字典边查边看。 女朋友突然来了句”我比你幸福,因为我有个努力的,很有上进心的男朋友,而你没有”,哈哈 甜滋滋的。

PS:作为一个一年经验的员工,当然没有机会去带别人做东西,真得希望能够在这批新员工里发现一个能够与之探讨技术的人,能够与我探讨重构,测试驱动开发,以及各个框架底层的东西,知识就是在不断的交流中才能发觉更多