Osheep

时光不回头,当下最重要。

帝都三年Java,说说我的求职之路

好久没有写文章了,最近一直在忙着找工作,现在这轮跳槽也接近尾声了,想写篇文章说说自己的感受。

今年是我参加工作的第三年,也深切的感受到程序员三年一个坎,五年一个坎的道理。
之前毕业一年的时候跳槽过一次,那时比较匆忙,也不懂事,只聊了个别几家公司,拿到offer就直接答应然后入职了,没有进行公司间的横向比较,薪资涨幅很少。
这次跳槽想看看自己的技术水平达到什么程度,是否对得起这三年的工作时长,于是决定大规模面试一轮,一线二线互联网公司,创业公司都有去聊,结果还算比较顺利,基本全部拿了offer。

离职原因

这个问题每个人应该都不尽相同,这已经是我第二次跳槽了,第一次很简单,就是觉得自己所在团队负责的业务跟技术实力有限,继续待下去技术上面不会有太大提升,同时又有一些工作内容比较恶心,实在想甩掉就直接走人了。
这次离职就大不同了,自己想的比较清楚,为什么要走?想到什么地方?
我自己这次想离开的原因主要是这几点:
一是公司有较大的调整,自己不太喜欢,说白了就是影响了自己的利益。
二是系统做的太久了,感到腻烦了。
三是钱少了。
具体哪个原因占比最多其实不好说,我自己心里也很矛盾,感觉各方面都不合适,就决定走了。
马云说离职不外乎两种原因,一是钱没给够,二是心里委屈了,现在看来这两点我都占了。

面试过程

  1. 投递环节:
    现在关于互联网技术招聘的网站或者App很多,根据个人喜好选择就可以了,我自己使用的是拉勾,感觉还不错,岗位资源很多,响应速度也快。

  2. 约面环节:
    这里公司都是HR跟你电话联系,有些HR是通过手机号跟你联系的,吓得我一度以为是骗子。。。
    在约我面试的时候发现有些公司会让你自带简历,自带笔,关于这点仁者见仁智者见智吧,虽然说自己去面试带上简历没什么,不过说实话我不是很喜欢。

  3. 笔试环节:
    有个别公司会给求职者准备笔试题,差不多三四页纸,估计是出于招聘成本的考虑,写完笔试题以后面试官来了就可以直接根据你笔试题的作答情况进行针对性提问。
    不过我还是认为社招没有必要有笔试,如果想节约招聘成本可以提前电话简单沟通几个问题,合适再现场面,单就这点来说我比较认可阿里的流程。
    不过身边也有人吐槽不进行面对面交流无法发挥出自己真正的水平。所以这点也仅仅是我个人的观点。

  4. 面试环节:
    社招面试一般最少三轮,四轮五轮常见。不过基本上最关键的就是前两轮技术面试。

  • 自我介绍
    基本上按照时间顺序,把自己的公司跟工作内容简单讲一下就好。我个人觉得这个环节虽然拖沓,但却可以缓解面试的紧张氛围,同时也有时间让面试官看看你的简历。

  • 聊聊项目
    这个环节一般是挑一个项目来说,选一个自己最熟悉的项目,从业务逻辑,系统架构,未来规划方面展开说就可以,面试官可能会在这个环节问一些问题,或者让你讲一些技术难点之类的东西。不过老实说,我本人是做业务系统的,每次说到技术难点感觉真的很难挖掘,每次只能硬着头皮说几个,还经常被面试官鄙视,(⊙﹏⊙)b。
    三年工作经验,公司一般要求你达到高级工程师的水平,未来的工作很有可能是你独立负责一个系统,所以对现有系统的了解情况能很大程度说明你是不是能够胜任未来的工作,建议这里好好准备下。

  • 基础知识
    这里就简单了,我自己Java基础还不错,这个环节基本都能对答如流。Java类库源码,JVM知识,线上问题排查,开源框架等等都有涉猎。稍微不好的地方也就是开源框架了。缓存,消息等中间件虽然常用,这些东西也都略知一二,但有时候一些细节或者使用过程中的坑没有面试官掌握的深入,细致。会有答不上来的情况。
    关于知识点的提问我这里举个例子:
    面试官:说说Java的HashMap吧。
    我:首先HashMap是由数组+链表的方式实现的,是无序,非线程安全的数据结构。
    如果想使用有序的Map,可以使用TreeMap跟LinkedHashMap,其中TreeMap使用红黑树实现,排序规则由重写compare方法决定。LinkedHashMap则是维护了一个链表,根据构造参数选择在put或者get操作的时候进行顺序调整。
    如果想使用线程安全的Map,可以使用HashTable跟ConcurrentHashMap,由于HashTable性能较低,重点说下ConcurrentHashMap。ConcurrentHashMap在Java7跟Java8中实现方式有较大不同。
    Java7三要素:Segment,Lock,HashEntry。
    Java8三要素:Node,CAS,Synchronized。
    然后可以根据面试官要求或者面试时间具体说说实现原理,这样这道题就算结束了。
    技术面试就跟我们上学的时候考试一样,每个面试官其实只会聊少数几个知识点,但面试者必须掌握足够多的知识才能保证不被面试官问的哑口无言。只有非常努力才能看上去毫不费力!

  • 写个算法
    这一般是最后一个环节,也基本可以说是必有环节,起码第一面是常有的。我应聘的是Java工程师,对算法了解确实不多,面试过程中被问到的算法大部分都答不出来。。。(⊙﹏⊙)b。还好一般情况下面试官不会对开发工程师太强调算法能力,如果你之前工程方面的问题回答的很好,那么面试官通常不会在这里卡你,就算算法题没有思路也有很大概率通过。当前北京互联网圈里最火的两家公司头条快手也是这样(或许是我运气太好了,刚好遇到这种面试官),对于开发工程师来说,算法是加分项,不是必须项。

