实用的Java知识点

1.对于一些需要异步处理的,不要直接new一个thread,应当使用线程池。使用线程池的时候应当对线程数量大小合理设置,一般最大不超过50个,当然还需要考虑你的IO和CPU。

2.分支判断if…else的时候,最常符合的条件处理放在前面。

3.对象比较的时候常量放前面,减少空指针的出现。

4.减少synchronized中等待处理的代码,能放在外面就尽量放在外面。

数据库

5.一般查询比较慢,很有可能是没有建索引或者索引没用到,多去检查一下。

6.两个大表的关联查询,可以使用二次访问数据库替代,先查出A表的数据,利用关联字段再查B表的。不要一味想着一条sql搞定最好。

7.坚决避免,查全表数据或者数量大的数据,返回list加载到内存中,一不小心查了100w数据,又查得比较频繁,内存的爆了。有这种风险的改成分页查询。

8.多考虑避免事务里面有长连接或者长事务,如果大量这种情况出现占用数据连接,会影响性能。一些无必要的逻辑可以放到事务外执行。

9.对字段的加减乘除处理放到sql,严格避免先get处理,然后运算在set到数据库里面,并发情况非常容易导致失真.

10.方法里面代码不要太长,注意封装,命名语义化,代码整洁。

SQL规范与性能优化Mysql
11.SQL执行顺序:a.检查语法是否正确。
          b.检查表是否存在、权限是否满足等。
          c.根据统计信息(如data length,rows,index length、索引唯一度),生成较优的执行计划。
          d.根据执行计划,进行数据检索、过滤、合并、排序等操作。
访问数据时,内存中如存在表数据,则直接进行操作;否则,从磁带读取表数据,放入内存,再进行操作;如内存不足,则内存中较冷数据涮出内存,再从内存中读取数据。
12.什么是执行计划:a.决定如何访问表数据,是否通过索引,是否排序等。
           b.多表关联是先访问哪个表。
             c.多表关联时,使用哪种连接方式,不过现在MySQL只有嵌套连接。
(嵌套循环,顾名思义就是将一个表为出发点,将该表全部记录逐条去遍历另外一张表的记录)
13.索引:查询的时候如果使用上了索引,可以提高效率,因为建立了索引后,可以理解为数据字典的结构存储(例如书中的目录),因此根据条件查询的时候更加高效。下面看一下MySQL常用的索引类型的概念。
a.普通索引:在创建普通索引时,不附加任何限制条件。这类索引可以创建在任何数据类型中,其值是否唯一和非空由字段本身的完整性约束条件决定。建立索引以后,查询时可以通过索引进行查询。例如,在student表的stu_id字段上建立一个普通索引。查询记录时,就可以根据该索引进行查询。
b.唯一性索引:使用UNIQUE参数可以设置索引为唯一性索引。在创建唯一性索引时,限制该索引的值必须是唯一的。例如,在student表的stu_name字段中创建唯一性索引,那么stu_name字段的值就必需是唯一的。通过唯一性索引,可以更快速地确定某条记录。主键就是一种特殊唯一性索引。
c.单列索引:在表中的单个字段上创建索引。单列索引只根据该字段进行索引。单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段 即可。
d.多列索引:多列索引是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。但是,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。例如,在表中的id、name和sex字段上建立一个多列索引,那么,只有查询条件使用了id字段时该索引才会被使用。
还有空间索引和全文索引,平时也比较少用。
14.一般一张表索引不要超过5个,而且避免重复索引,而且也不是建了索引,根据索引字段条件查询,索引就会起作用。
15.一般哪些场景会导致索引失效: a.使用like关键字匹配字符串第一个为”%”的场景。
                b.条件中包含or、in、not in、<>关键字,默认不走索引的。
                c.访问表上的数据行超出表总记录数30%,变成全表扫描。
                d.查询条件使用函数在索引列上,或者对索引列进行运算。
                e.多列索引中,第一个索引列使用范围查询,只能用到部份或无法使用索引。
                f.多列索引中,第一个查询条件不是最左索引列。
16.不能同时使用两个索引,一个过滤数据,一个用于排序(主键除外)。
17.DML语句如果使用索引,会导致lock全表;如果使用了非唯一索引,可能只是锁住一定范围。因此,建议更新/删除数据尽量用上索引,如果可以最好用上主键或唯一索引,另外事务要及时提交。
18.如何看执行计划,分析SQL的性能。参照:http://www.cnblogs.com/xiaoboluo768/p/5400990.html
19. 日志记录尽量放在独立事务里面,避免后面的异常发生导致日志丢失。
 
20.transient修饰该元素不会进行jvm默认序列化,可以自己完成这个元素的序列化。
21.多次使用的相同变量最好归纳成常量。
22.尽量在循环中少做一些可避免的方法调用,这样可以节省方法栈的创建。
for(int i=0;i<list.size();i++){
  System.out.println(i);
}
可以修改为:
for(int i=0,size=list.size();i<size;i++){
  System.out.println(i);
}
23.使用基本数据类型来做局部变量类型,因为基本类型的变量是存放在栈中的,包装类的变量是在堆中,栈的操作速度比堆快很多。
24.尽早的将不再使用的变量引用赋给null,这样做可以帮助jvm更快的进行内存回收,释放内存。
25.mybate中引用值和字符串的使用
<#if sortBy??>
${"ORDER BY ${sortBy} "}
</#if>
 

posted on 2017-04-17 15:40  要斋啡  阅读(461)  评论(0)    收藏  举报

导航