大厂面试官:我不要只会刷题的码农。

本文是一位资深技术人士分享的阿里面试经验,强调系统设计在面试中的重要性,指出光会基础操作已无法满足大厂需求。文章提供了系统设计面试的准备方向,包括熟悉基本知识、项目实操、保持好奇心和技术选型,并以设计Twitter、秒杀系统等为例,详细阐述了面试中的解题步骤。同时,提到了系统设计面试的评分标准,包括可行解、特定问题分析、权衡和知识储备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为在阿里待了多年的技术老狗,曾经长期作为团队面试官也面过大大小小200+的面试来现身说法:光会CRUD已经没有会一个完整的可解决问题的系统设计香了......大厂的招人逻辑是:不要只会刷题的码农。所以,重技术原理和逻辑思维的系统设计题就成了筛人首选

系统设计的最终考察标准是:面试者独立设计一个大型的系统,它在现实中是可work的,同时在高并发的情况下仍具有高可用性

比如:实际面试里,系统设计题干很简单,往往就一句话:为暑期大促设计一个订票系统。很多没有系统设计经验的小白这个时候已经麻了......

v2-aeb495e9878cd8f2b01fbffdbb6ad5e2_b.jpg

别慌,先推荐一个系统架构设计2021版,包含18大系统架构设计知识点和面试题,涵盖了几乎所有大厂常见的高频设计题。以下,干货还是挺多的。

v2-2f6fda6457b23964efcd88976b411222_b.jpg

v2-a5bd2fb9df37b0f7bec48e31b861b417_b.jpg


另外,它的刷题方式搞定系统设计的训练方式。万年刷题党的童鞋们也可以快速上手掌握系统设计核心知识点。第一节的免费试听课程就会讲到设计Twitter和系统设计的通用解题法则,可以去实操感受一下。

v2-68dc1b5e795bc556fbfe86924f3d8509_b.jpg

接下来的篇幅,我从面试前准备和面试中的应对给大家整一篇干货分享。感兴趣的同学,可以看下去。

系统设计面试前我们要有哪些准备?

一、熟悉基本知识

系统设计题目因为是开放式的,会考察到的技术领域会非常多,不仅仅是数据结构和算法。所以,你需要有很扎实的基本知识,这点非常重要。你一定非常熟悉算法,这点毫无疑问。

但是:以短网址服务为例,如果你不清楚散列,时间/空间复杂度分析,你将无法提出一个好的解决方案。

罗列了一些你在面试中可能会涉及所以你最好提前熟悉一下的东西。

  • 抽象。系统设计面试是一个非常重要的话题。你应该清楚如何抽象系统,什么是可见的和不可见的其他组件,以及它背后的逻辑是什么。面向对象编程也是很重要的。
  • 数据库。你应该清楚关于像关系数据库这样的基本概念。取决于你的水平(应届生或经验丰富的工程师),了解 NoSQL 可能是一个加分项。
  • 网络。你应该能够清楚地解释,当你在浏览器中键入gainlo.co时会发生什么。例如应该清楚 DNS 查找和 HTTP。
  • 并发。如果你能够识别系统中的并发问题,并告诉面试官如何解决这个问题,那将是非常棒的。有时候这个话题可能很难,但是需要了解一些基本的概念,比如说竞态条件,死锁是底线。
  • 操作系统。有时你与面试官的讨论可能会非常深入,这时最好知道操作系统在底层如何工作。
  • 机器学习(可选)。你不需要成为专家,但是一些基本的概念,如特征选择,通常 ML 算法的工作方式,最好熟悉它们。

二、 平时项目实操到位,面试才能稳如老狗。

真实的项目和实践永远是准备系统项目设计最好的方法没有之一。你实践的越多你面试时的发挥将会越好,因为这些系统设计的题目,大都来自现实生活中的产品,那些从事过项目的人,往往对这些问题与更好的理解......

如果你不知道要做什么,这里给你一些建议:

建立一个小型服务/产品来解决一个真正的问题 在 Github 上贡献开源项目 找到你喜欢的机器学习,网络等主题,并搜索一些你可以使用的项目 真正重要的是去做一些现实生活中的项目。你可能需要很长时间才能看到改进,但是在那个时候,你会注意到面试问题是多么的简单。而且,从长远来看,你将从中受益良多。

下面直接上几个我自己用过的实操系统:

1.凤凰架构

讨论如何构建一套可靠的大型分布式系统。凤凰架构作者从事大型企业级软件的架构研发工作。作者系统性地整理自己的知识,将它们都融入既有的知识框架之中。

以“如何构建一套可靠的分布式大型软件系统”为叙事主线的开源文档,作者同时还建立了若干配套的代码工程,这是针对不同架构、技术方案(如单体架构、微服务、服务网格、无服务架构,等等)的演示程序。它们既是文档中所述知识的实践示例,亦可作为实际项目新创建时的可参考引用的基础代码。

v2-266b3f81c5b30efdbfe9088a963826f9_b.jpg


2.Twitter后端项目

设计Twitter本质上就是在考高并发的信息流系统,其涉及的技术难点非常多,项目的难度也更能检验面试者水平,而且从L3~L5都能问到。

对于初级程序员(SDE1),可以把“设计Twitter”拆解出单独设计一个关注功能来问

对于高级程序员(SDE2+),面试官通常会要求面试者实现设计登陆、发推、点赞、关注、取关等一系列功能

