learn-tech/专栏/架构设计面试精讲/00开篇词中高级研发面试,逃不开架构设计这一环.md
2024-10-16 06:37:41 +08:00

87 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
00 开篇词 中高级研发面试,逃不开架构设计这一环
你好,我是刘海丰,京东集团高级架构师。我在京东主要负责京东旅行、拍卖、房产等多款产品的技术架构,以及数据和 AI 技术在业务场景上的落地。
在十余年的 IT 职业生涯中,我做过 CTO体会过拿着商业方案找投资的艰辛也经历过带领创业团队从 0 到 1 搭建产品的不易,更见证了互联网高速增长带来的流量冲击,经历了京东数年大促的洗礼,在互联网架构设计和亿级流量解决方案上积累了丰富的经验。
我同时也是一位面试官,在面试过程中我发现了一个共性问题:很多研发工程师在基础问题上答得不错,却往往栽在架构设计问题上。 要么回答的不够有深度,要么考虑的不够全面,或者干脆直接把网上看到的方案抄过来,哪里有坑都不知道。
而这与面试者的认知有很大关系。很多候选人认为,“架构设计”是应聘架构师或成为技术大牛后才会被问到的问题,觉得考察架构设计能力超出了岗位职责要求,并不重视。
可实际情况是,考察架构设计,是面试中高级研发工程师逃不开的一环。 绝大多数面试官会看重候选人的架构设计能力,以此衡量候选人的技术深度和对技术的驾驭能力,挖掘你的技术亮点。如果你能在“如何设计系统架构”上回答得有条理、体现自己的思考,很容易得到认可,甚至掩盖个别技术问题上回答的不足。
就算你是面试初级研发岗位很多面试官也会站在你的能力上一层继续问一些架构设计问题。以“Redis 是否可以作为分布式锁?”这个问题为例,面试官会站在中高级研发角度考察你的技术能力,问你用 Redis 实现分布式锁会存在哪些问题,以及为什么 Redis 会采用 AP 模型等。
应聘中高级研发时,面试官则会站在架构师的角度,扩展到分布式缓存系统的数据分布、复制,以及共识算法的问题上,还要考察你对在实际业务场景中应用分布式缓存的技术判断力。这些都是想挖掘你的能力边界,看看你的天花板有多高,未来能在团队中发挥多大价值。
你可能会问:就算我知道架构设计在面试中很重要,但我没有大厂经历,也没有机会做复杂的项目,又该怎么迎接面试呢?
很多同学都会面临这样的局面,切忌不要在网上搜索一些高性能高可用的架构设计方案,因为你没有实际踩过坑,很难分辨哪些技术场景下的设计仅仅是为了公关,很难落地,在面试中也很容易被面试官识破,怀疑你的技术能力的真实性。
当然,也有一些研发同学可能会遇到这样的情况:技术明明可以满足应聘部门的岗位能力要求,但面不到想要的职位。
这不是你的技术能力不足,而是你对技术的认知不够,达不到一个高级研发,或者是架构师该有的技术思维层次。于是你在面试大厂时,就会存在因为很难讲出自己的技术价值与亮点,导致竞争力不足的情况。
这时,面试官更关注考察你解决问题的思维过程,那么如何阐述解决问题的思维能证明你的能力呢?这其实存在很多套路,比如回答问题的视角应该是什么样的?(我会在课程中为你举例说明)。
所以,针对以上三点问题:
没有设计经验,不了解面试前需要准备哪些架构设计问题?
没有大厂经历,不知道如何回答面试官提出的架构设计问题?
没有技术认知,不知道如何回答架构设计问题能让面试官满意?
我决定把自己多年的经验分享给你。
这门课主要面向的是想准备面试的中高级后端研发,以及想提前掌握架构设计知识,从而在面试中增加亮点的初级研发,帮你摆脱面试中的架构设计误区,识别技术陷阱,掌握面试中关于架构设计问题的知识体系。
面试官在面试候选人时一般的形式是假设一种场景然后让候选人根据场景做技术设计或者直接让候选人画出自己做过的最复杂的系统的架构图再提具体设计问题。而这其中100% 会涉及架构原理、分布式技术、中间件、数据库、缓存、业务系统架构 6 个方面,这几个方面也正是这门课的 6 个模块。
模块一:架构原理与技术认知
我会以架构师视角解析研发同学在遇到系统设计问题时,应具备怎样的技术认知和解题思路。架构设计的底层思维逻辑是你的架构设计能否立足的根本,决定了你在面试时从什么角度来回答提问才更有价值,模块一是你学习后面内容的理论基础。
模块二:分布式技术原理与设计
有一句话叫“不懂分布式,别来面试互联网”,我会通过亿级商品的数据存储问题,解析在分布式系统技术架构中,面对热点问题该如何回答,比如用 etcd 如何解决数据共识问题?在这一模块中,我会深入原理并结合落地经验,让你抓住面试官的提问思路,给出被认可的答案。
模块三:中间件常用组件的原理和设计问题
我会结合大厂关注的考察点,讲解 RPC 远程调用和MQ消息队列的技术原理和实践比如如何实现一个 RPC 框架MQ 如何实现消息的不丢失、不重复消费,以及积压等问题。
模块四:数据库原理与设计问题
要想顺利回答出“数据库原理与设计”问题,你需要掌握 MySQL但 MySQL 的知识点很零散,而我会整理出一套架构设计面试中必考的 MySQL 知识体系,并根据你应聘的职级,带你针对性学习。
模块五:分布式缓存原理与设计问题
面试者仅能熟练地使用 Redis 还不够,面试官还要求候选人能深入理解底层实现原理,并且具备解决常见问题的能力(尤其是在高并发场景下的缓存解决方案),我会结合分布式缓存的原理,并结合电商场景下 Redis 的设计案例解锁经典面试问题。
模块六:互联网高性能高可用设计问题
我会针对当系统遭遇百万并发时的技术瓶颈,以及优化思路,为你揭开大厂招聘必问的高性能、高可用问题背后的原理,比如如何判断你的系统是高可用的?并最终通过电商平台案例,解析面试中的高频架构设计问题。
总的来说,在面试中,互联网公司会把技术层层设卡,通过架构设计上的各类知识点将研发工程师进行分层。但是每个人的工作经历有限,很多人遇不到好的平台和好的机会,在平时工作中只做着 CRUD 的工作,这个问题对于很多中小型企业的研发工程师尤为明显,就导致他们应聘大厂的竞争力偏弱。
而我会通过具体的面试场景入手,从案例背景、案例分析、原理剖析、解答方法等层面,由浅入深地把我的经验方法与实践总结分享给你,让你吃透了一个案例后,可灵活运用到其他案例中,让你为应对大场面做足准备。
学习这个专栏的建议
考虑到很多同学对架构设计掌握程度不同,在正式学习这门课之前,我给你几点建议。
夯实基础:无论你的基础怎样,我都建议你先完整地跟着课程节奏学习一遍,对每节课讲解的架构设计问题有一个全新的认知,对课程中涉及的知识点进行查缺补漏,夯实自己的技术基础。
以教促学:这门课最直接的目的是让你通过面试考核,所以我对你的要求是把这门课的内容用自己的话术和风格讲出来,让别人听懂。而这离不开“从学习到分享再到学习”的一个迭代过程。
高屋建瓴:当你有了一定的实践经验后,我建议你重新学习对应的章节,参考课程内容设身处地地去思考,是否有更好的回答方式。
总而言之,作为一名技术人,我们既然选择了这个职业,就一定要有上进的决心,不能只顾写代码,一定要提升架构设计能力。因为即使代码写得再好,做的也是执行层面的事儿,就会有收入的天花板,想要突破它,就要突破你做事儿的边界,让自己成为一个架构师或技术负责人。而这些内容对于从事 IT 开发工作的你,越早知道越好!