高并发系统设计40问
唐扬
美图公司技术专家
立即订阅
9202 人已学习
课程目录
已更新 38 讲 / 共 40 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么你要学习高并发系统设计?
免费
基础篇 (6讲)
01 | 高并发系统:它的通用设计方法是什么?
02 | 架构分层:我们为什么一定要这么做?
免费
03 | 系统设计目标(一):如何提升系统性能?
04 | 系统设计目标(二):系统怎样做到高可用?
05 | 系统设计目标(三):如何让系统易于扩展?
06 | 面试现场第一期:当问到组件实现原理时,面试官是在刁难你吗?
演进篇 · 数据库篇 (5讲)
07 | 池化技术:如何减少频繁创建数据库连接的性能损耗?
08 | 数据库优化方案(一):查询请求增加时,如何做主从分离?
09 | 数据库优化方案(二):写入数据量增加时,如何实现分库分表?
10 | 发号器:如何保证分库分表后ID的全局唯一性?
11 | NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?
演进篇 · 缓存篇 (6讲)
12 | 缓存:数据库成为瓶颈后,动态数据的查询要如何加速?
13 | 缓存的使用姿势(一):如何选择缓存的读写策略?
14 | 缓存的使用姿势(二):缓存如何做到高可用?
15 | 缓存的使用姿势(三):缓存穿透了怎么办?
16 | CDN:静态资源如何加速?
加餐 | 数据的迁移应该如何做?
演进篇 · 消息队列篇 (6讲)
17 | 消息队列:秒杀时如何处理每秒上万次的下单请求?
18 | 消息投递:如何保证消息仅仅被消费一次?
19 | 消息队列:如何降低消息队列系统中消息的延迟?
20 | 面试现场第二期:当问到项目经历时,面试官究竟想要了解什么?
用户故事 | 从“心”出发,我还有无数个可能
期中测试 | 10道高并发系统设计题目自测
演进篇 · 分布式服务篇 (9讲)
21 | 系统架构:每秒1万次请求的系统要做服务化拆分吗?
22 | 微服务架构:微服务化后,系统架构要如何改造?
23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?
24 | 注册中心:分布式系统如何寻址?
25 | 分布式Trace:横跨几十个分布式组件的慢请求要如何排查?
26 | 负载均衡:怎样提升系统的横向扩展能力?
27 | API网关:系统的门面要如何做呢?
28 | 多机房部署:跨地域的分布式系统如何做?
29 | Service Mesh:如何屏蔽服务化系统的服务治理细节?
演进篇 · 维护篇 (5讲)
30 | 给系统加上眼睛:服务端监控要怎么做?
31 | 应用性能管理:用户的使用体验应该如何监控?
32 | 压力测试:怎样设计全链路压力测试平台?
33 | 配置管理:成千上万的配置项要如何管理?
34 | 降级熔断:如何屏蔽非核心系统故障的影响?
高并发系统设计40问
登录|注册

06 | 面试现场第一期:当问到组件实现原理时,面试官是在刁难你吗?

