天天看点

面经分享

        既是第一篇博客,也不好去抄。就随意分享下近来找工作的面试经历,你们就当故事看吧。

        1.玲盛科技。投完简历不久,人事就打电话过来了,问了些大致信息、英文能力等。然后就加qq传了份编程作业题给我,让我花两个小时左右完成下,两天后给她答案。题目是全英文的,一共5题。题目倒挺简单的,对集合内的对象按一定规则排序、将集合内的对象的分类求和之类的。总之就是很简单。当时看完题目就想,这么简单的算法题,还是开卷考,能有人过不了吗(后来果然打脸自己,too young too simple,sometimes naive)?开开心心的写了个快排,对集合做了下排序,迫不及待的就交作业了。过了几天hr回复,技术经理给的答复是“Coding is not good”。听到这个回答完全不能接受,这么简单的题,我还反复确认了几遍答案,怎么会not good呢,应该是perfect才对啊。找hr问原因,对方传了份答案给我。这一看才知道人家考的根本不是算法啊!他考的是对jdk集合的熟悉程度啊。答案里用了collection自带的sort方法,用了lamda表达式,用了jdk1.8的collection.stream,人家考的是这个啊。无话可说,出题意图都理解错了,gg。

        2.美亚柏科。人事也是反应迅速,投完当天就打电话过来约面。去面试时,前台先给了一份笔试题让我做。据说只有初级java开发和高级开发两套题,中级的也是做高级的题目。大致浏览下题目,没有什么大的难度,就开始写写写。做了四五十分钟吧,剩下3题还没写,但时间已经临近中午下班了。面试的几个部门经理就出来看了下,说后面的不用答了,直接开始面吧。三个技术经理就开始一起提问了。问的问题都是基于你简历上写的会的东西来问。比如你说你会算法,那排序算法有哪些,jdk自带的Arrays.sort是基于那种排序方式,一致性哈希算法;会设计模式是吧,说说你知道的有哪些,你映像比较深的有哪些;懂jvm原理是吧,gc说说,jvm调优,内存模型;懂jmm是吧,volatile是啥原理;懂innodb是吧,说说聚集索引和辅助索引,怎么进行索引优化,有限数量字段查询怎样更快(我回答的是建联合索引,实现索引覆盖),数据库锁呢,一致性锁定读和一致性非锁定读,事务隔离级别,innodb默认的级别;懂dubbo是吧,怎么服务治理的,服务发布过程呢;用过redis是吧,数据类型,持久化方式,集群部署,主从复制和哨兵机制,和memcached有什么不一样;知道hbase是吧,rowkey怎么设计,怎么防止rowkey聚集(这个地方一开始没理解问的人的意思,他问说怎么解决部分rowkey聚集在同一个节点的问题。我说hbase的数据库文件hfile是保存在hdfs上的,不一定会存储到同一个DataNode上啊,不会集中在同一个节点啊。后面又问你们是怎么设计rowkey的,有没做散列,我才明白他这里想问的是怎么防止rowkey聚集在同一个hregion的场景,怎么避免查询数据集中在某个HRegionServer,导致负载不均),为什么选择用hbase……等等不一一描述了。美亚问的问题是几个面试中问的最深的,可能也是因为三个技术经理同时面的原因。问题答得差不多了,面试的三个技术经理就开始自我介绍了,说各自来自什么部门,工作内容是什么,让我考虑下选择去哪个部门。因为面完已经十二点半多了,让我先出去吃个饭,下午一点半过来总监面试。这个就比较轻松了,自我介绍,职业规划,期望待遇之类。他们不同的部门是不同的总监,因为我同时面的两个部门都过了,所以总监也面了两个。最后一面就是hr面,选岗,定薪。不过美亚的给的待遇确实是低,我选的岗位据说还要求996,放弃。但整个面试还是很高效的,首战告捷。

        3.美团点评。其实我这次离职的真正目标是美团,但是简历投过去了,人家说不符合招聘要求,连面试机会都没给。问哪里不符合,回答说公司现在缩招,只招计算机相关专业毕业5年工作经验以上的开发(应该在筹划上市,控制人员)。后来又在招聘网上看到美团点评在招做内部财务系统的java高级开发时还楞了一下,想了下明白这个美团点评应该是被收购了的大众点评。投了简历很快就通知面试。面试的时候是技术总监直接面,上来就说要先考察下我的业务能力,问我什么是账务。我当时就愣了,因为确实没有想过这个问题,支支吾吾答不上来。然后又问了下之前系统涉及到的业务内容,答了个七七八八。然后就开始转技术问题。先是问redis的数据类型有哪些,我说有string、hash、list、set、sorted set以及新增的stream。然后分别解释了下各个类型分别是什么,当讲到hash时,提了句有点类似对象那样,有field和value。坑爹!他就开始问我你确定吗,hash的存储结构是对象?我说是数据类型像对象,内存里存储结构肯定不是啊。他就问我那是怎样的。我说我有看过原理介绍,但忘了(只记redis的存储结构有用到hash表、链表、跳跃表,不知道hash是怎么存储的)。他似乎对我的回答不是很满意。然后又问了下mysql的问题,问到redo日志是啥时,我说是重做日志文件。他说这些大家都知道,你能详细说说redo里记录的是什么。我又有点懵了,看mysql技术内幕这边书的时候是有大概的看过redo日志的存储内容和文件结构,但我只是为了理解redo日志的作用看了一遍而已,根本没有去记这些啊,就说通过redo、checkpoint机制和lsn序号可以实现数据刷盘和数据恢复,他对我的回答似乎也不满意,没再追问(后来我在回去的路上又仔细的思考了这个问题,我觉我应该是理解错了他的问题,他想要的答案应该是redo日志记录的是缓冲池中的物理页的修改记录,保存脏数据的表空间、页偏移和重做数据。这些我知道的啊,可惜已经晚了)。然后他就开始问你对我们公司有什么要了解的吗。我一听到这就慌了,这才面了二十多分钟就要结束了,这不没戏了吗。我就赶紧问他,我是有什么地方不符合贵公司要求的,可以告知下吗。他还给我打了个马虎眼,说,我没有说你面试没通过啊,面试结果后续会再通知你。我说,我面试时间从来没有这么短过,你都还没怎么问我技术问题啊。他看瞒我不住,就跟我说了句让我印象深刻的话:“你应该是要让我知道你会什么,而不是我去问你知道什么。”然后就又给了我个机会,问我知道mysql的mvcc吗。我说知道,mvcc是multi version concurrency control,多版本并发控制。他说,那你给我讲讲mysql的mvcc。我就开始说,通过mvcc可以实现快照读,可以实现不加锁的并发事务隔离。他插了句问,你确定不涉及锁吗。我想了下说,确实没有用到啊,mvcc就是用来实现一致性非锁定读的啊(这里我错了,mvcc是乐观锁,在修改记录时需要加排它锁)。他没有说话,我就继续往下说。我又说了下mysql是怎么通过undo日志回溯被修改的记录……说着说着发现他都开始玩手机了,知道自己回答的不是他想要的。于是意兴阑珊的打住了话头,结束了我这次跳槽过程中唯一一次的面试失败经历。这场面试对我打击很大,觉得他问的问题概念很大,让我谈一下对***的理解,对***的认识,而我在回答时又没有考虑清楚问题的答案,导致能答上来的问题也没回答出关键点。比如mvcc,核心的工作机制应该是在每个row record上增加了2个隐含字段,一个创建版本号(事务号,递增),一个删除版本号,读取数据的时候,仅保留创建版本号小于等于当前事务号和删除版本号大于当前事务号的记录,这样就实现了快照读。undo日志在这里的作用是当记录被其它事务修改过时用来回溯记录数据的,我回答时没有讲出重点。总之,这些都是因为自己没有将知识在脑海中形成体系,理解的还不够深刻的原因。吸取教训。

        4.优倍快。外企,美股上市公司,市值接近400亿。面试前先是拿出了一打卷子,看了下我简历上的工作经验,抽了份卷子给我说:“你做这份吧。”我看了下卷子标题,写着“java(中级)”。我说太简单了,给我高级的(装逼!),一边自己伸手从卷子里抽出了份写着java高级的卷子。第一题考sql,接着是关于https证书获取,tcp、http、https、websocket是什么,spring cloud的服务发现过程,对dubbo或者spring cloud的工作原理的说明,怎么实现分布式锁,画出做过的上一个系统架构等等,总之都是偏框架使用的。答完觉得这个公司招的人不是纯粹后端的,技术要求只是会用就行,交了卷子就说觉得自己不合适就走了。走到楼下发现伞忘记拿了(那天下雨),只好又回去拿。进去正好他们的技术总监正在拿着我的卷子看,说我看你答得挺好的怎么就走了,要不就面一面吧。想了想,来都来了,那就面一下吧。接着就开始围绕我简历上提到的知识、技术、框架等问。发现我对做过的东西了解的都挺清楚的,可能觉得这样下去节奏不对,就开始问一些简历之外的问题了。懂docker吗,懂***吗,有自己部署过hbase吗之类的。然后就又开始围绕怎么做产品、要有怎样的产品思维问了我一些问题,因为之前确实专注于后端技术,没考虑过这些,很多东西确实不了解。总之问啊问,把我问的开始有点怀疑自己了,开始让我填期望待遇(好手段!)。因为还沉浸在自己怎么这也不懂那也不懂的自我否定中,填了个比自己原先预想要低的期望待遇。技术总监看完了说,我可以给你这个数(把我的期望待遇往下压了1k),你能不能接受。我说我要考虑下,我才刚开始找工作,还不确定。他说,那你先考虑下,下周再过来复试下。后面复试的时候,又来了个人又对我做技术二面,问了我之前卷子上的那题sql的问题答案是不是写错了,group by是不是要把select 的字段全包含进去。我说Oracle是肯定要,但mysql我记得是不要(因为有点久没写sql,也不是很肯定。不过在写这篇博客的时候确认了下,没有记错)。他也不是很确定,没有反驳。然后问了我最近在做的项目的技术架构,问了分布式锁实现方式(Zookeeper或redis+lua脚本或数据库锁),问了分布式系统中的日志搜集问题,我大概给他介绍了下filebeat+kafka+jstorm+ElasticSearch的解决方案,他似乎对这些技术也不是很熟悉,完了就出去了。然后技术总监又进来了,花了大半个小时介绍了他公司和产品,竖立我对他们公司发展的认同感。聊到最后我问了下待遇,他说之前还不是很确定,经过刚刚的技术组长的再次面试,他对你的能力也很认可,可以按你的期望待遇给。我说,我这几天又收到不少offer,我之前写期望待遇偏低,你们最多可以给到多少。他说现在最多就给到这些,如果进来之后试用期表现好的话,转正可以再调。我问试用期多久,他说半年,我吓了一跳,说怎么这么久。他说他们试用期和正式期没有区别,工资全额发,五险一金照缴(按实际工资交,公积金12%)。我说那我回去再考虑下吧。至此结束。Get。

        5.立林科技。在集美的一家做物联网的公司,发展的挺不错,据说行业内前三。也是一到就给份卷子先做,很简单,大概就初级开发的难度(比如String和StringBuffer的区别,new String(“abc”)一共创建了几个对象)。做完直接面试,围绕简历问了最近在做的系统架构,工作中用到的技术和框架,然后问了些技术问题,比如dubbo的dubbo协议是怎样的,分布式事务的解决方案,jvm内存模型,怎么进行jvm调优,zookeeper的一致性算法(ZAB)类似这样的问题。完了就问期望待遇。报了个数,他们说应该没问题。我问公积金怎么交(因为他是个工厂,有自己的大楼,周围用围墙围起来,在这种工厂有了解过,福利待遇不怎么好,公积金、加班费都是按最低的给),回答说没多少,二百块左右。我听完立马说,那我的期望待遇写低了,我是按实际工资的12%期望的(得加钱!)。他说,可以,你按你期望的改。然后我又问年终几薪,他说也不多,差不多就一个月。我说,那也低了(得加钱!)。他说,那这样,你写个期望的税前年薪吧。我算了算,大概写了个数。他说和领导申请下,后续再答复。过了一天,hr打电话过来,说我要的待遇领导通过了,不过大领导想复试下。约了复试时间。复试。大领导是个很和蔼的大叔,全程都是面带微笑,让我自我介绍下,问下之前做过的项目,提了些技术问题,最后问起我的职业规划并和我介绍了下他们公司的状况。整个谈话过程还是很愉快的。不过最后再次确认待遇的时候发现比我填的少了一些,比我收到的其他offer的待遇也低了不少。Get。

        6.咪咕动漫。不得不说,咪咕的工作环境是面试的几家中最令人愉悦的。和前台报了来意,很快hr就和技术经理一起过来面试了。依然是围绕简历,介绍做过的项目,技术栈,还有实际工作中遇到的问题,考察技术深度(记得的有jvm调优,tomcat配置,连接池配置,dubbo协议等)。然后面完就说回去等通知,如果两天内没有收到通知那就是面试没有通过。回去当晚hr就打电话通知第二天下午复试。复试时是总监和hr一起,总监应该技术出身的,对技术很了解,问了些技术方面的问题(如代码规范、压测、自动化部署、日志收集),以及个人在团队中的作用,对之前团队的看法,工作流程有什么不合理,有什么提升建议,离职原因,自我评价,职业规划等等,之后就是谈期望待遇。由于咪咕实行的是年薪制,报了个期望年薪后,又是回去等通知,说两天内答复。第二天下午hr就打电话过来,说面试通过,介绍了下薪酬组成,让我考虑好再给她答复。面试完成。

        7.网宿科技。投的是大数据开发,可是面试了发现问的还是些web应用的技术,问,答,问,答,面试通过(记得的问题有,了解cdn吗,dns协议呢,网络七层协议是什么,三次握手四次挥手,负载均衡技术有哪几种,有哪几层的负载均衡技术,nginX工作原理,为什么可以实现高并发高性能等等)。

        8.唯你网。做财税系统的。没有笔试,直接面试。两个技术负责人一起面,过(有问了个sql查询的场景题,一个简单的算法题,分布式锁实现,dubbo协议,spring的BeanFactory和FactoryBean有什么区别等)。面试过程中有问到对神经网络了不了解,回答说后续有考虑往这个方向发展,目前还在复习线性代数和统计学,两年内是还没有能力转过去(后面了解到他们公司有用到图像识别和神经网络模型训练)。期望待遇,满足。五险一金是按工资的60%交,其它福利据说较少。Get。

        至此,全部面试结束。总结下,用过的东西一定不要停留在只是会配置会使用的层面上,了解其原理和特点,必要时阅读其源码(这个面试时倒没有公司问到过,我之前特地复习了下spring、spring mvc、mybatis、dubbo、tomcat的核心源码,没有用到,不过对框架的了解加深了),多多对比同类型产品的差异和优缺点,面试时才能立于不败之地。

        最后再分享下自己的学习书单吧:java编程思想,JavaScript权威指南,计算机网络(谢希仁第五版),深入理解 Java 内存模型_程晓明,深入理解Java虚拟机 JVM高级特性与最佳实践 第2版 ,图灵程序设计丛书-算法(第4版),数据结构与算法java中文,设计模式,Java与模式,Spring源码深度解析,Hadoop权威指南(第四版),MySQL技术内幕++InnoDB存储引擎,tomcat深入剖析,数据库原理,操作系统,Effective Java 第二版 ,Nginx开发从入门到精通,还有一些还没开始看的以及看过想不起来的就不贴上来了。因为是非计算机专业转行,计算机专业课还是要补上的。