32个Java面试必考点-01技术人职业发展路径
在刚入职的 1~3 年内,技术人员的发展路径比较单一,主要是从工程师往高级工程师发展,这个阶段主要目标是积累,夯实后续发展的基础,重点提高自己的工作基础能力,培养技术深度和广度,对不同方向的新技术保持强烈的好奇心和学习心。而对于技术专家来说,要具备项目架构、项目经验、管理推进与沟通协作能力,能够独立负责一个项目,做好项目架构,完成功能模块的拆解与任务分配,推进团队内、外部的事务、协调资源,管理进度
本课时主要普及各层次的工程师岗位分支及晋升要求,以及讲解如何快速找到匹配度较高的工作,后面的 8、9 个课时,内容重点在常用的 Java 知识框架串讲和面试考察点上。在找工作之前应该对目标公司、岗位要求及面试流程有所了解,这样才可以有针对性的突破。
课时 1 的内容有以下几方面,可以帮面试者解决大部分求职迷茫的问题:
1.常见的技术人员发展路径和 BAT 的晋升要求;
2.技术面试一般都有哪些流程;
3.如何刷选一个高命中率的岗位;
4.面试前要怎么准备;
5.Java 面试的考察点图谱,后续会分开讲解。
工程师发展路径
先从工程师的职业上升空间开始讲解。“能谈谈你对未来的职业规划吗?”相信很多人面试都会被问过这个问题。技术岗和其他岗位一样,首先要对自己的职业有规划。
一般来说,技术人员对职业发展有两个发展方向,一个是技术方向,另外一个是管理方向,这两条路径侧重的能力点不同,需要根据自己的兴趣、能力优势有侧重的进行能力培养,成长路径如下图所示。
在刚入职的 1~3 年内,技术人员的发展路径比较单一,主要是从工程师往高级工程师发展,这个阶段主要目标是积累,夯实后续发展的基础,重点提高自己的工作基础能力,培养技术深度和广度,对不同方向的新技术保持强烈的好奇心和学习心。
在一路打怪升级为高级工程师之后,就会面临发展方向的选择:技术 or 管理。
1.如果打算往技术方向深挖,上升通道有:资深工程师、技术专家、高级技术专家、研究员、科学家等。需要你重点培养技术攻坚能力,包括疑难问题的排查、大型项目的功能拆分、技术品牌的塑造等。具体的工作包括:原理、实现、注重架构能力的培养,更深一层还有:大规模、高并发场景,高可用、可扩展措施和方案、业务的抽象、架构能力、分布式服务设计原则的理解等。
2.另外一个方向就是管理。管理序列偏重于团队把控,需要让团队形成技术战斗力,利用一切资源推进项目,让团队完成作战目标。另外,做好团队内和跨团队的沟通、协作也是管理工作很重要的一环。
在实际工作中,这两个序列没有特别明显的边界。例如做管理不表示远离架构设计;而技术专家也不是单兵作战,也需要带领团队。这两个方向区分点在于工作内容的侧重点不同:到底是更偏技术架构,还是更偏管理与项目推进。
回到最开始的面试问题,“你的职业规划是什么?”,答案并不是在面试前打个腹稿就完成任务了,而是在你进入职场,准备成为一位工程师时,心里就该有个谱的。
这里给你个面试小诀窍,也许这么回答能加分很多:“从过往的经验来看,我对项目的整体规划、管理推进比较感兴趣,在任务推进、协调沟通方面也有比较突出的表现,所以我的职业规划是成为一名优秀的技术经理,并以管理方向为发展目标。“这么接下去,面试官可能会对你的相关经历开始询问。
常见技术岗位划分
除了有明确的职业规划外,想要往高处走还得了解职级划分与对应的软、硬技能要求。这样你在工作的时候可以有意识得补足欠缺,提高水平。
应聘不同公司、不同级别的岗位时,要重点提升哪方面的技能呢?答案非常简单。
对照下图,简单介绍 BAT 的技术序列的岗位划分、对应的工作年限及职级。
& 1~3 年的初级工程师,这个级别的岗位在阿里、百度、腾讯等大厂很少进行社招,一般是从校招生内部晋升。
& 高级工程师一般需要有 2~5 年的工作经验,这个岗位对应百度中的 T4、阿里的 P5,以及腾讯的 T2-2(对应腾讯最新职级体系 T7)。
& 资深工程师一般要求 3~6 年工作经验,这个岗位一般对应百度中的 T5、阿里的 P6,以及腾讯的 T2-3(对应腾讯最新职级体系 T8)。高级工程师和资深工程师是各个公司中的绝对技术主力,公司非常看重这部分人才的成长和培养。
技术专家、高级技术专家至少需要 5 年以上的互联网从业经验,这里先不多说。大家记住这个表,初级、高级和资深工程师 3 个职位面试具体的考察点后续详细展开。
面试岗位选择
在明确发展方向和岗位级别之后,接下来该选公司和岗位了。换工作的时候你也许遇到过这种情况:一个公司有好几个技术岗位,要全都投一遍吗?手里有多个 Offer,应该怎么选,是挑钱多的,还是大平台、福利待遇好的?
我给你个建议:挑选岗位一般从公司规模、业务线或团队的重要程度以及个人条件的匹配度,这几个方面来入手。
公司和团队
先来看公司和团队。要有个概念:现在的每一份工作都是为下一份更好的工作蓄势。
大厂比较适合镀金提高身价,核心业务更适合长期稳定发展,进入核心团队在能力、经验上都能获得较大的成长。
如下图所示,第一象限是第一种情况,大公司的核心业务无疑是最好的选择,但也是竞争最激烈的,尽量找和自己能力匹配的,不要和众多高手竞争,耽误宝贵的求职时间和机会。第三象限,小公司的边缘业务,肯定是下下策,备选。
剩下的两种情况:一是大公司的边缘业务,另一个是小公司的核心业务。
这也是最让人头疼的选择,给你个建议:对于工作 1~3 年的小伙伴,我更推荐优先选择核心业务。之前我有提到,职业生涯前期以积累知识、经验为主要任务,核心业务可以给你提供更多的历练场景,无论是应用经验还是架构经验都能获得很好的收获。
个人匹配度
另外一个因素如下图所示,个人匹配度。不是每个人天生就能考上清华北大,考大学大家都要估分再报志愿,职场也是同一个道理,首先需要对自己的条件有客观的评估,再对号入座。评估范围包括岗位要求、业务方向,还有自身能力、兴趣、经验等的匹配程度。匹配程度越高,面试的成功率就会更高,也更有利于入职后个人的发展。
一句话总结就是:优先选择核心业务,以及与自己条件高匹配度的岗位。
常见面试流程
在搞清楚前面几点之后,面试流程也是找工作前必须了解的。我见过一些候选人对面试的要求都不了解,也没有进行对应轮次的面试准备就直接来了,这很可能会浪费一次机会。
对于技术岗,大部分公司的面试流程基本相同,如下图所示,分为 6 个环节。
1.首先,可能会有一些前置的面试,假如应聘的是异地的职位,可能会先安排电话面试,大概了解候选人的情况和技术水平。还有一些公司会在正式面试前先进行笔试,或者上机编程。因此初次面试前一定要跟面试官沟通是否会先进行电话面试,是否有笔试或上机编程,是否需要自带电脑等细节。
2.正式面试是从技术一面开始的,可能会有 1~2 位面试官,他们很有可能就是你入职后的同组同事。一面以考察基础能力与实际应用能力为主,时长大概 1 小时左右,是纯技术面试。可能会要求手写一些小算法,例如排序、字符串处理之类的,这方面具体考点大家可以关注后面的算法面试课。
3.技术二面也是以技术面为主,偏重技术深度的考察,例如项目经历、架构能力、算法等,面试时长 1 小时左右,可能会要求画出项目的架构图,交互流程图等,并对项目存在的问题和改进方案等进行询问。一般技术二面的面试官就是你入职后的直属领导。
4.一些规模较小的公司,到二面就结束了,而大部分的公司会有技术三面。技术三面一般是半技术面试,会有一些项目经历、架构设计的题目,另外还会涉及职业规划、职业兴趣、技术视野等方面的问题,以架构能力、技术敏感度、发展潜力为主。三面的面试官一般是部门的 leader。还有少部分公司会存在技术四面,例如腾讯在较高级别岗位面试时,会有跨部门的交叉面试,面试内容与三面基本相同。
5.如果你很幸运通过了前面的几轮技术面试,那么就进入 HR 面试阶段,这个阶段之后基本不会再出现技术面试了,主要沟通个人的发展规划、上家公司的离职原因、价值观和薪资待遇等。如果你对这家公司特别期待,注意不要在这个环节因为纠结 1~2k 的工资而错失机会。工作前期以积累能力为主,3 年后我们再谈待遇。
6.HR 面试后是公司级高管面试,具体轮次看情况,一般一、二 面,非技术面为主,可能会简单询问工作经历、对公司的看法、对行业的看法、未来规划等,只要没有原则性错误,一般都能够通过。
整体总结如下:
1.面试前询问是否有电话面试、笔试、上机等前置面试;
2.技术一面、二面关注实际工作能力;
3.二面、三面偏重架构能力与发展潜力,二面与三面一般决定你的入职职级,一定要好好表现。
面试前准备工作
假设你明天就有个面试,那么,前期的准备工作对面试成败起到决定性的作用。影响面试成功的三大基石是:能力、心态和沟通。
1.能力。优秀的技术基本功是必要条件,毕竟公司是招你来解决问题的,没有技术能力其他的都无从谈起;
2.心态。注意平衡心态,过于紧张会导致平时会的内容没有回答上来;
3.沟通。与面试官交流顺畅,会给你的面试加分;反过来如果沟通不顺畅,就可能变成致命一刀,直接被 Pass。
那么,如何在面试时稳定发挥?
1.面试考察点是可以在短期内突击的,也是面试前需要重点准备的内容。
a.系统地复习基础知识。
b.对工作经历进行提炼,对原来负责的项目从架构方面重新审视、梳理、总结。
c.对一些典型框架的原理、使用场景及实现方式进行学习、对常考的考点进行专项突击。
d.阅读常考考点源码。
e.根据面试岗位业务有针对性的准备,比如:面试中间件方向的岗位时,可以突出自己有过存储中间件的开发经历、有过链路协议层设计经历等。
2.关于心态,面试前多方面搜集面试公司、岗位所属团队、平均福利等资料信息,知己知彼有助于增加自信。提示一下,有些公司喜欢压力面试,特别在面试官层级较高时发生。在不利场景下多给自己心理暗示,控制情绪,也许有意想不到的收获。例如,这个面试官以后可能再也不会遇到,就算失败了也没什么大不了。
3.沟通方面,给你几点建议。
a.提前准备一个简短有特色的自我介绍,主要描述自己的技术特长和职业优势,一定不要聊兴趣爱好、家乡、星座等无关紧要的内容。
b.避免冷场,对于回答不上来的问题,可以主动坦白,并提出解题思路,或者询问面试官可不可以换个问题。
c.当没有听清,或是不理解问题时不要强行回答,可以跟面试官再次确认问题。
d.注意一些细节,例如:你的面试微表情,不要皱眉、控制坐姿和手势、说话语速不要过快或过慢、表达逻辑清晰,观点明确;不要随意打断面试官,谦虚有礼的态度等。
还有一个小技巧是需要注意观察面试官的反应。如果面试官突然在简历上奋笔疾书,说明你提供的信息是有用的,如果他停下来很长时间不写了,你要想想是不是跑题了;如果面试官的表情显示出不耐烦,或者深呼吸,有可能你没有领会面试官的考察意图,可以再次询问。
面试考察点
面试的考察点非常综合,一般分为硬技能和软实力。
& 硬技能包括:基础知识的掌握、以往的项目经验、对系统架构的设计能力,以及对不同框架、工具的综合应用能力。
& 软实力一般包括:逻辑思维是否灵活、沟通、表述、协作能力是否优秀、是否有较强的项目管理与推进能力、新技术的学习、总结与思考能力,以及培养潜力这几方面。
前面 BAT 的职级图中提到,不同等级的岗位,能力要求肯定也不同,这里用雷达图来展示,如下图所示。
首先对于初、中级工程师来说,基本的要求是能完成分配的研发任务,所以面试官更看重基础知识的掌握、逻辑思维是否灵活,有没有培养潜力。其次是项目经验与学习思考能力,而架构能力、管理推进,以及沟通协作等能力,受限于工作年限,并不会对这些方面有较高的要求。
对于高级工程师,一般需要独立完成功能模块或者子项目的设计与开发,所以除了初级工程师应该具备的能力外,对项目经验、沟通协作、架构能力、学习思考、管理推进都有了更高的要求,特别是项目经验和学习思考的能力。
而对于技术专家来说,要具备项目架构、项目经验、管理推进与沟通协作能力,能够独立负责一个项目,做好项目架构,完成功能模块的拆解与任务分配,推进团队内、外部的事务、协调资源,管理进度,带领技术团队完成任务目标。
温馨提示,软实力功夫做的好,对于技术工程师的职业生涯来说绝对是加分项。
硬技能系谱
针对硬技能考察点,提供一份系统化梳理,也是接下来几个课时重点讲解的内容,如下图所示。
1.基础知识分为计算机基础与 Java 体系两大部分,包括了进程、线程管理;TCP、HTTP 网络协议;数据结构、经典算法;常用设计模式等。面试加分的内容,比如,新技术方面:Java 8~11 新特性,G1、ZGC 垃圾回收算法、最新网络协议 HTTP2、QUIC;知识深度方面:内存屏障、指令重排,JIT 编译器、逃逸分析等。
2.项目经验部分讲解如何展现自身的项目经验,包括项目的描述、流程图、项目难点、项目问题分析与改进等。
3.应用知识部分兼顾知识的广度与重点框架的知识深度。包括常用工具、常用框架、缓存、队列及数据库等几个方面。其中工具集以知识广度与实用性为主, 例如 JVM 工具 JFR、tcpdump、Git、vmstat、iostat 等;应用框架以经典架构的常考点为主,包括 Spring、Netty 等主流框架的重点知识。缓存、队列、数据库将以应用场景为主。
4.架构能力以微服务架构介绍为主,讲解架构理念与应用场景,也包括一些重点机制的实现方式。例如 Docker、K8s 和 Spring Cloud 等。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)