3.6 seel一面面经

1.自我介绍
2.项目中遇到的难点以及是如何解决的
    讲了一下对于用户播放进度频繁更新导致数据库的写压力,以及要保证进度误差控制在15s以内,解决办法是利用延迟队列+redis的异步回写策略来合并写请求。首先将用户的播放进度缓存到redis中,然后将播放进度提交给一个20s的延迟任务,20s后查询redis中的缓存的播放进度与异步延迟任务中的播放进度是否相同
3.你说你项目中用redis解决集群模式下的session共享问题,,这里的session共享问题是如何解决的?
    答:因为session通常是保存在tomcat服务器的本地内存中的,但是多台服务器组成的集群环境下,用户的请求可能被分到不同的服务器上,导致session无法共享,而redis的数据本身就是共享的。
4.那redis宕机了怎么办
    redis有两种持久化机制,例如rdb和aof,rdb是通过某个时间点把整个内存数据打包成一个二进制文件,优点是恢复速度快,体积小,缺点是可能缺失的数据比较多,最多可能丢失两次快照之间的数据。
    aof是日志持久化,把每条写命令都追加到文件里,有每秒刷盘策略,最多丢一秒的数据,缺点是文件体积大,恢复的时候要把所有命令重新执行一遍。
5.那这里你说的使用拦截器及其threadLocal实现用户的登入校验,这里是怎么实现的,threadLocal里存的是什么?
    答:这里共有两层拦截器,第一层拦截所有的路径,查看是否有用户信息,如果有的话就存入threadLocal中,threadLocal中存的是用户信息,然后第二层拦截器拦截需要登入的用户,查询用户信息是否存在,如果存在就放行。
6.threadLocal的底层原理是什么?
    答:threadLocal的底层是threadLocalMap,是一个特定的hashMap(其他不知道了)。threadLocal的key是弱引用,value是强引用,发生gc时,key会被回收,然后key就变成null了,而value因为是强引用永远不会被回收,因为tomcat使用的是线程池,处理完的线程会放回线程池,所以可能导致内存泄漏,并且之后来请求可能用到之前的数据,所以每次用完threadLocal之后要调用他的remove方法。

     无手撕

然后闲聊了一会,说去帮我找二面面试官,结果最后说二面面试官出差了(也不知道真假),让我等通知,也不知道这是算过了还是没过#27届求职交流##28实习##三月的小目标##处女面#
全部评论

相关推荐

LZHR:老哥你从投递简历测评完到一面中间隔了多久呀,我这边已经过了五天了仍显示简历筛选中是不是就是挂了
腾讯求职进展汇总
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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