校招期间,我认真准备的第一家企业就是这家了,面试的岗位为java开发工程师。两个面试官,A面试官是主要的面试,另外一个面试官B同时在用笔记本记录。刚坐下,面试官看着我填的表格,说了句自我介绍吧!

我的自我介绍就这样开始,在进去前我已经在稿纸上大概理了理思绪,所以描述起来还算顺畅。


您好,面试官,我是来自XXX学校XXX学院的XXX专业的某某某,我在校期间学习生活还算比较丰富,我除了完成好本专业的培养计划外,我比较喜欢扩展自己知识面,学习其他一些感兴趣的技术。在二年级暑期,我经过深思熟虑后选择了java技术栈开始学习。三年级参加2017年中国计算机大会志愿者,与业界的一些大牛交流,收益良多,开始学习与数据相关的知识,在四年级初开始决定在福州找工作,我通过python爬虫从智联上爬取相关数据并分析后,发现在福州python的工作远远少于java的工作,而且根据ython岗位的云图可以发现python在主要在运维这块,这在我参加的几场宣讲会上得以验证,所以我决定找java开发岗位,由于贵公司是我在进入大学就有留意的一家企业,所以我来应聘贵公司的java岗位。以上是我在校三年的学习生活缩影。

听我后的自我介绍后,面试官A:你有做过什么项目吗?

我一直以为是在企业中做过得项目才是面试官所说的"项目",经过纠正后,我说了我在学校的课程设计,也就是英语培训机构系统。我本是想像和老师答辩的思路来再重复一遍。

面试官A:直接说你做了什么


我一直在想:这个不是我一个人做的吗?我要如何描述。答:我是设计了商家作为第三方平台,雇佣老师讲课,招收学生。商家安培课程,老师上课,学生学习。其中负责系统的设计与编码。

面试官A:你使用了什么技术(框架)

我:我使用了Hibernate和Struts2框架,因为课程设计条件,XXXX刚要描述为啥要用,想说是顾及团队,没有使用spring等等的一些。

面试官A:(打断)你就说你用了哪些?

我:Hibernate和Strut2框架,前端库这些要吗?

面试官A:不用,你来说说为什么用这个有啥优缺点,相比jdbc呢

我:我觉得最大的好处就是方便,太多的API可以调用了,一个完整的orm框架,而且数据库可以改变,业务代码基本不变。

面试官A:缺点呢?


我:缺点就是比较繁重,有些人喜欢使用原生sql,虽然hibernate有使用sql的方法提供,但是这有点蹩脚(我说完我就后悔了,因为这个真的词穷了,我想表达的是不好的意思)

面试官A立马追问:为何蹩脚?(此处他是盯着我的)


我(强行绕道,提下mybatis,通过对比来说出hibernate的劣势):mybatis比较轻量级(网上说的),直接使用sql语句即可,而且现在mybatis很多工具都出来了(逆向工程、通用mapper),使用比较方便。

面试官A:你这不是幼儿英语培训机构吗?老师注册可以,学生怎么注册?

我起初没有考虑这么多,知识想到老师注册,学生注册,根本没有考虑这些具体业务问题,但是我的回答是:家长给注册的

面试官A:家长有些可能不想注册,交钱了,不想注册怎么办

我:这,系统设计注册信息是单个录入系统,这不注册怎么行,那就商家给学生注册,嫌麻烦就只填写必要的信息字段即可。

面试官A:你能够批量导入吗?完善这个问题

我:我没有做导入信息,但是我做了导出学生、老师数据到excel,使用POI,能够导出,导入应该也是能够实现的。

面试官A:你说你熟悉AJAX、XML、JSON等等这些技术,你能说说吗?

我:JSON是作为一种数据格式,这是使用比较频繁的,用于传输数据。

面试官A紧跟一句:XML和HTML说一下


我:XML和HTML都是文档,HTML主要是在编写web页面时使用的,XML主要是使用在配置文件这块。之前一个工作了的朋友和我说他现在使用的数据格式主要为JSON,除了对接部分项目时,对方也可能使用XML。总的来说HTTP+JOSN还是占比比较大的。