面试难度

说到各个公司的面试,很多人最关心的应该就是难度了,其实就我自己的经验来看(本人经过这次面试洗礼,应该算是经验丰富了),面试难度公司占一些,但很大程度其实跟面试官本人的水平有很大关系,有些不起眼的创业公司有时候面试难度超乎想象,各种细节,原理步步紧逼,实在痛快。也有一些一线大厂面试难度却非常一般,草草了事。

面试心态

我自己对面试的看法是相互选择。我喜欢跟面试官平等的交流,虽然作为求职者,面试官在考察我的专业能力,但同时我也在看面试官的水平。个人建议最好不要把面试当成单方面的提问回答,要有交流,表达自己的观点,不然容易把自己搞的很紧张,发挥失常。单说对技术的理解,就Java来说本来就有很多知识点每个人理解是不一样的,可能是你错,也可能是面试官错,也有可能大家都错,或者都对,只是角度不同。很幸运我这次遇到的面试官都很nice,交流很顺畅,有时候自己表达一些观点,面试官会直接说自己也没考虑到这一层,这样的面试过程是我喜欢的。另外既然是交流,我不介意加一些题外话,比如上午10点去面试,我会直接开玩笑跟面试官说是不是为我起了个大早。有时候面试官带我去会议室的路上我会聊聊公司办公环境等无关紧要的话题,缓和一下氛围。

面试运气

说句心里话,面试真的是有运气成分在的。因此我往往会劝我身边面试失败的人不要过分妄自菲薄。选拔通常是多维度的,可能只是Leader跟你的气场不和,或者hc不够了,就技术而言也有很大程度可能是你跟面试官没对上,他会的东西你刚好不会,你会的他刚好没问等等。当然了,如果三年Java经验,连volatile也说不清楚那还是需要好好沉淀一下。


写在最后:
这次跳槽接近尾声了,接下来就是横向对比下各个offer,选择下家公司了。整体来看都还不错,目前也还在纠结中。
个人感觉三年工作经验是成为高级工程师的时间点,由于后面的工作可能是需要你一个人维护一个系统,所以确实需要对一些常用技术的实现原理有一定程度的认识,对系统的设计优化也有一些自己的观点。

不管最后选择哪家公司,接下来的两年时间都还需要怀着敬畏之心,如履薄冰,加紧学习,争取在达到五年经验的时间点拥有架构师的技术实力。

最后祝所有程序员工作顺利,跳槽顺利,与诸君共勉。

点赞