小红书Java后端二面
1.自我介绍,实习介绍
2.扯了一下实习项目,有什么难点,怎么解决的
3. 相当于你对这个系统做了一个重构,以前相当于是每次都得 hard code 去支持你现在通过配置化的方式。然后就可以不用再 hard code了这里的问题是你怎么去保证两边逻辑是打平的或者是一致的,不会引发线上问题。
4.有个场景是这样的:用户不断把文件上传到服务器上,设计一个文件分发系统把这些文件都分发到服务器集群上要求,速度要快,可靠性要高,你怎么来设计
5.我觉得你这个整体思路应该没啥问题,而且也挺清晰的。 我们接着你的话题聊,在整体架构下每个模块你会用什么技术栈,比如说,数据面板应该怎么实现,然后调度器可能会怎么实现,举一下例子
6.调度器那为什么要用这个方案呢?比如说它能承载每天万级别的一个任务的一个调度你怎么来做
7.好的没问题好吧,那最后怎么知道我拉的这些数据到底对不对,准不准确,有没有拉全
8你如何能保证,比如说分发到一万台机器,而这十万台机器都已经成功的拿到了正确的数据,然后把这个任务close,你怎么去把节点的状态都给更好的同步到那个数据面板上。
9.因为任务也很多,实例也很多,它一定是一个写请求非常非常高的一个场景。这个事件上报的量级太大,你控制面怎么去扛住这么高的一个上报事件量呢
10.假如说你这么设计的话,会有一个问题,比如说kafka因为你多依赖了一个集群,然后比如说kafka出问题了,你的状态都会上报不上去。下一批因为任务都是定时跑的,然后你第一批任务的状态还没上报上去,下一波的又开始了,这个状态会不会到时就很容易就全给乱掉了?或者说你 kafka 集群一恢复原来的状态又没了,到时候同一个任务的两次执行你其实都已经触发了。你怎么办呢
9.如果是kafka自己崩掉了呢
10.控制面板保存了我们所有的任务的元数据,还有状态的数据,我们怎么给控制面做更好的一个容灾机制?比如部署的a机房挂了切到B机房去。同时还能保证这些监控点不会丢失,怎么做到多机房同步的
11.redis的这个主从同步内部的机制是怎么的样的,list这种东西,它是要保序你怎么保证同步过程中它这个序不乱。
12.你是用什么机制保证它多线程下且有序这个事情呢
13.手撕:设计一个单机限流组件能够在多线程环境下安全运行,并能根据下游请求的错误率对限流阈值进行动态自适应调整兼顾吞吐与稳定性