- 行业不景气想跳槽
- 感觉工作得不到发展,薪水得不到提升~
- 晋升失败受够了内卷
- …
不管是出于什么原因,作为一名Java开发从业者,总会因为这样或者那样的原因,面临换工作跳槽的选择,那么在跳槽之前,稳妥的做法是不打没准备的仗;
我认为首先第一步是要考虑好自己的简历怎么写;
先说下我的个人经历,我本科毕业,计算机专业,大学里经常折腾代码写点项目赚些外快,毕业后心比天高,就利用专业所学,无知者无畏,创业做外包开发,这样做了3年多,结局是挺打脸的,付出了很多,最后以失败收场(挺不容易,所以我敬佩+尊敬每一个目前还在创业的并且略有起色的人,这些人确实是不容易~);
失败之后进入创业公司做技术负责人,因为自己创业做外包时什么都能做(APP、小程序、网站、后台),所以在小公司里面技术上是没有什么不能做的,只是深度欠缺,但是在创业公司效率很重要,完成大于完美,所以更多的打法是解决问题,技术知识相对更广而深度欠缺;
之后几年,在在创业公司中的发展让我总有一种历史在重演(自己的失败经历)的感觉,并且技术也受到了局限,并且当时的认知现站在现在来看其实也是有局限,进入了迷茫阶段,于是打算要换到一家大公司感受下;
当时我就提出了离职,然后边准备交接边准备简历投递,我当时的做法是一股脑把自己做的项目全都列了出来(脱敏),然后甚至大学的获得的奖项还有证书也都罗列了,这个就犯了个错误;
1.不要一股脑的毫无重点的罗列所有项目
这个做法其实很不好,因为 1.HR会在筛选简历的时候看不到重点,并且简历页数会很多,不一定会有耐心看完,容易被刷 2.就算侥幸进入了面试官手里,面试官也很可能不会把所有的项目都问一遍,因为时间有限 3.面试时间有限(一般40-60分钟),在有限的时间里,首先一般是在面试开场时,面试官让自己做一个个人介绍,之后要进行(基础知识+技术点+项目介绍+算法笔试),过多的项目容易让自己的个人介绍显得啰嗦没有重点,而写了不去介绍又会让面试官觉得项目或者不重要; 4.真实的情况是,大部分面试官会让你挑一个你觉得(最重要\最有挑战\最有成就感\最难\最印象深刻等)的去开展,针对这个情况,与其在面试现场做选择,不如自己提前考虑好并且对项目做一个筛选,只保留一部分项目,建议是好好考虑下哪些是自己发挥突出作用的、或者是能有技术场景方便面试讲的、或者流量大并发比较高的;如果实在都没有,全部是业务CRUD,那么可以在编程思想上凑,例如自己在某个项目里做代码重构,做解耦,结合特定业务场景应用设计模式解决问题,引入领域驱动思想降低复杂度,提升了研发效率或做了什么内部技术分享等类似的体现团队价值或者业务价值的事情也可以;如果项目经历本来就少,那可以好好梳理下业务实现,技术场景等
2.尽量不要罗列自己不会的技术点 简历上的技术点要做到自己心里有把握,不要把自己理解不是很透彻的技术点列上去,因为有的面试官会针对简历技术点做扩展,问到场景,问到原理,问到优劣或者替代方案,问到好处坏处~,如果不小心碰到了,然后简历上又写了且答的不好,总会多少影响面试
3.对简历上的项目要了然于胸 放在简历上的项目,首先自己负责的功能要能很清楚的表述,然后有些特定的项目(例如电商项目肯定很大几率会问并发,超买超卖)的特定场景下的功能实现与技术点,就算不是自己实现的,也最好是去了解功能实现的伪代码,做到能心中有数
4.项目经历要用好START 筛选了项目之后,那么就是需要在项目经历下写 项目背景、个人职责、解决的问题、难点、自己的角色、自己的贡献、贡献的价值、最终的结果 这些方面; 在讲解项目的时候需要有条理的列举出来 我自己总结的是START方法 S:situation 代表场景;例如项目背景、需要出发点、产品产生的场景等 T:target 代表目标;例如需要解决的问题,要实现的目标,要达到的标准 A:action 代表行动;例如自己是如何做的,为了实现功能做了哪些努力,如何一步步实现的 R:result 代表结果;例如最终完成是什么结果,产生的效益是什么,有没有解决问题 T:todo代表迭代;例如还有没有更好的方案,为什么使用这个,为什么这样实现,这样做有没有其他坏处,自己如何考虑的等等
举个例子: 一款app产品,本来不愠不火,突然赶上了风口,流量一下子就上来了,然后app打开速度变慢了,用户的体验不好了,运营同事接收的投诉反馈越来越多手忙脚乱。。。。 然后你是项目的开发参与者,以高级工程师为例;leader或架构师拆解了多个维度去优化,你收到的任务的是优化app首页的打开速度,这个任务结合START展开来说如下:
S:我们这款app是一款XXXapp,主要是给XXX用户提供XXX服务,这个是个历史项目,然后在XXX之后,流量疯涨,导致大量用户打开APP访问变慢,于是需要解决产生的这个问题,
T:我这边负责优化app首页打开的速度,将响应时间控制在500ms以内,同时需要考虑到流量持续增长的情况,保证在XXX的QPS下依然能在500ms内响应,
A:我先是接入了XXX系统(例如glowroot、pinpoint、skywalking等),观察接口的调用链路,阻塞情况,SQL执行情况等,找到瓶颈点,发现存在大量的慢SQL,于是进行慢SQL优化,同时发现这些SQL中发现大部分是查询SQL,并且是查询的数据基本上是不经常变的数据,于是考虑接入缓存,避免大量请求直接打到数据库;接入缓存之后,进行压力测试,通过监控系统发现存在大量日志block的现象,于是对日志进行修改,去掉无效的日志输出,并且将日志改为异步,在之后继续进行压测,发现还是达不到500ms返回的效果,于是考虑优化代码逻辑,发现好多非主流程业务都和主流程业务代码混在了一起,于是进行业务拆分,将非主流程业务代码抽离,使用异步的方式执行等(XXX,后面还可以从优化tomcat连接池、数据库连接池等继续优化,这些都是可以展开的)
R:最后做完了上面的优化之后,继续进行压测,先是在测试环境进行的单机压测,使用的ab命令进行压测,最后在XXX的并发,XXX的访问量下,可以实现400ms的响应,支持XXX的QPS
T:(**tips:面试回答时,回答上面的STAR就可以了,这个T是用来应对面试官的提问的,这个更多是自己的思考,体现在平时的,当然准备面试的时候要考虑到这些**,
- 例如上面用到了缓存,那么要考虑到面试官会问redis与memcache的区别怎么回答,引入了缓存,要考虑缓存与数据库一致性的问题怎么回答,代码中怎么体现的;
- 例如进行了SQL优化,要考虑到SQL优化的方法,思路,哪些切入点;
- 例如进行了代码优化,使用了异步,就要考虑到是使用了什么样的方式异步,是mq还是多线程?为什么选mq或者多线程?选mq的好处是什么?等等;
- 例如进行了Tomcat线程池优化,就要考虑到那些主要参数是什么含义;
- 例如进行了MySQL数据库连接池的优化,就要考虑到那些主要参数是什么含义;
- 例如进行了上面总体的优化,就要考虑到面试官会问,你还知道哪些优化的方面么等等);
好,上面就是用START方法对介绍项目的一个示范,那么在简历上该如何写呢?其实就是可以把START说的那些用比较书面的形式归类到下面几个(不一定全部)方面就可以; 项目背景、个人职责、解决的问题、难点、自己的角色、自己的贡献、贡献的价值、最终的结果 最好有数据的对比(当然要脱敏,不要泄露业务数据就好),例如QPS这些提升了几倍,慢SQL清零啥的这些技术性的数据
好了,上面就是我个人认为的在简历的编写上的一些方法,都是个人经验,权当与大家分享沟通,大家可以借鉴,如有不当的地方,也可留言一起交流反馈~
下一期会写下我的晋升经验,如何准备晋升PPT才可顺利晋升? 下下一期会写在面试过程中,如何提升面试官的好感? 在之后分享下我的面经,目前还在梳理知识点,到时候进行分类别的发表~
|