最近一朋友离了职后,找工作前前后后面试了6天,一共10家公司,我找他分享出面试过程及经验,希望能对各位正在面试中或者准备面试的童鞋有所帮助,以下面试企业为了保密不说实际名称。以下为第一人称。

第一家公司:简称A 

由于刚刚开始面试选择试试水,就在智联上投递了一写公司,这家就是第一个让我去面试的公司。这家企业是新三板上市的一家公司,大约有700人那样。面试时间定在早上10点,去了以后给了一份面试题

内容如下:

一、Spring

1.请说明spring实现AOP的两种方式及其区别。

2.请说明Spring生命周期中的可扩展接口及其定义的方法,如FactoryBean.

3.请简述Spring Cloud的名个组件及其功能。

二、MyBatis

4.请说明MyBatis中DAO接口的实现机制。

5.现在需要增加一个计算SQL执行时间的插件,请简述该插件的实现原理与方式。

三、前端

6.请简述Prototype的应用场景及其基本用法。

7.请简述Promise的应用场景及基本用法。

四、分布式及中间件

8.请简述CAP理论。

9.请简述Redis 2.X实现高可用的方法及如何水平扩展。

10.请列举常用的消息中间件及其特点。

11.请简述HBase的基本概念、应用场景及其与关系型数据库的区别。

五、Java

12.请简述Sring.intern()方法。

13.请简述jdk的类加载机制、ClassLoader及双亲委派模型。

14.请说明Executor、ExecutorService、Executors、ThreadPoolExecutor之间的关系。

15.请简述Java并发编程中,锁的几种类型。

16.请说明CountDownLatch、CyclicBarrier、Semaphore的适用场景。

17.请说明ConcurrentHashMap在1.7 和1.8中实现的不同之处。

18.请简述volatile关键字的含义、JMM内存模型及happens-before原则。

六、设计

19.请简述Observer模式及其在JDK中的应用。

20.请给出一个分布式网络爬虫的设计架构,支持每天G级的爬取数据量。

然后hr一会告诉我笔试不过,无法进入面试。这个还是很难受的。因为在面试过程中不管如何都会和面试官聊下,起码知道哪些题不对,也可能是我自己准备不充分导致,第一次面试就这样草草结束。

第二家公司:简称B

这家公司规模很小,大约就50人吧,是boss直聘上一个hr主动联系让去试试,所以就去,对于这家企业还是信心满满的,想找点自信,结果恰恰相反。

去了以后也没面试题,写了一个登记之后hr就让我和面试官聊天,首先让我把项目流程介绍一下,我说了以后。他说我看了你的github代码感觉还不错,你给我show一段。有点懵逼,猛下这么说出乎我的意料,我就说写个2分查找吧,就随手写了一个但是我竟然犯了一个致命错误,返回值有些问题写成null,但是明显我采用的是int而不是integer。

然后接着问我web前端遇到过什么问题没有,我说平时这方面遇到问题倒不是太多,他说好你给我写个过滤器,这个实在是没法写出来,平时可能都是电脑写,足以说明我准备的确实不充分,后来又让我写个sql,虽然最终写出来了但是时间过久。然后聊点其他的就说你回去吧,后续通知,我就知道这次面试再次挂了。心情低落极点了。

第三家公司:简称C

这家企业规模还不错,有上千人吧,环境也可以,是拉钩上看到的一家企业。也是10点面试,去了给了一个面试题,一份心理测试题,面试题难度还是有点的,10道选择题考察知识多少final,static,do which等知识难度倒是一般,后面是大题,比如写出ssh的配置 ,数据库连接池配置,thread和runnable是什么区别,写几种单利模式,Linux一些查找命令,一个复杂的sql语句。Linux我不太熟悉,没写出来,ssh配置这个平时看的也是,写的很一般,数据库连接池配置写的也一般。

然后是心理测试,这个测试题非常多而且考察东西也多,包括一些国外的名人问他干嘛的,设计怎么让北京三环不堵车,还有怎么设计类似摩托车但是不耗油等等吧,答完题大约11点半,然后第一面竟然是hr,聊了还不少,关于为啥跳槽,发展方向,以前做啥等。第二面大约就几分钟,问我会Linux不,我说不怎么会,以前你干嘛的然后就说你回去吧我们后续通知。基本也挂了。

 

第四家公司:简称D

从第四家公司开始变得顺利,连续过了6家公司。经过前3家失败,我回去总结下,把基础知识复习一下,避免死在这样的问题上。这家企业大约300人,一家传统的公司,主要大数据方面的。去了也是一份面试题,这个面试题对我来说比较简单,选择题就不题了,大题是三个一个问什么是ioc和aop,一个是设计模式,一个是sql。

