背景经历

当时我工作近 5 年,明显感觉到了瓶颈期。具体来说,感觉自己用过很多框架、做过一些技术设计、也有过一些产出,但是从技术深度上感觉不足,到后期时做事也没有明显挑战,完全适应了公司节奏,说句不好听的成了老油条,可以每天舒服的混日子(这也有好处,有时间准备面试)。这对于个人成长不利,长此以往可能面临大龄失业。所以我觉得需要痛下决心改变一下现状。我定的目标就是进大厂,因为我觉得小厂做到我目前的程度已经很难有很多的提升了。

下了决心之后,下一步是写简历。

这一步其实非常关键。先说结论,我的简历前前后后改了好几个月,在投简历的时候,大部分大厂都会给我面试机会,并且对我的经历非常感兴趣。具体如何做呢?

核心思想,想进大厂的简历,要突出自己的特色,写得要生动,能从简历看出你实力不俗。如果简历不过关,很大几率根本没有面试机会。具体实践上,参照 STAR 法则。

  1. Situation 情景,工作背景是什么?

  2. Task 任务,我负责做什么?

  3. Action 行动,我做了什么?

  4. Result 结果,工作取得了什么成果?

网上关于 STAR 法则有一堆介绍,不多赘述,这里只举一个例子。

常见的简历会这么写,“负责订单系统开发,实现订单创建、查询、列表等功能,使用技术:Spring、Mybatis……”。如果我是面试官,我的印象是你写过一些 CRUD 项目,这很难通过大厂的简历关。

那该怎么写的呢?

比如:“负责订单系统核心模块开发(Task),主导设计订单系统数据库表结构,设计以会员为维度的分库方案,设计并开发订单列表及明细缓存方案(Action),支撑订单每日 X 万级查询请求(Result)。”对比一下,明显这种写法更能体现出你的价值。

这里不再多讲,网上搜下 STAR 法则,讲得很细致。我的简历只有一页纸,内容不在多,而在精,一两页纸就够。希望大家如果想进大厂,先好好改改简历,顺利通过简历关。

简历写好之后,准备面试了。

如何做?核心思想,充分发挥你的优势,制定适合你自己的准备方案,做 120 分的准备,争取 100 分的结果。这里我只从我自己的经验出发,希望能给大家一些启发。

当时自我剖析,我的优势是什么,不足是什么?我有创业经验,项目经历丰富,做过核心系统(如订单系统),使用过很多流行的框架,做过一些自认为还可以的设计。不足很明显,缺乏深度,浮于表面,做过的项目的一些设计较为幼稚,不能很好地应对更大的业务挑战。

当时花了几个月充分准备,十六个字,增加深度、扩展广度、覆盖死角、挖掘项目。介绍下当时具体的准备。

  • 花了近 2 个月时间,Spring 源码,手画核心流程不少于 3 遍,面试前做到能熟练讲述 Spring 容器启动流程、事务切面流程、MVC 流程。

  • 两周时间,学习 MyBatis 源码,做到 ORM 框架主流程心中有数,这块学得不是特别深。

  • 花了很长的时间深入的学习 JVM 和并发编程,尤其是并发编程这块,从不同角度深入理解并发编程。最终进字节这块起了很大作用。对锁有深入认识,阅读 JVM synchronize 关键字源码不下 10 遍,对其中的大部分细节了然于胸,绘制了流程图,大家可以参考看看。当然,各类其他锁也都有学习源码,能深入比较各类锁的特点。

  • 一周恶补 MySQL,对于索引、锁、SQL 优化重点掌握(深度略有不足,后期面试过程中有一定加强)

  • 面试前,一周时间突击了网络编程,重点在基本知识和 Java 原生网络编程方面,Netty 略微学了一点。增加深度就是主要从以上 6 个专题的学习体现的。都是 Java 开发必备的基本技能,一定要有深度。

下面讲下扩展广度,各类知识广泛涉猎。

  • 面试前穿插一周时间学习 Redis,redis 我是用过的,但是用得很浅,专题学习下来收获很大,开阔思路。重点在 redis 应用和高可用架构。

  • 同时穿插一周学习分布式事务、分布式锁等等解决方案

  • 两三天时间 Dubbo 基础,放弃源码部分,掌握 RPC 框架核心思想

  • 两三天时间 ZK 基础,放弃源码部分,掌握 ZK 精华,及常问面试题

  • 了解一些 MQ 的相关基础知识,没有过多学习,主要是没时间了

以上几个分布式相关专题略有涉猎,多年分布式的应用经验,需要有一定的知识广度,才能做出较合理的技术设计。

之后就是覆盖死角,主要从核心面试题出发,我当时找到一份《Java 高级进阶快速面试指南》,是一份 Github 总结的比较精炼的题库,查缺补漏,做到各类知识都能有所涉猎,不至于冷门问题一句话也说不上来。

如果你也有需要可以点击这里即可获取到文章中的文档,资料!

最后是面试前的应试准备。

这里要从面试官的角度考虑问题,面试通过有两种可能:

  • 一种是实力均衡,没有什么短板,挑不出什么毛病;

  • 另一种是有自己的特色,在某些方面吊打面试官,得到面试官的认可,即使个别方面了解有限,面试官也对你印象深刻。

如果你想用第一种方式通过大厂面试,你需要学通大部分后端技术专题,各个方面都有深入了解,而且面试发挥得当,没有命中你的软肋,这非常难。那我怎么做的呢?

