面经详情

Java面试很好,共1轮面试
一、项目
Q:    1.简单自我介绍
Q:    2.挑一个有难点、亮点的项目来讲
    3.自己表明想用白板介绍
二、八股文
    1.Mysql的原理介绍一下
Q:1.1、MySQL的B+树,主要讲了下Hash和B树的缺点,描述了下B+树的非叶子节点和叶子节点等
Q:1.2、MySQL的悲观锁、乐观锁机制
Q:1.3、如果有十个并发线程同时修改某条数据,数据的原始值是100,问最终这个数据的值会变为多少?2条回答
1.3.1、如果用悲观锁,select *** for update,则为110 1.3.2、如果用乐观锁,需要判断影响行数并重试(面试官强调,金融行业不允许重试),回答101。 因为只会有一个线程修改成功,面试官表示正确。
Q:    2.线程安全讲一下?
        2.1、三大要素:有序性、原子性、可见性
         2.2、Synchronized和volatile一把梭
        2.3、重点表明单机版用JVM锁,分布式版用redis分布式锁(本来想狂扯一把redis分布式锁,面试官听到分布式锁就让我打住了)
        2.4、本来还想扯一下AQS,准备疯狂输出面试官,也没给机会让说
Q:3.有没有遇到过数据库死锁?谈下怎么解决的?
         3.1、表示之前遇到过同事把表给锁死了。
        3.2、首先阐明发生死锁的几个必要条件
        3.3、再表明好像有个show processlist,还有个information schema可以查看锁。
        3.4、针对占有锁的进程/线程,直接kill掉。因为它们已经发生死锁了,没法优化,只能先破坏不可剥夺条件。
    4.HashMap八股
Q: 4.1、说下HashMap为什么不安全?
 主要讲了HashMap去put时,如果扩容,会有transfer的过程,1.7的情况下会有死循环。 而且没有加锁控制,然后面试官就没让说了 (这块有点短板,因为1.7 1.8,CHM的1.7 1.8内容太多,记不住)
5.考题
    5.1、Integer整数,为什么(1000==1000)返回false,而(100==100)返回true 直接回答写JDK代码的设计人员考虑到程序的运行效率,缓存了-12X-12X的数据。再扯到Redis也有类似机制,缓存了10000个RedisObject, 本来还想延伸,面试官让我打住。
Q:6.堆和栈的区别?
    6.1、讲了下Java中堆主要是存放对象的,栈有虚拟机栈等。描述了两者的区别
Q:7.注解怎么实现的?2条回答
    7.1、这块其实不是很熟,讲了下注解的几个要点:@Target @Document
    7.2、表示是否可以以某个具体的注解来讲,比如@Autowired,面试官表示可以 (其实还想以AOP+自定义注解+Redis Lua来实现分布式限流来讲的)
    7.3、开始讲Spring的getBean(),createBean()创建实例,然后populateBean()填充属性的时候,会判断是否实现了inxxxxBeanPostProcessor, 会去自动注入相关属性,面试官让就此打住
Q:8.三级缓存讲一下?
    8.1、讲了下三级缓存是拿来干嘛的,解决哪种循环依赖的。
    8.2、提前暴露单实例,三级是Map,假装思考一下,ObjectFactory是用的get还是getObject()方法 因为前面说得太流畅了,要假装回忆一下。。。。。
 8.2、讲了下getBean()的流程,具体以A依赖B,B依赖A,且是setter依赖,然后什么时候三级升为二级,然后又放到一级 还没讲完,面试官表示可以了
三、算法题
7.算法题
    7.1、删除链表中重复的结点(面试官要求限时20分钟)

相关推荐

进入微信小程序

前往微信小程序,查看更多结果

立即前往
看准网小米小米面试经验小米面试经验:Java面试很好,共1轮面试