✅工作4年,供应链相关,分库分表、分布式锁

面试者背景

:::warning 20年毕业,*4年,供应链相关、分布式、微服务、*

介绍下一个核心的业务流程,收发货,核心单据数据量有多少?流水表、5000**万。

有做分库吗?分表怎么分的?shardingjdbc*、发货子单号分表、64*张表,

发货单号:业务类型、时间戳、自增ID-> hash -> **取模。列表查询怎么做?

Shardingjdbc,如果没带分表字段还能查询吗?算法是如何实现的(配置还是实现了算法类)?**

如何实现去指定单表查询?hint**知道吗?

主键是如何实现的?雪花算法。为啥不直接用redis*的自增id?生成的雪花算法多少位?一定19位吗?什么情况下可能会重复?nanoid*用过吗?

为啥只做了分表,没做分库?原因是什么?为啥没考虑用归档解决数据量大的问题?

后期如果64**张表不够了,怎么办?

如何设计一个分库分表方案?选分表键、选中间件,同步方案、切流方案。。。除了insert*,还有update*怎么办?

项目中有哪些难点?springboot**升级,兼容问题。

遇到过哪些线上问题?oom*,excel导出,导出接口限流,poi->easyexcel。。dump*是如何获取的?

导出接口限流是怎么做的?redisson*,ratelimiter*。

OOM排查流程、、除了内存泄漏还有其他原因吗?*Java发生OOM后会立刻挂掉吗?先发生OOM还是先GC*

Nacos用来做什么?应用如何感知到配置变化的?长轮询??为啥不建长连接?**

Nacos*AP还是CP?配置中心是哪种?为啥配置中心CA更重要呢?*

分布式锁的粒度和事务粒度如何控制?平时是如何加事务的?编程式事务。

分布式如何做链路追踪、雪花算法,

分布式锁,乐观锁锁和悲观锁哪个适合高并发?乐观锁无锁吗?

:::

题目解析

:::color4 有做分库吗?分表怎么分的?shardingjdbc、发货子单号分表、64张表,

发货单号:业务类型、时间戳、自增ID-> hash -> 取模。列表查询怎么做?

为啥只做了分表,没做分库?原因是什么?为啥没考虑用归档解决数据量大的问题?

:::

✅什么是分库?分表?分库分表?

✅分表算法都有哪些?

:::color4 Shardingjdbc,如果没带分表字段还能查询吗?算法是如何实现的(配置还是实现了算法类)?

如何实现去指定单表查询?hint**知道吗?

主键是如何实现的?雪花算法。为啥不直接用redis的自增id?生成的雪花算法多少位?一定19位吗?什么情况下可能会重复?nanoid用过吗?

后期如果64**张表不够了,怎么办?

如何设计一个分库分表方案?选分表键、选中间件,同步方案、切流方案。。。除了insert,还有update怎么办?

:::

✅分表后全局ID如何生成?

✅分库分表后,表还不够怎么办?

:::color4 遇到过哪些线上问题?oom,excel导出,导出接口限流,poi->easyexcel。。dump是如何获取的?

:::

✅OOM问题排查过程

✅基于EasyExcel+线程池解决POI文件导出时的内存溢出及超时问题

:::color4 导出接口限流是怎么做的?redisson,ratelimiter。

:::

✅什么是滑动窗口限流?

✅如何基于Redis实现滑动窗口限流?

:::color4 OOM排查流程、、除了内存泄漏还有其他原因吗?Java发生OOM后会立刻挂掉吗?先发生OOM还是先GC?

:::

✅Java发生了OOM一定会导致JVM 退出吗?

✅JVM 中一次完整的 GC 流程是怎样的?

:::color4 Nacos用来做什么?应用如何感知到配置变化的?长轮询??为啥不建长连接?**

Nacos是AP还是CP?配置中心是哪种?为啥配置中心C比A更重要呢?

:::

✅Nacos如何实现的配置变化客户端可以感知到?

✅Nacos是AP的还是CP的?

✅Nacos能同时实现AP和CP的原理是什么?

:::color4 分布式锁的粒度和事务粒度如何控制?平时是如何加事务的?编程式事务。

分布式如何做链路追踪、雪花算法,

分布式锁,乐观锁锁和悲观锁哪个适合高并发?乐观锁无锁吗?

:::

✅使用分布式锁时,分布式锁加在事务外面还是里面,有什么区别?

✅如何实现应用中的链路追踪?

✅高并发场景中,乐观锁和悲观锁哪个更适合?

✅数据库乐观锁的过程中,完全没有加任何锁吗?

原文: https://www.yuque.com/hollis666/xkm7k3/iqg2k1i464ewuq4l