大约半小时就写好了,然后面试官看了一眼面试题也没问面试题上问题,问我你说咱们聊什么知识,我就说多线程吧,然后他问我Java线程池几种方式,我回答4种,各位自己查哪几种,然后又聊thread和runnable,接着问hashtable和ConcurrentHashMap,因为看过这两个的源码所以回答还是挺轻松的。陆陆续续问了一些线程安全问题,最后又聊了一些存储过程知识,这个平时用的少回答的一般,但是我观点是尽量少用存储过程,避免把大量业务放在数据库处理。

还问了一些数据库索引设计问题,这个我会,所以答的也可以。最后问下我薪水我说最低多少,就开始二面了。二面是一个不是Java的,是这整个团队的组长,主要问了一些如何处理几亿日志查询,我说可以采用存储过程还有内存数据库什么的,她说不是好的方案,接着我问你们有什么好的方案,她说我们暂时没有,用的就是你刚刚说的。总体还是挺满意的然后问我薪水,让我等下说让总监决定我的薪水,然后总监不在,这个确实不在,他领着我去人事那边做个登记说明天给电话来复试。

大约2天后打电话让去复试,因为我手里有offer了就给hr说了情况,我说你问下,如果薪水不到,我就不去了。后来hr回复他们确实给不了,我说那就算了。这家公司是好的开头,整个信心提升了好多。

第五家公司:简称E

这家企业大约700人,300多个研发,办公环境倒是一般,下午2点过去的,也没有面试题,主要问线程知识,然后问我你熟悉哪个数据结构说个,然后我随便说了几个他说可以,又问我要多少薪水,最低多少我说了下他说没问题,就让我去二面了。

二面问的是数据库,线程方面知识,我感觉答的倒是一般,大约聊了半个小时,然后说我们今天就聊到这,然后我就回去准备下一家,然后回来路上一面就给我打电话说你面试通过了,薪水按照你说的来,问我啥时候入职我说下周,他说尽快,最后hr也给我说了薪水,过了一天就发了offer,这家公司感觉还行吧,最后只是感觉挺对不起hr的,答应去没去,打电话时候明显生气了。

第六家公司:简称F

这家公司规模还不错,可能有些买水果支付钱的时候还用到,但是总部在上海,北京新成立不久。这家没面试题,主要是针对项目,问我遇到过什么问题,为什么这么设计,好处在哪里,我都一一解答了,聊得时间蛮久的,最后他说他们加班可能会少,团队目前就5个人,问我能否接受,然后又说自己公司很有前景什么的一堆,我个人不喜欢这样小团队,坑太多就说我回去考虑下给你打电话,当然薪水他也说可以按照我要的来。因为不喜欢这样环境所以也没打电话给他。

 

第七家公司:简称G

这个公司可以算是3线互联网了,小有名气,规模也比较大,当时是很想拿下的,下午2点过去的,不过面试的还挺多的,就我那一屋子就3个人,面试题是一个小时,第一题主要是针对目前流行的一些技术,让解释下。

我大约搞定了80%,因为平时看的多,但是也很多只是知道存在并不知道用法,第二题是一个排序,我写了一个快排,第三题是求一个数的质数第四题是二叉树(个人觉得出的有问题我后来问题这个题意义是什么他说考察一下是否会写递归)第五题是设计题我参考了一下集合方面的设计,采用接口+抽象类+类这种方式。最后是一个排序,我没有多少思路。

面试时候可能人多直接由技术总监面试,技术考察点倒不是很多,着重考察个人,问你如何展开工作,你是什么样的人等等我回答的还可以,然后他说你的薪水多少我说下,然后他签字说去找hr吧。这家过的很轻松。

hr给的薪水明显低些,但是他们4个月奖金,3个月一发,考核是0.8到1.2基点。offer合同也有写,应该比嘴上说我们几个月年终奖靠谱多了。这家企业我犹豫了好久,因为后面我成功面试了另外一家,这家技术总监给我打电话聊了有半小时说了一下他们的前景而且薪水会加到比我拿到的只多不少,hr后来打电话也确认了这件事。

在后来属于我的直属上司又打电话和我聊聊,不过说实话挺感动,我说我们加微信吧,以后有机会再合作,因为互联网圈子很小。

第八家公司:简称H

这家企业规模还挺大,让写一个心理测试题,主要是php开发,根本就没有Java开发,主要想招几个人做一些项目维护,来了一个面试还挺帅的,主要就问项目,没什么具体技术点,就是我们相互吹吹牛逼,他吹完我在吹,然后说小伙子很不错,要不要考虑来啊,我说这个压力山大啊,你容我考虑考虑就回去了,反正我肯定不想在这样环境工作,很苦逼。

