字节跳动测试开发二面(1hour)

主要应该是关注项目是不是自己做的。

1. 自我介绍
2. 介绍项目,开始深挖
3. 多级缓存。
4. redis缓存更新机制
5. redis的LRU机制
6. redis集群(还不怎么会)
7. redis持久化
8. 继续介绍项目
9. ElasticSearch检索机制
10. ElasticSearch怎么使用
11. 项目里RabbitMq起到了什么作用
12. RabbitMq防止数据丢失?
13. 当数据量变大的时候,数据堆积会怎么样(没有答出来),面试官说可以使用限速
14. 继续介绍项目
15. redis 主从复制,哨兵机制
16. redis集群(没答出来)
17. 继续介绍项目(挖到数据库表怎么实现,哥们我2月做的项目现在问我有什么外键,不要啊哥们)
18. ThreadLocal原理
19. ThreadLocal用来干啥
20. 项目有Java反射吗
21. 微信收发红包写些测试用例,从收发分别考虑

算法:
#牛客AI配图神器#最长不重复子串。
写测试用例

---------------

许愿二面过

update:6.26已offer
全部评论
4. Redis缓存更新机制 核心策略: - 过期删除:通过 expire 设置键的过期时间,到期后由后台线程(惰性删除+定期删除)处理。 - 惰性删除:客户端访问时检查是否过期,过期则删除。 - 定期删除:每隔一段时间随机检查部分键,删除过期键(通过配置 hz 控制检查频率)。 - 主动更新:应用主动调用 set / del 等命令更新缓存,常见场景: - 数据变更时(如数据库更新后),同步更新缓存。 - 缓存失效前(如提前30秒),后台线程主动刷新(“缓存预热”)。 - 淘汰策略:当内存不足时,按策略淘汰旧数据(如LRU、LFU、随机等,见第5点)。 5. Redis的LRU机制(Least Recently Used) 原理: - 近似LRU:Redis并非严格实现LRU,而是采样少量键(默认5个),淘汰其中最久未使用的键,通过 maxmemory-samples 参数调整采样数量。 - 实现方式:每个键维护 lru 字段(记录最后一次访问时间),淘汰时比较采样键的 lru 值。 - 优化策略: - Redis 4.0引入LFU(最不常用) 策略,结合访问频率和时间淘汰数据。 - 可通过 maxmemory-policy 配置淘汰策略,如 allkeys-lru (所有键中使用LRU)、 volatile-lru (仅过期键中使用LRU)。 6. Redis集群 核心架构(以Redis Cluster为例): - 分片机制: - 数据按哈希槽(Hash Slot)分布,共16384个槽,每个节点负责部分槽。 - 键通过 CRC16(key) % 16384 计算归属的槽,路由到对应节点。 - 节点角色: - 主节点(Master):负责读写操作,维护数据和槽信息。 - 从节点(Slave):复制主节点数据,主节点故障时可自动选举为新主(通过Raft协议)。 - 高可用机制: - 自动故障转移:当主节点下线,从节点通过投票成为新主,保证服务不中断。 - 数据冗余:每个主节点至少有一个从节点,避免单点故障。 - 集群通信: - 节点间通过Gossip协议交换状态信息(如节点存活、槽分配),维护集群拓扑。 - 典型部署: - 至少3个主节点(每个主带1个从),形成3主3从架构,保证容错性(最多允许1个主节点故障)。 补充:Redis集群的优缺点 - 优点: - 支持海量数据(通过分片扩展内存)。 - 高可用性(故障自动转移)。 - 读写分离(从节点可承担读请求)。 - 缺点: - 不支持多键事务(跨节点键无法原子操作)。 - 客户端需处理分片路由(或通过中间件如Codis、Twemproxy)。 - 集群扩展时需迁移数据(通过 redis-trib 工具自动迁移槽)。
4 回复 分享
发布于 06-21 09:32 广东
在红包领取过程中,网络数据包不完整确实可能导致“已领取但金额未增加”的情况,具体原因和机制如下: 可能的原因分析 1. 网络通信中断与状态不一致 - 领取请求已提交但响应丢失: 用户点击“领取红包”后,客户端向服务器发送领取请求,服务器处理成功并标记红包为“已领取”,但返回给客户端的响应数据包在网络中丢失(如路由器故障、信号中断)。此时: - 服务器端状态:红包已被领取,金额从红包池扣除。 - 客户端状态:未收到成功响应,界面可能显示“领取中”或失败,但实际服务器已完成处理。 - 结果:用户后续刷新时发现红包已被领取,但自己的余额未增加(因为服务器可能未完成余额入账的后续步骤,或入账请求因网络问题未成功)。 2. 分布式事务中的部分成功 - 红包系统通常采用分布式架构(如订单服务、账户服务分离): - 领取红包时,服务器先在订单服务中标记红包为“已领取”,再调用账户服务增加用户余额。 - 若账户服务调用时网络数据包丢失(如超时),可能导致: - 订单服务:红包状态已更新(已领取)。 - 账户服务:未收到入账请求,余额未增加。 - 结果:用户看到红包已被领取,但余额未变化。 3. 客户端本地状态错误 - 客户端可能因缓存或逻辑错误,错误显示“领取成功”: - 例如,客户端在发送领取请求后,未等待服务器响应就自行更新界面状态为“已领取”,但实际服务器未处理请求,导致余额未增加。 - 这种情况属于客户端逻辑漏洞,与网络数据包不完整间接相关(如请求未真正发送成功)。 系统如何避免此类问题? 1. 分布式事务最终一致性 - 采用“事务补偿”机制(如TCC模式): - 若账户入账失败,订单服务自动回滚红包状态,或触发重试机制,确保“领取”与“入账”要么都成功,要么都失败。 2. 幂等性设计 - 服务器对领取请求做幂等处理: - 即使客户端重复发送领取请求(如网络重传),服务器通过唯一请求ID判断是否已处理,避免重复标记红包状态或重复入账。 3. 对账与补偿机制 - 定期对账: - 后台定时检查红包状态与账户余额的一致性,发现“已领取但未入账”的记录时,自动补发金额或回滚红包状态。 - 客户端重试: - 若用户发现余额未增加,可手动刷新或重试领取,客户端重新向服务器查询真实状态并同步余额。 典型场景示例 - 用户A领取红包时突然断网: - 服务器已记录A领取红包,但向A的账户打款时网络中断,打款请求失败。 - 服务器后台对账时发现该记录,自动补发金额到A的账户,或标记红包为“未领取”并退回金额。
2 回复 分享
发布于 06-21 09:29 广东
只有两面吗,佬
点赞 回复 分享
发布于 09-02 20:37 辽宁
大佬想问下是笔试过了再约面的嘛
点赞 回复 分享
发布于 07-04 14:16 安徽
mark
点赞 回复 分享
发布于 06-24 15:41 上海
大佬面试的哪个部门
点赞 回复 分享
发布于 06-21 14:44 山西

