主要是个人在开发过程中遇到的一些问题以及自己在论坛和博客上汇总的一些小知识点。
JAVA开发中,在运用Hibernate框架生成的SQL语句去查询没有主键的表时,查询的结果存在多条的情况下,第一条的数据会将后面的数据覆盖掉,导致查询的数据出现重复的问题。
对象之间的比较,常量放在前面的话,可以减少空指针的出现。
一个Web项目主要是分为三个模块。core模块、service模块、web模块。web模块就是页面等部分,后台代码主要是在controller层。逻辑处理基本放在core模块,service模块主要是包括了接口类,接口的实现类就是在core模块。
代码层级结构:主要是针对后台项目,一般分为对外接口层、service层、Dao层。Dao层就是与数据库交接的接口层,service层主要调用Dao或者外部系统的接口,而复杂的逻辑处理基本放在service层;一些方法需要提供给其他模块进行调用的时候就封装在对外接口层(相对与外部而言,只有对外接口层是暴露的)。
if…else分支判断的时候,最常符合条件的优先放在前面进行判断
在开发过程中,可能会因为功能需求的不断变化,导致自身所编写的代码会产生代码冗余。
这时候就需要优化自身的代码,优化代码的目的主要是减少代码的体积与提高代码运行的效率。
主要有以下这些:
(1). 尽量指定类、方法的final修饰符;
(2). 尽量重用对象;
(3). 尽可能使用局部变量;
(4). 及时关闭流;
(5). 尽量减少对变量的重复计算;
(6). 尽量采用懒加载的策略,即在需要的时候才创建;
(7). 慎用异常;
(8). 不要在循环中使用try…catch…,应该把其放在最外层;
(9). 如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度;
(10). 当复制大量数据时,使用System.arraycopy()命令;
(11). 乘法和除法使用移位操作;
(12). 循环内不要不断创建对象引用;
(13). 基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList;
(14). 尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销;
(15). 不要将数组声明为public static final;
(16). 尽量在合适的场合使用单例;
(17). 尽量避免随意使用静态变量;
(18). 及时清除不再需要的会话;
(19). 使用同步代码块替代同步方法;
(20.将常量声明为static final,并以大写命名;
(21). 不要创建一些不使用的对象,不要导入一些不使用的类;
(22). 使用数据库连接池和线程池;
(23). 使用带缓冲的输入输出流进行IO操作;
(24). 顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList;
(25). 不要让public方法中有太多的形参;
(26). 字符串变量和字符串常量equals的时候将字符串常量写在前面;
(27). 不要对数组使用toString()方法;
(28). 不要对超出范围的基本数据类型做向下强制转型;
(29). 公用的集合类中不使用的数据一定要及时remove掉;
(30). 把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+””最慢;
(31). 使用最有效率的方式去遍历Map;
(32). 对资源的close()建议分开操作;
(33). 所有重写的方法必须保留@Override注解;
(34). 循环体内不要使用”+”进行字符串拼接,而直接使用StringBuilder不断append。在处理异常时的小建议:不要在fianlly中使用return。不要在finally中抛出异常。减轻finally的任务,不要在finally中做一些其它的事情,finally块仅仅用来释放资源是最合适的。将尽量将所有的return写在函数的最后面,而不是try … catch … finally中。
ps:有不正确的地方,欢迎各位指出。