#背景体验
具体来说,当时我工作近5年,明显感觉到了瓶颈期。觉得他使用了许多框架,进行了一些技术设计,并产生了一些输出,但都来自技术深度上感觉不足.
在后期,他也在没有明显挑战,工作完全适应了公司的节奏,并成为了一名圆滑的操作者,可以每天舒服的混日子(这也有好处,有时间准备面试).这是为了成长不利,长此以往可能面临大龄失业.个人,所以我想我需要下定决心改变现状。我的目标是进大厂.
因为我觉得小工厂很难达到我现在的水平,提高很多。
#下定决心后,下一步就是写简历了。
这一步其实非常关键。,我们先来谈谈结论。我的简历已经改了几个月了。我提交简历的时候,大部分大厂都会给我面试。
并且对我的经历非常感兴趣。具体如何做呢?
核心思想,就像进大厂's的简历一样,要突出自己的特色,写得要生动,可以从你的简历中告诉你实力不俗。如果你的简历没有通过,很有可能根本没有面试。
具体实践上,参照STAR法则.
1.情况,工作背景是什么?
2.任务,我负责什么?
3.行动,我做了什么?
4.结果结果,工作取得了什么成果?
网上关于STAR法则有很多介绍,所以我就不赘述了。这只是一个例子。
一份普通的简历会说,“负责开发的订单系统,实现订单创建、查询、列表等功能。并使用技术:春天,我的巴蒂斯………”。
如果我是面试官,我的印象是你写过一些CRUD项目,这很难通过大厂的简历关。
那该怎么写的呢?
例如: "
负责负责订单系统核心模块开发(Task),主导订单系统数据库表结构设计,设计以成员为维度的子数据库方案,设计开发订单列表和明细缓存方案(Action),支持X百万级订单的日常查询请求(Result)。“相比之下,很明显,这样的写作更能体现你的价值。
这里不再多讲,网上搜下STAR法则,说话很小心。我的简历只有一页,内容不在多,而在精,一两页纸就够.我希望如果你想去进大厂,你可以先改一下简历,顺利通过。
#简历写好之后,就准备面试了。
如何做?核心思想,充分发挥你的优势,制定适合你自己的准备方案
,准备120分争取100分。我在这里只从自己的经历出发,希望能给大家一些启发。
当时自我剖析,我的优势是什么,不足是什么?
我有创业经验,有丰富的项目经验,做过核心系统(比如订单系统),用过很多流行的框架,做过一些我觉得还行的设计。缺点很明显,缺乏深度和表面性,已经做的项目有些设计比较幼稚,不能很好地应对更大的业务挑战。
当时足足准备了几个月,十六个字,增加深度、扩展广度、覆盖死角、挖掘项目。介绍了当时的具体准备情况。
*用了将近2个月的时间,Spring源代码,手画核心流程不少于3遍,才能够熟练地讲述Spring容器的启动过程、事务方面的过程和MVC过程之前的面试。
*两个星期以来,我一直在研究MyBatis的源代码,做到ORM框架主流程心中有数,这个我学得不是很深。
*深入研究JVM和并发编程花了很长时间,尤其是并发编程这块,从不同角度深入理解并发编程.
* 一周恶补MySQL,对于 索引、锁、SQL优化重点掌握 (深度略有不足,后期面试过程中有一定加强) * 面试前,一周时间突击了网络编程,重点在基本知识和Java原生网络编程方面,Netty略微学了一点。增加深度就是主要从以上6个专题的学习体现的。 都是Java开发必备的基本技能,一定要有深度。 下面讲下扩展广度,各类知识广泛涉猎。 * 面试前穿插一周时间学习Redis,redis我是用过的,但是用得很浅,专题学习下来收获很大,开阔思路。重点在redis应用和高可用架构。 * 同时穿插一周学习 分布式事务、分布式锁 等等解决方案 * 两三天时间Dubbo基础,放弃源码部分, 掌握RPC框架核心思想 * 两三天时间ZK基础,放弃源码部分, 掌握ZK精华,及常问面试题 * 了解一些 MQ的相关基础知识,没有过多学习,主要是没时间了 以上几个分布式相关专题略有涉猎,多年分布式的应用经验,需要有一定的知识广度,才能做出较合理的技术设计。 之后就是覆盖死角,主要从核心面试题出发, 我当时找到一份《Java高级进阶快速面试指南》 ,是一份Github总结的比较精炼的题库,查缺补漏,做到各类知识都能有所涉猎, 不至于冷门问题一句话也说不上来。如果你也有需要麻烦转发下本文,然后关注我私信回复【面试】即可100%获取了! # 最后是面试前的应试准备。 这里要从面试官的角度考虑问题,面试通过有两种可能: * 一种是实力均衡,没有什么短板,挑不出什么毛病; * 另一种是有自己的特色,在某些方面吊打面试官,得到面试官的认可, 即使个别方面了解有限,面试官也对你印象深刻。 如果你想用第一种方式通过大厂面试,你需要学通大部分后端技术专题,各个方面都有深入了解,而且面试发挥得当,没有命中你的软肋, 这非常难。那我怎么做的呢? 介绍两点,准备杀手锏和项目挖掘。杀手锏就是可以吊打面试官的内容。我当时准备了3个杀手锏, 要做到能跟面试官就一个问题深入聊30分钟的程度。 * 第一个杀手锏是 Java锁机制 (非常高频的问题),因为我对JVM synchronize关键字源码非常熟悉,并整理了流程图,所以我从偏向锁讲起, 升级轻量锁、重量锁,重偏向、撤销偏向条件 ,甚至最新的JDK版本废弃偏向锁的原因。 字节的二面命中了这个杀手锏, 刻意控制时间,只讲了10多分钟,之后再谈ReentrantLock、读写锁等等,我对这个问题的回答 完全超出了面试官的预期 ,明显感觉他对我的回答非常满意。 * 第二个杀手锏是 JVM垃圾回收 (这个问题也很高频),这块不多赘述,把JVM的相关内容融会贯通,能自己讲半小时自成体系。 * 第三个杀手锏是 Spring容器加载流程 ,要能默写出来核心流程,能以自己的语言有条理地讲出来。 这三个杀手锏面试各大公司都有用到,你可以准备适合自己的杀手锏,但一定要是高频问题,否则就是浪费时间了。 # 项目挖掘是说挖掘深度。 自己的项目必然受到当时各种因素所限,有很大局限性 。但在面试时, 一定要体现出来亮点 。一半以上的面试官会问一个问题, “你做过的最有挑战或最难的项目是什么? ”这道题目是考察你的技术深度的。一般回答可能是你用两三分钟讲一个项目, 说几个特色,等着面试官追问。我是怎么做的呢? 面试前找一个最有挑战的项目,就是前面提到的 订单系统 。结合当时做的, 和专题学到的内容,以及后来的反思,准备能讲至少15分钟的内容。 STAR法则 ,Situation创业百废待兴,Task负责订单系统设计及核心模块开发, Action界定系统边界、库表设计思路、如何分库、接口设计及缓存应用等等,Result系统划分清晰、SQL查询高效、满足较长期业务增长需要、订单缓存最终一致性设计得到验证等等。 最后再提出当时设计的缺陷不足,如果现在重新来做可以从哪些方面改进。 这一个问题下来至少聊10多分钟,面试官有兴趣的话可以聊半个多小时,给面试官提其他问题的时间就不多了,实践下来效果非常好。我当时总共准备了两个项目。注意要套用到专题所学概念知识,要深入讲到点子上。 这里举个例子,当时订单查询加缓存, 我套用专题知识,挖掘深度,讲“缓存一致性”上的考虑 ,采用事务后清除缓存的方式(避免事务未提交脏数据刷回),没有采用清除失败MQ补偿的原因(实际当时压根没想这个),兜底措施缓存1小时过期,保证数据“ 最终一致性 ”。 # 总结 上面已经讲了很多面试的准备,最后提几个小建议: 1. 对简历上的内容一定要有把握,不要给自己挖坑; 2. 面试遇到不熟的内容,简单介绍下自己的认识,承认了解有限,不要硬着头皮瞎说; 3. 尽量通过亮点项目和准备充分的问题体现自己的价值,也可以通过这些内容引导面试官问自己擅长的领域; 4. 常见非技术问题有所准备,不至于当场抓瞎; 5. 算法数据结构要有准备,面试经常要手写code。