介绍两点,准备杀手锏和项目挖掘。杀手锏就是可以吊打面试官的内容。我当时准备了 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。

字节社招经历:5年Java开发经验,半月3次面试,成功拿到 Offer相关推荐

  1. 视觉算法工作一年社招经历总结

    视觉算法工作一年社招经历总结 视觉算法从被裁历时两个月拿到offer的经历复盘(本人情况是硕士毕业工作经验不到一年半的社招) 总体时间线: 9.30被裁,大概9.21知道消息,拿到n+1 10.1开始 ...

  2. 社招两年半 10 个公司 28 轮面试面经(含字节、拼多多、美团、滴滴......)

    个人情况 学历:二本 工作年限:2 年半 面试结果:拿到了字节.拼多多.美团.滴滴.欧科云链....等公司的 offer 面试准备 复习 你信我,真学习还得看书,看书能让你的知识体系更加健全. 当然, ...

  3. 社招两年半10个公司28轮面试面经(含字节、拼多多、美团、滴滴......)

    个人情况 学历:二本 工作年限:2 年半 面试结果:拿到了字节.拼多多.美团.滴滴.欧科云链-的offer 面试准备 复习 你信我,真学习还得看书,看书能让你的知识体系更加健全. 当然,平时也可以看一 ...

  4. 【每日面试】作业帮社招面经(java工程师)

    面经来源 作者:惊鸿一面小萝卜 链接:https://www.nowcoder.com/discuss/667956?source_id=discuss_experience_nctrack& ...

  5. 挑战阿里社招:20道Java工程师面试必问题,真香

    前言 总有一天你会明白,你的努力终究没有白费 年前辞职,人算不如天算,突如其来的疫情完全把自己的计划给打碎了,面试难度简直不亚于一场江苏高考题,后悔.焦虑不安.失眠成了我的生活状态. 从三月底开始投递 ...

  6. 社招转行进腾讯了(自学经验 + 面试心得)

    大家好,我是小林哥. 之前分享过很多读者校招拿到大厂 offer 的经历,他们都有一个共同的特点. 就是在大学期间对于计算机基础准备的很充分,比如数据结构与算法.操作系统.计算机网络.数据库.Linu ...

  7. 美团java面经校招本科_美团java社招经历分享

    1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是"一次编写到处运行".Java能够做到是因为它的字节码可以运行在任何操作系统上,与底层系统无关. 2. 为什么 Ja ...

  8. 记字节社招Java一面

    1.开始先自我介绍 2.面试官看完简历,会让先介绍下最近这段工作中,项目结构较为复杂的一个项目,先描述项目业务,其中穿插用到的技术和组件 3.面试题汇总, kafka和mq的性能差别有哪些 kafka ...

  9. Java5年经验字节社招:半月3次面试,成功拿到Offer

    背景经历 当时我工作近5年,明显感觉到了瓶颈期.具体来说,感觉自己用过很多框架.做过一些技术设计.也有过一些产出,但是从技术深度上感觉不足,到后期时做事也没有明显挑战,完全适应了公司节奏,说句不好听的 ...

最新文章

  1. 【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )
  2. Rust中文论坛已更新上线
  3. MySQL 5.7.11 重置root密码
  4. 荣耀V40渲染图曝光 将搭载双曲面瀑布屏
  5. c语言字符串替换问题,C语言中的字符串替换
  6. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算
  7. 简单绑定要注意的问题_AX
  8. 使用Android开发工具23版更新Eclipse
  9. Atitit 六种知识表示法 目录 1. 知识的静态描述和动态描述 1 1.状态空间表示 以状态和运算符(operator) 1 2.问题归约表示(函数式?? 1 (1)一个初始问题描述; 2 (2)
  10. Hive基本原理及环境搭建
  11. 第四讲 比值、根值和积分审敛法
  12. 推荐28个网站,让你边玩边学
  13. 小程序 | 小程序中常用的事件 + 事件对象的属性列表 +小程序事件传参 + 小程序全局配置 + 小程序页面配置 + 小程序发起网络数据请求
  14. win7 wifi 共享 设置方法
  15. 奇声(IQDubbing)-- 面向影视剧的AI配音技术
  16. “一键GHOST”系统备份与恢复 一键GHOST使用方法 - 绿色软件联盟 - 绿色免费共享
  17. latex 引用公式
  18. 从Excel到数据分析师,我到底经历了什么?
  19. Github的Issues用法
  20. 深度学习应用于脑电信号分析处理的相关论文,更新了......

热门文章

  1. Excel如何从另一个表中自动提取另一个表对应的数据?
  2. react 父组件调用子组件方法--通过 props 实现
  3. Java设置中文字体大小_eclipse中文字体大小修改,让中英文字体协调
  4. 很猛很疯狂,北京楼市促销十年少见 房价下跌论渐占上风
  5. 机器学习实践系列之13 - OpenCV之图像去雾
  6. 2023电信天翼云高级解决方案架构师考试题库-最新版
  7. 主机/虚拟机/开发板三者互通
  8. 计算机和建筑学薪资待遇区别,工科中薪资待遇最高、女生最多、毕业后竞争最激烈的前两名专业!...
  9. 使用APICloud MobTech平台 快速实现多平台分享功能
  10. 社会保障计算机考试证书查询,便利查|打开电子社保卡可查询职业资格证书啦!...