2025.5.14
50min,手撕+和项目相关的场景题拷打
只录了自己的声音,具体的问题记不清了,没有大模型相关问题
面试官太好了,全程面带微笑,直接叫我的名字
面试官先进行自我介绍,然后介绍部门,确认个人信息。
自我介绍。
面试官说一面已经考察过算法了,二面编码就不考察很多算法了,考察解决实际问题的能力,以及开放性问题,没有正确答案,说自己的思路就行,不会的就跟他说换一个,有很多题可以问。
- 手撕代码,没要求运行,是给定一些日期区间,有起始时间和终止时间,求重叠的时间段。面试官非常详细的介绍了这个题目的背景,商家在确定酒店价格的时候不能选择重复的时间段。题目中要求时间复杂度是O(n)
- 敏感词过滤怎么实现的
Trie树实现的,根据字典建树的时间复杂度是O(n*m)
(n是n个词,m是词的平均长度)
查询的时间复杂度是O(m) - 目前互联网中要屏蔽的敏感词很多,还有什么时间复杂度更低的算法
AC自动机,DFA(确定有穷自动机),有工具实现了多种敏感词过滤的算法(sensitive-words-filter) - 有些人会在敏感词中间插入一些字符,这样该怎么判断敏感词
预处理,忽略某些字符
正则表达式,灵活的判断 - Kafka如何保证消息的可靠性
生产者端配置ack=all
broker端进行消息持久化
消费者端配置手动提交offset - 用户点赞失败后如何解决
- Redis中出现过缓存穿透吗,如何解决
- 用户登录凭证怎么做的
- 多种身份的用户怎么实现鉴权
RBAC基于角色的访问控制 - 出了一个场景,像知乎盐选,冲了会员才能看一些内容,管理员也能将用户设置成非会员,如何实现这个功能(这边简单回答了之后,还是追问了一些)
- 用户会员过期了怎么办(到时间会员过期,或是管理员让这个用户会员过期)
- Redis集群有一个节点挂了,怎么办
- 所有的节点都不可用了怎么办
- 这时候描述一下大量请求到服务端到数据库的这个过程是怎样的
- 说了限流和熔断,追问服务器端要怎么做,数据库端要怎么做
服务端线程池动态调整
数据库端读写分离,增加从节点,分库分表 - Redis中某个请求很多的Key(上万)怎么分担压力(分片)
热 key 问题就是突然有几十万的请求去访问 redis 上的某个特定 key,那么这样会造成流量过于集中,达到物理网卡上限,从而导致这台 redis 服务器直接宕机。- 增加二级缓存,发现热 key 以后,可以把热 key 数据加载到系统 JVM 并设置合适的缓存过期时间,针对热 key 的请求就会直接分散到各业务服务器上,防止所有请求同时访问同一台 redis。
- 备份热 key。可以把热点 key 的数据备份到所有 redis 的集群节点中,可以通过在热点 key 后面拼接集群节点编号,然后将这些备份 key 分散到所有集群节点中,客户端访问热点 key 的时候也在热点 key 后面随机拼接集群节点编号,将热点 key 的请求分散到不同集群节点上。
反问,最后评价说有知识广度,编码思路也挺好的(不知道是不是安慰的话)
技术细节方面,平时可以多考虑下提高性能,确定性能评估方案