8. 奈雪的茶面试复盘
结果:
挂了
时间
2023.3.8
心得
当时面下来感觉回答的还可以,第一次面试下来回答的这么好,两个面试官,结束后面试官说主管在开会来不了,让我先回去等消息,我以为过了。
但后面复盘下来发现,基础回答的还行,但项目经历一般,线程池这块没回答好,而且细细想来,当时就应该是挂了,主管在开会只是个借口罢了。
注: ----- 以下答案不再更新(考虑删除),统一在面试宝典中更新
为什么要用分布式锁?
总结过
分布式锁用的redis的哪种结构?
我说的hash结构
面试官:为什么?我感觉字符串结构就挺好
讲了下 key对应的hash中封装了线程信息+可重入次数
分布式锁可能会失效的场景是什么?
网络波动,
spring声明式事务失效场景有哪些?
同类中调用同类方法,避开了事务注解,可以通过aop代理自身类解决。
回滚后捕获,导致spring事务抓不到异常,就会失效
不会滚参数,进行异常设置
嵌套事务有什么影响?
方法B如果是新事物或者事务隔离,那方法A就不会回滚
MVCC了解吗?
虽然还没背熟,但都说了下
说一下InnDB 的索引结构?
底步采用B+树,说了B+树的特点,但他没问和其他数据结构的区别(这里应该引一下)
数据量多少适合分库分表?
不太清楚,说了1000万左右mysql效率会降低,阿里开发手册说500万或者数据大小超过2G
索引失效有哪些情况?
总结过
怎么进行异步处理?
@Async 注解使用默认线程池还是自定义线程池?
不清楚
@Async注解失效情况,以及循环依赖情况是什么?
不清楚
说一下常见的几个线程池?
面试官:java里面有4个线程池
讲了下核心线程数,最大线程数,超时时间,等待队列,(忘记讲策略了)
线程怎么释放的?
面试官:有固定时间,是写在里面的
线程池怎么从等待队列中拿任务的?
没了解,但其他是拿头结点
redis的Hash和java的Hash有什么区别?
它们的实现思路很类似,主要一个区别体现在扩容方法上,hashMap通过new 一个2倍的新的 HashMap, 然后将数据重新计算hash值,并保存到到新的hashMap中。
redis的hash扩容主要是依靠两个hashTable去完成,一个hashTable用来存储数据,如果达到扩容条件后,会通过rehash方法渐进式转移数据到另一个hashTable。
(多扯点hashmap的东西,说自己比较了解hashMap)
AQS有了解吗?
讲了是个抽象类,讲了chl等待队列,循环等待,cas操作,讲了模板方法。
说一下 synchroinzed 锁膨胀?
总结过,但没背熟
为什么要使用redis?
这里应该讲一下redis的特点,
击穿,雪崩,穿透回答不太熟练
布隆过滤器的原理和局限性?
不清楚