Skip to content

面试速答(先看这里)

**一句话结论:**计费的业务核心模型有哪些?

60秒标准回答:

5年开发,Java后端,计费项目

计费的项目介绍一下。实时计费。计费的主体是什么?支持多币种吗?

计费是累加的还是单条的?为啥不做成累加的?

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**如何避免重复计费?
  • **要点2:**费用在数据库中什么类型存储的?
  • **要点3:**如何比较两个 decimal 是不是相等?
  • **要点4:**Tidb ,数据库的锁用过吗?
  • **要点5:**Redis 和 zk 的分布式锁各自有什么优缺点?

**记忆锚点:**redis → laiyanhong-9tr5c → wwwyuquecom → zwpzru → https → decimal

易错提醒:

  • 如何避免重复计费?
  • Lua 执行到一半某个命令失败怎么办?

加分表达:

  • 计费的业务核心模型有哪些?
  • 核心的业务单据模型以及主要的状态机流转,通过这个考察一个候选人对于自己的项目的熟悉程度 Tidb ,数据库的锁用过吗?
  • 有哪些核心的字段?

追问准备:

  • 计费的主体是什么?
  • 计费是累加的还是单条的?
  • 为啥不做成累加的?
  • 如何避免重复计费?

面试者背景 ​

5年开发,Java后端,计费项目

面试过程 ​

> 计费的项目介绍一下。实时计费。计费的主体是什么?支持多币种吗? > > 计费是累加的还是单条的?为啥不做成累加的? > > 如何避免重复计费?循环桶?雪花算法(时间+机器号+随机数)LEAF,时钟回调的问题如何解决的? > > 费用在数据库中什么类型存储的?bigint 单位为 分、代码中用的decimal,为什么要用decimal? > > 如何比较两个decimal是不是相等?0.1和0.10的equals相等吗? > > 为啥不用float或者double,精度问题? > > 计费的业务核心模型有哪些?计费单?有哪些核心的字段?计费类型、广告类型、金额、状态, > > 计费单的状态机的流转是怎么样的?反作弊、羊毛检测? > > Tidb,数据库的锁用过吗?并发控制没有做吗?什么场景用到了redis分布式锁。幂等是如何控制的? > > 分布式锁如何实现?zk为什么可以实现分布式锁? > > Redis和zk的分布式锁各自有什么优缺点?redis的分布式锁提前释放了怎么办?watch dog > > Lua脚本能保证原子性?为什么?什么叫原子性?Lua执行到一半某个命令失败怎么办? > > Redis的集群模型了解吗?有哪几种?主从、哨兵、cluster > > Redis的数据分片?redis支持哪些数据类型?redis的SDS如何实现的?如何避免缓冲区溢出? > > ZSET是如何实现的?跳表的查询、插入的时间复杂度是多少? > > 缓存穿透、雪崩、击穿问题。热key问题如何解决?二级缓存、拆分、预热。 > > 如何实现一个”查找附近的人”的功能。GEO? > > 设计一个订单号的生产服务,会如何做?唯一性、自增、高可用, > > 唯一性如何保证?雪花。如何保证自增?如何保证高可用?主从、 > > 什么样的架构算是好的架构?低耦合、功能性、

题目解析 ​

> 计费的项目介绍一下。实时计费。计费的主体是什么?支持多币种吗? > > 计费是累加的还是单条的?为啥不做成累加的? > > 如何避免重复计费?循环桶?雪花算法(时间+机器号+随机数)LEAF,时钟回调的问题如何解决的?

计费业务以及业务中主要面对的问题 需要了解。

> 费用在数据库中什么类型存储的?bigint 单位为 分、代码中用的decimal,为什么要用decimal? > > 如何比较两个decimal是不是相等?0.1和0.10的equals相等吗? > > 为啥不用float或者double,精度问题?

不能用浮点数表示金额:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/vmgb63ifb1ii8avn

bigdecimal比较:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ydfacueg9mi8n0pt

> 计费的业务核心模型有哪些?计费单?有哪些核心的字段?计费类型、广告类型、金额、状态, > > 计费单的状态机的流转是怎么样的?反作弊、羊毛检测?

核心的业务单据模型以及主要的状态机流转,通过这个考察一个候选人对于自己的项目的熟悉程度

https://www.yuque.com/laiyanhong-9tr5c/zwpzru/hgq4kgyyrwgq8pgu

> Tidb,数据库的锁用过吗?并发控制没有做吗?什么场景用到了redis分布式锁。幂等是如何控制的? > > 分布式锁如何实现?zk为什么可以实现分布式锁? > > Redis和zk的分布式锁各自有什么优缺点?redis的分布式锁提前释放了怎么办?watch dog

redis分布式锁:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/aydb9r387hke7ei2

> Lua脚本能保证原子性?为什么?什么叫原子性?Lua执行到一半某个命令失败怎么办? > > Redis的集群模型了解吗?有哪几种?主从、哨兵、cluster > > Redis的数据分片?redis支持哪些数据类型?redis的SDS如何实现的?如何避免缓冲区溢出? > > ZSET是如何实现的?跳表的查询、插入的时间复杂度是多少? > > 缓存穿透、雪崩、击穿问题。热key问题如何解决?二级缓存、拆分、预热。

lua的原子性:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/xp61hhosb4lkguyd

redis集群模式:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ta84n3y5ga3l8c9m

zset:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/mv61w95rzl7o08bf

sds:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/zmn6ihlgle6lqeck

穿透、雪崩、击穿:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/sheq5onhskxoggai

热key:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/nsf7xfmriieqha41

> 如何实现一个”查找附近的人”的功能。GEO?

https://www.yuque.com/laiyanhong-9tr5c/zwpzru/xg7dyquv0wlrhux1

> 设计一个订单号的生产服务,会如何做?唯一性、自增、高可用, > > 唯一性如何保证?雪花。如何保证自增?如何保证高可用?主从、

https://www.yuque.com/laiyanhong-9tr5c/zwpzru/urgliwu462zinw9f

https://www.yuque.com/laiyanhong-9tr5c/zwpzru/qdm2972hbtn0uppz

> 什么样的架构算是好的架构?低耦合、功能性、

https://www.yuque.com/laiyanhong-9tr5c/zwpzru/nnpndseqrn6brgon