狮场由于总部位于南京,到达A1岗,周围一片大楼林立赫赫然写着“苏宁”,其场面比之中兴华为有过之而无不及。之后进入总部大楼,在A302门口的落地窗软沙发前等了将近半小时之后,工作人员终于赶来。
进入会议室,填写了一张表格(和简历一毛一样)之后就开始了漫长的等待。由于我交简历交得最慢,所以按顺序来排面试,我也排到了最后。和旁边南师的学姐,旁边旁边旁边的河海学长学姐有一搭没一搭的聊了半晌,终于轮到我。进入正题:
面试官是两个技术面试官+一个HR,面试过程相对还算顺利。整个面试的话题都围绕项目和jvm来展开,具体的谈话内容不再鏊述了。谈的内容包括但不限于:IoC(依赖注入),AOP,AOP组件,前端框架(angulars,react),jvm从编译,加载,到运行的全过程,hibernate的劣势,以及自己的最低期望薪酬,是否介意工作城市(说我适合北京上海,我可不想去),以及是否回老家。
基本的技术问题回答得还算顺利,其中有几个点没能答上来,这里记录一下:
jvm无用对象检测使用到的可达性分析算法的出发root节点,具体是哪些(GC root 起始点)?
- 虚拟机栈中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(即Native方法)引用的对象
综合来看,可以归结为:持久类型的对象作为出发点
jvm的具体运行过程,结合内存来谈。
首先来看栈帧概念图
当一个java类经过编译,加载进入内存之后,局部变量会进入局部变量表,之后每一次使用到的局部变量都会作为操作数加载到操作数栈中。同时,还有一个程序计数器,一条字节码指令的执行对应着程序计数器的加一操作。最后执行结束,整个方法的返回值将返回给调用者。
- hibernate的劣势
这个是真的不懂,hibernate还没来得及看,只能瞎扯一通,尽量把话题往mybatis的轻量级和hibernate上拉,但是拉完才发现,mybatis怎么轻也解释不通啊,算了,往Spring上拉吧
通常来讲,hibernate的优势在于:二级缓存,面向对象,方便移植,无侵入性。
劣势在于:效率低(这个经过了封装,效率必然不如原生的sql语句),对批量处理的支持差
有言,不要停止思考,即是如此。时时自省,方能看到自己的不完备。
但愿下次更好