如何设计一个高性能/高并发/高可用/高可靠/可扩展的系统?

818469a90154b56ed79727e94754c116.png

作者:阿秀

校招八股文学习网站:https://interviewguide.cn

这是阿秀的第「293」篇原创

小伙伴们大家好,我是阿秀。

面试者和求职者的关系就好像是矛与盾,一个拼命堆自己的防装,反伤刺甲、魔女斗篷都往身上穿;另一个则拼命堆自己的攻装,碎星锤、虚无法杖也招呼上,这一点在面试这一场景下体现的淋漓尽致。

最近这段时间正是校招面试的高峰期,很多人的面试行程的安排都很满,经常是一天几个笔试和面试穿插着交替进行,很多人发现现在不怎么问八股文了,而是开始问一些系统设计或者情景题居多了,比较经典的就是"如何设计一个高并发/高QPS/高存储的系统"或者直接问你在设计一个高并发系统中需要注意哪些问题等。

有位在学习圈里的学弟就总是遇到这种问题,分享一下。

1、学弟的提问

秀哥好!

最近投了一些简历也面了一些企业,得到了一些面试机会,得益于自己准备的早,八股文和手撕算法都OK,都能顺利搞定,问题不大。

除此之外,也会问我一些项目,严重的,甚至几乎每一面的面试官都会问项目,会问我重点亮点让我介绍,这些都可以提前准备准备,我也都能够回答。

但有一点我就很难顶,很多时候他还会问我一些他当时想到的场景应用题/线上遇到的问题,比如他会给我预设一个场景,假如你在你是一个XXX设计师,你会如何设计某个功能?

或者干脆问我面对/高并发高QPS/多集群等场景下会发生怎么样的问题?

这类问题我大多都毫无思路,好几次都只能直接放弃,直言说我不会。

我感觉因为我做的项目其实也是边学习边做,做的过程中也很难遇到面试官说的那些复杂问题,我也当时考虑不到一些边界条件,所以面对这类问题经常束手无策😭难哭了

秀哥有什么建议吗?谢谢秀哥!

2、阿秀的回答

老实说,这个无解。

这种问题一般都很活,灵活的活,面试官可能根据你简历上的一些描述然后就随机问起来了,问的场景或者类型也不定,可能是他工作中遇到了然后又解决的一些难题,也有可能是他看到的一些技术分享中的场景题。

这种题目这种对于校招生来说有点难了,因为很多工作党都没什么机会接触一些高并发/高QPS的场景,更不要提应届生了。

毫不客气的说一句大多数人对于高并发这些概念的印象都是停留在书本上,因为压根没有机会去实践,哪有几十上百万的真实并发场景给你练手用啊。。。

这类问题需要有很深的基本功,我以前也被问到类似的问题,当时自己是看的一个腾讯官方技术公众号的文章,这篇文章讲了很多设计高并发系统会用到技术,很多技术我当时都是第一次听说,当时看了就惊为天人。

下图为这篇文章的大纲图:

31d06aa52aba80e44ab4a254c8337bd4.png

比如序列化无锁化这些技术,当时第一次看到真的觉得惊为天人,因为在当时,自己还停留在缓存异步并发分片等策略上,也没听过和接触过这些技术。

就拿缓存来说,它从缓存分类又逐渐展开,见下图:

372ac6d6bcdcd87317b505897d8b776c.png

以下图的企鹅电竞的一个多级缓存应用,根据我们的现网统计,在第一级缓存的命中率就已经达 94%,穿透到 grocery 的请求量很小。

7c1b4ee8f4d1e5fafa516effbdc8dc40.png

以及缓存的模式,比如旁路缓存

faa1bd956c14728c5355666559cc27eb.jpeg
Cache-Aside结构图

基于缓存的一些回收策略:

  • 基于时间

  • 基于空间

  • 基于容量

  • 基于引用

具体内容见下图

4b7e37bb2aba78c58bc1895dd6e901cc.png

这里我把链接放一下,可以自己去看,我已经收录到自己开发的InterviewGuide网站上了:https://top.interviewguide.cn/issue/736

