🔧 技术面试题清单 — 某企业 IT开发工程师准备
按优先级排序,★数越多越可能考。每题附简要答案思路,先过★多的。
一、Java 核心(★★★★★)
1. HashMap 底层原理
- 数组+链表+红黑树(jdk8+)
- put流程:计算hash→定位桶→链表尾插→超8转红黑树
- 扩容机制:默认16,负载因子0.75,2倍扩容,rehash
- 线程不安全 → ConcurrentHashMap 用分段锁/CAS
2. 线程池核心参数
- corePoolSize / maxPoolSize / keepAliveTime / workQueue / ThreadFactory / RejectedExecutionHandler
- 执行流程:核心→队列→最大→拒绝策略
- 拒绝策略:AbortPolicy抛异常 / CallerRunsPolicy调用者执行 / DiscardPolicy静默丢弃 / DiscardOldestPolicy丢弃最老
- 生产不要用Executors默认,手动new ThreadPoolExecutor
3. JVM 内存模型 + GC 基础
- 堆:新生代(Eden/S0/S1)→ 老年代 → 元空间(取代永久代)
- GC:Minor GC(Eden满触发)→ Full GC(老年代满)
- 常用回收器:CMS(低延迟)、G1(默认,大堆推荐)
- 调优:-Xms -Xmx 设一样防抖动
4. 异常体系 + try-with-resources
- Throwable → Error / Exception → RuntimeException / Checked Exception
- try-with-resources:自动调用
AutoCloseable.close()(Java7+) - 实战建议:最外层catch不要吞异常,至少要log
5. 反射 vs 注解
- 反射:运行时获取类信息,setAccessible暴力访问私有
- 注解:@Retention SOURCE/CLASS/RUNTIME,Spring大量用
二、Spring Boot/Cloud(★★★★★)
6. Spring Boot 自动配置原理
@SpringBootApplication= @Configuration + @EnableAutoConfiguration + @ComponentScan- 核心:
spring.factories中的自动配置类 - 条件注解:@ConditionalOnClass / @ConditionalOnMissingBean / @ConditionalOnProperty
- 问「怎么自定义starter?」→ 写AutoConfiguration + spring.factories
7. Spring 事务失效场景
- 同类非事务方法调用(this.method())→ 代理不生效
- 异常类型不匹配(rollbackFor=Exception.class 没设)
- 方法不是public、异常被try-catch吞了
8. Spring Cloud 核心组件(你有经验就聊)
- Nacos:注册中心+配置中心(替代Eureka+Config)
- Gateway:路由/断言/过滤器(替代Zuul,性能更好)
- Feign/OpenFeign:声明式HTTP调用 + 负载均衡
- Sentinel:流量控制/熔断降级(你有WPS文件Feign→HTTP的经历可以说这个)
9. AOP 实际场景
- 日志记录、权限校验、事务管理、性能监控
- 关键概念:JoinPoint / PointCut / Advice(@Before @After @Around)
- Spring AOP基于动态代理(JDK接口代理 / CGLIB类代理)
10. Bean的生命周期
- 实例化 → 属性赋值 → 各项初始化(Aware接口/BPP/init/init-method)→ 使用 → 销毁
- 关键扩展点:BeanPostProcessor(前后处理)、InitializingBean、@PostConstruct
三、MyBatis + 数据库(★★★★)
11. MyBatis #{} vs ${}
- #{}:预编译、防SQL注入、自动加引号(必须优先用)
- ${}:直接拼接字符串,有注入风险(仅用于表名/排序字段动态传入)
12. MyBatis 缓存机制
- 一级缓存(SqlSession级别,默认开启)→ 二级缓存(namespace级别,需配置)
- 缓存失效:增删改操作会清空缓存(避免脏读)
13. Oracle 常用点
- 分页:
ROWNUM或OFFSET FETCH(12c+) - 序列:
CREATE SEQUENCE,取值NEXTVAL - 索引:B+树索引,复合索引最左前缀原则
- 常用函数:NVL/NVL2、DECODE、CASE WHEN、TO_DATE/TO_CHAR
14. SQL 优化经验(结合你的项目说!)
「重构核心接口使响应提升400%,主要做了:慢SQL排查(EXPLAIN看全表扫描)→ 加索引 → 减少联表 → 分页优化 → 结果集缓存到Redis」
四、接口开发/RESTful(★★★★)
15. RESTful 规范
- GET查询 / POST创建 / PUT全量更新 / PATCH部分更新 / DELETE删除
- 状态码:200成功 / 201创建 / 400参数错误 / 401未认证 / 403无权限 / 404不存在 / 500服务器错误
- 对接口版本管理:URL路径
/api/v1/或 Header
16. 接口鉴权方式
- JWT Token(无状态、自包含)
- OAuth2.0(第三方授权)
- Session+Cookie(有状态、适合服务端渲染)
17. 接口幂等性处理
- 前端防重复提交 + 后端:唯一流水号(token)去重 / 数据库唯一索引 / Redis分布式锁
五、K8s/Docker(★★★)
18. Docker 核心概念
- 镜像(Image)→ 容器(Container)→ Dockerfile / docker-compose
- 常用命令:build / run / exec / logs / compose up
19. K8s 核心组件(你有实战就说)
- Pod(最小单位)→ Service(暴露服务)→ Deployment(管理副本)→ ConfigMap/Secret(配置)
- 你的经历:「独立完成华为云K8s生产部署,解决多环境联调难题,输出标准化运维手册」
- 关键词:ingress、helm、namespace、探针(liveness/readiness)
六、Redis(★★★)
20. Redis 常见数据结构
- String / Hash / List / Set / ZSet
- 实战你用过的场景:缓存查询结果、分布式锁(SETNX)、计数器
21. 缓存穿透/击穿/雪崩
- 穿透:查不存在的数据 → 布隆过滤器或缓存空值
- 击穿:热点key过期 → 互斥锁重建缓存
- 雪崩:大量同时过期 → 过期时间加随机值/多级缓存
七、前端(★★)
22. Vue 响应式原理
- Vue2:Object.defineProperty(递归、无法监听数组下标变更)
- Vue3:Proxy(性能更好、支持数组/动态属性)← 建议提这个显得新
23. Vue 生命周期
- beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeDestroy → destroyed
- 重点:created 初始化数据、mounted 做DOM操作、destroyed 清理定时器
八、项目经验回答套路(必考)
「你说一下你最有挑战的项目?」
选「接口性能优化」,因为数字最亮眼。
框架:「海外开发平台核心查询页特别慢,用户要等几十秒。我排查发现SQL全表扫描 + 联表过多。做了三件事:①优化SQL加索引 ②拆大查询为多步缓存 ③REST接口改批量返回。结果接口响应提升400%,用户从几十秒降到秒级。」
附加:「这个过程我沉淀了SQL优化文档,团队共享。」
「你遇到过什么技术难题?」
选「K8s部署」
「华为云K8s部署没先例,文档不完整,环境联调踩了很多坑。我自己一边试错一边记录,最后成功上线并输出《K8s快速部署手册》,团队后续直接复用。演示期还通宵攻坚,保障零故障交付。」
复习优先级
⭐⭐⭐⭐⭐ 必过:HashMap / 线程池 / Spring Boot自动配置 / 事务失效 / 项目STAR
⭐⭐⭐⭐ 重点:MyBatis #/$ / SQL优化 / RESTful规范 / Redis缓存三大问题
⭐⭐⭐ 扫一遍:K8s概念 / AOP / Bean生命周期 / Oracle分页
⭐⭐ 看一眼:Vue响应式 / 前端生命周期最后提醒:面试多聊你的实战项目,少背概念。你的项目里全是真实案例,这是最大优势。