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

相关推荐
m0_518019481 小时前
C++代码混淆与保护
开发语言·c++·算法
m0_569881471 小时前
C++中的智能指针详解
开发语言·c++·算法
SmartBrain1 小时前
Spring Boot 中常用注解总结(AI工程化)
java·人工智能·spring boot·后端
爱丽_2 小时前
AQS 原理主线:state、CLH 队列、独占/共享与实战排查
java·开发语言·jvm
2401_873544922 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
小江的记录本2 小时前
【Redis】Redis常用命令速查表(完整版)
java·前端·数据库·redis·后端·spring·缓存
add45a2 小时前
C++中的组合模式
开发语言·c++·算法
卓怡学长2 小时前
m281基于SSM框架的电脑测评系统
java·数据库·spring·tomcat·maven·intellij-idea
dys_Codemonkey2 小时前
ROS 2 环境配置与 Shell 配置文件详解(zsh/bash)ROS 2 多工作空间规范配置
开发语言·chrome·bash