荔枝java level
获赞
10
粉丝
3
关注
5
看过 TA
95
东北大学
2028
Java
IP属地:辽宁
暂未填写个人简介
私信
关注
03-06 21:45
东北大学 Java
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方法。无手撕然后闲聊了一会,说去帮我找二面面试官,结果最后说二面面试官出差了(也不知道真假),让我等通知,也不知道这是算过了还是没过
查看6道真题和解析
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务