第九家公司:简称I

这家公司知名度挺大的,估计大家也都知道。下午本来约好是4点面试,但是我中间有事迟到了,4点半过去的。第一面的面试官很nice,感觉人特别的好,也很随和,生活中是值得交的朋友。第一个问题问我什么事面向对象,反正我回答滔滔不绝。

第二个问了hashtable相关的知识这个我也会接着我们又聊聊volatile,我又说了Java内存模型,后来让写个算法,写的不太好,他说没关系,我只是想看看你的代码风格。然后又让写个sql,我随手就写出来,然后他说你在写个那个有点复杂没写出来,他说没关系,这个不是面试的范畴,有点难为你了,这个不算啊,不要在意。

后来我记得还问了数据库索引方面知识,最后告诉我你的一面过了,你等下一面吧(反正这个面试官给了我很深的印象,人确实不错)。

二面主要考查的是项目,主要问了我最后一个项目包括很多细节,如何优化的并且画图,同样也让写个算法,不过比较好的是让伪代码就行,所以我还是写出来了,不过又问有没有更好的方式,我想了想说目前我也没更好的方式了。(遇到算法题哪怕在复杂只要实现就写,能写出来比不会写强很多)整个面试还是围绕项目展开的。

后来面试结束他说整体还可以,某些细节没答出来,但是整个思路都是对的,那时候都7点多了,问我明天再来一次复试怎么样,我说我只有上午有时间,下午我有面试。他说你等下我去找老板(就是他的领导),然后展开三面,三面上来问了一下整个项目的流程我再次解释并画图,然后聊天过程核心还是团队协作问题,如何和产品经理沟通,还有一个如果你是组长你会怎么样做,侧重管理能力,因为我在第二段工作做过类似所以回答起来还是很轻松,其实和产品沟通,研发沟通最主要是换位思考,懂的尊重别人。

面试完毕都快9点了,他说hr肯定面不了了,你明天还要不要在来一次,我说明天下午有面试来不了,他说那没事我让她电话联系你,我说薪水我要多少合适啊,他说你随便,我说我有offer了说下offer薪水,他说你可以提,我们这边会给你一个考核的。

最后走的时候说你明天和hr聊天注意点说话不要被刷了,尽量不要说你领导过多好话。反正意思保持中立。前前后后到发offer用了2天时间,hr确实也没问薪水问题直接他们评定的。我觉得挺理想的。

第十家公司:简称J

这家同样是大企业,名气也不小。由同事内推过去的。面试的人简直了实在太多了,感觉所有面试加起来100人都不止,去了也没笔试题,一面就问我几个问题,一个是二叉树的顺序排序,会先跟,后跟,中跟就是不会顺序,尴尬了。

第二个让写一个单例模式,写了一个内部类。第三个问题问了hashMap的<操作,我回答的不算好,主要考查源码的,然后让我写个归并排序,这个同样写不出来,连续几个就知道完蛋,肯定不过。果真不过,然后问我面试怎么样我说还行拿到几个offer,他说恭喜之类的话就让回去了。

 

总结:

整个面试下来,觉得面试也有运气成分,但是更多是实力体现,我们不要抱着侥幸的心理,把基础打杂事,注意说话的方法,一定洋溢着自信。

1、诚恳

注意一点是当面试官问你你有什么想问他的不,把握好机会,也会可以逆转局势。你可以问他需要什么样人然后定位自己看看自己是不是,说到底面试的人想要招人过去,记得一定要诚恳。

2、不说大话

不要说什么大话,什么我精通多线程之类的。就说你自己性格特点能做什么样事,也许面试官会给你一个机会。

3、面前准备

还有就是面试之前记得准备充分,关于是否要看面试题,如果可以还是要看一下,注意一下问题的细节,为自己创造多一点机会。

4、面后总结

还有就是面试完毕之后进行总结,千万失败否定自己垂头丧气。

如果感觉公司还不错,就可以踏踏实实工作,不要眼高手低,错过机会,当你实力很强的时候就是企业主动找你的时候。

最后:

笔者这里也是收集整理了一些面试资料准备分享给有需要的朋友,有需要的朋友:一键三连(点赞+收藏+关注) 后,添加微信:mxm9843 即可免费获取到。

还有一些架构相关的视频,其中覆盖了互联网的方方面面,期间碰到各种产品各种场景下的各种问题,希望可以帮助大家扩展自己的技术广度和知识面。