首页 课程 师资 教程 报名

资深Java面试题目及答案

  • 2020-02-18 10:49:06
  • 3344次 动力节点


资深Java面试题目及答案


  有哪些集合实现,对应的线程安全集合?


  主要考察集合框架的两大类:集合(collection)和图(map),集合下面主要了解list和set,如ArrayList、LinkedList、HashSet、TreeSet;map下主要了解HashMap、TreeMap。


  划重点(加分项):


  ①线程安全集合选两个代表性的:ConcurrentHashMap和CopyOnWriteArrayList,了解它们是如何做到线程安全的。


  hashmap底层结构,为什么使用链表?(hashmap是面试必考题)


  HashMap的底层结构(数组)实现,一定要了解透彻,如put()、get()两块源码花点心思;


  hash碰撞后产生的链表、红黑树顺带了解,有能力的最好看下源码实现(加分项)。


  线程池常用参数、如何设置?


  核心线程数、最大线程数、阻塞队列容量、线程空闲时间及单位、拒绝策略,每个的具体含义一定要了解。


  划重点:


  当线程数小于核心线程数时,创建线程。


  当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。


  当线程数大于等于核心线程数,且任务队列已满:


  若线程数小于最大线程数,创建线程若线程数等于最大线程数,看拒绝策略


  如何设置具体参数值(个人经验及看法,供参考):


  核心线程数=每秒需要处理的最大任务数量*处理一个任务需要的时间,业界有常用的8020原则、6040原则,实际还是要根据自己应用的承载能力来看,假设系统每秒任务数为10~100,每个任务耗时0.1秒,则需要10*0.1~100*0.1,即1~10个线程。那么corePoolSize应该设置为大于1,若根据8020原则,即80%情况下系统每秒任务数不超过20,则corePoolSize=0.1*20=2。


  阻塞队列容量=核心线程数/处理一个任务需要的时间*系统允许任务最大的响应时间


  最大线程数=(每秒需要处理的最大任务数量-队列容量)*每秒的线程处理任务能力,假设每秒200个任务需要20个线程,那么当每秒达到1000个任务时,则需要(1000-队列容量)*(20/200),即60个线程。


  阻塞队列的实现原理?


  lock锁的多条件(condition)阻塞控制,基础薄弱的需要提前了解一下同步锁synchronized、lock及Condition类,这一块考验高级和中级研发人员的界限,需要挖一下源码,多用心。


  加分项:另外辐射出来可能会顺带直接问你AQS,建议仔细了解其实现原理,如其内部如何利用双向链表的,重点看acquire()方法实现。


  内存模型(必考题)


  无论你关注jdk1.8之前还是之后,不重要,关键是能正常理解每一块的作用、是否线程共享/私有。


  堆、虚拟机栈、本地方法栈、程序计数器、方法区,需要了解每一部分的作用。


  划重点:


  虚拟机栈包含哪些部分、程序计数器的作用这两块着重了解。


  GC发生在哪一块,GC算法?


  发生在堆内存,GC算法主要了解:标记清除、复制、标记整理,需要知道其执行步骤及各自的区别。


  划重点:


  年轻代划分成哪几部分(E、S0、S1),使用哪种算法(复制),老年代使用哪种算法(标记清除),为什么?这里需要耐心理解透彻,很容易辐射到此类问题。


  事务隔离级别,默认哪一个,解释幻读、不可重复读及二者区别?


  隔离级别:读未提交、读提交、不可重复读、串行化,默认是不可重复读,具体幻读问题,请参考笔者此前文章幻读、不可重复读,其中进行了详细说明。


  索引失效场景、索引数据结构?


  主要分为非组合索引和组合索引:


  1、非组合索引主要注意or、like(若like非左模糊情形,如xxx%,则可以使用索引),索引列存在表达式、聚合函数等等;


  2、组合索引主要注意是否遵循最左原则。


  还有些其它小点靠大家自己去积累,笔者这会是蒙圈状态,没反应过来。


  索引数据结构:主要关注B+树,花心思了解透,且需要了解聚簇索引和非聚簇索引。


  加分项:InnoDB与MyisAM索引方面的区别。


  数据库引擎


  主要可以说说InnoDB、MyISAM这两个常用的即可,需要了解二者的区别,InnoDB支持事务,二者使用场景,二者之间如何转变。


  mysql分表中间件、如何监听binlog


  中间件:tddl,MyCat(其实考验你的知识储备广度,一般不要求细说中间件的实现)。


  监听时可以使用duckula中间件或者binlog监听独立jar包(common-binlog-alone)。


  笔者认为高级或资深人员必须要了解的知识储备:InnoDB的MVCC机制


  mysql自身的并发控制如何实现的,原理主要从其新增、更新、删除三方面去了解其内部的操作过程,其版本号如何控制等等。


资深Java面试题目及答案


  以上就是动力节点Java培训机构小编介绍的“资深Java面试题目及答案”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


相关推荐


最新最全java面试题及答案(初级到高级)


史上最全的中高级JAVA工程师面试题及答案汇总


Java高级开发工程师面试题


2019史上最全java面试题题库大全800题


哪有资深java工程师面试题


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交