Java中级面试题及答案(99%面试官必考题汇总)

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

Java中级面试题是Java面试题经常被问到的,下面重点详解Java中级面试题及答案,会包含19道必考的Java中级面试题。

1.Java集合框架有哪些?

如下图所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

常见的Java集合框架有:ArrayListLinkedListHashMapWeakHashMapHashSetLinkedHashMap等。

 

2.Java集合常用Set?

Set接口常用的实现类有,如下图所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

Java集合框架常见的Set有:HashSet、LinkedHashSet、TreeSet

 

2.HashMap底层原理?

HashMap的数据结构:数组+链表+红黑树(JDK1.8增加了红黑树部分)的数据结构。

如下所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

1.8底层实现

基于数组+链表+红黑树实现(Key和value封装成Entry对象)

1.根据key的hash值,计算该key存放在数组的index位置

2.如果发生index冲突,则会使用单向链表存放

当数组的容量大于=64且链表长度大于8则会将链表转化成红黑树。

 

3.ArrayList和LinkedList的区别

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

1)ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高

2)Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低

3)LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高

 

4.Java线程的生命周期

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。

 

5.面向对象的特征有哪些方面?

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

1. 封装,隐藏内部实现,只暴露公共行为

2. 继承,提高代码的重用性

3. 多态,体现现实生活中相似对象的差异性

4. 抽象,抽取现实世界中相似对象的共同点

 

6.String、StringBuffer、StringBuilder的区别?

String、StringBuffer、StringBuilder最大的不同是String不可变,后者可变。

StringBuffer是线程安全的,StringBuilder线程不安全速度较快。

 

7.JVM内存模型组成结构?

JVM内容模型如下图所示,主要分为4部分:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

Java中级面试题及答案(99%面试官必考题汇总)-mikechen1.堆:存放对象实例,几乎所有的对象实例都在这里分配内存。

2.虚拟机栈:虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量表、操作栈、动态链接、方法出口等信息本地方法栈。

3.方法区:存储已被虚拟机加载的类元数据信息(元空间)。

4.程序计数器:当前线程所执行的字节码的行号指示器。

 

8.实现线程有哪些方式?

常用的线程创建方式,会包含如下3种:

  • 1)采用实现Runnable、Callable接口的方式创建多线程;
  • 2)使用继承Thread类的方式创建多线程;
  • 3)使用ExecutorService、Future实现有返回结果的多线程;

 

9.线程池的核心参数有哪些?

线程池的核心参数,会包含如下几种,如下图所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

 

10.线程池的执行流程?

线程池的执行流程,如下图所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

11.怎么理解Spring IOC?

Spring IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。

IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。

传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试,有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,如下图所示:
Java中级面试题及答案(99%面试官必考题汇总)-mikechen

上图引入了IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器。

所以,IOC借助于“第三方”实现具有依赖关系的对象之间的解耦,使程序更优良。

 

12.Spring  MVC 模型怎么理解?

可以用如下的图形来表示Spring MVC三者之间的关系:
Java中级面试题及答案(99%面试官必考题汇总)-mikechen

1.模型(Model)

模型封装了数据及对数据的操作,可以直接对数据库进行访问,不依赖视图和控制器,也就是说模型并不关注数据如何展示,只负责提供数据。GUI 程序模型中数据的变化一般会通过观察者模式通知视图,而在 web 中则不会这样。

2.视图(View)

视图从模型中拉取数据,只负责展示,没有具体的程序逻辑。

3.控制器(Controller)

控制器用于控制程序的流程,将模型中的数据展示到视图中。

 

13.SpringBoot、Spring MVC和Spring有什么区别?

1)Spring

Spring最重要的特征是依赖注入。所有Spring Modules不是依赖注入就是IOC控制反转,当我们恰当的使用DI或者是IOC的时候,可以开发松耦合应用。

2)Spring MVC

Spring MVC提供了一种分离式的方法来开发Web应用。通过运用像DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

3)SpringBoot

Spring和Spring MVC的问题在于需要配置大量的参数,SpringBoot通过一个自动配置和启动的项来解决这个问题。

 

13.SpringMVC执行流程是什么?

SpringMVC工作流程,如下图所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

 

14.什么是并发?什么是并发

并行:指的是多个cpu实例,或者多台机器,同时执行一段处理逻辑,是真正的同时。

如下图所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

并发: 指单个cpu同时处理多个线程任务,通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。

如下图所示:

Java中级面试题及答案(99%面试官必考题汇总)-mikechen

 

15.怎么理解AOP?

AOP (Aspect Orient Programming),直译过来就是 面向切面编程。

面向切面编程,实现在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术,如下图所示:
Java中级面试题及答案(99%面试官必考题汇总)-mikechen

 

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索引原理详解(看这篇就够了)

索引是一种高效获取数据的存储结构,所以要理解MySQL索引的原理,必须清楚一种数据结构就是B树或者 B 树。

以上就是Java中级面试题及答案详解,更多的Java面试题,请查看:1000+Java面试题及答案详解

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法