Java中级面试题是Java面试题经常被问到的,下面重点详解Java中级面试题及答案,会包含19道必考的Java中级面试题。
1.Java集合框架有哪些?
如下图所示:
常见的Java集合框架有:ArrayList、LinkedList、HashMap、WeakHashMap、HashSet、LinkedHashMap等。
2.Java集合常用Set?
Set接口常用的实现类有,如下图所示:
Java集合框架常见的Set有:HashSet、LinkedHashSet、TreeSet。
2.HashMap底层原理?
HashMap的数据结构:数组+链表+红黑树(JDK1.8增加了红黑树部分)的数据结构。
如下所示:
1.8底层实现
基于数组+链表+红黑树实现(Key和value封装成Entry对象)
1.根据key的hash值,计算该key存放在数组的index位置
2.如果发生index冲突,则会使用单向链表存放
当数组的容量大于=64且链表长度大于8则会将链表转化成红黑树。
3.ArrayList和LinkedList的区别
1)ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
2)Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
3)LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
4.Java线程的生命周期
在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。
5.面向对象的特征有哪些方面?
1. 封装,隐藏内部实现,只暴露公共行为
2. 继承,提高代码的重用性
3. 多态,体现现实生活中相似对象的差异性
4. 抽象,抽取现实世界中相似对象的共同点
6.String、StringBuffer、StringBuilder的区别?
String、StringBuffer、StringBuilder最大的不同是String不可变,后者可变。
StringBuffer是线程安全的,StringBuilder线程不安全速度较快。
7.JVM内存模型组成结构?
JVM内容模型如下图所示,主要分为4部分:
1.堆:存放对象实例,几乎所有的对象实例都在这里分配内存。
2.虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量表、操作栈、动态链接、方法出口等信息本地方法栈。
3.方法区:存储已被虚拟机加载的类元数据信息(元空间)。
4.程序计数器:当前线程所执行的字节码的行号指示器。
8.实现线程有哪些方式?
常用的线程创建方式,会包含如下3种:
- 1)采用实现Runnable、Callable接口的方式创建多线程;
- 2)使用继承Thread类的方式创建多线程;
- 3)使用ExecutorService、Future实现有返回结果的多线程;
9.线程池的核心参数有哪些?
线程池的核心参数,会包含如下几种,如下图所示:
10.线程池的执行流程?
线程池的执行流程,如下图所示:
11.怎么理解Spring IOC?
Spring IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。
IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。
传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试,有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,如下图所示:
上图引入了IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器。
所以,IOC借助于“第三方”实现具有依赖关系的对象之间的解耦,使程序更优良。
12.Spring MVC 模型怎么理解?
可以用如下的图形来表示Spring MVC三者之间的关系:
1.模型(Model)
模型封装了数据及对数据的操作,可以直接对数据库进行访问,不依赖视图和控制器,也就是说模型并不关注数据如何展示,只负责提供数据。GUI 程序模型中数据的变化一般会通过观察者模式通知视图,而在 web 中则不会这样。
2.视图(View)
视图从模型中拉取数据,只负责展示,没有具体的程序逻辑。
3.控制器(Controller)
控制器用于控制程序的流程,将模型中的数据展示到视图中。
13.SpringBoot、Spring MVC和Spring有什么区别?
1)Spring
Spring最重要的特征是依赖注入。所有Spring Modules不是依赖注入就是IOC控制反转,当我们恰当的使用DI或者是IOC的时候,可以开发松耦合应用。
Spring MVC提供了一种分离式的方法来开发Web应用。通过运用像DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。
Spring和Spring MVC的问题在于需要配置大量的参数,SpringBoot通过一个自动配置和启动的项来解决这个问题。
13.SpringMVC执行流程是什么?
SpringMVC工作流程,如下图所示:
14.什么是并发?什么是并发
并行:指的是多个cpu实例,或者多台机器,同时执行一段处理逻辑,是真正的同时。
如下图所示:
并发: 指单个cpu同时处理多个线程任务,通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。
如下图所示:
15.怎么理解AOP?
AOP (Aspect Orient Programming),直译过来就是 面向切面编程。
面向切面编程,实现在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术,如下图所示:
16.SpringBoot的核心注解有哪些?
Springboot注解,核心的包含以下3个:
1)@SpringBootConfiguration
组合了 @Configuration 注解,实现配置文件的功能。
2)@EnableAutoConfiguration
打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
3)@ComponentScan
Spring组件扫描
17.SpringBoot的配置文件有哪几种格式?
.properties 和 .yml,它们的区别主要是书写格式不同。
1)properties
app.user.name = javastack
2)yml
app: user: name: javastack
18.线程池有哪几种创建方式?
java 提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池。
常见的线程池的创建,会包含如下有7种:
1)newCachedThreadPool:创建一个可缓存线程池;
2)newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数;
3)newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行;
4)newSingleThreadExecutor:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务;
5)Executors.newSingleThreadScheduledExecutor:创建一个单线程的可以执行延迟任务的线程池;
6)Executors.newWorkStealingPool:创建一个抢占式执行的线程池;
7)ThreadPoolExecutor:手动创建线程池的方式,它创建时最多可以设置 7 个参数;
19.数据库设计三大范式?
在数据库表设计上有个很重要的设计准则,在关系数据库中这种规则 就是范式,范式来自英文Normal Form,简称NF。
在实际开发中最为常见的设计范式有三个:三大范式。
1.第一范式:确保每列保持原子性,所有字段值都是不可分解的原子值;
2.第二范式:确保表中的每列都和主键相关,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;
3.第三范式:确保每列都和主键列直接相关,而不是间接相关;
20.MySQL索引原理?
索引是一种高效获取数据的存储结构,所以要理解MySQL索引的原理,必须清楚一种数据结构就是B树或者 B 树。
以上就是Java中级面试题及答案详解,更多的Java面试题,请查看:1000+Java面试题及答案详解。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》