相关推荐

二面结果几天都没出估计凉凉了,不过本来就没报希望,只能说面试官人是真的好我也真的是要羞愧自尽了。挑了点印象比较深的问题放上来,没放的基本都是超基础八股😢一面:就问了我自我介绍提到的实习中找到的隐蔽漏洞是什么,其他问题均八股1.你知道CPU大小端吗(先问了我有没有上过操作系统相关的课程,我说有+成绩,但是有点久了,问了两三个基础问题答上来了,这个他说我知道就说不知道咱们就跳过,我真紧张忘记了遂跳过)2.问我最近用什么语言比较多,答python,问了*args和 *kwargs什么意思、怎么用,让我写一段函数简单演示(说了是python后他说本来想问我点java问题还是算了)3.解释一下可变数据结构和不可变数据结构4.解释虚拟内存和物理内存,然后问了几个段页式相关内容5.linux相关,怎么查进程、杀死进程,只知道进程名怎么杀死对应进程6.问了我一个智力小问题,然后说让我写算法验证一下,作为这次面试的算法题(这里我写的有点久,因为边写又边修改问题条件了)7.用例设计题目,任务+抽奖8.一个框能输入任意代码并执行,但只能看程序运行结果是正确or错误,错误会报错。在运行这个程序的文件夹下有个文件,怎么获取文件内容(这道题我答的不是很好)二面:终于问了我点实习相关的,不过可能是看我实习也是测试但是没咋写代码,基本也还是八股。时长很短,可能是因为我答的太差了,40分钟左右就结束了。1.差不多5个关于传输协议的问题?App用了哪些通信协议、微信小程序又会用哪些以及为什么。2.也是问用哪个语言比较多,python问了我装饰器、参数,基础问题3.linux语法,较基础4.拷打实习(估计也对我实习不感兴趣,意思意思问了四五个,比如实习中找到的最大bug、学到了什么&怎么学的、有没有学和测试无关的知识、有没有写测试用例&怎么写的&错误率)5.代码题。很简单6.用例设计题目两道😔说实话确实没想到字节一投没两天就让我面试了,希望能对各位有所帮助……
查看14道真题和解析
点赞 评论 收藏
分享
评论
4
22
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务