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