这道题也已经被考了 6 次了,最近一次考察时间是 2023年 7 月 27 日

29820a9f75f0f38562406bf7a04700f3.png

这里要画个重点,我要告诉你的是,这篇文章中的技术很多都很深,不要说校招生,就连很多工作一两年的都没用过或者了解到,所以如果你在面试中被问到”如何设计一个高性能/高并发/高可用/高可靠/可扩展的系统?“的话,不要把这篇文章中全部的技术都说出去了,建议从并发化、异步化、缓存、存储这几个方面来聊即可

如果追问就再聊聊分片、队列以及零拷贝等技术,其余的就不要说了,你说得越多给自己挖坑的可能性就越大,甚至最后被追问到哑口无言。

还有,即使是这篇文章也只是起了个引子,每个点也都可以再细分为一个大的领域,比如存储就是最典型的例子,很多公司甚至招专门的数据库开发或者性能优化工程师来专攻存储这一个点,比如阿里云和华为云数据库部门等。

所以少年,好好学吧,继续学吧,池子深着呢

81a1cb3ed956eabe8f870600c1d60577.png

阿秀2年来一直在做的一件事

这里也给自己的知识星球,也就是学习圈打个广告,坚持这件事情已经快2 年时间了,目前星球已经满2700人了,再过一段时间会迎来一波大的涨价

前年和去年分享的很多校招上岸经验也都是出自阿秀的学习圈中的往届上岸人,阿秀的学习圈中置顶帖的「知识图谱」和「精华区」(如下图)中有很多计算机大学本科&研究生学习以及校招的内容和问题,多看看这些能够帮你走的更稳、更顺、更平坦。

后续也会在自己组建的阿秀的学习圈中分享一些社招跳槽找工作的经验,都是自己一路走过来的经验。

e537b1a0461c9df79c134d971494b9a3.png星球里的精华区、知识图谱以及资源沉淀

一个人踽踽独行不如结伴而行,以后会继续在星球笔耕不辍,输出一些有价值的内容13049f55f5e9029c08c59f4408498f6a.png

阿秀也是自己开发了一个网站,能够定向查看某些公司的某些岗位面试真题,比如我想查一下行业为互联网,公司为字节跳动,考察岗位为后端,考察时间为最近一年之类的面试题有哪些?

c5b15aa9904c8a1d443198ba3d3a3fff.png
阿秀自己独立完成的全栈项目

InterviewGuide大厂面试真题解析网站:https://top.interviewguide.cn/

后面也会继续开发其余星球成员专属功能,比如模拟面试以及题目收藏、甚至是真题下载打印功能等。

欢迎点击左下角阅读原文详细了解,这可能是你求职路上性价比最高的一次点击!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/86471.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java获取到heapdump文件后,如何快速分析?

简介 在之前的OOM问题复盘之后,本周,又一Java服务出现了内存问题,这次问题不严重,只会触发堆内存占用高报警,没有触发OOM,但好在之前的复盘中总结了dump脚本,会在堆占用高时自动执行jstack与jm…

