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)计算机网络基础

相关推荐
步行cgn3 分钟前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su19 分钟前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
传奇开心果编程43 分钟前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
qetfw1 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash
电子云与长程纠缠1 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
cspttty1 小时前
2027风险管理岗准备路线:数学与应用数学如何补齐金融、SQL与Python
开发语言·python·金融
我命由我123452 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
苜蓿muxu2 小时前
Java 字符串拼接:+、StringBuilder、StringBuffer的区别
java
严谨的麻辣烫2 小时前
Python HTTP 连接池怎么用?从连接复用到请求异常排查
开发语言·python·http·requests·网络排查
摇滚侠2 小时前
《Java并发编程之美》第 4 章 Java 并发包中原子操作类原理剖析 阅读笔记 7
java·笔记·python