面试季-java基础面试
·
一、Java 基础(必问)
-
char 能存中文吗?能。char 占 2 字节,基于 Unicode 编码,覆盖常用汉字;生僻字若不在 Unicode 内则无法存储。
-
== 和 equals 区别?
- ==:基本类型比值;引用类型比内存地址。
- equals:默认同 ==;String/Integer 等重写后比内容。
-
static 方法能调用非 static 方法吗?不能。static 方法属于类,非 static 属于对象;需先创建对象实例才能调用。
-
Integer 和 int 区别?
- int:基本类型,默认 0,无 null,占 4 字节。
- Integer:包装类,默认 null,占更多内存,支持自动拆装箱;Web/ORM 场景优先用 Integer。
- String、StringBuffer、StringBuilder 区别?
- String:不可变(final char []),线程安全,修改生成新对象。
- StringBuffer:可变,线程安全(synchronized),多线程拼接用。
- StringBuilder:可变,线程不安全,单线程拼接效率最高。
- 抽象类 vs 接口(JDK8+)
- 抽象类:单继承,可含普通方法 / 成员变量,有构造器。
- 接口:多实现,默认 public abstract;JDK8 + 支持 default/static 方法。
- final 关键字作用
- 类:不可继承(如 String)。
- 方法:不可重写。
- 变量:常量,赋值后不可改。
二、集合框架(高频)
- HashMap 底层(JDK8)
- 结构:数组 + 链表 + 红黑树(链表≥8 转红黑树,≤6 转回链表)。
- 默认容量 16,负载因子 0.75,扩容为2 倍。
- 线程不安全:并发 put 可能覆盖值;多线程用ConcurrentHashMap。
- ConcurrentHashMap(JDK8)
- 弃用 Segment,用CAS+synchronized锁数组节点,锁粒度更细,并发更高。
- ArrayList vs LinkedList
- ArrayList:数组,查询快(O (1)),增删慢(需扩容 / 移位)。
- LinkedList:双向链表,查询慢(O (n)),增删快(改指针)。
- Collection vs Collections
- Collection:集合顶层接口(List/Set 父接口)。
- Collections:工具类,含 sort ()、shuffle () 等静态方法,不可实例化。
三、多线程与并发(重点)
- synchronized vs Lock
- synchronized:关键字,自动加锁 / 释放,非公平锁,可重入。
- Lock:接口,手动 lock ()/unlock (),支持公平锁、超时、中断,更灵活。
- 线程池 7 大参数
- corePoolSize:核心线程数
- maximumPoolSize:最大线程数
- keepAliveTime:非核心线程空闲超时
- workQueue:阻塞队列
- threadFactory:线程工厂
- handler:拒绝策略(Abort/CallerRuns 等)
- sleep() vs wait()
- sleep:Thread 方法,不释放锁,时间到自动唤醒。
- wait:Object 方法,释放锁,需 notify ()/notifyAll () 唤醒,用于同步块。
- ThreadLocal 作用线程本地变量,每个线程独立副本,线程安全;用完务必 **remove ()** 防内存泄漏。
四、JVM(必问)
- JVM 内存区域
- 堆:存对象实例,GC 主要区域(分新生代 / 老年代)。
- 栈:存局部变量、方法栈帧,线程私有。
- 方法区:存类信息、常量、静态变量(JDK8 后为元空间 Metaspace)。
- 垃圾回收算法
- 标记 - 清除:产生内存碎片。
- 标记 - 复制:适合新生代,无碎片,浪费空间。
- 标记 - 整理:适合老年代,无碎片,效率低。
- 常见垃圾回收器
- 新生代:Serial、ParNew、Parallel Scavenge。
- 老年代:Serial Old、Parallel Old、CMS(已废弃)、G1(主流)。
五、框架(Spring/SpringCloud)
- Spring 循环依赖解决
- 仅支持单例 + setter 注入;用三级缓存(singletonObjects/earlySingletonObjects/singletonFactories)提前暴露早期对象。
- SpringBoot vs SpringCloud
- SpringBoot:快速构建单体服务,简化配置。
- SpringCloud:微服务生态,解决服务注册 / 发现、熔断、负载均衡等。
- 服务熔断 vs 降级
- 熔断:服务故障时切断调用,快速失败(如 Hystrix)。
- 降级:高并发时舍弃非核心功能,保证核心可用。
六、分布式与高可用(进阶)
- 分布式锁实现
- Redis:SETNX+EX(原子性)、Redisson(推荐,可重入)。
- Zookeeper:临时顺序节点。
- Redis 三大问题及解决
- 穿透:布隆过滤器 + 空值缓存。
- 雪崩:过期时间随机 + 多级缓存。
- 击穿:互斥锁(SETNX)+ 热点永不过期。
- 秒杀系统设计
- 核心:削峰、限流、防超卖。
- 架构:CDN→网关限流→Redis 预减库存→MQ 异步下单→数据库(UPDATE ... WHERE stock>0)。
七、数据库(高频)
- MySQL 索引优化
- 最左前缀原则、避免索引列计算、用覆盖索引减少回表、小表驱动大表。
- 事务隔离级别
- 读未提交、读已提交(不可重复读)、可重复读(MySQL 默认,解决幻读)、串行化。
更多推荐

所有评论(0)