MD-MTSP:星雀优化算法NOA求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、星雀优化算法NOA 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出,该算法模拟星雀的两种行为,即:在夏秋季节收集并储存食物,在春冬季节搜索食物的存储位置。星雀优化算法(Nutcrack…

WPS Office 代码执行漏洞(QVD-2023-17241)

目录 本地利用弹计算器(自娱自乐) 原理分析 msf的利用 1.修改win11中的hosts文件 2.MSF生成一个C#后门 3.shellcode替换 4.在创建html的目录,用python打开http服务来捕获请求 5.开启监听 6.在win11中点击poc文档,可以看到k…

LeetCode算法递归类—验证二叉搜索树

目录 98. 验证二叉搜索树 题解: 代码: 运行结果:​编辑 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含…

​LeetCode解法汇总1572. 矩阵对角线元素的和

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个正…

nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件

特性: 1、支持任意深度的chm文件解析 2、解析后内容结构转换为tree数据呈现 3、点击树节点可以在html实时查看数据 4、不依赖任何浏览器端插件,兼容性较好 nodejs端核心代码 const $g global.SG.$g, fs global.SG.fs, router global.SG.router, xl…

【资料分享】全志科技T507-H工业核心板规格书

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板,主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

聊聊51单片机

目录 1.介绍 2.发展 3.应用领域 4.发展前景 1.介绍 51单片机(AT89C51)是一种常见的8位微控制器,属于Intel MCS-51系列。它是一种低功耗、高性能的单片机,广泛应用于嵌入式系统中。 51单片机具有很多特点和功能,例如…

漫话拥塞控制:BBR 是个单流模型

概要(便于检索主题):单流,多流收敛,probe buffer 挤压带宽,maxbw-filter wnd。 我曾经经常说 BBR 是个单流模型,而不是多流收敛模型,也做过不少评论,最近在复听 IETF 的大会,在 IET…

关于前端动态调试解密签名校验的分享

首先我们先来看一下,下面这张图是笔者近期测试遇到的问题,那就是程序每次生成请求都会生成signature的验签,该验签生成方式暂不可知,唯一知道的就是用一次就失效,这对测试的成本造成了很不好的影响,那么我们…

JAVA设计模式----原型设计模式

文章目录 一、简介二、实现方式三、原型模式的注意事项浅拷贝与深拷贝浅拷贝深拷贝一、简介 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Protot…

Golang函数以及函数和方法的区别

在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。…

【C++11】lambda表达式 | 包装器

文章目录 一.lambda表达式1.lambda表达式概念2.lambda表达式语法3.lambda表达式交换两个数4.lambda表达式底层原理 二.包装器1.function包装器①function包装器介绍②function包装器统一类型③function包装器的意义 2.bind包装器①bind包装器介绍②bind包装器绑定固定参数③bin…

构建Docker容器监控系统(Cadvisor +Prometheus+Grafana)

Cadvisor PrometheusGrafana 1.1、Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。 1.2、安装docker-ce [rootloc…

30.基于XML的声明式事务

基于XML的声明式事务 主要是使用XML去代替注解&#xff0c;来实现起到代替注解的作用&#xff0c;实际使用频率很低 将BookServiceImpl.java中的Transactional注解删除&#xff0c;确保用户余额充足 spring-tx-xml.xml <?xml version"1.0" encoding"UTF-8…

uniapp 获取 view 的宽度、高度以及上下左右左边界位置

<view class"cont-box"></view> /* 获取节点信息的对象 */ getElementRect() {const query uni.createSelectorQuery().in(this);query.select(".cont-box").boundingClientRect(res > {console.log(res);console.log(res.height); // 10…

算法基础之插入排序

1、插入排序基本思想 插入排序的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采用in-place排序&#xff08;即只需用到O(1)的额外空间的排序&#xff09;&a…

实现Jenkins自动发包配置

参考抖音&#xff1a;Java不良人 其中的视频演示代码 不推荐把jenkins端口一直开放&#xff0c;推荐使用时候放开&#xff08;版本不太新&#xff0c;避免漏洞攻击&#xff09; [rootVM-4-12-centos soft]# docker-compose -v Docker Compose version v2.19.1docker-compose.…

PHP8的跳转语句-PHP8知识详解

如果循环条件满足的时候&#xff0c;则程序会一直执行下去。如果需要强制跳出循环&#xff0c;则需要使用跳转语句来完成。PHP8的跳转语句包括break语句、continue语句和goto语句。 1、break语句 break语句的作用是完全终止循环&#xff0c;包括while、do…while、for、switch…

物联网的定义、原理、示例、未来

什么是物联网? 物联网 (IoT) 是指由嵌入传感器、软件和网络连接的物理设备、车辆、电器和其他物理对象组成的网络&#xff0c;允许它们收集和共享数据。这些设备(也称为“智能对象”)的范围可以从简单的“智能家居”设备(如智能恒温器)到可穿戴设备(如智能手表和支持RFID的服…