这里讲述的是一家公司,简称I,当天上午面完公司B之后,打车到火车站坐高铁赶来面试,午饭也没吃,这次面试的比较久,从下午15:30到19:30,主要是等待的时间。当天20:30还接了一个Z公司的电话面试。这次面试也是轮数最多,持续时间最长的一次。共有一面电面,二面技术面,三面boss1, 四面boss2, 五面vp,如果HR面都算的话共有6面了。
电面
能记住的题目不多了,尽量回忆下吧。主要是根据简历问一些问题。
1.SpringBean的加载过程。(这个经常被问)
其实这个是蛮长的一段,主要有一下一些步骤(博主个人理解,仅供参考):xml解析之后存入一个BeanDefinition之中,然后主要是对其进行操作;先在singletionObjects(是一个ConcurrentHashMap的对象)判断有没有Bean的实例,有就处理下返回,没有就继续;检测一下循坏依赖之类的;下面要进入主题了,如果是单例(Spring Bean默认是单例)的话,就创建实例并存入singletonObjects中,如果不是则创建不保存(当然这里也有一个非常复杂的过程,这里就不论述了);实例创建完之后就开始属性注入(autowiredByType, autowiredByName);初始化Bean(激活Aware方法:BeanNameAware, BeanFactoryAware, ApplicationContextAware等;BeanPostProcessor接口;激活自定义init方法:init-method, InitializingBean接口;);这里就可以使用Bean了;使用完之后就是销毁了(destory-method, DisposableBean接口)。有关Spring的一些知识点可以参考《Spring知识点提炼》。
2.JVM的原理。
这个可以参考第二篇《这里有一份面筋请查收(二)》中的相关资料,当然这次没有说的这么多,大概是这篇文章中讲述的内容《Java虚拟机结构分析》。
3.Javac的编译过程
这个我好像记得面过,但是笔记上写了。姑且就当问过吧。大致就四个过程:词法分析,语法分析,语义分析,代码生成。详细可以参考《Javac编译过程》。
4.Linux命令相关
awk有什么作用?awk是一个强大的文本分析工具,awk实在是强大,三言两语无法说明白,有兴趣的可以自行度娘之。
怎么查看进程信息:ps -aux或者用java的jps
5.JVM调优相关。可以参考上一篇的内容,不赘述。
二面
二面是face2face的,问的问题也么记住几个,囧。
1. 刚开始是一道设计题,有关目录树的设计。随意聊聊。
2. Keepalived和LVS的原理。
博主简历上写用过这两个东西,所以被问原理也很正常。
Keepalived是以VRRP协议为实现基础的,主要有三个模块,分别是core,check和vrrp。core是keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。工作在3,4,7层上。第三层:Keepalived会定期向服务器集群中的服务器发送一个ICMP的数据包,如果发现某台服务器的IP地址没有激活,Keepalived便报告这台服务器失效。并将它从服务器集群中提出。第四层:主要以TCP端口的状态来决定服务器工作正常与否。第7层:根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
3.分布式和集群之间的理解。
分布式是以缩短单个任务的执行时间来提升效率的,而集群是通过提高单位时间执行的任务数来提升效率的。
4.消息队列的用途。(略)
5.常用的Linux命令。
这个问题单在I公司就被问了三次。看来还是很看重对Linux系统的熟悉程度的,毕竟没有多少服务器是用win或者ios跑的。
cat tac head tail more less nl vim vi gvim
date cal man shutdown poweroff reboot echo
uname -r; mount; unmount; exit
cd ls pwd mkdir cp scp rm mv
touch file which whereis locate find tar unzip
grep df top free kill killall
ifconfig ping netstat telnet ftp
passwd umask chrown chmod chgrp sudo ps who
6.如果换做是你,你怎么设计HashMap或者ArrayList。
博主当时说了一下HashMap和ArrayList的相关知识点。然后说了一下ArrayList的不合理之处(第三篇文章中《这里有一份面筋请查收(三)》已涉及,有兴趣的可以链接过去看看),博取下眼球。
7.Java中堆快还是栈快?why?
(当然不只这么多题,but博主只记得住这么多了。。。主要是你简历上所写的都要了解,框架神马的原理都要懂,不懂就删掉吧。)
三面、四面和VP面
三面和四面是boss面,当时是通过视频面试的。
主要问了问项目经历,然后问问对I公司的认知,以及考察一些基础知识,两个Boss都问了常用的Linux命令有哪些这种问题。还有就是考察一下价值观和应变能力,如果是个正常人的思维逻辑一般都能过,语言不要偏激即可。
VP面是电话面试的。这个过程还是蛮曲折的,在2,3,4面的当天VP太忙没时间,后来约的下周继续面,后来又约电话面,中间绕了一周。面试也是聊聊项目经历,大约15mins左右。
后记
I公司的产品我基本天天都会用,知名度也很高,前景业内也很好。面试官人不错,不是那种喜欢抓着你不会地方猛揪的那种。最后还是没有选择,原因有两个:1. 博主手中有个公司V的offer,职位最对博主的胃口;2. I公司这个职位需要用到Java和python,Java自然是没问题,python如果只作为脚本用用的话其实也不排斥,虽然没用过。如果需要用到另外一门主语言的话最希望的是C,博主用C的时间比Java还长,两门语言都是下过功夫的。python当主语言使用会耗费很多精力,还有用过python的人表示再来写Java会比较蛋疼,人生苦短,必须python,与我失之交臂啦。选择大于努力,希望这个选择不会后悔。
更多链接请关注:
这里有一份面筋请查收(一)
这里有一份面筋请查收(二)
这里有一份面筋请查收(三)
这里有一份面筋请查收(四)
这里有一份面筋请查收(五)
这里有一份面筋请查收(六)
这里有一份面筋请查收(七)
这里有一份面筋请查收(八)
参考资料:
1. Java虚拟机结构分析
2. Javac编译过程