后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
4026 人已学习
课程目录
已更新 37 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (14讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?
15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?
16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程
17 | 设计模式应用:编程框架中的设计模式
18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?
19 | 组件设计原则:组件的边界在哪里?
20 | 领域驱动设计:35岁的程序员应该写什么样的代码?
答疑丨对于设计模式而言,场景到底有多重要?
架构的核心原理 (13讲)
21丨分布式架构:如何应对高并发的用户请求
22 | 缓存架构:如何减少不必要的计算?
23 | 异步架构:如何避免互相依赖的系统间耦合?
24 | 负载均衡架构:如何用10行代码实现一个负载均衡服务?
25 | 数据存储架构:如何改善系统的数据存储能力?
26 | 搜索引擎架构:如何瞬间完成海量数据检索?
27 | 微服务架构:微服务究竟是灵丹还是毒药?
28 | 高性能架构:除了代码,你还可以在哪些地方优化性能?
29 | 高可用架构:我们为什么感觉不到淘宝应用升级时的停机?
30 | 安全性架构:为什么说用户密码泄漏是程序员的锅?
31 | 大数据架构:大数据技术架构的思想和原理是什么?
32 | AI与物联网架构:从智能引擎到物联网平台
33 | 区块链技术架构:区块链到底能做什么?
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

28 | 高性能架构:除了代码,你还可以在哪些地方优化性能?

李智慧 2020-01-27
系统性能是互联网应用最核心的非功能性架构目标,系统因为高并发访问引起的首要问题就是性能问题:高并发访问的情况下,系统因为资源不足,处理每个请求的时间都会变慢,看起来就是性能变差。
因此,性能优化是互联网架构师的核心职责之一,通常我们想到性能优化,首先想到的就是优化代码。事实上,一个系统是由很多方面组成的,所有这些方面都可以进行优化,就是我们接下来要讲的 7 层优化。
进行性能优化的一个首要前提是,我们必须知道系统当前的性能状况,然后才能进行性能优化。而了解系统性能状况必须通过性能测试,我们先看下性能测试。

性能指标

所谓性能测试,就是模拟用户请求,对系统施加高并发的访问压力,观察系统的性能指标。系统性能指标主要有响应时间、并发数、吞吐量和性能计数器。
所谓响应时间,是指从发出请求开始到收到最后响应数据所需要的时间。响应时间是系统最重要的性能指标,最直接地反映了系统的快慢。
并发数是指系统同时处理的请求数,这个数字反映了系统的负载压力情况。性能测试的时候,通常在性能压测工具中,用多线程模拟并发用户请求,每个线程模拟一个用户请求,这个线程数就是性能指标中的并发数。
吞吐量是指单位时间内系统处理请求的数量,体现的是系统的处理能力。我们一般用每秒 HTTP 请求数 HPS、每秒事务数 TPS、每秒查询数 QPS 这样的一些指标来衡量。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(4)

  • 虢國技醬
    看老师的文章思路和步骤都理解,但一到实战就束手无策
    2020-01-30
    1
    2
  • 许童童
    老师新年好

    作者回复: 新年好🌹

    2020-01-27
    2
  • Citizen Z
    多线程竞争资源,就会有用锁场景,用简单的互斥锁就会有膨胀的隐患,持锁时,高并发环境其他线程会不断积压等待,这时候系统是在空等的,甚至会将这种开销传导至整个机器。
    这时候就比较考验用锁场景的识别和使用了。一般思路是减少锁粒度,或有限次数尝试获锁等方法进行优化,比较好的思路就是通过一些设计来避免竞争(如利用队列)或使用乐观锁。

    代码性能优化的出发点有二,一是优化设计,提高资源利用率,二是识别出程序中的垃圾代码(比如数据库读整表 1w 行记录,在内存里分页这种骚操作),降低浪费

    作者回复: 👍

    2020-02-02
  • 你的美
    老师新年好!
    老师,同学们新年快乐!

    作者回复: 新年快乐

    2020-01-29
收起评论
4
返回
顶部