美团一面(直接降维打击了 呜呜呜)
3.11.下午4:30 62分钟
下午刚面了两家,然后进来看见有编译器就慌了,以为要写算法,没想到竟然。。。
1.自我介绍
2.介绍下项目
3.然后问我这个项目一开始如何分模块的,我想了想,然后就说项目中角色不同,一些功能是根据角色来划分的,然后不满意,然后我大致说了下项目中的主要功能,大致通过功能,分了下模块。
4.然后问我项目中做了哪些东西,我说权限管理和一个算法的热替换还有一些简单业务,就问我热替换是如何实现的,我大致说了一下,然后问我哪里一般会使用到热替换?见我没说话,然后问我既然你是通过类加载器,那你说一下java中的类加载器。
5.然后我谈了下java中主要的类加载器和关系,然后继续问我它们分别都是加载哪些东西,然后继续说了一下。
6.然后问我如果自己写个String会发生什么?我说会抛异常,然后问我为什么(之前看过学长的面经是这样的 没提到为什么啊 呜呜呜),我就扯它的双亲委派,然后说了下双亲委派,感觉不够满意。
7..说问我一下java基础,问我final关键字,然后我说了下加在字段上、方法上、类上的区别,然后感觉面试官不够满意。然后继续扯final修饰的变量保证其地址不被改变,类似于String里面修饰的数组,然后还是不够满意,就举了个场景,说final 修饰的两个变量,在代码中会被预编译的时候优化直接拼接,而不是使用StringBuffer,然后面试官看起来还是不满意。
8.然后面试官问我final修饰的包装类型有什么作用,我。。。真的不知道说什么了。求大佬解答。
9.问我单例模式,工厂模式,代理模式,责任链模式,讲一下它们的应用场景
10.下来就具体问我单例模式,说它的好处 我只会说它使用了同一个对象,减少了消耗,然后扯了一下ioc的scope的单例是如何实现的 他说没说在点上 然后继续问,我就继续扯了一下4种单例的实现。
11.然后被问static final 修饰的变量,是如何保证只使用了这一个对象的,而不是创建两个对象的?我麻了,然后提示我双重检验单例是如何保证的,我继续扯了一下。但是感觉面试官不满意。
12.接下来继续问我代理模式,我说了下jdk代理和cglib代理的区别
13.然后被问到为什么cglib要比jdk代理要快,我说jdk是通过反射调用方法的,而cglib代理是靠fastclass机制实现的,里面通过索引查找,然后继续问我为什么反射要比索引查找慢,我又麻了。
14.然后他问我什么场景下会使用jdk代理和cglib代理,问我平时使用的话,我本来想扯一下mybatis接口的代理是jdk代理还有一个是依靠cglib代理的,但是怕被面试官打断就没继续说了,实在想不到具体的使用场景。
15.问我平时一般使用什么数据结构,我说了ArrayList、LinkedList、HashMap,然后分别介绍了一下。
16.然后继续问我为什么ArrayList随机查找比较快,我说底层是数组,然后它实现了random接口。
17.然后继续说了下jdk1.7和jdk1.8HashMap的区别。
18.然后就说要不手写一个HashMap,我。。。我问他要实现什么功能,他说一般的put、get、resize()要实现吧。我麻了。。。
19.自己写了一会,然后看我很为难,就打断了,看我写的代码,然后问我看你通过key获取数组里面的数据,然后这不跟数组查找一样吗,有什么区别?都可以存object的。我。。。
20.然后问我写的这个node节点,有什么作用,我说存储键和值的?
21.然后问我让我设计哈希函数,怎么设计,我扯了下jdk1.7和jdk1.8的扰动函数,然后他说让我自己设计,说看源码虽然是好,但是想让我自己思考一下,我就说通过扰动函数,就是避免哈希冲突的,具体设计。。。我答不出来。
22.maven平时怎么使用的,怎么打包的,问我了解具体命令不,我说一般直接idea。
23.git使用过吗,说了下暂存区、本地仓库、远程仓库,说了下具体的命令,问我提交到暂存区什么命令 我说 git add .。他说,说的是对的,不过不满意,然后说使用过add stash吗?什么玩意
24.java -jar xxx.jar 来运行一个项目的时候,仔细看过吗,里面内存分布是怎么样的,垃圾回收器是使用什么的?我扯了一下jvm的运行时数据区的分布,再说了下一些垃圾回收器,然后说了jdk8的默认垃圾回收器。然后他说我说的都对,但是建议我回去具体看看java -jar xxx.jar 下面的日志。
大概说了就是这些,然后全程高压,我都忘了开录音了,记得大概就是这些了。
感觉这次面试真的巨难,面试官一直问我细节,可惜学得东西太浅了,没有继续深挖。
问了下面试官在学习中如何了解的更加细致,巴拉巴拉。
总之,是我面试最难的一次了,怪我太菜了。。。求面试官让我过。我只是一个找实习的。呜呜呜