专注JavaWeb开发 首页制式『默认式 OR 时间轴 网站地图|RSS订阅|设为首页|加入收藏
当前位置:首页 >Java >Java基础 > 正文

Java面试知识点总结

来源: 博客园 作者: 官网 发布时间: 2017-04-17 浏览次数:

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>


QQ群: 武汉地区(142173356)验证消息JavaWeb1024

网友共有【】评论,点击查看


相关新闻:


x 微信关注我们 随时获取最新网站资讯