《JAVA面经实录》

一句话结论

Java 方向:第一份实习,优先大厂;第二份实习,优先能写进简历的核心项目。

大厂 Java 实习(优势)

  1. 技术栈正统Spring Boot/Spring Cloud、MySQL、Redis、MQ、分库分表、网关、配置中心等都是面试必问、跳槽通用的技术,学到就是硬通货
  2. 规范吊打小厂代码规范、Code Review、分支管理、发布流程、监控告警这些东西小厂基本没有,但大厂面试非常看重
  3. 简历含金量极高有大厂 Java 实习 = 简历基本不会被刷面试官默认你:基础还行、能干活、好培养
  4. 转正路线清晰实习表现好 → 转正 offer不用再跟几万人挤秋招

缺点:

  • 可能只做 “增删改查”、业务模块
  • 深度不一定够,需要自己主动学

小厂 Java 实习(优势)

  1. 真・全栈干从接口、数据库、部署、联调、甚至前端你都要碰适合项目经验空白的人快速攒经历
  2. 接触完整流程一个人负责一个模块甚至一个服务适合锻炼解决问题的能力

缺点(对 Java 求职非常致命):

  • 技术不规范,甚至乱用
  • 技术栈落后:老框架、裸奔无监控、不按微服务来
  • 简历写出来不亮眼,容易被刷
  • 很难学到大厂标准的分布式、高可用思想

给你 Java 方向的最优路线

  1. 大一 / 大二 / 零基础先去小厂 / 项目实战,把:Java 基础 + Spring Boot + MySQL + Redis 玩明白
  2. 大三 / 有一点基础死命冲大厂 Java 实习目标:背书 + 规范 + 转正
  3. 找工作时面试官最看重:大厂实习 ≥ 小厂核心项目 >> 小厂打杂

你现在最该准备的 Java 实习面试内容

  • Java 基础:集合、JVM、多线程、锁
  • Spring:IOC/AOP、事务、Spring Boot 自动配置
  • 中间件:Redis、MQ、MySQL 索引与锁
  • 项目:能用STAR 法则讲清楚一个 Java 后端项目

最全面试大全(完整版)

两个资料网址:看这一篇就够了

https://www.nowcoder.com/discuss/868556812553838592

https://zhuanlan.zhihu.com/p/2023788355352032399

01

☕ Java 基础

泛型与反射、JVM 内存模型与调优、多线程并发编程、I/O 流体系

https://www.nowcoder.com/discuss/868556812553838592

02

🌐 Web 开发

HTTP/HTTPS 协议深度、Servlet/JSP 核心、Tomcat 架构、Web 安全机制

03

🗄️ 数据库

MySQL 索引优化、事务隔离、锁机制、Redis 缓存策略、分库分表

04

🧩 常用框架

Spring IOC/AOP 原理、SpringMVC 流程、MyBatis 动态 SQL、SpringBoot 自动配置

05

🧪 微服务架构

Nacos 注册配置、Gateway 网关、Sentinel 熔断限流、OpenFeign 通信

06

🏗️ 系统设计

架构分层与模块化、设计模式应用、秒杀系统设计、订单系统核心逻辑

07

🔗 分布式系统

分布式事务 (Seata)、分布式锁、一致性 Hash、分布式会话管理

08

⚡ 高并发场景

缓存穿透 / 击穿 / 雪崩、限流策略、异步化处理、JVM 调优实战

09

💻 计算机基础

操作系统进程调度、网络协议栈、组成原理指令系统、硬中断软中断

10

🧠 算法与数据结构

剑指 Offer、LeetCode 热门题、LRU 缓存算法、动态规划、贪心策略

11

🚀 项目实战

电商平台开发、支付系统集成、部署流程 (CI/CD)、性能压测与监控

12

📝 经验总结

阿里 / 字节面试真题复盘、架构师成长路径、技术债务治理、高效阅读法

一、Java 基础(必问)

