Skip to content

Latest commit

 

History

History
108 lines (64 loc) · 6.64 KB

SystemDesign.md

File metadata and controls

108 lines (64 loc) · 6.64 KB

System Design

System Design 已经逐渐成了面试标配了,这个问题有很多种问法,比如外企会有专门的System Design 面,从架构,技术选型。API,到DB,表结构 等持续1小时左右的面试,当前阶段国内有些公司也会面,但大多没那么严谨,可能就几分钟。不过这已经越来越成为面试必备项了,所以作为单独页面拆分开来准备也是有必要的

  • 设计一个物流数据监测系统

  • Design a Event Driven Framework

  • Design a Logging System

  • Design a Rate Limiter

  • Design a Weibo

  • 设计一个延迟在10ms以内,QPS 在10000的服务,需要考虑哪些点,或者怎么设计(技术选型等)(得物)

    • 这种题一般问简历上没有实际高并发经验的人(比如我 Orz),属于抛个方向看看你有没有做过这方面研究,属于答得好不加分,答不上减分的题。最好分治,说一些基本的理解,表示至少你知道一些基本的东西
    • 缓存(多读少写场景)
    • 异步(系统解耦,消息队列)
    • 数据库(索引,分库分表,读写分离)
    • high-concurrency-design.md
  • 设计一个服务,用于实时统计一个直播间的在线人数(技术选型,实现等)(Shopee)

  • 设计一个点赞系统(字节跳动)

    • 这个题当时拿到就开始讲,其实这种做法是不对的,点赞千千万,有对朋友圈的点赞,有对文章的点赞,视频的点赞,需要先问清楚点赞的对象(DB设计的基础)
    • 是否需要查看点赞的具体人数,点赞是否能取消(这可以决定你的存储如何设计,如:如果不需要记录由谁点赞,可以做成批处理,减少对DB的访问,pre-aggregate)
    • 强调使用 Eventually Consistence(缓存,batch update)
    • 如果需要看点赞详情,可以取消赞(如:朋友圈点赞)
    • 如果只需要统计数目,不能取消赞(如:直播场景等)
  • 如果当前系统访问量(比如下单量)扩展10倍,有哪些方面需要考量(Shopee)

  • 如何设计一个秒杀系统(小红书)

  • 权限管理是如何设计的(项目相关,也可以作为一个单独的System Design 题)(星环)

  • 一个前端页面,需要加载一个大的数据集(横坐标为时间,纵坐标为数据),还需要支持缩放,点击查看元数据等功能,可从前后端角度讲讲怎么设计和优化(开放题)(Nvidia)

  • 设计一个ATM系统(微软)

    • 需求:设计一个ATM系统,包括存/取款,跨行转账等功能
    • ATM
      • [ATMInfo, State]
      • autherUser()
    • User
      • [UserInfo, availableBalance, totalBalance] (金额信息也可以单独成 Account对象,或者方法调用)
      • makeTransaction() --> 统一的事务操作对象(查询 / 存入 / 提现 / 转账)
      • 注:此处可以讨巧,问一个用户是否应该只有一张卡,如果是,设计可以省一些事情
    • Card
      • [No, CardInfo, pin]
    • Transation (由BankService 调用 ,不同Bank具体实现)
      • 所有操作(查询 / 存入 / 提现 / 转账)均继承自Transaction (Type / Status)
    • ATM — An Object-Oriented Design (OOP设计思路)
    • Design an ATM
    • ATM LOW LEVEL DESIGN (YouTube low level design of OOP)
    • Database design: Calculating the Account Balance
  • 设计一个生产者-消费者模型(Nvidia)

    • 需求:
      1. 每个时钟生产者会产生记录,形式为数据区间,如[0,2](为了简单,可认为各个数据区间没有交集);
      2. 每个时钟消费者也会消费数据,可能是[0,5],如果和生产者的区间有交集,比如[3,6],这条记录计算消费掉;
      3. 输出未被消费的数据
  • 设计一个物流系统

  • Design a ID generator

  • Design a key-value storage

  • Design a Tiny URL