度小满运维开发一面
度小满运维开发一面
本文作者:程序员小白条
本站地址:https://xbt.xiaobaitiao.top
总体用时 20 分钟,技术栈不符合,基本是 KPI 面了。
1)单体限流是怎么做的?
- 明确场景:首先说明在单体应用(非分布式)中,限流是为了保护应用自身,防止被突发流量打垮。
- 技术实现:
- Guava RateLimiter: 这是最经典的答案。介绍其基于令牌桶算法,可以平滑地进行限流。例如:
RateLimiter.create(10.0)
表示每秒生成10个令牌。 - Semaphore(信号量): 对于控制并发线程数(而非QPS)的场景,可以使用
Semaphore
。它规定了同时访问某个资源的线程数量。 - 自定义计数器: 在时间窗口内(如1秒)用一个原子计数器(如
AtomicInteger
)统计请求数,超过阈值则拒绝。注意时间窗口的滑动和重置。
- Guava RateLimiter: 这是最经典的答案。介绍其基于令牌桶算法,可以平滑地进行限流。例如:
- 落地方式: 通常使用AOP或拦截器,在Controller层或Service层的方法上通过注解进行限流。
2)介绍下常见的限流算法
- 计数器算法:
- 固定窗口: 将时间划分为固定窗口(如1秒),在窗口内计数,超过则限流。实现简单,但窗口临界点可能承受双倍流量。
- 滑动窗口: 将窗口划分为更细粒度的小窗口,按时间滑动。解决了固定窗口的临界问题,是计数器算法的改进版。Redis + Lua 常用来实现分布式滑动窗口。
- 漏桶算法:
- 请求像水一样进入漏桶,桶以固定的速率出水(处理请求)。当桶满时,请求被丢弃或等待。
- 特点: 平滑输出,无法应对突发流量(因为出水速率固定)。
- 令牌桶算法:
- 系统以恒定速率向桶中放入令牌。请求到达时,需要从桶中获取令牌,获取成功则处理,失败则限流。
- 特点: 既能平滑处理,又能允许一定程度的突发流量(取决于桶容量)。Guava RateLimiter 和网关如Sentinel默认采用此算法。
3)流量告警,邮件是怎么发送的?
4)数据库和缓存的一致性策略
5)怎么解决项目跨域问题的?
6)介绍下数据库的各种索引类型
7)时序数据库了解哪里?
8)Redis 持久化策略介绍一下
9)RDB 和 AOF 各自的区别、优缺点
10)Redis 宕机后数据恢复的流程
11)RDB 的写时复制
12)反问技术栈和主要的业务
主要还是 Python + Go,需要转语言,后续算法也拒了,直接下播下播~
算法力扣的一个困难题,迷宫和体力问题。
程序员小白条的编程日记:https://xbt.xiaobaitiao.top/ (分享如何拿到腾讯实习 Offer 和多个中大厂的面试机会,大学经历、求职经历、职场工作、创作经历、生活日常、面经、技术分享、毕设项目指导)定期更新内容,成长打怪系列,分享从大一到大四的完整面经,更新好玩的,有趣的事!看完可冲中大厂!dy同名程序员小白条,主要口述面试经历和分享我认为的实用网站,会比面经讲的详细很多,以真实面试录音为主!公粽号:程序员落叶(秋招技巧、面经、公司投递表、谈offer)
欢迎关注上方公粽号!感谢支持!一起进步,共勉!