首页 > 快手-暑期实习-海外用户增长
头像
牛客60048244号
发布于 2021-03-30 18:40
+ 关注

快手-暑期实习-海外用户增长

首先是简单的自我介绍+项目介绍

然后挑着项目里头问了怎么做的鉴权。

和他讲了使用aop切面编程的这么一个流程。

然后问了这个鉴权主要是使用的什么手段呢?

答:本地使用cookie存token,每次访问token,对比缓存里头的token做登录状态的判断。再根据其中的token匹配到的用户id,进而查询数据库里头的角色,及其对应的menu,使用aop的环绕方法,将两份menu做比对。

那你们用的什么做缓存呢?

redis

redis是吧,可以介绍下redis主要有什么数据类型,以及你们平时使用什么多一点吗?

string、list、map、set、sorted set
我们平时用string和map多一点。因为我们主要用查询多一点点

那你能介绍下,redis里头的缓存雪崩、缓存击穿这类问题吗?

我先跟他讲清楚,我们遇到的这几类问题比较少。然后说我了解到可以blabla
缓存雪崩,就是有一批缓存同时到期,大量请求到达数据库,造成短期内并发压力巨大
缓存击穿,就是使用缓存里头绝对不可能存在的请求,去恶意攻击你的数据库。比如直到你的订单id从大于0的数开始增长。那我使用负数id查询。必定能击穿你的缓存,直达数据库,稍微这些请求多了,就容易使得你的数据库崩溃。

解决方法:
雪崩:

  • 预防,给每个key在设定过期时间上, 再额外添加random时间,保证不同时过期。
  • 事件中,使用fail-fast的熔断策略,快速抛出异常,减少数据库瞬间压力。
  • 使用主从模式和集群模式来尽量保证缓存服务的高可用
  • 事后,持久化AOF、RDB保证缓存数据可用。

击穿:
这个复盘的时候发现自己答错了。我回答的是缓存穿透,这里的击穿,其实是某个热点数据失效,导致大量请求击穿缓存层,到达了数据库
和雪崩的区别只在于,击穿相当于打穿了一个小洞,但是同样有雪崩的效果。
解决方法:

  • 互斥锁更新,保证同一个进程针对同一个数据不会并发请求到DB,减小数据库压力
  • 随即退避,失效时,线程随机sleep一个很短的时间,过一会儿再来访问。

缓存穿透:
接口层增加权限校验,比如用户鉴权没有的话返回403,id必须大于0等。
其实这里面试官想问我布隆过滤器,我猜的。但是我不太记得了,所以没答,面试官也没有追问我。

布隆过滤器主要是对bitmap的一个进阶实现,就是把元素通过散列函数映射到一个位数组的k个点。
之后检索的时候,只要其中任何一个是0,就一定没有,都是1,则说明很可能存在。优点是快,并且相比较bitmap减少了冲突的概率。
缺点是,删除困难,并且存在一定的误识别率

好的那你对MySQL也挺了解的是吧,我们来问问几个MySQL的问题

可以讲讲联合索引吗?

blabla多个列的索引,最左匹配,底层是b+树

如果以abc列建立索引,查询的时候bc等值,索引会失效吗?

最左匹配原则,第二列等值查询,

索引底层结构讲一下

聚簇索引和非聚簇索引区别?

感觉前边联合索引没答好,问:排序的稳定性和非稳定性讲讲?

然后排序完毕以后,要是是先按第一列,再按的第二列,查找的时候找第二列为某个值的元素?

==这里其实就还是在问联合索引那条语句。回头好好看看==

那我们来聊聊多线程吧。讲一讲为什么要有锁这个东西呢?以及你了解到的Java里头有哪些锁的实现呢?

讲了volatile、synchronized、底层、cas

那你说说,其中的synchronized怎么实现的吧

好,你说说有哪些容器用到了synchronized?

回答hashtable

和hashmap区别?

hashmap扩容流程?

那我们来问问http吧。你说说http和https什么区别?

那你说说你了解的https加密协议?

那你来说说一个请求从浏览器,到返回结果中间经历了什么?

那你来说说,刚才其中的域名、ip地址、数据帧各自是哪一层的东西?

说说数据链路层和网络层区别?

好,我们来做几个题吧

第一题是实现一个懒汉式单例模式,我偷懒只写了不安全的,被要求写了线程安全的,我加了synchronized,不满意又让我写了DCL

第二题是反转链表 II 力扣92题

感谢之前看的hxd的面经
链接在此
给了我很大的帮助。

做完以后,大概就没啥问题了,然后是准备约2面了。希望能有个好结果!冲冲冲

更多模拟面试

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