上周三还是周四在牛客推的简历,约了11.2面试,这儿做个记录。
一开始面试官进场,老话题,自我介绍。
介绍完让我讲讲自己的项目,讲完正式开始面试。
先问了我怎么维护登录状态。答Spring Security可以维护一个ThreadLocal来存储,然后扯了扯ThreadLocal的原理和使用场景,并且因为线程池复用的时候不能保证是同一个线程,Spring Security会讲Session退回http session存储。面试官接着问这是单机模式,分布式怎么办,答token或者redis存储。然后让我讲讲token,我详细讲了JWT的原理和结构,扯了扯CSRF攻击,这部分大概结束了。
然后问了我怎么维护redis和数据库之间的一致性,答双重删除。
之后问数据库的可重复读怎么解决并发问题,答MVCC,并解释了其原理。并且扯了扯Key Lock,Gap Lock,Next-Key Lock解释这个可以解决幻读。
问怎么优化数据库索引,答慢查询explain一套,举了个like前缀的例子,问为什么前缀会失效,详细解释了B+树的规则,联想到了最左匹配原则,解释了一下最左匹配原则,再问哈希索引和B+树优劣,答不方便范围查询以及哈希碰撞。
问redis怎么解决分布式的高可用,答哨兵模式,解释了哨兵的工作原理,raft投票机制,重新选取主节点流程,并且讲了讲怎么防止脑裂的数据丢失。
问输入网址之后发生了什么,答网络一套,引申出了SpringBoot的工作流程,扯了扯适配器模式。
开始做题。
第一题:给一个表示多位数的链表,让多位数加一。我给了三个解决方案:
一、转换成数字后再加一再转换成链表。
二、用栈保存,一旦要进一就弹出一个。
三、先反转再加一再反转。
第二题:有点难度,求二叉树最大宽度,好像是面试官自己的变种。
答填充后bfs。
面试结束后马上收到了二面通知,这个面试官真的人好好,全程微笑,回答问题也给了及时的反馈,不过算法题确实有点难。
全部评论
(3) 回帖