Java面试全攻略(基础 + 集合 + 并发 + JVM + 框架)

一、Java基础核心

1. 面向对象三大特性

1)封装

隐藏内部实现,只暴露接口,提高安全性。

2)继承

子类可以复用父类代码,提高代码复用性。

3)多态

父类引用指向子类对象,编译看左边,运行看右边。


2. 重载与重写

重载(Overload)

发生在同一个类中,方法名相同,参数不同。

重写(Override)

发生在父子类中,方法名、参数必须相同,返回值类型兼容,访问权限不能更严格。


3. String相关

String、StringBuilder、StringBuffer区别:

String

不可变对象,线程安全,性能较低。

StringBuilder

可变对象,线程不安全,性能高。

StringBuffer

可变对象,线程安全,性能中等。

为什么String不可变:

底层是final修饰的字符数组,保证了字符串的安全性和可复用性(字符串常量池)。


二、集合框架

1. List、Set、Map区别

List

有序,可以重复。

Set

无序,不可重复。

Map

键值对结构,key唯一。


2. HashMap底层原理

在JDK1.8中,HashMap结构为:

数组 + 链表 + 红黑树

执行流程:

1)根据key计算hash值

2)定位数组下标

3)发生哈希冲突时形成链表

4)链表长度达到8时转换为红黑树,提高查询效率


3. HashMap为什么线程不安全

多线程情况下可能出现:

1)数据覆盖

2)链表形成环(JDK1.7)

解决方案:

使用ConcurrentHashMap代替。


4. ArrayList与LinkedList

ArrayList

底层是数组,查询快,插入慢。

LinkedList

底层是双向链表,插入快,查询慢。


三、并发编程

1. 线程创建方式

1)继承Thread类

2)实现Runnable接口(推荐)

3)实现Callable接口(支持返回值)


2. synchronized与Lock

synchronized

使用简单,自动释放锁。

Lock(如ReentrantLock)

更灵活,可以手动加锁和释放锁,支持公平锁。


3. 线程池核心参数

线程池核心类是ThreadPoolExecutor,主要参数:

corePoolSize

核心线程数

maximumPoolSize

最大线程数

workQueue

任务队列

keepAliveTime

线程空闲时间

handler

拒绝策略


4. 线程池执行流程

1)线程数小于核心线程数,直接创建线程执行任务

2)否则进入阻塞队列

3)队列满了且线程数未达到最大值,创建新线程

4)超过最大线程数,执行拒绝策略


四、JVM

1. JVM内存结构

主要包括:

1)程序计数器

2)虚拟机栈

3)本地方法栈

4)堆

5)方法区


2. 堆与栈的区别

栈

存储方法调用和局部变量,线程私有。

堆

存储对象实例,线程共享。


3. 垃圾回收机制

常见算法:

1)标记清除

2)复制算法

3)标记整理

常见垃圾收集器:

1)Serial

2)Parallel

3)CMS

4)G1


五、Spring相关

1. Spring核心

IOC(控制反转)

对象由容器管理,而不是手动创建。

AOP(面向切面编程)

在不修改代码的情况下增强功能,如日志、事务。


2. Spring事务

事务四大特性:

1)原子性

2)一致性

3)隔离性

4)持久性

常见隔离级别:

1)读未提交

2)读已提交

3)可重复读

4)串行化


3. SpringMVC执行流程

1)客户端发送请求

2)DispatcherServlet接收请求

3)HandlerMapping匹配处理器

4)HandlerAdapter执行方法

5)返回ModelAndView

6)视图解析并返回结果


六、MyBatis

1. MyBatis工作流程

1)读取配置文件

2)创建SqlSessionFactory

3)获取SqlSession

4)执行SQL

5)返回结果


2. MyBatis与Hibernate区别

MyBatis

需要手写SQL,灵活性高。

Hibernate

自动生成SQL,开发效率高,但灵活性较低。


七、计算机网络

1. HTTP与HTTPS

HTTP

明文传输,不安全。

HTTPS

基于SSL加密,安全性高。


2. TCP三次握手

1)客户端发送SYN

2)服务端返回SYN + ACK

3)客户端发送ACK

建立连接完成。


3. 四次挥手

1)客户端发送FIN

2)服务端ACK

3)服务端发送FIN

4)客户端ACK

连接关闭。


八、总结

Java面试核心考察内容主要包括:

1)基础语法与面向对象

2)集合框架(尤其是HashMap)

3)并发编程与线程池

4)JVM内存与垃圾回收

5)Spring与MyBatis框架

6)计算机网络基础

相关推荐
apcipot_rain2 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵6 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj5208 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
SomeOtherTime9 小时前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood9 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青10 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
学长毕设10 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪10 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设11 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff13 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码