文章目录
- 一、背景
- 二、决定性因素
- 2.1 简历
- 2.2 基础
- 2.3 项目
- 2.4 面经
- 2.5 心态
- 参考文献
- 鸣谢
一、背景
简单介绍下,渣985本硕软件工程,2次实习经历(半年互联网、半年外企),一个省级重点科研项目。
附上自己的蚂蚁金服面经链接:)
二、决定性因素
第二章就介绍下个人觉得是决定面试的几大因素,可能有点啰嗦,但是想着哪怕能帮到学弟学妹们一点点,也算是值了。
2.1 简历
虽是老生常谈,但是我讲的更好
首先,先了解概念——“S.T.A.R法则”,指的是介绍任何项目或者实习的黄金法则,即按照“背景、任务、行动和结果”线性的介绍经历。
我举个例子来介绍具体怎么做,以下是一个项目的介绍修改前/后的对比:
你能够很明显的看出来,修改后的文段明显要清晰明了得多。修改前的项目介绍仅仅介绍了“背景与任务”,然而面试官恰恰看的是“你做了什么”和“你起什么作用”,分别对应修改后文段的“行动”和“结果”部分。
接下来,我再举一个例子,很完美的诠释了如何用S.T.A.R法则编写简历[1]:
一个好的简历,一定是突出了“自己做了什么”以及“有什么结果”,一定地弱化“背景”和“任务”。
其次,就是简历的模板,答应我别用Word了好么?实习僧、MarkDown和五百丁这些都能做出排版很好看,编辑很方便的简历,作为一个技术人,还是讲究讲究(当然,你还是可以穿格子衫)。
最后,简历是人生经历的文字版,请花费大量时间精雕细琢,功在一时,利在千秋!
2.2 基础
基础不是框架,不是架构,不是怎么用,而是为什么
很多人都知道校招讲究的是“基础”,但是又不知道什么是基础,忙着看太过庞大的,太过宏观的知识体系,比如 Spring 的注解怎么用,怎么配置,怎么集成其他组件,再如各种高并发架构的搭建,打住!其实校招考查的是基础,会考的是:Spring 注解为什么起作用,Spring 是怎样完成 IOC 的;以及基于你简历的项目,如何完成更高并发量的优化这些等等。一定要注意的是“为什么”!
首先,还是背书式的讲讲所谓的“基础”覆盖的范围吧。
序号 | 领域 | 内容 |
---|---|---|
① | 计算机基础 | 计算机网络,计算机组成原理,计算机操作系统,数据结构与算法 |
② | Java基础 | Java关键字,Collection集合类,Executor线程池,Java并发编程,Java内存模型,JVM |
③ | 框架基础 | Spring AOP,Spring IOC,Spring 注解,Spring 事务 |
④ | ORM基础 | MyBatis,Hibernate |
⑤ | 数据库基础 | MySQL,Redis |
⑥ | 其他 | 设计模式,Maven,Git |
接着还是分门别类的说下各领域的考察点吧,说的太多又繁琐,只说说我个人认为非常重要的点吧。
①计算机基础中,计网是肯定会考TCP握手/挥手,但是OSPF、BGP这些协议知识也要了解。计组在阿里面试中考察很少,只想到了进程与线程的区别。计操这块说白了就是考察Linux使用与底层原理,比如把修改过的文件刷到硬盘的过程。数据结构与算法是每个厂都会考察的重点,剑指Offer(Java版)、力扣Top 100多刷几遍自然就会了,目前这块没有任何捷径,入门后就是刷题,忘了由刷,刷了又忘,只能这样了 o(╥﹏╥)o
②Java基础,这一块覆盖太多太多了,我尽量说。Java语言本身就是博大精深,个人是拜读过《Thinking in Java》才入门的,这本书是入门Java的不二选择。Collection集合类是一定会考察的,很经典的考察思路就是:List⇒HashMap(index/put/resize)⇒ConcurrentHashMap ,所以一定要结合到博客解析去看源码。Executor线程池主要是运行原理,配置参数和默认实现。Java并发编程讲的是线程的分工、同步和互斥,按照这三大脉路来复习,看源码基本上看到AQS的深度就足够了,如下图:
Java内存模型中,仅仅线程共享/私有区布局大家都记得住,经典的考察思路就是:JMM布局⇒Java虚拟机栈⇒局部变量表;还有,JDK版本迭代导致的方法区消失和元空间出现具体有什么影响,字符串常量池到底去了哪;另外,Java内存模式就是为了解决并发编程才设计出来的,结合volatile、synchronized、final以及6项Happens-Before原则去理解。JVM考察的重点是垃圾回收器和调优操作,一定要深度理解CMS和G1回收器;JVM调优要记得回收器的主要参数(初始大小、E/S区比例),哪怕你没有遇见过OOM也要假装遇见过,而且一顿操作排查出来了。
③框架基础中,由于Spring的知识太多太广,最好是找以前的面经来引导自己的学习路线。Spring AOP几乎必考,熟悉基本概念(特别是Join Point和PointCut区分),使用场景,底层原理,考察思路如:AOP概念⇒AOP的实现方法⇒Spring AOP实现原理⇒CGLib和JDK区别。Spring IOC也是几乎必考,IOC的装配(源码级别),解决循环依赖(源码级别)。Spring 注解指的是常规使用注解作用,底层由哪些注解组成,基本不会问怎么用。Spring 事务考察@Transactional传播级别,实现原理(怎么动态代理),怎么失效的。
④ORM基础中,MyBatis的底层实现,特别是一、二级缓存以及如何动态代理DAO与XML配置。Hibernate的工作原理、一、二、三级缓存和事务机制。
⑤数据库基础中,MySQL只会考察Innodb和MyISAM引擎,其他的引擎不用了解太多,基本上要清楚各类CURD是在B+树叶节点什么范围加的什么样的锁。Redis的5种数据类型的底层实现,还有对应的大概应用场景,比如zset怎么做简单限流器和排行榜统计;另外涉及到分布式的一致性Hash算法和虚拟Hash slot。
⑥其他中,设计模式几乎必考,由于太多底层源码凸显了设计模式,所以尽量结合实际源码去理解设计模式,死记硬背是背不住的。Maven是绝大部分J2EE项目不可缺少的依赖管理工具,基本的POM配置是必须要了解的,不要只会复制粘贴Dependency,还有生命周期、坐标等概念理应有个全面的理解。Git是工作必会技能,不只是要会简单的commit,还要深度理解rebase、reset/revert等“救命”命令的使用场景。
2.3 项目
分别给无/有项目的人介绍下如何在项目上做准备。
对于很多本科的同学,无法接触到实验室,或者学校给不了很好的练习平台,很可能大学几年没有任何项目经验,我很能理解。但是,虽然现实是残酷的,互联网是开放的啊,如今网上有很多开源项目,避开那种大过庞大的项目(如hsweb 3.0这种企业级基础框架),用一些小项目入手(如webporter 这种小爬虫框架),毕竟没有接触过成熟的项目。除了开源项目,很多J2EE入门开发网课也有小Project,网课是我个人觉得最具性价比的入门方式,拥有成熟经验的工程师拖着小白走过自己走过的路,岂不是事半功倍嘛!以网课小Project为基石,最后去逐渐接触成熟的开源Project,再转化为“自己的”项目,也挺好。
另外,最好不要写某某某电商平台项目,这是个神坑,甚至可以把好几年工作经验的老前辈问懵逼,涉及到很多分布式的问题:流量削峰、熔断/降级、支付结算、超卖、库存扣减、SSO、幂等性等等等等问题,除非你真的经历过,并且有十足的把握让面试官喊666。
对于有项目经验的同学来说,第一步就是要把项目实践经历按照“S.T.A.R原则”好好的写在简历上,逐字逐句精雕细琢。第二步就该考虑面试中项目考查点,以技术栈为脉络,思考考官会提出问题的可能点,比如你写了Redis(如上图):为什么用Redis,你怎样用Redis缓存图片的,是否做过做过Redis前后压测性能对比?第三步就是项目优化,如果并发量更多的情况下,你将如何优化项目,比如你写了MySQL(如上图):怎样利用MyCat分布式数据库中间件从单机模式过渡到主从分离?
2.4 面经
特别重要!!!既是面试题库,更是练习题库,平时就要用起来。
很多人觉得面经就是要面试之前看看,临时抱的佛jio而已,或者“点击收藏”一气呵成,“等等”再看。其实不是这样的,我个人对面经的定义是:面经首先是题库,它让你知道面试会问些什么,问题覆盖的内容大体有哪些,覆盖的深度在什么层次,面经其次是练习题,它让你在规划准备初期就可以了解明确的复习方向,它测试你自己复习的知识会不会在面试中考到,它能够模拟面试中如何组织语言与引申额外知识点。所以,不要总是在最后才看面经。
十分推荐大家去牛客网搜索自己需要的面经,这个网站还可以按照自己定义的标签收藏,特别方便标记和整理面经。
最后,希望大家能够回馈自己的面经,帮助到更多的学弟学妹们,让圈子的开源与分享精神传承下去。
2.5 心态
面试前,请提前4-6个月准备招聘,而且最好是把招聘和考研放在同一个战略层次,这是一场没有硝烟的持久战,你看到那些拿大厂Offer的都准备了很久很久,不可能随时都记得这么细的知识。
面试中,①一定不要死背面经,尽量说出引申出自己的理解或者额外知识点,如:synchronized和Lock的区别?不难,但是我会给面试官说“还有一层理解是Lock破坏了死锁的‘不可抢占’条件,而synchronized不能,这才是最大的区别”;再如,说到ReentrantLock的时候,你把AQS及其底层实现引申出来,绝对加分项 。②不要患得患失,影响了发挥,你认真准备了,问心要无愧,本来面试也需要运气,决定权不在你手里;如果你只是碰运气去面试,没过也理所当然。
面试后,一定要复盘面试过程,下次才会答得更好,不要觉得羞耻或者逃避痛苦,反正是自己偷偷摸摸的复盘(滑稽脸)。
参考文献
[1] 应届生如何写好技术简历-牛客网-Samray
鸣谢
感谢远在杭州蚂蚁的潘师兄的指导,从最开始帮着改简历,到介绍情况,帮忙找他以前的老板内推,再到面试的时候各种安慰我脆弱的心灵哈哈。我一定会把我们实验室的这种优良传统传承下去,能在实验室里面遇到师兄和导师是我人生的大福气!
感谢室友王二狗的审稿建议,读研这两年遇到你就多了很多人生乐趣啊,快哉快哉!