面试官A:你的简历上说到的熟悉java,熟悉java还是精通呢

我:我觉得一个本科生谈不上精通吧,算是熟悉

面试官A:我指的精通和和外面(社招)的精通不一样

我:哦,这样啊,我觉得算是比较熟悉。

面试官A:了解设计模式吗?单例、IOC等等

(后面查阅发现百科中一句:IOC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GoF
<https://baike.baidu.com/item/GoF>中。)

我:了解一些设计模式,单例、工厂、代理。IOC听过,依赖注入。

面试官B(开始):你这个是spring中的。

我(蒙圈中,从开始学到现在都是这么描述的啊,不满意?):不好意思,我第一次开始接触到这个名词时,我是在学spring,不是将一个对象注入到另一个对象吗?

面试官A:反射懂吗?


我:懂,在运行期间,使用一些方法和属性。像AOP这些都是使用了反射,动态代理模式,不然怎么在一堆代码中加上事物、日志这些,这些以前在学习的时候有去模拟,代理可以使用JDK、CGLIB方式,曾经实践过。

面试官A补了一句:你能说说IOC和代理之间联系吗

我(有点紧张了,毕竟用的比较少):这个我,我不太懂,不好意思。

面试官B:你使用redist,redis除了set和list还有其他的数据类型吗

我:这个set还有一个sorted set(叫zset,有序集合) ,还有一个最简单的string
,印象中还有一个map(实际上叫Hash,就是键值对),API这些有些忘记了,隔一段时间我会去浏览。

面试官A:Linux怎样

我:由于上一家实习单位比较重视linux,所以对这个比较熟悉

面试官A追问:能够写sell吗?会写吗?

我:有学过一部分,但是不熟悉,我觉得我不能偏离主线,学习太过发散

面试官A纠正:这个没关系的(意思就是说:java程序员会这个不算太发散学习,毕竟都是有用的,多学有益)

面试官A:你对apache和tomcat有什么差别?(同时我的简历上也提了nginx)


我:我周围的同学和朋友对这个不大理解,我是和他们说这是http服务器和应用服务器的差别,nginx是作为http服务器,能够部署静态资源文件,我使用它用作反向代理,像servlet这些web应用需要部署到应用服务器例如tomcat。

面试官A追问:我是说apache


我:我是想通过描述nginx和tomcat来引出apache,因为我认为这是同类型的东西,是http服务器。(因为我对nginx熟悉程度相对apache更高,描述起来更顺利)

面试官A:哦,你是通过项目结构来划分

面试官A:你对数据库调优的看法?

我:数据库在建立的时候就要注意表的设计,不然后期改表很麻烦,甚至改不动,以及需要考虑索引的设计。

面试官A好像就等着我说索引似的,直接问道:如果表无法修改,说说索引

我:我在平时使用过程中,会将一些查询比较多字段建立索引,与其他表多关联的字段、经常排序的字段简历索引,因为索引好像有个序列在维护,这样设计效率更高。

面试官A:索引有什么缺点吗?

我:索引建立后是需要维护的,建立索引就是为了提高查询效率,但是增删这些操作后索引是需要维护的,没设计好,反而优势小于劣势,适得其反。

(注:简历中有提到:使用过一些常见的开源工具如Druid、Dubbo、Zookeeper、Solr、 ActiveMQ/RabbitMQ等等)

面试官B补了一句:你使用zookeeper来干嘛?zookeeper除了能用来XXX、XXX、XXX,还能干嘛?还有你用
ActiveMQ/RabbitMQ干嘛用,为什么要用?(我自己都搞不懂面试官B在说啥,没听过,所以我也就老实交代了)


我:不好意思我,当时学习zookeeper的时候是跟做一个项目,它是个SOA项目,我跟着视频做了半个月,完整的模仿下来,中中间使用了这些技术,所以我在简历上的描述是使用过。(我意指我对它提的zookeeper相关的问题,我不懂回答)

面试官A看我没回上,安慰一句:没事,这是补充的,你很优秀,别管我们。(我以为结束了,然而并没有)

(注:简历中有提到:熟悉常用开发框架如SSH、SSM、Spring Boot,了解Spring Cloud;)

面试官B说了几句过渡的话,看我提到项目架构后,发现我在简历中有提及spring boot 和cloud,问道:你在使用spring
boot?(具体问题不确定了,大概就是要我描述下)


我想想后,发现应该只是想问问我一些架构上的思想吧,应该属于扩展话题,还好我在实习期间自己有看看相关的资料和博客,这点还是能说的什么的。我开始娓娓道来:因为web架构从单体项目到垂直分布,到后面的SOA到目前火热的微服务项目,spring
could 就是在做微服务这块的,开始接触这是在实习期间,一个朋友和我提到他所在的公司有使用这块技术,他推荐我去学习(入门)。

面试官B继续追问:微服务,为什么要使用?有什么好处?


此刻我就在回忆之前看的一些博客提及的一个点(记住的内容比较少):中小型企业可能用不到微服务,一般是互联网项目使用微服务,可能成百上千的开发人员一起开发,可能在开发测试期间难免不好同步(我忘了当时怎么形容,大概就是这个意思,不方便开发)

面试官A追问:你说的这个问题可以通过在管理上来协调解决


我:微服务可以将项目垂直分得比较细,可以直接由小组完成即可,开发方便,部署也方便,随着微服务兴起的docker技术,我周围的同学和朋友或许不懂,可是我得懂。(这句话我都不懂怎么就说出来了,至于影响嘛,不懂是好是坏)

(注:docker是我在实习期间自己好奇学习的,这算相对新鲜的技术,提一下怕是能加分)

面试官B:我们公司就是使用XXX,不懂你有没有听说过?(注:我是忘记那是啥单词了)

我(一脸懵逼,一直在回忆,思索如何回答):不好意思,这个我没了解过,不懂,这是同一类型的东西吗?

面试官B:你使用docker后,又如何管理docker呢?

我当时就在想我简历上不是写了解吗?一个了解能够引出这些问题?我就凭着感觉说了句:这个不是运维人员的事情吗?(毕竟牵涉到部署了)

面试官B(好像笑了):我们使用管理docker的XXX(具体忘了),通过它管理docker,你可以去了解一下。

我也没听清,但是不方便再问一遍,因为前面问过一两次了,不好意思再叫他重复一遍。只是满说了句:好

到此为止,基本上结束了,我最想它问的,它没有提及。(注:简历中提及:
对现今的前端(WebPage/App/微信小程序)技术以及前后端分离有一定的理解;预览地址:http://www.cherish.pro:8088/
<http://www.cherish.pro:8088/javaee2/>)

我是想着简历中的域名链接、微信小程序以及github地址,会不会问一些相关的东西,没想到根本没有提到过。

最后面试官B:笑笑的问了句,是想成为java架构师

我弱弱地回了:我是想走项目这块,架构这块,目前肯定是达不到的,算是一个愿景。

面试官A:在校成绩?

我:绩点GPA 3.52专业排名4/60(纯成绩非综测),因为高校中有综测一说,举了一个例子(具体不说了)

面试官A:综测也是一种能力的体现,我就是XXXXXXX。

我发现我好想说错了什么,有没有坏影响就不得而知了,尴尬地说了句:嗯嗯

面试官A:英语过了四级吗?面试官B:看着我

我:不好意思,我在这块是薄弱的,没有过四级,但是我不排斥去记专业英语中的词汇。(想解释一波是听力不行,阅读相对好点,毕竟主要是阅读用得到嘛,但是直接被打断了)

面试官A:英语不行是吧。

我只能无奈地说句:嗯嗯

就这样我的这次技术面试算是结束了。

在后面的分析过后,我发现我可能是被淘汰或许是被放在备用名单中,就是说我其实不是优先考虑的。


但是,我离开面试场地后,突然叫我回去hr面试,我重新自我介绍,根据我的观察,我更加确定自己是备用的,但是后面会给我机会,估计是技术面的面试官的推荐,不然我真的想不到为何一个离开面试场地后的学生还会被叫回去第二轮面试。

以上是我的一次面试经历,这仅仅为了给自己留个纪念,如果后面取消私密文章后,或许对一些大学生能够有点参考吧,毕竟这是真实地发生在我身上的例子。