Experience
Siona
Experience
大厂技术面试考察点
1. 基础知识
2. 技术广度
3. 技术深度
4. 项目经验
5. 团队管理
6. hr -- 参考技术面试评价,学历,背景,软技能,人品 → 技术评级
技术范围
1. 算法与数据结构(应届生必问)
2. JVM、MySQL 优化、JDK 源码、Linux、操作系统
3. 项目
4. 分布式架构:分布式 session、分布式事务、分布式锁、RPC 调用、接口幂等性、分库分表
5. 微服务:
- Spring Cloud: Gateway, Eureka, OpenFeign, Ribbon
- Spring Cloud Alibaba: Nacos, Dubbo, Sentinel, Seata
面试优化及面试指导
一、自我介绍
六年以上大型互联网电商与金融项目研发经验,对大型互联网电商的后端架构和整体业务有
深入的理解,三年以上团队研发管理经验,对分布式,高并发,高可用,微服务架构设计有
深度理解,曾负责过注册用户上亿,日活近500万的电商平台的架构设计与研发。对IT技术
有较浓厚的兴趣,喜欢跟踪与钻研新技术以及底层实现。有深入研究过Zookeeper,
Dubbo,Netty,Spring以及Spring Cloud等开源框架的源码。
二、掌握技术技能(引导面试官发问)
1. Java 基础扎实,掌握 JVM 原理、多线程、网络原理、设计模式、常用数据结构和算法。
2. 深入理解 Spring,SpringMVC,MyBatis 等开源框架设计原理及底层架构,研究过部分核心功能源码,具备一定的框架定制开发能力。
3. 深入理解 Redis 线程模型,熟练掌握 Redis 的核心数据结构的使用场景,熟悉多级缓存架构,
熟悉各种缓存高并发的使用场景,比如缓存雪崩、缓存穿透、缓存失效、热点缓存重建等。
4. 熟悉常见消息中间件的使用,解决过各种消息通信场景的疑难问题,比如消息丢失、消息重复消费、消息顺序性、大规模消息积压问题。
5. 对于高性能 IO 通信模型以及相关开源组件 Netty 等源码有过深度研究,熟悉 Netty 线程模型,
熟悉百万级并发服务器架构设计。
6. 深入理解 JVM 底层原理,熟悉 JVM 各种垃圾收集器的使用以及核心参数的调优,有过一定的 JVM 线上调优经验,
对 JVM 调优有自己独到见解。
7. 深入理解 SpringBoot、SpringCloud、Dubbo 等微服务框架的设计原理及底层架构,研究过核心源码,
熟悉各种微服务架构场景设计。比如,服务注册与发现,服务限流、降级、熔断,服务网关路由设计,服务安全认证架构。
8. 在项目中解决过各种分布式场景的技术难题,比如分布式锁,分布式事务,分布式 session,分布式任务,海量数据的分库分表 ……
三、项目经验
1. 做过类似电商项目
2. 没做过类似电商项目,银行内部项目,OA,ERP,内部管理系统。
想下自己做过的项目如果压力暴增 100 倍,现有系统是否能抗住,如果扛不住应该怎么优化?
用哪些技术?试着将一些主流技术应用到自己项目中,可以写到自己简历中。例如,JVM 以及 MySQL 的优化。
3. 如果一些技术实在用不上,可以说之前有跟朋友兼职做过 xxx 系统。
这种系统压力一般不会太大,可以在系统优化上写,
比如,把 gc 的次数和时间由多少优化到了多少,
把 QPS 之类的由多少优化到了多少。
项目细节点
1. 项目大题情况
2. 项目软硬件技术架构
3. 项目大体规模,多少人参与,并发量与数据量多大,你在其中的角色
- gateway: 8 核 16 G,抗住每秒 2000+ 请求
32 核 64 G,抗住每秒上万请求,支撑 1w+ 请求
5 台 8 核 16 G,支撑 10w+ 请求
10 台 32 核 64 G,
- web 服务:需要根据业务的复杂度来看,一般就单台几百 ~ 几千的并发
- 缓存 Redis:单台几万的并发,要么用集群架构可以到几十万并发
- 数据库:正常 8 核 16 G 抗个大几百并发问题不大,
如果并发提高 10 倍到 4,5k,要么分库分表横向扩容,要么增大机器配置,
比如 32 核 64 G 高配物理机,抗个 4,5k 并发问题不大
- 线上实时 QPS 等性能指标计算
4. 项目的分布式,缓存,消息,高可用,调优,性能监控
以秒杀下单核心链路举例,看下各环节做了哪些事情,为了解决什么问题。
(1)缓存
- 缓存架构
- 缓存穿透,雪崩,失效
(2)消息
- 消息中间件选型
- 消息服务高可用
- 消息重复消费
- 丢消息
- 消息积压
(3)分布式
- 为什么要分布式、微服务?
- 注册中心用的什么?服务注册与发现原理是什么?
- 注册中心如果出问题或挂了怎么办?服务直接还能继续通信吗?
- 微服务直接调用负载均衡策略有哪些?
- 超卖问题的分布式锁实现原理,Redis 与 zk 实现优劣对比。
- 分布式 session 怎么做的?
- 核心交易链路分布式事务
- 分库分表,全局序列 ID 方案
(4)高可用
- 核心服务链路的限流、熔断、降级
- 服务雪崩,资源隔离
(5)调优
- JVM
- MySQL
- Redis
- 分布式
- 微服务分布式中间件的参数调优等
(6)服务监控
-
5. 项目中的难点以及优化改进点
- 分布式锁高并发优化
- 缓存与数据库双写不一致
- 消息积压处理
- 降级操作的数据补偿
- 服务扩容
- 核心服务全链路保证高可用
- 复杂业务设计(DDD架构)
四、 获奖经历
面试之前充分了解公司,面试完问下公司的技术栈及公司业务。
项目及主要负责的模块 ⭐️⭐️⭐️⭐️⭐️
1. 平时多了解一下目前在做的项目中的核心模块,核心功能的业务与使用到的技术
画出项目架构图,介绍自己所处的模块
聊聊你最有成就感的项目 ⭐️⭐️⭐️⭐️⭐️
1. 项目是做什么的?
2. 用了什么技术?
3. 你在项目中担任的职位
4. 收获了什么?
自己最有挑战的项目、难点 ⭐️⭐️⭐️⭐️⭐️
1. 使用什么技术解决了什么项目难点?
2. 使用什么技术优化了什么项目功能?
3. 使用什么技术节省了多少成本?
遇到过哪些设计模式?
项目中缓存怎么用的?
分布式锁在项目中用过吗?
为什么要进行系统拆分?如何进行系统拆分?
什么是微服务?微服务之间是如何独立通讯的?
如何设计一个高并发的系统?
如何限流?在工作中怎么做的?说一下具体实现?
分库分表(业务侧)
分库分表(数据侧)
C10k 问题。如何解决?
Maven 中 package 和 install 区别
package → 打包,打成 jar / war
install → 将 jar / war 安装到本地仓库中
⭐️代表提及的概率