Java面试宝典
Java面试宝典(完整版,高频必背)
一、Java 基础核心
- JDK、JRE、JVM 区别
• JVM:Java虚拟机,跨平台核心,只认class字节码
• JRE:JVM + 核心类库,运行Java程序必备
• JDK:JRE + 编译工具(javac)、调试工具,开发必备
- 面向对象三大特性
封装、继承、多态
• 封装:隐藏内部实现,暴露公共方法
• 继承:子类复用父类代码,单继承、多实现
• 多态:父类引用指向子类对象,编译看父类,运行看子类
- 基本数据类型 & 包装类
基本类型8种:
byte、short、int、long、float、double、char、boolean
• 包装类:都是引用类型,默认值null
• 自动装箱拆箱:JDK5+ 基本类型和包装类自动转换
• 缓存机制:Integer(-128~127)、Byte、Short、Long 有缓存
- == 和 equals 区别
• ==:基本类型比值,引用类型比内存地址
• equals:默认同==,String、Integer等重写后比内容
- String、StringBuilder、StringBuffer
• String:不可变,底层final字符数组,频繁拼接效率低
• StringBuilder:可变、线程不安全、效率高(常用)
• StringBuffer:可变、线程安全、加了synchronized
- 重载 和 重写
• 重载:同类中,方法名相同、参数列表不同,和返回值无关
• 重写:子类重写父类方法,方法名/参数/返回值一致,权限不能更严格
二、集合框架高频面试
- ArrayList 和 LinkedList
• ArrayList:底层数组,查询快、增删慢,线程不安全
• LinkedList:底层双向链表,增删快、查询慢
- HashMap 核心(必问)
• 底层:数组+链表+红黑树
• JDK8:链表长度≥8且数组长度≥64 转红黑树;小于6 退化成链表
• 负载因子默认0.75,初始容量16
• 线程不安全,并发推荐:ConcurrentHashMap
- HashMap 为什么线程不安全
多线程扩容、插入时易出现环形链表、数据覆盖、丢失数据
三、Java 异常体系
• 分两大类:Error(系统级错误,无法处理)、Exception
• Exception 分:
◦ 编译时异常(受检):必须try-catch或throws
◦ 运行时异常(RuntimeException):可不用捕获
• 常用关键字:try、catch、finally、throw、throws
• finally:除非System.exit,否则一定会执行
四、JVM 面试重点
- JVM 内存区域
程序计数器、虚拟机栈、本地方法栈、堆、方法区
- 堆内存分代
新生代(Eden、Survivor From/To)、老年代
• 垃圾回收:Minor GC(新生代)、Full GC(整堆)
- 垃圾回收 GC
• 判定垃圾:引用计数法、可达性分析
• 常用收集器:G1、ZGC、Parallel GC
五、多线程 & 并发
- 线程创建四种方式
继承Thread、实现Runnable、实现Callable+Future、线程池
- synchronized 和 Lock
• synchronized:内置锁,自动加解锁,可修饰方法/代码块
• Lock:手动锁,灵活,可超时、可中断
- 线程池七大参数
核心线程数、最大线程数、空闲时间、队列、拒绝策略、线程工厂
六、Spring 核心面试
-
IOC 控制反转:对象创建和依赖交给Spring容器管理
-
DI 依赖注入:构造器、setter、注解注入
-
AOP 面向切面:动态代理,做日志、事务、权限
-
Spring Bean 生命周期:实例化→属性填充→初始化→销毁
七、SpringBoot 高频
• 自动配置原理:@EnableAutoConfiguration
• 内置Tomcat、约定大于配置
• yml 和 properties 区别、配置优先级
八、MySQL 数据库
-
索引结构:B+树
-
事务四大特性:ACID
-
事务隔离级别、脏读/不可重复读/幻读
-
慢查询优化、联合索引最左前缀原则
九、Redis 必问
• 五种基本数据类型
• 缓存穿透、击穿、雪崩 解决方案
• 过期淘汰策略、持久化RDB/AOF
十、常用面试手写题
-
单例模式(饿汉、懒汉、双重校验锁)
-
冒泡、二分查找
-
反转链表
-
线程交替打印
更多推荐
所有评论(0)