主题
面试速答(先看这里)
**一句话结论:**分表前多少数据?
60秒标准回答:
26 届,双一流硕士, 2 段大厂实习( CICD 系统、资金结算系统)
资金结算实习四个月,干的最难的工作是什么?数据库稳定性治理,分库分表、解决数据倾斜问题
分表前多少数据? 1000 万、为啥要分, 300 万 / 月,参与实现了其中哪部分?
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**26 届,双一流硕士, 2 段大厂实习( CICD 系统、资金结算系统)
- **要点2:**分库分表之后数据迁移怎么做的?
- **要点3:**你做过的项目中,做过哪些比较好的设计模式吗?
- **要点4:**AOP+ 自定义注解实现了啥功能?
- **要点5:**如何统计一个 bean 的某个方法被调用多少次?
**记忆锚点:**CAS → JAVA → JUC → MySQL → trace → finally
易错提醒:
- 如果方法执行过程失败了怎么办?
加分表达:
- 如果是 char(10) 和 char(100) 呢?
- 如果你trace发现你并不慢,但是上游就说你慢,怎么办?
追问准备:
- 26 届,双一流硕士, 2 段大厂实习( CICD 系统、资金结算系统) 资金结算实习四个月,干的最难的工作是什么?
- 数据库稳定性治理,分库分表、解决数据倾斜问题, 分表前多少数据?
- 1000 万、为啥要分, 300 万 / 月,参与实现了其中哪部分?
- 分表键和分表算法介绍下?
面试者背景
> 26****届,双一流硕士,2段大厂实习(CICD系统、资金结算系统) > > 资金结算实习四个月,干的最难的工作是什么?数据库稳定性治理,分库分表、解决数据倾斜问题, > > 分表前多少数据?1000万、为啥要分,300万**/月,参与实现了其中哪部分? > > **分表键和分表算法介绍下?费用单,商户id**,分了多少张表?128表,16库?怎么定出来的。** > > 费用单的历史数据还有用吗?为啥不考虑归档或者搜索引擎。 > > 分表后主键是怎么生成的?号段模式**、你这个sequence数据的存储在哪个库哪张表?某个单库中。** > > 数据倾斜问题,大商户。有多少量?5万**/日,现在他有多少数据? > > 怎么解决的数据倾斜问题?二次分表。客商白名单、单独加时间二次分表。 > > 客商的数据查询怎么办?为啥不干脆直接按照时间分? > > 分库分表之后数据迁移怎么做的?读旧双写(双写是怎么实现的双写?先写哪个库?失败了咋办?)、存量数据迁移(怎么定义存量数据?根据时间、开增量双写的时间?) > > 你做过的项目中,做过哪些比较好的设计模式吗?多渠道资金打款>策略模式+模板+工厂,分别起到了什么作用?三种工厂模式有什么区别? > > **AOP+自定义注解实现了啥功能?日志处理。如何实现的AOP可以切到这个注解上?你这个直接里有参数吗?日志要打什么?** > > **如何统计一个bean的某个方法被调用多少次?如果方法执行过程失败了怎么办?** > > **finally的代码什么情况可能会不执行?守护线程了解么?JAVA中可以创建守护线程吗?** > > **JAVA中多个线程做同步,有哪些方案?加锁、JUC,JUC中都有啥?原子类、并发控制工具、锁、并发容器、线程池。CoW是啥意思?你用过原子类么?使用场景是啥?** > > **AQS中已经用了CAS**,为什么还需要CAS?volatile怎么保证的可见性。CAS本身不是基于CPU缓存一致性协议(MESI)做的吗,为啥还需要保证一致性?** > > Mysql 定义varchar(10)和varchar(100),同时存6个字符的时候,有区别么?存储无区别,排序有区别?排序上有啥区别? > > 如果是char(10)和char(100)呢?MySQL的深分页如何解决?子查询就没有深分页的问题了吗?用es。Es就没深分页了么?跳页咋办? > > MySQL的主从同步是怎么做的?为什么需要relay log****中转一下?binlog是拉的还是推的?什么情况可能会主从延迟? > > 线上一个接口响应时间不符合预期,如何排查和解决?trace **,比如说是慢SQL**可能是啥原因导致的。 > > 自己不慢,下游接口慢怎么办?异步? > > 如果你trace发现你并不慢,但是上游就说你慢,怎么办?
题目解析
> 资金结算实习四个月,干的最难的工作是什么?数据库稳定性治理,分库分表、解决数据倾斜问题, > > 分表前多少数据?1000万、为啥要分,300万**/月,参与实现了其中哪部分? > > **分表键和分表算法介绍下?费用单,商户id**,分了多少张表?128表,16库?怎么定出来的。** > > 费用单的历史数据还有用吗?为啥不考虑归档或者搜索引擎。 > > 分表后主键是怎么生成的?号段模式**、你这个sequence数据的存储在哪个库哪张表?某个单库中。** > > 数据倾斜问题,大商户。有多少量?5万**/**日,现在他有多少数据? > > 怎么解决的数据倾斜问题?二次分表。客商白名单、单独加时间二次分表。 > > 客商的数据查询怎么办?为啥不干脆直接按照时间分? > > 分库分表之后数据迁移怎么做的?读旧双写(双写是怎么实现的双写?先写哪个库?失败了咋办?)、存量数据迁移(怎么定义存量数据?根据时间、开增量双写的时间?)
> 你做过的项目中,做过哪些比较好的设计模式吗?多渠道资金打款**>策略模式+模板+**工厂,分别起到了什么作用?三种工厂模式有什么区别? > > AOP+自定义注解实现了啥功能?日志处理。如何实现的AOP可以切到这个注解上?你这个直接里有参数吗?日志要打什么? > > 如何统计一个bean的某个方法被调用多少次?如果方法执行过程失败了怎么办?
打开文档:✅使用自定义注解+切面减少冗余代码,提升代码的鲁棒性
> finally****的代码什么情况可能会不执行?守护线程了解么?JAVA中可以创建守护线程吗? > > JAVA****中多个线程做同步,有哪些方案?加锁、JUC,JUC中都有啥?原子类、并发控制工具、锁、并发容器、线程池。CoW是啥意思?你用过原子类么?使用场景是啥? > > AQS中已经用了CAS,为什么还需要CAS?volatile怎么保证的可见性。CAS本身不是基于CPU缓存一致性协议(MESI)做的吗,为啥还需要保证一致性?
> Mysql 定义varchar(10)和varchar(100),同时存6个字符的时候,有区别么?存储无区别,排序有区别?排序上有啥区别? > > 如果是char(10)和char(100)呢?MySQL的深分页如何解决?子查询就没有深分页的问题了吗?用es。Es就没深分页了么?跳页咋办?
📄 ✅varchar(100)和varchar(10)有什么区别?
打开文档:✅varchar(100)和varchar(10)有什么区别?
📄 ✅什么是ElasticSearch的深度分页问题?如何解决?
打开文档:✅什么是ElasticSearch的深度分页问题?如何解决?
> MySQL的主从同步是怎么做的?为什么需要relay log中转一下?binlog是拉的还是推的?什么情况可能会主从延迟?
> 线上一个接口响应时间不符合预期,如何排查和解决?trace **,比如说是慢SQL**可能是啥原因导致的。 > > 自己不慢,下游接口慢怎么办?异步? > > 如果你trace发现你并不慢,但是上游就说你慢,怎么办?
打开文档:✅如果一个接口响应时间不符合预期,怎么排查跟解决?