Java面试题答案分享

  被面试的一些Java面试题,今天就来整理一些这些面试题的答案。

  介绍一下自己的工作经历以及介绍一下最近做的一个项目,你主要负责了什么

  工作经历的话简单介绍就好,控制在三分钟左右,这个就是个开场白,毕竟简历上都写了。介绍项目就因人因项目而异了,如果你做过的项目比较高大上,一五一十的说出来就好了;如果项目比较简单,那么你就要提前准备准备了,争取把项目中的一些亮点找出来,整理好思路,提前准备好怎么回答这个问题。对于你主要负责了什么,最好提一下在项目中负责的一些东西,最好是一些核心的东西。

  有没有做过MySQL调优,怎么做的

  这个题目的话,就会跟自己的一些经验有关了。大致分为两个方向,一个是MySQL服务器方向调优,包括通过监控MySQL服务器内存、CPU以及io等来进行调优,还有MySQL的一些配置调优,由于这方面本人确实没有涉及过,就不给大家细说了,大家可以去google一下学习学习。

  另一个方向就是sql方面的调优,包括分析慢查询日志,查看执行计划(explain),索引优化(主键索引、唯一索引、组合索引等),查询尽量select仅需要的字段(如果能覆盖索引最好)等。

  MySQL索引有哪些,什么情况下不走索引

  主键索引、唯一索引、普通索引、组合索引(涉及最左前缀原则)、全文索引。

  索引失效的情况主要有下面几种情况:

  1、查询条件包括or:如果or查询的左右字段只有一个索引,索引会失效;如果or左右字段都有索引,才会生效。

  2、like以%开头不会走索引

  3、组合索引不是使用第一列索引,索引会失效

  4、where中对字段使用了函数会导致索引失效

  5、如果MySQL分析全表扫描速度比索引速度快时,会使用全表扫描,索引失效

  MySQL为什么选择B+树,它和Hash索引有什么不同

  大家都知道MySQL的消耗主要在io上,所以io的次数越少越好,而树高就代表着io的次数,所以树高越低越好。B+树的非叶子节点不保存键值对应的数据,这样B+树每个节点所能保存的键值大大增加,所以树高就降下来了;另一方面所有关键字数据都存在叶子节点,所以每次查找的次数都相同,查询速度更稳定;还有一方面是B+树的叶子节点是跟后序节点相连接的,对于范围查找是非常有用的。

  Hash索引之所以不适合MySQL有以下几点原因:1、Hash索引由于特殊的结构,所以查询效率特别高,但是它不能使用范围查找,这是致命的;2、对于大量重复键的情况,Hash是会有哈希碰撞的问题。

  MySQL事务隔离级别有哪些

  1、读未提交

  2、读已提交(避免脏读)

  3、可重复读(避免不可重复读)

  4、序列化(最高级别,性能低,一般不使用)

  上面是4个隔离级别,一般数据库默认可重复读。大家可以去google一下更详细的内容,还有会涉及到快照读以及MVCC的概念。

  Java8新增了哪些东西

  1、lambda表达式

  2、stream流式操作

  3、function接口以及接口里面支持默认方法

  4、时间类工具类,LocalDateTime、LocalDate等

  5、Optional

  6、优化了HashMap、ConcurrentHashMap

  7、jvm中去掉了永久代,改为了MetaSpace

  垃圾收集算法有哪些

  1、标记清除(会有碎片的问题)

  2、复制算法(应用在年轻代,会有内存空间的浪费)

  3、标记整理(效率会低一些)

  4、分代收集(年轻代(存活对象少,采用复制算法)、年老代(,存活对象多,采用标记清除或标记整理))

  ReentrantLock的实现机制

  ReentrantLock的实现机制大家最好去看源码,常用的方法是lock和unlock,大部分的核心逻辑都在AQS中,大家可以去看我之前写的文章

  Java HashMap的结构,Java8对比Java7做了哪些优化

  HashMap是数组加链表的结构,Java8中引入了红黑树,而且在扩容时也做了优化,大家可以去看我之前写的HashMap源码解析

  线程池有哪些参数,以及它的实现原理

  这个面试题是百分之百会被问到的,刚好前几天整理了线程池的相关知识,大家可以去参考

  Java锁的那些事儿之JDK锁(ReentrantLock)

  HashMap面试,看完这一篇就够了(上)

  Java线程池看这一篇就够了,面试再也不怕了

  没想到这些面试题答案整理起来还挺多,先整理出上半部分,晚上会把下半部分整理出来。到了该去写bug的时候,大家也好好上班。

猜你喜欢

转载自www.cnblogs.com/javaxiachen/p/12707270.html