美团 Java 一面+二面 面经【发面经攒人品】【一面已更】
刚刚面试完,没啥心情学习了。周末还有俩笔试,一个面试要搞。写个面经攒攒人品,希望OC🥰🥰。
一面(8.22)
还没来得及复盘,等我下周摸鱼的时候复盘一下写一下。
- 算法题:根据二叉树的前序和中序顺序构建二叉树,并且求出这个二叉树的右视图。
力扣题号:105 + 119,递归 + 层序 秒了。
- 问项目
- 登录的时候,写redis缓存失败了怎么处理
- 了解单点登录吗(SSO)可以下来了解一下。其实就是解决多个模块的重复登录问题。
- 集群环境下如何保证服务器内存信息的一致性。(跟缓存数据库一样,定时刷新,给一个过期时间)
- 防超卖在Java代码层面怎么实现的。(使用Lua脚本来保证 判断库存 和 扣减Redis库存 的原子性)
- 怎么提高MySQL库存扣减的效率。(加索引)
- 八股:
- 如何避免使用 Redis 导致的数据不一致。(旁路缓存模式,删缓存,改数据库)
- 了解有哪些加密算法,分为哪些类?(当时脑抽了没想起来,现在想来应该是对称加密,非对称加密,哈希加密三类)
- MySQL事务是用来干嘛的呢?(保证ACID里面的A,原子性)
- 事务的隔离级别有哪些?(RU,RC,RR,可串行化)
- mysql中有哪些锁?(全局锁,表锁,行锁;表锁分为表锁和意向锁,行锁分为记录锁,间隙锁,临键锁)
- 可重复读级别下能防止幻读吗?(按SQL定义的隔离级别的定义,可重复读是不能解决幻读的;但是Innodb引擎通过临键锁 (Next-Key Lock) 和 MVCC 机制来解决幻读,一个应对当前读,一个应对快照读。)
- MySQL的索引用的什么数据结构?有什么区别?有什么优点?(经典八股)
- 分析一下索引失效的场景。(联合索引的最左匹配原则,隐式的类型转换)
- MySQL的MVCC多版本控制了解吗?(使用 隐藏字段、Read View、undo log 来实现的快照读多版本控制)
- undolog 和 redolog 详细讲一讲(undo log 可以实现 MVCC,同时也是事务回退的保证;redolog主要是一个崩溃的恢复以及bufferpool 的刷盘)
- 了解 SQL 注入吗?一般用什么来防止?(SQL拼接的时候自己拼接条件;仿照Mybatis框架的操作,先生成语句再参数化输出)
- Java的HashMap和TreeMap有什么区别?(TreeMap 主要是实现了Map节点的有序储存,使用树状结构来保证)
- HashMap 的哈希冲突是怎么解决的?(拉链法 + 红黑树)
- AVL 和 红黑树的区别,为什么不用AVL树?(AVL 主要适用于查找密集型,红黑树使用插入密集型)
- HashMap 高并发下会出现什么问题?(成环,数据丢失)
- ConCurrentHashMap 和 HashMap 的区别?(源码自己去看)
- Java 线程池了解吗?(两种创建方式+核心参数)
- 反问
- MySQL题:
- 可重复读下,有两个操作,一个是Insert,一个是delete,判断一下加锁的情况?
- 当时没有做出来,后面学了一下,应该是看两个操作的前后情况:如果是先 Insert ,那么应该在Insert的前后两条数据行之间加上间隙锁,然后看 delete 的值,如果 delete 的值正好被这个间隙锁锁住了,那么delete就等待,不然就执行。
- 先 delete 可以同理分析。例如 数据 1,2,3 我们delete 3 再 insert 5,怎么加锁的?delete 3 会给 3 加上一个记录锁,然后 insert 5,会加一个(3,正无穷)的临键锁。不冲突,所以可以并发执行
二面(8.25)
- 开始就问项目,场景题特别多,问了可能整个面试时间的一半 eg. 防超卖的解决
其实没啥底,感觉一面表现不错,二面感觉算法题没做出很伤。😣😣😣😣😣😣😣
#我发现了面试通关密码##你收到了团子的OC了吗#