从创业到再就业
大概4个月以前,终止创业已经成为逃不开的事实。
本来以为即使散伙,也会有比较充裕的时间找工作,所以并没有做过任何投递简历和面试。但是现实却紧张的多,实际留给我们的时间只有一个月。
所以开始有些慌,毕竟太久没有面试过,很多知识也没有来得及梳理,同时远离市场有点久,不知道自己应该是一个什么级别(什么高级,资深云云),值年薪多少。挂了猎聘和拉钩,也有一些猎头打电话给我,我也接受了一个猎头的安排,面试过两家初创公司,但是感觉一点都不靠谱,猎头的态度有一种赶鸭子上架的感觉,让我十分反感,从此以后便再也没有接过猎头电话。
我也开始了对自己的思考,下一份工作到底要去创业公司还是大公司,自己应该到底属于什么级别。因为面试过两家初创公司,给我的感觉是,短期遇到一个靠谱的初创公司其实很难,加入初创公司最好的姿势是被挖过去做持股的核心。这个难度不亚于找女朋友,要聊的久才能知道是不是有感觉。如果选择不慎,就是从一个坑跳到另一个坑。那么大公司盘点一下上海就那么几个厂,蚂蚁金服,百度,爱奇艺,饿了么。
目标明确后,通过朋友或者拉钩找相应的职位,因为我还是想继续深入做一段时间技术和技术决策,所以投递的职位基本是架构师、技术专家这样的职位。
当然除了上面列举的四个厂,中途还面试了上海唯品会和杭州的网易考拉(因为去杭州看了个演唱会就顺便去面了,这个理由很......)那段时间真的很忙,因为每次面试都激发你思考很多,除了技术也有职业生涯的规划。然后回去想很多,梳理很多,面试到最后,也总结了好多面试题,反复翻看了好几本书,这些楼主在后面会详细说一些。
在临近那一个月的终止,开始陆陆续续收到Offer,最后拿到了饿了么和考拉的架构师,爱奇艺P7b,这几个算是相似级别的吧。蚂蚁金服的HR一直拿我没BAT背景和工作年限(那时候三年半)说事,最后给我资深开发。百度说社招名额要等一个月后再谈,所以就不等了。
关于Offer的选择也没什么纠结的,不去杭州,因为房子,妹子都在上海,所以上海爱奇艺和饿了么二选一。去饿了么面试觉得技术氛围很好,对岗位从事的内容更感兴趣,可以弥补我机器学习领域的空白,所以就接了饿了么。
社招面试的准备
听了前面的故事,社招面试肯定是大家更关注的。毕竟我是创业散伙到再就业,时间有些仓促,找工作开始对市场,职位都不了解。
我觉得如果你在一个稳定的坑里,通过社招跳槽的步骤应该是
- 自我定位 首先第一个自我定位应该是当前环境下的自我反思。一般思考换工作的同学,往往也是对当前环境有诸多不满。那么应该是思考一下问题在哪里,如果是自己的问题能否改善做到更好。你加入这个公司的这段时间,有没有充分学习到公司的技术,如果没有,也不急于离开。每一段职业经历,都要有所收获,这样才能往更高的位置走,如果在每个环境都是混混日子,基本跳了几次就到瓶颈了。 然后想想下一份工作想做什么,坚持技术还是转做技术管理,既然决定换一次工作,那就做点自己想做的,不是么。一般来说,如果技术转管理,需要一些技术的积累,可能意味着你在技术上做到一定级别转起来会容易一些,因为程序员都有些“骄傲不驯”,如果你技术很菜,就很难管理团队,也不能很好的做技术成本评估。当然也可以换行做别的,毕竟人生那么长,如果自己不喜欢做开发,就别和bug较劲了。
- 长期准备——干货在此 如果你在自我定位中,已经决定不干技术,那请跳过后面的所有部分,如果继续做技术,那么这部分将是自我提升和准备面试的干货。不过这部分内容可能更适合Java相关的互联网从业者,这也是体量最大的互联网技术从业者。 首先是编程语言本身和语言生态相关的,这里Java为例,虚拟机原理,你会发现可能被问的最多的就是垃圾回收相关议题,可以搞一本 《深入理解java虚拟机》认真研读一下;多线程场景的知识,线程池,锁的原理等,可以研读 《Java并发编程的艺术》,Java8相关议题,Spring包括IOC,AOP也各种问,推荐《Spring技术内幕》,当然NIO,Netty这些里面有经常出镜。 互联网系技术通常还是用各种中间件,可以阅读官方文档,也可以找到一些《XX权威指南》之类的书,做阅读。如果公司场景有使用,那最好,如果没有,这些东西自己搭建都不费事。下面举例说一些吧,例如常用的解决高并发场景的读问题的缓存中间件Redis,Memcache等;用于解耦的消息队列中间件,Rabbit MQ, Kafka等;用于分布式环境下一致性数据的Zookeeper;Mysql分表分库的Cobar等;通用搜索引擎Elastic Search。还有好多领域,每个领域都有好多产品。 存储本身也是一个很深的话题,Mysql为代表的关系型数据库,Nosql代表的MongoDB,Cassandra。他们的使用场景,优缺点。 架构方面,其实感觉最主流的架构还是SOA,推荐读一读《分布式服务框架原理与实践》,我面试前并没有看到这本书,很多议题包括熔断,降级之类都没有想过,导致前面几次面试提到相关议题都有些懵懵懂懂。 当然学无止境,如果想都了解可能要花几年时间。有针对性的了解很重要,如果你眼下就要找工作,那么就挑着公司用的相关技术深挖,这样面试比较好说。
- 职位投递 先说说职位,关于公司对员工的定位,参考我公司的评级标准,对于P5-7这个级别要求如下: P5(高级开发)-能够在基本没有指导的情况下独立开发小模块 P6(资深开发)—能够独立设计和开发一个核心模块 P7(架构师,专家)— 一个产品工程的全局设计 更高级别的没有在列出之内,因为核心实施就在这3个级别,这是阿里系公司P系列级别的定义,不同的公司级别差别会比较大,不过很多公司在招聘的时候,都会以阿里系做参考和对标。所以针对自己的求职目标投递简历,这样会避免一些乌龙,后面还会提到不同级别的面试。
- 面试流程和内容 4.1 流程 很多公司都说,先面试后定级,不过很多情况都是你投什么职位就会被定在什么职位区间。例如标记为高级/资深XX工程师,那面试流程就是按照P5-P6这个来,这个级别的面试一般只是组内技术面试官,组老大(可能是总监),HR面一下就决定了。 如果是面架构师/专家(P7),流程会不一样,一般是组内架构师/专家面,然后会是高级架构师/专家面,总监面,CTO/技术VP面,HR面。 所以不要随意投职位,如果你定位自己是专家,就不要投高级和资深的岗位。 4.2 内容 面试的内容无非是你做过什么,你会什么,你能做什么 关于做过什么,当然就是你陈述自己做过的项目,实现了那些部分,有那些贡献等等。这些内容,应该是参与面试之前就自己梳理好,如果工作认真,工作过程经常思考,并且有优化的习惯,这部分内容很容易讲,毕竟是自己做的。 简历上也可以附上可以帮助你表述自己工作成果的东西,例如图或者表格,这些看起来很简单的东西,对于你和面试官交流,激发他发问都非常有帮助。例如博主就把自己创业期间架构的服务器后台用彩页附加在简历上,很多面试官对这个架构图特别感兴趣,基本从最上面到最下面过一遍,再深入剖析几个技术点和场景,一轮面试就愉快的结束了。这个图如下(有些内容表述的不够专业,我也渐渐意识到了)
你会做什么,就是技术水平面试了,面试官可能是在你讲述项目的时候,从某个地方为切入点,一点一点的深入问。例如先问你有没有做过并发,如果你说是,可能继续问,是否用过线程池,如果你说是,可能继续问,线程池的核心原理是怎样的,如果你能解释一堆,接下来可能还会继续问,有几类线程池,适合什么不同场景。
这个可能会扣很细很细,蚂蚁金服面试的时候,那个面试官估计有40-50岁,书卷气很浓,Java真是刨根问底问了好多好多内容。只有平时深入积累才可能知道,如果只是泛泛的使用,没有想过如何优化和了解更多底层原理,根本不知道面试官在说啥。这个部分内容可以参考前面的长期准备内容。
你能做什么,就当这部分是开放式问题吧,这个题目通常没有标准答案,考察你解决问题的能力。我遇到的一个比较多问题是,设计秒杀系统,解决分布式系统中的数据一致问题,特别是分布式一致性问题,本来就是业界难题,抛出来给你应该也就是看你在平时工作的时候有没有思考过这个问题,有没有尝试过在工作中,尽可能小的避免这种情况的出现。
5. 谈Offer 这里我没有什么技巧,因为不喜欢和人讨价还价,我可能更看重工作内容,氛围这些,没有尝试过和HR讨价还价。不过基本上决定你薪水的是,你面试的级别薪资范围,你之前的薪水,你其他Offer的薪水。所以如果准备一次面试,也不妨多看看机会,至少其他Offer可以成为你衡量自己和谈薪资的参考。
工程师的职业生涯
这个问题其实对于我依然也没有答案,生涯这种事,似乎只是过来人才有资格谈的,对于我这个入职场还不满四年,做过的大项目还能用一只手数过来的人,只能表达一些我看法。
1. 成为技术专家
我觉得,能成为技术专家也和你的工作内容关系很大,如果是从事云平台,基础架构组件相关的工作,比较容易朝着这个方向走。例如你做消息中间件,SOA框架开放,DRC多活这些,因为日常工作解决就是纯技术问题,并且在高并发场景下,这些问题真的很有价值,伴随公司从小到大,用心积累的人,也顺理成章的变成了专家。
当然还有一种,也是大多数工程师,做了很多业务开发,好像什么都懂,但是在某个领域却找不到绝对优势。那么选择技术,选择这么多中间件,搭建一套高可用的系统,能洞悉系统评价,知道怎么改善,这同样是核心竞争力,这样应该算朝着架构师的方向前行了。
对于喜欢专研技术,不喜欢和人撕逼,喜欢安安静静研究东西的人来说,这是一个不错的方向,并且懂核心技术的人整个市场都不多,根本不用担心失业,如果公司解散或者裁员,你的薪水应该只会更高。
2. 技术管理
伴随你经验的提高,公司队伍的壮大,同样也会空缺出一些管理岗,很多工程师也顺利成章的走到管理的岗位。如果你对找bug已经有点厌倦,想多和人打交道,不妨可以朝着这个方向走。
对于从事管理,我觉得有几个技能应该很早积累起来。
1. 表达自己
对于一个基层工程师而言,大多数的时候,都是听别人,听产品经理需求,听Learder管,听资深技术的传道。但是慢慢你会发现,有一天,你可以和他们讨论了,再后来,你需要对他们表达你自己了。这也是伴随着你资历和级别提升后,沟通姿态的转变。
所以流畅的表达自己很重要,表达思路要清晰,对不同背景的人,选择合适他们的语言(不要和产品经理说什么解耦),善于利用辅助的工具,例如PPT,善于抽象和总结信息,例如浓缩成图或者表格和别人阐述。
2. 善于分配和获取资源
很多人会觉得,分配和获取资源已经是从事了管理岗位的人才有资格做的事情。其实不然,每个组都有不少你有资格Own的小项目,有时候你会有资格带1-2个资历浅的工程师或者实习生一起完成项目。这个过程中,也免不了有一些外部依赖,要和一些人对接。如果你很享受这个过程并且做的不错,那你的性格里,是有成为管理者的品质的。抓住这样很多小的机会,提高自己经验的同时,也问问自己,你喜欢不喜欢这样的事情,总比将来胡乱跳到一个管理岗位让后自己各种suffer强吧。
写在最后
以前听过一个关于孩子教育的故事,结论说,不要让孩子处于物质太优越的环境下,他将失去做选择的机会,而做选择本身最能激发人思考和成长。找工作也正是如此,或许比找到一个合适的工作更重要的是,你在这个过程中,更好的认识了自我。希望各位读者在当前的岗位上有所收获,如果你在找工作,也希望你一切顺利。