更新时间:2020-07-24 15:27:13 来源:极悦 浏览2498次
1.Arrays.sort实现原理和Collection实现原理
答:Arrays.sort():快排
Collections.sort():MergeSort,后来变成了TimSort
2.foreach和while的区别(编译之后)
答:foreach针对确定次数;while不确定次数
3.线程池的种类,区别和使用场景
答:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行。
4.分析线程池的实现原理和线程的调度过程
答:多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。
假设一个服务器完成一项任务所需时间为:T1创建线程时间,T2在线程中执行任务的时间,T3销毁线程时间。
如果:T1+T3远大于T2,则可以采用线程池,以提高服务器性能。
一个线程池包括以下四个基本组成部分:
A、线程池管理器(ThreadPool):用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务;
B、工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
C、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;
D、任务队列(taskQueue):用于存放没有处理的任务。提供一种缓冲机制。
线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。
线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目,重用线程池中的线程。
按照优先级调度线程。
5.线程池如何调优
答:使用线程池的核心问题在于应该使用多少线程。利特尔法则、拆分线程池
6.线程池的最大线程数目根据什么确定
答:corePoolSize:tasks*tasktime个线程数
queueCapacity:corePoolSize/tasktime)*responsetime
maxPoolSize:(每秒任务-queueCapacity)*(每秒单个线程处理任务数量)
7.动态代理的几种方式
答:代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
动态代理:在程序运行时,运用反射机制动态创建而成。每一个动态代理类都必须要实现InvocationHandler这个接口。
jdk动态代理:jdk动态代理是由Java内部的反射机制来实现的,应用前提,必须是目标类基于统一的接口
cglib动态代理:动态代理框架,借助asm来实现的
8.HashMap的并发问题
答:HashMap是非线程安全的,可能造成死循环。
9.了解LinkedHashMap的应用吗
答:LinkedHashMap是HashMap的一个子类,它保留插入的顺序,输入顺序和输出顺序相同。底层使用hash表和双向链表来存储。Eg。LRU缓存
以上就是极悦java培训机构的小编针对“2020年Java后台面试题总结”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习