唐扬 2019-09-30
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《高并发系统设计40问》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(29)

  • 小喵喵
    好多面试官喜欢数据来说话,比如做高并发系统时,面试官问,你做的高并发系统TPS是多少,QPS又是多少,日活跃是多少?负载用什么来做?为什么要做负载,每一台机器的配置是如何?(核数?CPU?内存?硬盘等?)对于这些数据化问题,心里没有底,随便回答一个数据,面试官一下子就看出来了,知道你在忽悠,没有真正做过高并发系统。请老师举例一些量化(数据化)的面试问题,并且如何回答?

    作者回复: 这就要你在平时的时候多了解维护系统的数据了,数据对于性能优化很重要

    2019-09-30
    3
    8
  • 仙道
    咱们平时的工作大多数都是CRUD,如何在面试中介绍项目经验

    作者回复: 剧透一下,在面试现场的第二期会讲到哈~

    2019-10-02
    1
    7
  • 邋遢的流浪剑客
    无论是为了面试还是个人成长,基础知识都很重要,其实开源组件会用是很简单的,真正涉及到开源组件的底层原理离不开数据结构、计算机网络、操作系统这些基础知识,这些知识可不是一朝一夕就能搞定的,现实情况是很多程序员往往忽略了这方面的学习

    作者回复: 是的,没错~

    2019-09-30
    1
    6
  • 👽
    首先谈谈我对HashMap的理解。
    首先,实现原理:基于数组和链表,JDK8以后也会在特定情况下转为红黑树。
    以对象的Hash值确定数据所在下标,如果下标里已经有数据,则用链表存储。在链表超过8时转化为红黑树。
    转红黑树的目的是:红黑树的查找时间复杂度是logn,而链表是n,红黑树保证了在同一个下标下数据元素过多时候的高性能。
    为什么在8之后才转红黑树:因为转红黑树,以及维护红黑树的左旋右旋需要额外的性能开销。而在数据量较小的时候,优化时间复杂度意义不明显。(例如:二分查找在数据量小的时候,性能提升不大)自认为这一条回答也算是红黑树和链表的优劣势。
    HashMap不是线程安全的,所以有ConcurrentHashMap。
    ConcurrentHashMap的线程安全,是使用了加锁的方式。
    1.8之后,对加锁的数据粒度更加细化。每次只锁一个node。所以1.8以后的ConcurrentHashMap在并发下性能大幅度提高。

    关于redis的问题,说实话,我觉得跳表 和 红黑树,我觉得都是可以的。因为核心目的是高性能,这两个在查找的时候性能都不错。硬要说的话红黑树性能更高(看测评是更高,理论上讲实际差距不是特别大),但是同时也更耗费内存(因为跳表的内存消耗是可控的)。而现在2019年这个时间点,为了用户体验,更多的还是以空间换时间,所以,我个人认为,红黑树可能更合适。

    然后是想请教的面试问题:
    1,请问老师如何看待基础与技能广度的重要性对比?就是说,主流的分布式框架我掌握的并不全,但是我觉得我数据结构,算法,Java这些的基础比同期其他人都要好,我认为我可以很快掌握公司所需的技术。您会接受我这样的人嘛?
    2,现在的公司,面试动不动就需要你有高并发经验。但是,没有高并发的经验就无法进入有高并发场景的公司。(一个先有鸡还是先有蛋的问题)关于这种现象,您怎么看?有没有什么建议?

    作者回复: 1. 其实我会看工作年限,如果您工作了五年之后,我觉得基础知识更重要,技能广度可以慢慢培养;如果工作了七八年了,还是需要有一些技术的视野的
    2. 要多思考,多看出,了解高并发的基础知识,然后考虑如果自己的业务到了更高的量级要如何解决

    2019-10-14
    5
  • longslee
    老师咱还真遇见过“刁难”的哈哈,比如Java的那几个HashMap问题,我觉得我都答了,他还问我“你是不是背的啊?”(😫不知道是何用意)。 另,非常希望老师站在面试官的角度,对我这种只有传统项目经验,没有实际高并发实战但平时也略有学习(比如学习您的专栏😊)的人,提出怎样的问题;针对面试中要求的一个中间件,我确实没有用过,面试官优先觉得这人不行,还是能根据所答基础知识推导出以后学习这项技能没问题呢?

    作者回复: 如果是我的话,我会更关注基础知识,你可以没有用过,但是基本的原理要了解了~

    2019-10-04
    1
    2
  • 若尘2B
    老师,您上面说的Memcache案例直击到了痛点。但是引发出另一个问题,您那次的案例是基于出现问题之前去深挖了组建的设计、原理还是问题导向。那次案例时隔多长,您现在记忆犹新。我现在的矛盾深挖原理都爱是基于问题导向,在处理阶段可以掌握那些组建的使用和问题处理,但是时间一久就容易忘记,虽然也会写使用的经验,总结,爬坑日志,但问题不再出现之后,最多2月基本忘的干净。我们该怎么管理自己掌握的技能,在面对技术迭代更新都如此之快的时代我们要怎样才不会被淘汰?

    作者回复: 问题导向是应该的,遇到问题要深挖,找到根本原因,其中肯定会了解一些原理。但是问题毕竟不多,可以多关注一些你用到组件的基本原理

    2019-10-04
    1
    2
  • ning先森
    一下读完了,自认欠缺很多
    2019-09-30
    2
  • 小喵喵
    请老师举几个案例分析一下,工程师和架构师是如何做自我介绍的?

    作者回复: 倒也不分工程师和架构师,只是在面试介绍项目经历的时候可以多突出你的贡献,比如你解决了什么问题,如何优化了性能,设计了那些方案,突出做的事情的难点,以及你的解决思路。我可以在后面面试现场里面讲讲这个:)

    2019-09-30
    1
    2
  • 吃饭饭
    感觉自己有点笨了,老师举的案例我没有看明白是哪里的问题。问题是:存储用户认证信息的缓存命中率极低,只有 20% 发现,老师发现 slab class5 占用了 2G 内存中的 1.9G ,但是用户认证信息用的是 slab class6。既然单独的空间都是 2G ,class5 的占用跟 class6 有什么关系,class6 的空间很充足,为什么还是会自动剔除,难道这里自动过期吗,求解答?

    作者回复: 是说slab class 5 占用了绝大多数的空间,那么slab class 6最多只能分配到100M,可是我们的缓存的用户认证信息的数据量远大于100M,而认证信息的数据大小又大于class 5的大小,没法存储到slab class 5里面,所以就会产生剔除了

    2019-10-08
    1
  • 约书亚
    由于不懂memcached所以案例没看懂。
    从描述上看,slab class没有足够空间,会查找更大的,但没提什么时候会剔除缓存,剔除哪些,猜想是剔除相同slab class的?
    前面说单节点2G用了300M,后面又说slab class 5占了2G中的1.9G,莫非此2G非彼2G?
    看起来像是内存不够用导致频繁剔除缓存,只不过memcached的机制会剔除相同slab class造成了这种现象?

    作者回复: 是剔除相同slab class下的。例子里的的意思是一共分配了2g的空间,但是有1.9g给了slab class 5,剩余100m给了其他的slab class,那么300m的意思是slab class 5的1.9g只用了200m,其他的slab class的100m都占满了,这样加起来是300m

    2019-09-30
    2
    1
  • A:春哥大魔王
    sortedset使用红黑树好还是跳表好

    作者回复: 跳表……

    2019-09-30
    3
    1
  • 高源
    了解原理是解决问题一方面,我想问老师如何提高利用算法解决问题能力,工作忙刷题又坚持不下去,都是靠自己来学习提高。老师有什么好的方法吗😊

    作者回复: 多用一些碎片的时间,比如上下班的时间~

    2019-09-30
    1
    1
  • 黄展志
    唐老师,想问一下,运维需要了解像redis,memcached,mysql,zk,ceph,hadoop,elk,zabbix,分布式一致性算法等等众多组件的实现原理吗?

    作者回复: 技多不压身~

    2019-12-11
  • 丁丁历险记
    redis 源码里面有个sort.c 不到600行,管他懂不懂,可以读一下试试。

    zsl跳势 区间断差找更快。 实现简单,构建策略灵活(响应速度与开销上方便权衡)
    再多说一句,sortedset 可不止是跳表, 这里可以继续挖坑。

    作者回复: 赞👍

    2019-12-02
  • Panda
    知其然知其所以然 才是真正的工程师
    2019-11-29
  • woshicai
    这方面确实薄弱,平时工作时间一般不会花在组件实现的原理上,后面要在工作之外补上这个薄弱点。
    2019-11-24
  • 雷霹雳的爸爸
    其实一切面试时候的问题,要么是真的不知道,要么就是知道点但是不扎实,多学习多准备,我觉得一切技巧...不如勤来补拙,熟来生巧

    不过redis跳表那个,确实我也喜欢跟java联系起来一起问,主要是知识面和只是联系能力的一个试探,你猛一下让我把跳表讲清楚了,确实也难,有些结论可能确实值得记住,比如跳表和红黑树的比较,在于其并发优势,不过那接着问题就来了,既然redis主要是个单线程模型,那这个跳表的选择又是因何而来呢?擦,这个还真是忽然想到的
    2019-11-05
  • 次声波~~
    我最近刚开始当面试官,其实我觉得当面试官也很难...在有限的时间内真的很难看出来面试者是不是一个好的coder,能否高效写出逻辑清晰的代码。现在网上面试题那么多,多准备准备基本上java 和数据结构的题都能答得无懈可击。请问您一般是怎么招人的啊?

    作者回复: 1. 多问原理
    2. 考察解决问题的能力,比如你遇到什么问题,问问解决的思路
    3. 当场写代码

    2019-10-15
  • Dovelol
    老师好,想问下为什么会给slab class5分配1.9G,而其它加起来一共才100M呢,memecache内存分配策略是什么?最后是怎么解决的呢,修改配置吗?

    作者回复: 内存分配策略就是基于slab allocator,因为总共有2g内存,所以class5是1.9g,其他就是100m了

    最后拆分了一下,单独拆出一组缓存

    2019-10-14
  • Fourty Seven
    比如我想提高对redis集群高可用的理解,除了看官方文档和书或者博客外,有必要自己搭建集群然后模拟单点故障看是否可以转移吗?

    作者回复: 当然了,理论实践结合嘛

    2019-10-12
收起评论
29
返回
顶部