这些技术难点在Twitter后端项目首节试听课中都有详细介绍,整个项目涉及万行代码,最后可以按工业化要求产出的可上线产品

v2-93fd3ef1bfde877eebfe3b259b0f87bb_b.jpg

3.mall

mall项目致力于打造一个完整的电商系统,采用现阶段流行技术实现。

商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

v2-7c07ca8b5f577a5d47ca43aea72d3eb3_b.jpg

4.电商秒杀系统 - Spring项目实战

实战高并发最好的项目之一,课程是由阿里巴巴资深架构师主讲,负责每年双十一淘宝系统的维护。

对于长期在中小厂工作,缺乏高并发经验的程序员非常适用,课程会从项目基础架构搭建、数据库表分析及创建、MyBatis 整合与逆向生成等开始讲起,逐步完成一个电商秒杀系统。

首节试听课上会讲解秒杀系统的重难点、常用的技术架构,现在开放了免费试听

v2-7ad58e2035dd95cffd1baed2a94e944f_b.jpg

三、保持好奇心

多思考自己经常浏览的网站是怎么做的。比如:

  1. 你刷微博的时候可以思考一下微博是如何记录点赞数量的?
  2. 你看哔哩哔哩的时候可以思考一下消息提醒系统是如何做的?
  3. 你使用短链系统的时候可以考虑一下短链系统是如何做的?
  4. ......

四、技术选型

实现同样的功能,一般会有多种技术选择方案,比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2 。 很多时候,面试官在系统设计面过程中会具体到技术的选型,因而,你需要区分不同技术的优缺点。

面试中怎么去回答系统面试题?

首先,一般你在系统面试现场会被问到这样的问题:

  1. 设计一个某某系统比如秒杀系统、微博系统、短网址系统、抢红包系统。
  2. 设计某某系统中的一个功能比如某视频网站的点赞功能。
  3. 某某系统的技术选型比如缓存用Redis 还是 Memcached、网关用 Spring Cloud Gateway 还是Netflix Zuul2
  4. 设计一个框架比如 RPC 框架、消息队列、缓存框架、分布式文件系统等等。

v2-cc39bd7fcb8ff5b43e3fea878330318d_b.jpg


我们通过4个步骤来拆分:

Step1: Scenario场景(问清楚系统具体要求)

当面试官给出系统设计题目后,一定不要马上开始设计。 需要确定设计哪些功能,包括功能性需求和非功能性需求。承受多大的访问量?

为啥要问清楚功能性需求?比如:如果面试官让你设计一个Twitter系统,你总不能把Twitter所有涵盖功能如会员机制、推荐信息流等都设计进去吧,所以你要明确你要做的系统核心功能(缩小范围)!

为啥要问清楚非功能性需求?

比如秒杀系统的常见概念QPS(Queries Per Second),即一秒内需要处理的请求数量是多少?

所以,为了避免自己曲解题目的意思,可以先给面试官简单说说自己对系统的理解。

Step2:Service服务

我们需要在一个 High Level 的层面对系统进行设计。服务可以认为是逻辑处理的整合。对于同一类问题的逻辑处理归并在一个服务中,整个系统可以细分为若干个小的服务。

v2-d226a5702428d24592e6485ec1252878_b.jpg

以秒杀系统服务设计为例:

v2-c04332ce7419d0caea7e8844d4bf595d_b.jpg


Step3:Storage存储

数据是如何存储和访问的。为每个服务选择合适的存储结构,然后细化数据表结构。还是以秒杀系统数据库设计为例:

v2-33e29cde801ae7205a981a2c2adc2dd2_b.jpg

于是我们可以得到秒杀活动中,数据库之间的关系如图所示

v2-c17a3d4f3bcf3d5e94e5248faa0104fe_b.jpg


Step4:Scale扩展,升级优化(解决缺陷,处理可能会遇到的问题)

完成系统的抽象设计后,你还需要思考当前抽象系统还有哪些需要优化的点,这一步是重点。

  1. 当前系统部署在一台机器够吗?是否需要部署在多台机器然后进行负载均衡呢?
  2. 数据库处理速度能否支撑业务需求?是否需要给指定字段加索引?是否需要读写分离?是否需要缓存?
  3. 数据量是否大到需要分库分表?
  4. 是否存在安全隐患?
  5. 系统是否需要分布式文件系统?
  6. ......

可以移步系统架构设计2021版,解锁详细细节。

知道面试官在考察你哪些方面,这些方面分值占比多少

如果这场考试的评分标准你都不知道,那是很危险的!

想要答好系统设计,首先要了解系统设计面试的评分标准。系统设计面试主要考察以下几个方面:

  • 可行解 Work Solution 25%
  • 特定问题 Special Case 20%
  • 分析能力 Analysis 25%
  • 权衡 Tradeoff 15%
  • 知识储备 Knowledge Base 15%

在面试中,常见的错误是面试官给出问题后,候选人就开始怼各种关键词,什么Load Balancer,Memcache,NodeJS,MongoDB,MySQL……

怎么把控好一场完美的系统分析面试,可以移步系统架构设计2021 版,FLAG高级架构工程师教你做好系统设计。

最后,系统设计是表现你创造力的地方,充分的准备加足够的项目实操经验,面试时确保你了解该问题,并且直接、清晰地向面试官表达你的想法,你的表现肯定会得到面试官的认可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值