在这篇文章中,我们将讨论以下话题:

  • 技术面试推荐材料
  • 云服务监控基础设施速查表
  • 5 大缓存策略
  • Uber 技术栈
  • 你知道多少消息队列

技术面试推荐材料

编码

  • Leetcode
  • Cracking the coding interview 书
  • Neetcode

系统设计面试

  • System Design Interview Book 1, 2 by Alex Xu, Sahn Lam
  • Grokking the system design by Design Guru
  • Design Data-intensive Application 书

行为面试

  • Tech Interview Handbook (Github repo)
  • A Life Engineered (YT)
  • STAR method(通用方法)

OOD 面试

  • Interviewready
  • OOD by educative
  • Head First Design Patterns 书

模拟面试

  • Interviewingio
  • Pramp
  • Meetapro

申请工作

  • Linkedin
  • Monster
  • Indeed

问题:你最喜欢的面试准备材料是什么?

云监控基础设施速查表

这份速查表提供了三大云提供商和开源/第三方工具之间关键监控元素的简洁而全面的对比。

让我们深入探讨涵盖的基本监控方面:

  • 数据收集:从不同来源收集信息以增强决策
  • 数据存储:安全存储和管理数据以供未来分析和参考
  • 数据分析:从数据中提取有价值的见解以驱动明智行动
  • 警报:接收关于关键事件或异常的实时通知
  • 可视化:以视觉可理解格式呈现数据以便更好理解
  • 报告和合规:生成报告并确保遵守监管标准
  • 自动化:通过自动化工作流简化流程和任务
  • 集成:在不同系统或工具之间无缝连接和交换数据
  • 反馈循环:基于反馈和性能分析不断完善策略

问题:你如何在你的领域优先利用这些基本监控方面以实现更好结果和效率?

5 种缓存策略

当我们向架构引入缓存时,缓存和数据库之间的同步变得不可避免。

让我们看看 5 种常见策略如何保持数据同步。

读策略

  • Cache Aside(旁路缓存)
  • Read Through(读穿透)

写策略

  • Write Around(写绕过)
  • Write Back(写回)
  • Write Through(写穿透)

缓存策略通常组合使用。例如,write-around 通常与 cache-aside 一起使用以确保缓存是最新的。

问题:你使用过什么策略?

Uber 技术栈

这篇文章基于许多 Uber 工程博客和开源项目的研究。

  • Web 前端:Uber 构建 Fusion.js 作为现代 React 框架创建稳健 Web 应用。他们还开发 visualization.js 用于地理空间可视化场景
  • 移动端:Uber 构建 RIB 跨平台与 VIPER 架构而不是 MVC。此架构可与不同语言配合:iOS 用 Swift,Android 用 Java
  • 服务网格:Uber 构建 Uber Gateway 作为 NGINX 上的动态配置。服务使用 gRPC 和 QUIC 进行客户端 - 服务器通信,使用 Apache Thrift 进行 API 定义
  • 服务端:Uber 构建名为 Flipr(后改为 UCDP)的统一配置存储,H3 作为位置索引存储库。他们使用 Spring Boot 用于 Java 服务,uAct 用于事件驱动架构,Cadence 用于异步工作流编排
  • 数据库端:OLTP 主要使用强一致 DocStore,采用 MySQL 和 PostgreSQL,以及 RocksDB 数据库引擎
  • 大数据:通过 Hadoop 家族管理。Hudi 和 Parquet 用作文件格式,Alluxio 用作缓存。时间序列数据存储在 Pinot 和 AresDB 中
  • 数据处理:Hive、Spark 和开源数据摄取框架 Marmaray。消息和流媒体中间件包括 Apache Kafka 和 Apache Flink
  • DevOps 端:Uber 利用 Monorepo,简化开发环境称为 devpod。持续交付通过 Netflix Spinnaker 管理,指标发射到 uMetric,uMonitor 警报,一致可观测性数据库 M3

消息队列类型

像邮局一样,消息队列帮助计算机程序以有组织方式通信。想象小数字信封被传递以保持一切正常。选择消息队列时要考虑几个关键特性:

  • 速度:消息发送和接收多快
  • 可扩展性:能否随更多消息增长
  • 可靠性:是否确保消息不丢失
  • 耐久性:能否随时间安全保存消息
  • 易用性:设置和管理是否简单
  • 生态系统:是否有有用工具可用
  • 集成:能否与其他软件良好配合
  • 协议支持:能说什么语言

尝试消息队列并练习发送和接收消息直到你舒服。选择一个简单的如 Kafka 并实验发送和接收消息。当你更舒服时阅读书籍或参加在线课程。构建小项目并向已经经历过的人学习。很快,你将了解关于消息队列的一切。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP77: My Recommended Materials for Cracking Your Next Technical Interview

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。