2013年工作中遇到的20个问题:21-40

本文总结了Java开发过程中常见的问题及其解决方案,包括强制类型转换异常、代码重复处理、数据库字段约束、远程调试技巧等,提供了实用的工具和方法。

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&nbsp;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。
 

相关阅读

工作问题 http://blog.youkuaiyun.com/FansUnion/article/category/1334371


 

 

转载于:https://www.cnblogs.com/qitian1/archive/2013/01/31/6463753.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值