前言
说来话长,从18年下半年开始,就有了离职的念头。但由于18年年初时答应项目经理要再待一年,所以强压下心头的邪念,坚持着一直做到年底。这期间身兼各种工作-提数、排查线上问题、给各个省公司的人答疑解惑、与其他部门联系沟通、做公司一个内部配置平台的前端页面的开发,唯一做的很少的就是后台开发,咳咳,实在汗颜。干了几个月后发现状况不对,急需提升自己的开发水平,于是开始看起JVM原理(第二遍看)、Spring源码、mybatis源码,顺便了解了不少mysql相关的知识,像不同引擎对应的索引结构、事务隔离级别、B+树等。就在不断地自我膨胀与自我怀疑中,满怀期待又惴惴不安地迎来了这一波面试。
面试过程
整个的面试过程满是曲折。从春节假期开始到二月底结束,持续的时间不长,一共也就面了五家。春节假期前是支付宝负责保险模块的部门,春节假之后是OYO酒店,再然后是平安健康险、河马,最后面的是G7物联网。
年前面的支付宝这次面试纯粹是个意外,还没投简历就不知为何被猎头找上了,联系了阿里,答应着春节之后会安排电话面试。没成想阿里的办事效率奇高,当天下午就给我打来电话要求电话面试一波。没啥好推拖的,我就硬着头皮开始了我人生中第一次的阿里面试,问的东西现在看来也能答个七七八八,但当时由于刚从工作中解放出来,很多基础的知识点没有复习基本只剩一点印象,面试时心跳加快,面红耳赤,在我们北方零下好几度的乡村里,硬是面出一身汗来,而面完之后,就知道已经GG了。趁着假期就把电话面试中问到的点都或深或浅地研究了一遍。因为要找工作,所以年假没有多用,剩了两天。法定节假日过完我就回了公司,着手面试准备。
正式准备后的面试是OYO酒店的,本以为手到擒来,但是面试官接连问到了我的知识盲区,顿时无语泪先流,回去后针对此次面试又做了查漏补缺。
再后面是周六平安健康险跟河马的面试专场。由于两家面试点相近,所以我约了同一天,平安上午河马下午。上午的面试没什么特别的,问的都是常用的技术点。平安的专场面试格外提一点,其他的平安分公司不了解,但是健康险这次专场面试做的不错,给应聘者准备了零食水果,中午午饭点的外卖,负责面试的人也比较有职业素养,总之这次面试让我对平安的观感好了不少。不过期间HR面差点被pass。由于上午的面试还算顺利,所以下午面河马时就充满信心乃至膨胀了。开始是做笔试,两道题。做完之后排队面试,两个面试官问了我三五个问题,然后就把我给pass掉了。哎,瞬间被打回原形。
最后是一个前同事内推的机会,公司是做物联网的。第一轮是电话面试,通过后去公司经历了两轮技术面一轮HR面。这里的HR面更多的是一个确认的过程,聊完之后就是等通知谈薪资。
也没啥好说的,物联网跟平安给了offer,薪资方面平安那里更多一点(也没多多少),考虑了一番,最后去了平安。
面试分析
1、年前支付宝电话面试
HashMap跟HashTable的区别,前者为什么会线程不安全,后者线程安全的原因;
原子类实现原理;
Lock锁的原理,讲讲CAS;
数据库引擎行锁跟表锁;
BIO跟NIO的区别;
对现有业务的理解,活动的封装策略;
JVM的垃圾回收、对非堆内存的理解;
Dubbo负载均衡、分层架构;
消息队列,Kafka吞吐量大的原因;
现在不少公司都会在正式面试之前先进行电话面试,个人觉得这样挺好,节省双方的时间。 在电话面试中就可以初步判断应聘者是否具备公司需要的基本技术能力。从上面的电话面试问题中可见一斑,问的都属于硬基础知识,你掌握了这些知识点,不一定说明你是一个具有高技术能力的人,但是如果你没掌握,一定说明你知识储备不够,达不到他们的技术要求。首先,面试时一定不要给自己挖坑,而这次我就给自己挖了很多坑,比如谈到消息队列,我说现在公司大多用kafka,然后面试官就顺嘴问了一句kafka有什么优势,我说吞吐量大,人家又问为什么,我就两眼一懵把自己绕进去了。其次就是老生常谈的,大公司对技术点寻根究底,自己平时在学习时也尽量如此,要了解一个点就使劲挖掘下去,切忌浅尝辄止,这一点我做的很不好。最后就是对于自己做过项目的梳理,梳理出来重难点,想好怎么表述,以及猜测面试官可能问的问题进行相应的回答准备。
2、OYO的面试
自身业务描述
Kafka的topic如何使用
抢红包的场景设计如何保证事务的一致性
CountDownLatch的原理,与CyclicBarrier的区别
Synchronized跟lock的区别
HashSet原理
索引失效的情况,最左前缀原理的应用
dubbo的失效重试机制
redis数据结构,使用场景,结合项目经验谈
redis哨兵模式的实现
算法题:选择买入卖出点实现股票收益最大
这次面试是在我不长的面试生涯中第一次考我算法题,而且还是现场手写代码,最后思路有,但是代码没实现。还有就是坑爹的HashSet,由于set平时用得少,所以也没看过它的源码,直到这次被问到,当真是尴尬。面试归来后特地看了一下源码,MD发现竟然就是一个HashMap,key放值,value为一个静态Object空对象。哎,真是阴沟里翻船。个人感觉就是对于平时接触的少的数据结构,也要了解一下,切忌跟我一样只走熟悉的路 >< 。
3、平安健康险面试
悲观锁乐观锁
数据库索引原理
项目中遇到过的JVM相关的问题,JVM调优
HashMap
博客有没有,并现场查看
谈谈项目
技术面整体没啥好说的,都是常用的东西,着重说一下HR面。一般的公司,以技术面为主导,HR面大多只是走个过程(除非太奇葩),不会淘汰人。但是平安这是真的会淘汰,而且也了解过其他面试阿里的人,也有不少人是过了技术面却倒在了HR面上。我的理解是但凡一个可以的公司,招人时都会看一下应聘人员对于公司文化的认同度以及匹配度,如果觉得不匹配他们很可能会把你pass掉。所以个人的建议时,面试前稍微了解一下目标公司的公司文化,然后在HR面时做相应的改变。比如平安倡导狼性文化,那在跟HR交流时尽量让自己更有侵略性一些,比如声音调大,眼神坚定,话语中少用一些不确定性的词语,最好再来点肢体动作,balabala...。当然这只是个人感悟,具体还要视场景视面试官而定,扯淡而已,勿喷勿喷。
4、河马面试
笔试题两道:第一道是考查多线程,大体内容是这样的,三个线程1/2/3,每个线程对应打印1/2/3,用一个方法运行这三个线程使得打印出来的结果为123123123123,重复10次;第二道题是考查算法与数据结构,用伪代码实现,具体的内容不记得了,只记得比较容易...
讲讲熟悉的项目,遇到过的困难的问题;
HashMap原理,ConcurrentHashMap线程安全的原因,get方法有没有锁
谈谈cas
mybatis中#跟$的区别,发生sql注入的原理
AOP的实现原理,多个切面切到同一个类时,是如何实现切面调用的
这次面试让我深刻的体会到了项目经验的重要性。尽量参与那些难度较高的项目,最好再遇到过几个高逼格的问题,你也对问题的解决贡献了力量,这样的话在谈项目经历时会很受待见。而如果实在是平时做的东西没技术含量,除了CRUD跟接口调用没有别的(我之前的工作就是这样啊),那就好好利用业余时间研究一个或者做一个高逼格的项目吧,不然项目经验这里肯定给减分。
5、G7面试
StringBuilder跟StringBuffer
HashMap原理
事务传播行为
事务隔离级别
消息重复发送
dubbo注册中心挂掉会不会影响消费者消费,原因
CountDownLatch的使用
Redis的应用场景
抢红包的场景设计
mybatis的#跟$区别,如何设置sql的最大执行时间
对称加密与非对称加密
在这次面试之前刚好研究了事务的相关知识,所以应对起来轻松了不少。mybatis的#跟$在这里又遇到了,所以要面试的道友们如果对这一块不熟悉的话还是要尽快了解一下,从sql注入到原理,再到如何避免,可以牵扯出不少东西。
总结
要想实现个人的进阶,首先基础知识必不可少,数据结构、多线程、锁、数据库索引、java包中的一些基础类源码 都需要有清晰的了解;其次各开源框架源码要了解乃至熟悉,从Spring,到mybatis,从dubbo到其他中间件,能看懂源码并了解其中的关系以及其中的原理,这本身就是学习能力的体现;最后项目经验尽量出彩,并且总结梳理到位,如果平时工作的项目没技术含量,就自己造或者研究别人不错的项目。
这次跳槽算是告一段落,薪资也比较满意,后面就是开启新一轮的打怪升级了,各位道友,加油哦!
原文地址:https://www.cnblogs.com/zzq6032010/p/10492109.html