
<p><br/></p><p style="text-align: center;"><img src="https://www.bjpowernode.com/ueditor/php/upload/image//43932.jpg" title="资深Java面试题目及答案" alt="资深Java面试题目及答案" width="334" height="218" style="width: 334px; height: 218px;" border="0" vspace="0"/></p><p><br/></p><p><strong> 有哪些集合实现,对应的线程安全集合?</strong></p><p><br/></p><p> 主要考察集合框架的两大类:集合(collection)和图(map),集合下面主要了解list和set,如ArrayList、LinkedList、HashSet、TreeSet;map下主要了解HashMap、TreeMap。</p><p><br/></p><p> 划重点(加分项):</p><p><br/></p><p> ①线程安全集合选两个代表性的:ConcurrentHashMap和CopyOnWriteArrayList,了解它们是如何做到线程安全的。</p><p><br/></p><p> <strong>hashmap底层结构,为什么使用链表?(hashmap是面试必考题)</strong></p><p><br/></p><p> HashMap的底层结构(数组)实现,一定要了解透彻,如put()、get()两块源码花点心思;</p><p><br/></p><p> hash碰撞后产生的链表、红黑树顺带了解,有能力的最好看下源码实现(加分项)。</p><p><br/></p><p> <strong>线程池常用参数、如何设置?</strong></p><p><br/></p><p> 核心线程数、最大线程数、阻塞队列容量、线程空闲时间及单位、拒绝策略,每个的具体含义一定要了解。</p><p><br/></p><p> 划重点:</p><p><br/></p><p> 当线程数小于核心线程数时,创建线程。</p><p><br/></p><p> 当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。</p><p><br/></p><p> 当线程数大于等于核心线程数,且任务队列已满:</p><p><br/></p><p> 若线程数小于最大线程数,创建线程若线程数等于最大线程数,看拒绝策略</p><p><br/></p><p> 如何设置具体参数值(个人经验及看法,供参考):</p><p><br/></p><p> 核心线程数=每秒需要处理的最大任务数量*处理一个任务需要的时间,业界有常用的8020原则、6040原则,实际还是要根据自己应用的承载能力来看,假设系统每秒任务数为10~100,每个任务耗时0.1秒,则需要10*0.1~100*0.1,即1~10个线程。那么corePoolSize应该设置为大于1,若根据8020原则,即80%情况下系统每秒任务数不超过20,则corePoolSize=0.1*20=2。</p><p><br/></p><p> 阻塞队列容量=核心线程数/处理一个任务需要的时间*系统允许任务最大的响应时间</p><p><br/></p><p> 最大线程数=(每秒需要处理的最大任务数量-队列容量)*每秒的线程处理任务能力,假设每秒200个任务需要20个线程,那么当每秒达到1000个任务时,则需要(1000-队列容量)*(20/200),即60个线程。</p><p><br/></p><p> <strong> 阻塞队列的实现原理?</strong></p><p><br/></p><p> lock锁的多条件(condition)阻塞控制,基础薄弱的需要提前了解一下同步锁synchronized、lock及Condition类,这一块考验高级和中级研发人员的界限,需要挖一下源码,多用心。</p><p><br/></p><p> 加分项:另外辐射出来可能会顺带直接问你AQS,建议仔细了解其实现原理,如其内部如何利用双向链表的,重点看acquire()方法实现。</p><p><br/></p><p> <strong> 内存模型(必考题)</strong></p><p><br/></p><p> 无论你关注jdk1.8之前还是之后,不重要,关键是能正常理解每一块的作用、是否线程共享/私有。</p><p><br/></p><p> 堆、虚拟机栈、本地方法栈、程序计数器、方法区,需要了解每一部分的作用。</p><p><br/></p><p> 划重点:</p><p><br/></p><p> 虚拟机栈包含哪些部分、程序计数器的作用这两块着重了解。</p><p><br/></p><p> <strong>GC发生在哪一块,GC算法?</strong></p><p><br/></p><p> 发生在堆内存,GC算法主要了解:标记清除、复制、标记整理,需要知道其执行步骤及各自的区别。</p><p><br/></p><p> 划重点:</p><p><br/></p><p> 年轻代划分成哪几部分(E、S0、S1),使用哪种算法(复制),老年代使用哪种算法(标记清除),为什么?这里需要耐心理解透彻,很容易辐射到此类问题。</p><p><br/></p><p> <strong>事务隔离级别,默认哪一个,解释幻读、不可重复读及二者区别?</strong></p><p><br/></p><p> 隔离级别:读未提交、读提交、不可重复读、串行化,默认是不可重复读,具体幻读问题,请参考笔者此前文章幻读、不可重复读,其中进行了详细说明。</p><p><br/></p><p> <strong>索引失效场景、索引数据结构?</strong></p><p><br/></p><p> 主要分为非组合索引和组合索引:</p><p><br/></p><p> 1、非组合索引主要注意or、like(若like非左模糊情形,如xxx%,则可以使用索引),索引列存在表达式、聚合函数等等;</p><p><br/></p><p> 2、组合索引主要注意是否遵循最左原则。</p><p><br/></p><p> 还有些其它小点靠大家自己去积累,笔者这会是蒙圈状态,没反应过来。</p><p><br/></p><p> 索引数据结构:主要关注B+树,花心思了解透,且需要了解聚簇索引和非聚簇索引。</p><p><br/></p><p> 加分项:InnoDB与MyisAM索引方面的区别。</p><p><br/></p><p><strong> 数据库引擎</strong></p><p><br/></p><p> 主要可以说说InnoDB、MyISAM这两个常用的即可,需要了解二者的区别,InnoDB支持事务,二者使用场景,二者之间如何转变。</p><p><br/></p><p> <strong>mysql分表中间件、如何监听binlog</strong></p><p><br/></p><p> 中间件:tddl,MyCat(其实考验你的知识储备广度,一般不要求细说中间件的实现)。</p><p><br/></p><p> 监听时可以使用duckula中间件或者binlog监听独立jar包(common-binlog-alone)。</p><p><br/></p><p> <strong>笔者认为高级或资深人员必须要了解的知识储备:InnoDB的MVCC机制</strong></p><p><br/></p><p> mysql自身的并发控制如何实现的,原理主要从其新增、更新、删除三方面去了解其内部的操作过程,其版本号如何控制等等。</p><p><br/></p><p style="text-align: center;"><img src="https://www.bjpowernode.com/ueditor/php/upload/image//47840.jpg" title="资深Java面试题目及答案" alt="资深Java面试题目及答案" width="305" height="203" border="0" vspace="0" style="width: 305px; height: 203px;"/></p><p><br/></p><p style="white-space: normal;"> 以上就是动力节点Java培训机构小编介绍的“资深Java面试题目及答案”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。</p><p style="white-space: normal;"><br/></p><p style="white-space: normal; text-indent: 2em;"><strong>相关推荐</strong></p><p style="white-space: normal; text-indent: 2em;"><br/></p><p style="white-space: normal; text-indent: 2em;"><span style="color: rgb(255, 0, 0);">最新最全java面试题及答案(初级到高级)</span></p><p style="white-space: normal; text-indent: 2em;"><br/></p><p style="white-space: normal; text-indent: 2em;"><span style="color: rgb(255, 0, 0);">史上最全的中高级JAVA工程师面试题及答案汇总</span></p><p style="white-space: normal; text-indent: 2em;"><br/></p><p style="white-space: normal; text-indent: 2em;"><span style="color: rgb(255, 0, 0);">Java高级开发工程师面试题</span></p><p style="white-space: normal; text-indent: 2em;"><br/></p><p style="white-space: normal; text-indent: 2em;"><span style="color: rgb(255, 0, 0);">2019史上最全java面试题题库大全800题</span></p><p style="white-space: normal; text-indent: 2em;"><br/></p><p style="white-space: normal; text-indent: 2em;"><span style="text-decoration-line: underline; color: rgb(255, 0, 0);">哪有资深java工程师面试题</span></p><p><br/></p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/169061.html