0 概论

系统设计面试

1 系统设计面试官想要考察什么?

  1. 系统架构设计的能力

  2. 知识的广度与深度

  3. 综合能力 (开放性题目, 沟通能力, 系统抽象能力, 逻辑思维能力)

定级别是通过系统设计来的

2 如何准备系统设计

  1. 知识储备

可用性, 可扩展性, 性能, 安全性, 大数据量, 高并发, 分布式设计

  1. 多刷题和模拟面试

采用模拟面试的方式, 练习常见的系统设计题

  1. 保持好奇心

多思考功能是怎么实现的

3 4S分析法与课程介绍

有两点非常重要, 一点是技术问题, 一点说话要有条理, 不能想到什么说什么

1 Scenario 场景: 需要设计哪些功能, 设计得多牛

ASK: Features/QPS/DAU/Interfaces

  • 询问面试官:

    • 需要设计哪些功能?

    • 需要承受多大的访问量? QPS?

2 Service 服务: 将大服务拆分成为小服务

Split/Application/Module

3 Storage 存储: 数据如何存储和访问

系统 = 服务 + 数据存储

  • 为每一个 Service 选择存储结构

    • 数据库系统 Database

      • 关系型: MySQL

      • 非关系型: Redis, ElasticSearch, HBase, MongoDB

    • 文件系统 File System

      • 图片, 视频
    • 缓存系统 Cache

      • 不需要支持持久化的数据

      • 效率高, 内存级别的访问速度

  • Schema 细化表结构

常用数据存储系统 QPS:

  • MySQL / PosgreSQL 等 SQL 数据库的性能: 1k

  • MongoDB / Cassandra 等硬盘型 NoSQL 数据库性能: 10k QPS

  • Redis / Memcached 等内存型 NoSQL 数据库性能: 100k ~ 1M

  • 以上数据根据机器性能和硬盘数量及硬盘读写速度会有区别

4 Scale: 升级: 解决缺陷, 处理可能遇到的问题

Sharding/Optimize/Special Case

  • 第一步: Optimize

    • 解决设计缺陷

    • 更多功能设计

    • 一些特殊情况

  • 第二部 Maintenance

    • 鲁棒性 Robust

      • 如果有一台服务器挂了/数据库挂了怎么办
    • 扩展性

      • 如果有流量暴增, 如何扩展

4 如何准备大厂面试 & 面试经验分享

  • 花时间看面试题, 足够的重视

  • 不能闭门造车, 多看别人的面试经验 (基本每个人的题目都差不多)

  • 多刷题

  • 多尝试, 多面试, 大胆尝试积累实战经验

  • 多总结, 多反思, 自己的差距和不足点

  • 有针对性的去准备, 每个大厂的风格不一样

5 系统设计面试的评分标准

  • 可行解 25%

  • 特定问题 20%

  • 分析问题 25%

  • 权衡 15%

  • 知识储备 15%

系统设计没有标准答案, 给出一个可行解即可, 给出多个可行解那么分数会更高.

posted @ 2023-02-04 10:55  kohn  阅读(36)  评论(0)    收藏  举报