1.== 和 equals 区别

  • ==
  • 基本数据类型:比较值是否相等。

    引用数据类型:比较内存地址是否相同。

  • equals
  • Object 中默认和 == 一样,比较地址。

    String、Integer 等都重写了 equals,比较内容。

  • 总结:== 比地址 / 值,equals 比内容。
  • 2.String、StringBuilder、StringBuffer

  • String:不可变字符数组,每次修改都会生成新对象,效率低。线程安全。
  • StringBuilder:可变字符数组,效率最高。非线程安全。
  • StringBuffer:可变字符数组,加了 synchronized。线程安全,效率比 StringBuilder 低。
  • 使用场景:少量用 String,单线程大量拼接用 StringBuilder,多线程用 StringBuffer。
  • 3.装箱与拆箱

  • 装箱:基本类型 → 包装类型(如 int → Integer)。
  • 拆箱:包装类型 → 基本类型。
  • Integer 缓存-128 ~ 127 会复用对象,超出范围才 new。
  • 作用:方便基本类型与对象互转,简化代码。
  • 二、集合(高频)

    1.ArrayList 和 LinkedList 区别

    • ArrayList:底层动态数组。查询快(支持随机访问),增删慢(要移动元素)。线程不安全。
    • LinkedList:底层双向链表。查询慢(要遍历),增删快(改指针)。实现了 Deque 接口,可做队列、栈。

    2.HashMap 原理(JDK 1.8)

  • 结构:数组 + 链表 + 红黑树
  • 哈希冲突:链地址法
  • 链表转红黑树:链表长度 ≥ 8,且数组长度 ≥ 64。
  • 红黑树转回链表:节点 ≤ 6。
  • 线程不安全:可能出现死循环、数据覆盖
  • 扩容:加载因子 0.75,容量翻倍。
  • 3.ConcurrentHashMap原理

  • JDK 1.7:Segment 分段锁,粒度大。
  • JDK 1.8:CAS + synchronized,锁头节点,粒度更小,性能更高。
  • 线程安全,用于高并发场景。
  • 4.HashSet 原理

  • 底层就是 HashMap
  • 元素存在 key 位置,value 是固定的 Object 对象。
  • 保证唯一性靠:hashCode() + equals()
  • 三、多线程 & 并发(高频)

    1.线程的 4 种创建方式

  • 继承 Thread 类。
  • 实现 Runnable 接口(无返回值)。
  • 实现 Callable 接口(有返回值,可抛异常)。
  • 线程池(推荐,复用线程,控制并发)。
  • 2.start () 和 run () 区别

  • start():启动线程,进入就绪态,由 JVM 调度执行 run ()。
  • run():只是普通方法,不会启动新线程
  • 3.线程生命周期

    新建 → 就绪 → 运行 → 阻塞 → 终止

    • 阻塞分:同步阻塞、等待阻塞、超时阻塞。

    4.synchronized 原理

  • 作用:保证原子性、可见性、有序性
  • 使用:
  • 修饰普通方法:锁当前对象。

    修饰静态方法:锁类对象。

    修饰代码块:锁指定对象。

  • JDK 1.6 锁升级:偏向锁 → 轻量级锁 → 重量级锁
  • 5.volatile 关键字

  • 两个作用:
  • 保证可见性(一个线程改,其他线程立刻看到)。

    禁止指令重排(单例双重校验常用)。

  • 注意不保证原子性,不能替代锁。
  • 6.ThreadLocal

  • 线程本地变量,每个线程独立副本,线程安全。
  • 适用:用户信息、上下文、事务场景。
  • 坑:使用完必须 remove(),否则会内存泄漏
  • 7.线程池 7 大参数

  • corePoolSize:核心线程数。
  • maximumPoolSize:最大线程数。
  • keepAliveTime:非核心线程空闲时间。
  • unit:时间单位。
  • workQueue:阻塞队列。
  • threadFactory:线程工厂。
  • handler:拒绝策略。
  • 8. 线程池 4 种拒绝策略

  • AbortPolicy:抛异常(默认)。
  • DiscardPolicy:丢弃任务。
  • DiscardOldestPolicy:丢弃队列最老任务。
  • CallerRunsPolicy:调用者线程执行。
  • 四、JVM(高频)

    1.JVM 内存区域

  • :存放对象,GC 主要区域,线程共享。
  • 虚拟机栈:局部变量表、方法栈帧,线程私有。
  • 方法区:类信息、常量、静态变量。
  • 程序计数器:记录执行行号,线程私有。
  • 本地方法栈:Native 方法。
  • 2.GC 判断对象死亡

    1. 引用计数法:简单,但无法解决循环引用
    2. 可达性分析:以 GC Roots 为起点,不可达则回收。
    • GC Roots:栈中引用对象、静态属性、常量、本地方法引用。

    3.垃圾收集算法

  • 标记 - 清除:产生内存碎片。
  • 标记 - 复制:适合新生代,效率高,空间减半。
  • 标记 - 整理:适合老年代,无碎片。
  • 4.常见垃圾收集器

  • Serial:单线程。
  • ParNew:多线程。
  • CMS:并发低延迟。
  • G1:区域化,兼顾吞吐量与延迟,现在主流
  • 5.类加载过程

  • 过程:加载 → 验证 → 准备 → 解析 → 初始化
  • 双亲委派:先交给父类加载器,父类不能加载才自己加载。
  • 好处:安全、防止类重复加载、保证核心类不被篡改
  • 五、Spring(必问)

    1.IOC

  • 控制反转:对象创建、依赖注入交给 Spring 容器管理。
  • 作用:解耦,不用 new 对象,统一管理生命周期。
  • 核心:工厂 + 反射 + 配置
  • 2.AOP

  • 面向切面编程,不修改源码实现功能增强。
  • 应用:日志、事务、权限、监控。
  • 动态代理:JDK 动态代理:代理接口。CGLIB:代理类。
  • 3.Bean 生命周期

  • 实例化
  • 属性填充(依赖注入)
  • 初始化Aware 接口前置处理init-method后置处理
  • 使用
  • 销毁
  • 4.Spring 事务传播机制

  • REQUIRED:有事务则加入,没有则新建(最常用)。
  • REQUIRES_NEW:新建事务,挂起旧事务。
  • SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER、NESTED。
  • 六、MySQL(高频)

    1.索引为什么快

  • 底层结构:B+ 树
  • 特点:有序,范围查询快。只有叶子节点存数据,IO 次数少。
  • 聚簇索引:叶子节点存整行数据
  • 非聚簇索引:叶子节点存主键,需要回表。
  • 2.事务四大特性 ACID

  • A 原子性:要么全成功,要么全失败。
  • C 一致性:执行前后数据合法。
  • I 隔离性:事务之间互不干扰。
  • D 持久性:提交后永久生效。
  • 3.事务隔离级别

  • 读未提交:脏读、不可重复读、幻读都可能。
  • 读已提交:解决脏读。
  • 可重复读MySQL 默认,解决不可重复读。
  • 串行化:无并发问题,性能低。
  • 七、Redis(必问)

    1.Redis 数据结构

  • String、List、Set、ZSet、Hash、Bitmap、HyperLogLog、Geo。
  • 适用:缓存、限流、分布式锁、排行榜、签到等。
  • 2.缓存穿透、击穿、雪崩

  • 缓存穿透:查不存在的数据 → 缓存空值、布隆过滤器。
  • 缓存击穿:热点 key 过期 → 互斥锁、永不过期。
  • 缓存雪崩:大量 key 同时过期 → 随机过期、集群、降级。
  • 3.Redis 持久化

  • RDB:快照,定时全量备份,恢复快,可能丢数据。
  • AOF:记录写命令,实时性高,数据更安全,文件大,恢复慢。
  • 企业常用:RDB + AOF 混合持久化
  • #大厂实习和小厂实习最大的区别是什么?##面试经验谈##JAVA#
    JAVA面经实录 文章被收录于专栏

    全网少有的真实 Java 面经合集,持续更新大厂原题、高频考点、手写答案与思路复盘。 无论是校招还是社招,无论是中级还是冲击架构岗,这里都有你面试时真正会被问到的内容。关注不迷路,备战 Java 面试,看这一份就够。

    全部评论

    相关推荐

    03-31 00:39
    门头沟学院 C++
    南岗痞子:不还有俩没结束吗
    点赞 评论 收藏
    分享
    评论
    2
    3
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务