21. 强制类型转换时,出现异常
ElementItem pireodItem = (ElementItem)columnCollections.get(columnCollections.size()-1));
从新审视这段代码,会发现很多问题。
a. 一行代码的逻辑过多,方法调用多,不便于调试。可以多建立几个局部变量。
b. Null判断的问题。
c. 强制进行类型转换,结果 转换失败?
22.项目中有段代码大量重复
(大概有200多次)
List list;
if(list != null && list.size()>0){
}
抽取成方法
isNotEmpty(List list);
使用 Eclipse查找类似的代码
Ctrl+H 出现搜索框,选择 FileSearch,
输入*!=null*&&*>0搜索类似的语句,方便使用已有的工具方法
23. 数据库表isDeleted字段不能为空
重构后isDeleted删掉了,导致增加总是失败。
24.使用Eclipse远程调试
右键,Debug Congregation,输入ip地址和端口号。
25. 数据库连接打不开
SQL Server没有启动,尽管能够远程连接电脑。
26. Struts2 devMode模式
很久以来,本机项目启动和响应比以前变慢了。测试机上速度还可以。
突然,又部署一次后,测试机上的也很慢了,不能忍受。
单步跟踪后,发现Action代码很快就走完了,走完之后一直在重复调用Struts的代码。
根据Struts打印日志信息,发现 configuration.xml.reload 一直重新加载。
网上搜搜,devMode模式是开发模式,开启它则默认开启了i18n.reload、configuration.xml.reload。
把devMode设置为false,就快多了。
以前在学校开发时,偶尔也设置为true,并没有感觉到对性能有多大影响。
诊断问题还是需要耐心啊!急性子不太好!
log4j日志配置为 debug,查看打印信息,发现有好多重复的信息。最终发现了问题。
27. Hibernate查询
List<Object[]> objList = (List<Object[]>)query.list();
遍历objList,从每个Object[]中 根据 索引来获得相应的字段,不容易扩展。
28.不得不再提的是,NullPointerException 是最为常见的错误。
访问日志表VisitLog,旧版记录了 用户的名字,新版需要记录用户的id。
新增字段后,旧的数据,userId为NULL。为了保持兼容旧系统,需要判断userId是否为NULL。
类型转换等操作需要考虑Null。
29. 合理配置Log4j,便于查找错误。
控制台看信息,有时候不太方便。
(客户为开发人员提供错误信息时,很有用)
30. Tomcat日志文件
Linux下,Log4j生成的日志放在了 log目录下,而logs文件夹 却有个 localhost-access-log.2013-01-24.txt这个访问日志文件。
通过 ll命令,发现 不同目录下的日志文件权限不同,因此猜测 logs目录下的文件不是
我们自己配置的。后来在Tomocat conf目录下发现了一个 logging.properties.发现访问日志实在这里配置的。
31.Hibernate类型转换失败
Hibernate 实体类 String breakId;
int breakdId;
executeQueryList(hql,"breakId",breakId);
会报错。Integer不能转换为String类型。
32.配置数据库连接
XML文件中:jdbc:mysql://localhost:3306/shopping?useUnicode=true characterEncoding=utf8(XML文件中需要对&进行转义)
属性文件中 :jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=utf8(属性文件中不需要对&进行转义)
为什么会出现这个问题呢?
数据库连接原来配置在xml文件中,今天为了方便,放在了单独的属性文件中 jdbc.properties中,结果就出现了乱码。
弄了好久,才发现。
33.UTF-8编码的不同名称
数据库中指定编码 :utf8
JSP页面中指定编码:UTF-8
34.Window7 配置 IP和域名映射
C:\Windows\System32\drivers\etc\hosts
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
123.103.19.71 fansunion.cn
35. w3c Document规范与 Dom4j实现不太一样。
Dom4j包中的Document并不是w3c Document的实现类。
误认为 w3c是规范,Dom4j是实现。发现方法也不一样。
36. Spring多线程之单例问题。
有些公共的数据类使用了单例,导致多线程访问的数据出现了干扰。
一个Service中可以使用getCurrentSession多线程访问数据库。
37.Log4j配置文件存在多余的属性
认真阅读SSH项目控制台信息可以查看到系统的初始化过程,发现一些可能存在的问题。
log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender.
log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender.
log4j.appender.I=org.apache.log4j.DailyRollingFileAppender
log4j.appender.I.File=../log/mingboard_info
log4j.appender.I.Threshold=info
log4j.appender.I.MaxFileSize=100KB
log4j.appender.I.Append = true
log4j.appender.I.layout=org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.I.DatePattern='-'yyyy-MM-dd'.log'
log4j.appender.I.MaxBackupIndex=1
38.国际化单词拼写错误moddify.success,“修改”这个单词拼写错误,应该为modify,
应该把所有相关的丢修改掉,资源文件,JSP,Java源文件。
39.Hibernate 实体类 查询时 区分大小写。
User{
private String email;
}
String hql="select * from User where email = :email";
当时的错误:原来email是“Email”,实体类文件修改为小写后,hql语句都需要改为小写。
这类问题关键是容易遗漏,可以使用Eclipse的搜索功能,Ctrl+H,选择FileSearch,进行搜索,
从而做到不遗漏。
40.流程拆分
Flex端发送一个请求,获取图表数据。
图表有多种类型,每种类型有很多相同-相似-不同的代码。
原来为 一个函数 使用大量的if-else来构造不同的图表数据,现在改为
一个函数生成一个类型的图表,不同图表之间的相同代码以工具函数的形式复用。
结果:流程清晰易懂,快速定位Bug。
相关阅读
工作问题 javascript:void(0)