《System Design Interview》作者 Alex Xu 与前 Uber 面试官 Scott Shi 围绕系统设计面试考核、职业瓶颈突破及独立创业展开深度对谈。 (0:00)
Alex Xu 透露传统出版社仅提供约 10% 版税,转战亚马逊自出版(Self-publishing)才跑通了支撑全职写作的商业飞轮。 (11:03)
大厂系统设计考核本质是“捕捉信号”(Signals),且 Strong Yes 拿到比例极低(通常仅 5%~10%),需要方案完备并展现核心领域的专家级 Deep Dive。 (60:00)
面试职级(Leveling)核心由过往履历项目匹配度决定,候选人在反问环节以弱势姿态请教“如何 lead 项目”容易触发降级翻车。 (34:45)
Detailed notes
## Background
本视频由主持人 Scott Shi 于 2021 年 5 月 11 日发布在 YouTube 频道。根据视频简介,这是一场 Scott 与畅销书《System Design Interview》作者 Alex Xu(徐云)展开的系统设计炉边漫谈(Fireside Chat),旨在围绕系统设计面试经验、备考策略与行业洞察进行深度交流。
## TL;DR
对话中,Scott Shi 与 Alex Xu 首先回顾了各自早年遭遇几十封拒信的求职窘境,以及 Alex 从 Twitter 离职、尝试量化交易最终全职自出版系统设计畅销书的历程。随后,两人以一线大厂资深面试官的视角,全面拆解了系统设计的评分卡机制、信号抓取要点,并以实时聊天系统为例深入推演了有状态与无状态服务切分、群聊读写扩散以及分布式 ID 生成等核心架构权衡。此外,他们还揭秘了大厂 Debrief 决策动态、职级定级逻辑与高质量技术输入渠道。最后,两人结合长期的技术从业观察,为年轻工程师提供了打破年龄焦虑与内卷、在长期职业马拉松中保持热爱与快乐的心态指引。
主持人 Scott Shi 邀请到了在 Amazon 上撰写畅销书《System Design Interview》(系统设计面试)的作者 Alex Xu(徐云)做客直播间,展开一场轻松的炉边漫谈(Fireside Chat)。两人都曾长期担任系统设计面试官,有着极为丰富的系统架构与实战面试经验。Alex 在开场中坦言,这是他第一次参加视频直播,感到既新鲜又有些紧张。回顾过往履历,Alex 已在硅谷湾区工作了十几年,先后供职于 Twitter、Zynga 和 Apple 等科技企业,目前正全职投入下一版系统设计书籍的撰写中。谈到写作初衷,Alex 表示系统设计往往被视作一道难以逾越的高门槛,他的核心理念就是“把最复杂的事情变简单”(make the most complicated things simple),借助通俗易懂的现实案例以及大量的架构图解,帮助工作年限不长或平时缺少大厂大规模分布式系统实战经验的工程师打破壁垒,顺利通过面试。
Scott 敏锐地指出,他与 Alex 之间有三处极大的共鸣:第一,两人都经历过密集的面试官培训,面试过海量候选人;第二,两人在最初找第一份全职工作时都走得异常艰辛与纠结;第三,两人如今都在全职经营自己的独立事业。当被问及最初的求职之路时,Alex 回顾了自己 2008 年初出茅庐时的窘境。当时正值全球金融危机爆发,他刚从学校毕业、初抵美国不久,对业界规则一无所知,而现实是大厂全面冻结招聘(Hiring Freeze)。Alex 面试了数十家公司,起初几乎全军覆没,简历被拒到麻木。直到在屡败屡战中面了几十家之后,某一天突然开了窍,“封印像被解开了一样”,终于摸清了哪些话该说、哪些话不该说,学会了系统性解题与应对沟通。自那之后面试便势如破竹,基本上面试的大部分公司都能稳拿 Offer。
```mermaid
flowchart TD
accTitle: Alex Xu 的全职写书转型路径
accDescr: 展示 Alex 从早期黄皮书试水、离开 Twitter 做量化交易,到最终全职自出版《System Design Interview》的历程。
subgraph Phase1["起步试水与离开大厂"]
A["2017年以前:匿名发布不足百页的黄皮书<br/>(赚取微薄话费,发现黑白印刷与篇幅短板)"]
B["2018/2019年:辞职离开 Twitter"]
A --> B
end
subgraph Phase2["量化试错与方向抉择"]
C["全职尝试期权量化交易<br/>(紧盯中国与美股资讯,早4点起晚睡,身心俱疲)"]
D["认知觉醒:量化不可持续<br/>抓住空档黄金期重写系统设计"]
B --> C --> D
end
subgraph Phase3["匠心打磨与自出版闭环"]
E["原本预期1周1章 -> 实际1个月1章<br/>全职断续编写1年有余"]
F["严苛把关:找前端与1-5年经验初倾工程师审读<br/>确保80%-90%理解度"]
G["亚马逊自出版大获成功<br/>实现个人生活与创作自由"]
D --> E --> F --> G
end
```
Scott 强烈认同 Alex 所说的“家庭支持”与“创业窗口期”。他提到在阅读硅谷著名孵化器 Y Combinator 创始人 Paul Graham 的文章时,曾读过一段极具争议性的论点——创业的黄金年龄窗口通常在 38 岁之前,一旦超过 38 岁,创始人往往因为精力下降、家庭顾虑增多而逐渐丧失激进的冒险精神。虽然该言论在创投圈备受争议,但某种程度上印证了创业确实存在心理与体能上的“时间窗口”。有趣的是,Scott 在国内与诸多一线风投(VC)交流时,却看到了截然相反的风向:部分国内顶级投资机构甚至明确表示“只投 40 岁以上的创业者”,因为国内投资人更看重 40 岁以上老兵更加成熟稳健的心智模型(Thought Process)、深厚的商业人脉网络与抗风险资源。海内外视角的差异,展现出创业赛道多样化的生存法则。
Scott 深入复盘了自己在 Uber 接受的面试官专业培训机制。Uber 面试官培训的首要原则是严防合规红线(Red Lines):任何涉及候选人性别偏好、个人私生活、身体条件等不可改变的个人特征问题,一律严禁提问,避免任何潜在的法律歧视风险。
其次,也是整个面试评估哲学的精髓所在:“一切皆关乎信号”(Everything is about signal)。在系统设计乃至算法面试中,面试官并不苛求候选人在短短半小时内给出一份毫无破绽的完美教科书解法。只要候选人的破题方向切中要害、推演逻辑与思维脉络严谨清晰,系统能够持续释放正向的技术信号(Technical Signal),即使细部存在瑕疵也是极大的加分项。相反,若候选人偏离主线自说自话,滔滔不绝地兜售不着边际的偏门概念,只能向面试官释放出“沟通不敏锐”、“抓不住核心业务需求”的负面减分信号。
除了技术信号外,文化匹配度信号(Culture Fit Signal)和态度信号(Attitude Signal)同样具有一票否决权。Scott 剖析了行为面试(Behavioral Interview)中最著名的经典陷阱题:“请讲一个你之前与队友发生冲突的经历”。有些候选人为了树立完美形象,张口就回答“我从未与同事发生过任何冲突”。在资深面试官眼中,这会立即触发警报级的红旗(Red Flag)——在复杂的团队协作中不可能不存在意见分歧,宣称“从无冲突”要么是在公然撒谎掩饰,要么说明此人极度迟钝无知,再不然就是团队内唯我独尊的“一言堂”独裁者。面试的本质是在有限的时间切片内,向考官精准投喂其所需的正面工程与协作信号,而非机械背题或单向输出。
这类带着弱势请教语气的提问无异于“当场给自己下绊子”,会让面试官直接在心里将你降级。Scott 指出,面试本质上是一个向雇主推销自我(sell yourself)的过程,候选人除非是初出茅庐的应届生(new grads),否则绝不能在提问时传递出底气不足的信息。正确的姿态应该是自信但绝不傲慢("I'm perfect for this job, but not arrogant"),展现出对复杂工程挑战的兴奋度:“我对岗位中涉及的更具挑战性的部分非常兴奋,我想了解你们团队在这方面遇到过哪些难点?”
当深入到具体的实现细节时,Alex 拆解了面试官针对 Stateful Service 必考的核心关卡:由于聊天服务器是有状态的集群,系统如何知道特定用户当前维持的长连接在哪台具体的机器上?这必然牵涉到服务发现(Service Discovery)机制。候选人可以引入诸如 ZooKeeper 或专门的连接发现服务与分布式缓存来维护路由寻址表。
随后,讨论聚焦于群聊(Group Chat)的数据建模(Schema Design)、主键与索引设计,Alex 提炼出两大极具系统设计通用价值的架构闪光点:
- **有序唯一 ID(Time-sortable Unique ID)**:聊天消息必须具备严格的时序性。生成方案通常选用类似 Twitter Snowflake 或 Cassandra TimeUUID 等内置时间戳的全局序列算法。但 Alex 敏锐指出,许多面试者容易陷入维护全局严格唯一序列号的思维陷阱——在超大规模并发下强行维护单一全局递增 ID 会带来极大的吞吐瓶颈与单点故障风险(Single Point of Failure)。优秀的破局点在于洞察业务边界:消息排序仅在特定的会话或群聊(Channel/Group)上下文内具有意义,因此序列号仅需在群维度内保证局部递增与唯一即可,大幅降低了发号器的扩展压力。
- **表分区策略(Table Partitioning)与访问模式(Access Pattern)匹配**:在群聊场景中,绝大多数查询模式都是“拉取指定 Channel 下按时间逆序排列的最新 N 条消息”。因此,合理的表设计应当以 `Channel ID` 作为分区键(Partition Key),将同一群聊的数据聚集在同一物理节点,而以时间有序的 `Message ID`(如 TimeUUID)作为排序键(Clustering Key),从而实现极速的连续范围扫描。
在消息投递模型(Fan-out)上,Alex 进行了经典权衡(trade-off)剖析。最直观的朴素模型是全群只存一份消息记录,用户 B 和用户 C 每次主动发起 `SELECT * FROM messages WHERE channel_id =?` 去轮询,但这种“读扩散”模式对数据库读取带来持续压力;业界针对中小群聊(如微信限制上限在 500 人左右)普遍采用写扩散(Fan-out on Write)策略——消息发往群聊后,系统直接为群内 500 个成员各自的收件箱做一份数据拷贝(copy)。虽然存储空间被复制了数百份,但在存储硬件极其廉价(storage is cheap)的现代基建背景下,换来的是极致丝滑、极低延迟的用户端读取体验;然而这一结论并非放之四海而皆准,若将场景切换为类似 Discord 这类存在数十万甚至数百万人超级大群的场景,写扩散必然引发严重的写入风暴,此时设计方案又必须向读扩散或混合架构彻底反转。
紧接着两人探讨了分布式唯一 ID(Unique ID)的生成方案。Alex 在架构中画了一个独立的 ID Generator Service,而 Scott 提出,其实也可以直接利用 UUID(如 UUID v1 结合网卡 MAC 地址与 Timestamp)在本地无冲突生成,从而避免机器之间跨网络通信。Alex 说明道,像 Cassandra 这类数据库底层确实原生支持生成这类内置 ID,但很多传统数据库没有开箱即用的支持,因而通常需要引入类似 Twitter Snowflake 这样的专用 ID 生成器服务,例如 Discord 内部就广泛采用 Snowflake ID。Scott 借此提醒大家注意区分,这里的 Snowflake 指的是 Twitter 开源的分布式 ID 算法,而非数据仓库 Snowflake;其优势在于内嵌了部分有序时间戳(Roughly time-ordered / Partial order timestamp),虽然无法做到全局绝对排序(Total order),但能大致按时间序列排列,非常契合消息按时间呈现的需求。
```mermaid
flowchart TD
accTitle: Distributed ID Generation Approaches
accDescr: Comparison between decentralized local ID generation and centralized Snowflake ID generator
[01:06:50](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=4010s) 架构对比:Design Slack 中的有状态连接、未读标记与 Data Model
关于如何系统设计 Slack(这也是 Scott 在 Uber 当面试官时的默认考题),两人就不同切入点展开了深度对比。Scott 指出,如果候选人一上来能画出清晰的架构并把服务区分为 Stateful 与 Stateless,就已经直接胜过了 30% 的人。因为有相当一部分候选人会深陷在“如何把端到端延迟死磕到 10 毫秒以内”的误区里,甚至天真地构想直接在 Client A 与 Client B 之间建立 WebSocket 直连,完全脱离了中央服务器的存在,这种方案在实际面试中基本属于秒挂级别。
在进阶问题(Follow-up question)上,两位面试官的侧重点各有千秋:
- **Alex 的关注点**:更偏向 Slack 作为成熟产品的实际系统挑战,例如多设备同步(Multi-device sync)、在线状态感知(Online presence)等真实工程痛点。
- **Scott 的关注点**:更深挖底层 Data Model 与访问模式(Access pattern)。Scott 习惯追问“未读消息高亮(Highlight unread message)”是如何实现的。在他自己动手实现并部署的 Slack 类似项目里,除了基本的 User 与 Message 实体外,他会额外定义一个 `Channel Membership` 关联模型,把用户在该 Channel 中最后读到的消息 ID(`last_read_message_id`)存为一个字段,大于该 ID 的即为未读消息。
Scott 强调,系统设计的核心原则之一是关注点分离(Separation of Concerns),必须将 Stateful(如长连接管理)与 Stateless(通用业务 API)清晰拆开。在数据模型设计上,应当根据读写比(Read/Write ratio)推导查询模式,绝不能依赖在海量分布式存储上做跨 3 张表的 Join,“如果你需要做三个 Table Join,这肯定是不 Work 的,绝对无法 Scale 出去”。
Alex 赞同这种多元性,认为面对同一个题目,十个面试官可能会问出十套截然不同的子问题,考察点完全因人而异。因此系统设计面试没有标准答案,本质上是一场与面试官的技术对话(Compensation / Conversation)。他极力建议候选人在面试前一定要把目标公司的 Tech Blog 认真研读一遍,摸清对方内部惯用的技术栈与架构实现方式,这样在面试时才能形成共鸣、说到面试官的心坎里。
---
[01:10:45](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=4245s) 经验杂谈:从 Tech Blog 助攻升职,到遭遇恶劣面试官与 Twitter IPO 锁招
Alex 讲述了一段年轻时工作两三年被面试官冷酷 “Bully” 的经历。当时面试官出了一道极难的算法题,Alex 现场写得不顺手,面试官非但没有任何引导,反而态度极其恶劣、冷嘲热讽:“你怎么连这个都不知道?那个也不知道!”Alex 回忆道,自己当时被贬低得一无是处,坐在那里甚至产生了一种强烈的冲动——“我当时就想上个厕所,然后赶紧逃跑”。他心里发誓就算给我发 Offer 也绝不可能去这种公司,只想马上回家给 HR 发邮件投诉。Alex 借此劝诫大家,遇到挫折千万不要往心里去(Don't take it personally),不要因此产生心理创伤。很多时候表现不好或者被拒,完全不是候选人自身水平的问题,而是遇到了不合格的面试官,或者单纯是团队与岗位 Not a good fit。
Alex 还分享了自己进 Twitter 的波折经历:他面完 Twitter 后,赶上公司准备 IPO 启动了全公司范围的招聘冻结(Hiring freeze),音讯全无地把他晾在一边,随后他便接了苹果(Apple)的 Offer 并入职工作了数月。谁知几个月后,Twitter 突然又联系他表示 Headcount 重新放开,问他要不要回来。由于他个人更喜欢 Twitter 的业务,最终从苹果离职加入了 Twitter。很多时候公司拒你或者不给反馈,背后存在诸多不可控的客观因素(如 HC 变动、业务调整),无需将其归咎于自己技术不行。
Scott 由此感慨,随着技术职级不断升高,面试只会越来越漫长、越来越严苛;考题不再局限于纯技术编码,而是加倍审视个人的动机(Motivation)、技术愿景(Vision)、工作习惯与思维模式。而系统设计面试中培养起来的沟通框架与思维模型(如与同事进行 Engineering Design Review、拆解架构权衡),是完全可以贯穿整个职业生涯、持续复用的长期技能。
---
[01:20:15](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=4815s) 现场答疑:平台架构职位是否考 General 题,以及大厂生态闭塞者的破局之道
在随后的线上观众互动环节中,两位讲师回答了直播间的焦点提问:
**问题一:应聘 Big Data Engineer / Data Platform 职位,还会考 Design Twitter、Uber 或 Slack 这种通用的系统设计题吗?**
- Scott 结合自己在流式数据库(Streaming Database)公司的经验指出,偏底层的团队通常不爱考浮于表面的通用题,而是根据简历深挖底层经验。例如做计算引擎(Execution engine)的会深究执行优化,有数据库(如 OceanBase、PolarDB 等)经验的会问具体的存储或解析器(Parser)设计。但这也取决于具体的公司机制,大部分公司并不会强制指定题库,而是让面试官问自己校准过(Calibrated)最拿手的题目。
- Alex 补充说明,数据平台属于专业方向(Specialty)。像 Meta(Facebook)这类大厂,招聘 Specialty 职位时往往既要考一轮领域专业的专场设计(如 Machine Learning / Data 专门设计),同时依然会保留一轮通用的通用系统设计(General System Design)。最稳妥的办法是直接向 Recruiter 问清所考轮次的具体性质。
在解答观众 Adam 关于优质工程博客与技术学习资源的提问时,Alex 与 Scott 联手盘点了一批值得长期追踪的高质量信息源:
```mermaid
flowchart TD
accTitle: Recommended Technical Learning Resources
accDescr: Recommended company engineering blogs, conference platforms, and aggregation websites for system design and architecture.
Scott 进一步强调,技术人的职业跨度长达 30 年以上,中途转向任何时候都不算晚。30 岁、35 岁都可以重新出发,花上两三年甚至五年去深耕一个全新的技术领域,成为该领域的领域专家(Domain Expert),在长跑的职业生涯中完全值得。
谈及国内技术圈普遍弥漫的年龄焦虑与内卷,在回国体验了 100 多天生活的 Scott 感受尤为深切。他直言国内“贩卖焦虑非常有市场”,但工程师破除内卷的根本解法,在于摆脱低水平的同质化竞争,主动去寻找自己的声音(Find your voice),将精力投入到具有真正创新性(Innovative)的技术尝试中。
Alex 深有感触地补充道,在职场中“身不由己”是常态,没人能在入局前确切预判一个组或一份工作的好坏。保持开放的心态(Open-minded),多看、多试、多做,想做的事自然会逐渐明朗;即便做了很多年依然感到模糊,只要干得开心就没任何问题。为了印证“工作开心”的重要性,Alex 分享了他在苹果公司(Apple)的一段深刻见闻:
> “我其实在 Apple 的时候,有一个非常非常 Senior 的、比 Director 还要高级别的一个人。但是那个人每次看到他都特别的不高兴,让我印象非常深刻,就是我见过在做 Tech 里面最不高兴的一个人。我知道他能力肯定都很强,否则不能做到那么高层对吧?但是我就想我一定不能做得像他那样,因为他感觉特别不开心。我觉得开心一点,然后做一些事情,就可以了。”
长达 100 分钟的高密度直播在轻松的道别声中落下帷幕。Scott 与 Alex 向在线观众致谢,并表示后续会根据社区反馈,针对系统设计中的特定硬核模块展开更具针对性的深入探讨。
## Notable quotes
> [00:00](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=0s) 把最复杂的事情变简单 — Alex Xu
> [11:03](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=663s) 年纪更大的时候你更没有勇气去做想做的事。找工作随时都可以,但放手搏一件属于自己的事必须抓住机会,时机永远不会有完全 Perfect 的时候。 — Alex Xu 朋友
> [16:34](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=994s) 创业就像有人把你从悬崖上一脚踹下去,而你必须在急速下坠落地的过程中,亲手组装出一架飞机然后呼啸起飞。 — Scott Shi
> [25:35](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=1535s) 一切皆关乎信号 — Scott Shi
> [32:20](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=1940s) 系统设计面试并不是人生的全部 — Scott Shi
> [34:45](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=2085s) I'm perfect for this job, but not arrogant — Scott Shi
> [01:00:00](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=3600s) 给 Strong Yes 就像在说‘如果你不 Hire 这个人我就 Quit’,而给 Strong No 则是‘如果你 Hire 了这个人我就 Quit’ — Scott Shi
> [01:06:50](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=4010s) 如果你需要做三个 Table Join,这肯定是不 Work 的,绝对无法 Scale 出去 — Scott Shi
> [01:10:45](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=4245s) 我当时就想上个厕所,然后赶紧逃跑 — Alex Xu
> [01:28:40](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=5320s) 如果我设计系统面试题的话,我会设计一个不要求很难、但最好市面上没有的题。这是最能考察出候选人水平的……如果候选人见过这个题,那他其实回答出来不管答得怎么样,可能不是他自己的思考。 — Scott Shi
> [01:33:48](https://www.youtube.com/watch?v=2wdvDXCbRfU&t=5628s) 我其实在 Apple 的时候,有一个非常非常 Senior 的、比 Director 还要高级别的一个人。但是那个人每次看到他都特别的不高兴,让我印象非常深刻,就是我见过在做 Tech 里面最不高兴的一个人。我知道他能力肯定都很强,否则不能做到那么高层对吧?但是我就想我一定不能做得像他那样,因为他感觉特别不开心。我觉得开心一点,然后做一些事情,就可以了。 — Alex Xu
## Mentioned
Scott Shi, Alex Xu (徐云), Reid Hoffman, Paul Graham, Thuan Pham, Travis Kalanick, 《System Design Interview》, High Scalability, Amazon, Twitter, Zynga, Apple, Electronic Arts (EA), LinkedIn, Indeed, Salesforce, Singularity Data, Uber, Google, Meta (Facebook), Netflix, Dropbox, Airbnb, Discord, O'Reilly, Y Combinator, InfoQ, CNCF, LeetCode, AWS, DynamoDB, Cassandra, Twitter Snowflake, ZooKeeper, Schemaless, MySQL, ClickHouse, Kubernetes, Flink, Spark
## Video description
In this session Scott have a fireside chat with Alex Xu, author of popular book of System Design Interview. We will talk about our experience in the past about system design interviews, tips and other things. Come and join us at 7:30pm today
You could enroll the online course here: https://bit.ly/3hcJGLx
徐云与前 Uber 考官拆解系统设计:权衡推导与沟通信号决定定级
大厂系统设计面试核心并非寻找标准答案,而是考察候选人在状态分离与读写比下的架构权衡能力,在高阶定级中沟通协作等软技能信号具备一票否决权。
对话中,Scott Shi 与 Alex Xu 首先回顾了各自早年遭遇几十封拒信的求职窘境,以及 Alex 从 Twitter 离职、尝试量化交易最终全职自出版系统设计畅销书的历程。随后,两人以一线大厂资深面试官的视角,全面拆解了系统设计的评分卡机制、信号抓取要点,并以实时聊天系统为例深入推演了有状态与无状态服务切分、群聊读写扩散以及分布式 ID 生成等核心架构权衡。此外,他们还揭秘了大厂 Debrief 决策动态、职级定级逻辑与高质量技术输入渠道。最后,两人结合长期的技术从业观察,为年轻工程师提供了打破年龄焦虑与内卷、在长期职业马拉松中保持热爱与快乐的心态指引。
《System Design Interview》作者 Alex Xu 与前 Uber 面试官 Scott Shi 围绕系统设计面试考核、职业瓶颈突破及独立创业展开深度对谈。 (0:00)
Alex Xu 透露传统出版社仅提供约 10% 版税,转战亚马逊自出版(Self-publishing)才跑通了支撑全职写作的商业飞轮。 (11:03)
大厂系统设计考核本质是“捕捉信号”(Signals),且 Strong Yes 拿到比例极低(通常仅 5%~10%),需要方案完备并展现核心领域的专家级 Deep Dive。 (60:00)
面试职级(Leveling)核心由过往履历项目匹配度决定,候选人在反问环节以弱势姿态请教“如何 lead 项目”容易触发降级翻车。 (34:45)
[0:00] Alex Xu: 把最复杂的事情变简单
[11:03] Alex Xu 朋友: 年纪更大的时候你更没有勇气去做想做的事。找工作随时都可以,但放手搏一件属于自己的事必须抓住机会,时机永远不会有完全 Perfect 的时候。
[16:34] Scott Shi: 创业就像有人把你从悬崖上一脚踹下去,而你必须在急速下坠落地的过程中,亲手组装出一架飞机然后呼啸起飞。
[25:35] Scott Shi: 一切皆关乎信号
[32:20] Scott Shi: 系统设计面试并不是人生的全部
[34:45] Scott Shi: I'm perfect for this job, but not arrogant
[60:00] Scott Shi: 给 Strong Yes 就像在说‘如果你不 Hire 这个人我就 Quit’,而给 Strong No 则是‘如果你 Hire 了这个人我就 Quit’
[66:50] Scott Shi: 如果你需要做三个 Table Join,这肯定是不 Work 的,绝对无法 Scale 出去
[70:45] Alex Xu: 我当时就想上个厕所,然后赶紧逃跑
[88:40] Scott Shi: 如果我设计系统面试题的话,我会设计一个不要求很难、但最好市面上没有的题。这是最能考察出候选人水平的……如果候选人见过这个题,那他其实回答出来不管答得怎么样,可能不是他自己的思考。
[93:48] Alex Xu: 我其实在 Apple 的时候,有一个非常非常 Senior 的、比 Director 还要高级别的一个人。但是那个人每次看到他都特别的不高兴,让我印象非常深刻,就是我见过在做 Tech 里面最不高兴的一个人。我知道他能力肯定都很强,否则不能做到那么高层对吧?但是我就想我一定不能做得像他那样,因为他感觉特别不开心。我觉得开心一点,然后做一些事情,就可以了。
Original transcript
[0:00] 然后今天呢我非常有非常荣幸的请到Alex徐也是这个Amazon上唱乡书System Design Interview的作者一起来参加我们这个session,我把它叫FireChatFarsight chat,就是简单闲聊一下,然后这个session呢,因为这个,不管是Alex徐云和我这块比较共同的一点是,我们过去都做这个system design interviewer然后也比较有比较丰富的这个System Design和这个System Interview的这个经验所以我们今天的说的topic都是focus on system design或者是interview这个方向的然后进行一些简单的闲聊那Alex你要不要简单先介绍一下自己好的,嗨,大家好,我叫Alex,今天非常荣幸的到这里,然后也非常感谢Scott的邀请。这次是我第一次做第一次参加这种live video,所以我觉得还蛮有意思的,如果做的不好的地方多多见谅。先做个简单自我介绍吧,我叫Alex,然后在湾区这边也工作了十几年了,也是老员工了。就是Scott之前说的这本书就是System Design Interview, and in the 6th of June, in Amazon was published. And the book was still pretty good, and the overall review was also more positive. The main thing is to make the most complicated things simple.其实对于System Design来说,这是一个非常难的话题,然后我是想通过用比较简单的语言,然后用比较通俗一种的例子,然后用很多的图或者什么之类的,然后可以让那个,比如工作经验比较少的人,或者就是说没有很多机会接触那些大系统的人,就是说希望你能够提供一个资料,然后呢,大家也能够通过这些interview吧除了这些书之外呢,我之前呢,工作十几年,最近呢是在推特Twitter, Zynga,还有Apple,我现在呢是全职在写下一版的书,目标呢就是把加更多的话题然后把它写得通俗一种一节然后呢再把一些话题呢写得比较深刻一点对大概就这样好的好的,这面我聊的时候发现和Alex有很多共同点,首先就是我们都进行了很多这个interview的这个interview的training和interview的这个conduct interview嗯然后其次的话,我发现我们第一份早工作的时候都非常纠结然后第三点的话就是现在的话我们都相当于是自己run一个business自己自己这个就是run一个business这样子,然后我们来其中一点点聊一聊好了,先聊一下好了。就是Alex,就是你讲一下,你能讲一下你这个interview training和interview design的过程吗?就是interview,就是被interview的过程,就是被interview的经历和interview别人的经历。行,我觉得就是说,可以从头开始讲吧,我觉得就是说,这就是一个,我觉得其实跟做很多事情都一样,这就是一个慢慢成长的一个过程,就是说,当我找第一份工作的时候,当时呢就是正好是08年,然后那时候正是经济危机,然后那时候毕业,嗯反正就是什么也不知道,刚才美国也不久了,只知道大公司所有都不招人,基本上就没有任何一个大公司招人。所以当时的话,其实找工作还挺难的,面了很多的公司,基本上刚开始都被拒了。结果呢,突然有一天,可能面了几十个公司,突然有一天,那个封英特别就过了,也不知道怎么回事。只知道面了很多,也有准备了很多。什么该说什么不该说,然后呢也知道怎么准备,然后也知道就是怎么解题什么之类的。然后从那以后呢,基本上,interview就算了很多,基本上大部分的公司的那个offer呢也都能拿到,就是说,就稍微准备一下也就可以,我觉得这就是一个慢慢的一个过程吧。谢谢大家谢谢大家好的好的,我这边好像,sorry,就是我technical信,好像我这会儿没有看到在直播,我这边看到在录音,但是没有看到在直播。哦 那我看一下对,YouTube channel好像没有在直播,没有没有stream过去好像有的在YouTube channel上有吗?有的好的好的好的嗯我
[5:00] 不知道怎么回事了我我我这个我这个是到test stream 上了并没有到那个那个 stream 上所以它相当于是有出个问题,我见面稍微可能要修改一下。好的。谢谢大家OKOK他这个这个这个大家可能是要去去如果方便的话可能是要去群里面说一声说是到这个那个test stream上不要到另一个stream上,因为这个我其实schedule了一个stream,但是那个直播的并没有到schedule上stream了,所以现在有两个stream,有个schedule stream可能看错了大家会去做链接不好意思啊,不好意思,非常不好意思,可能大家有空的话可以在群里面稍微聊一下,OK,非常感谢Alex刚才的回答,就是我这边说一下我就是intu的过程。我其实一开始的时候interview也是非常不顺的一个过程,我比Alex工作晚几年,我第一份工作本科变授找工作的时候也是早了近一年时间就是没有找到很好的工作但是那会的话是在加拿大然后其次的话其实我当时在EA实习完的时候是EA其实当时是有机会给我提供一个就是在那个就是可以refer我到一个full time工作的但我那会的话我觉得我想的比较简单我想去环游一下加拿大然后我就没有接受这个full time工作我就去环游加拿大去了所以环境加拿大大概一年左右一年左右对然后然后呢然后呢就是环游了一年左右然后玩了一年然后呢然后去读研究生但研究生找工作也很不算然后读研究生的时候其实相对来说我觉得找工作就比较认真一点了就非常认真去找工作但是从13年9月到到第二年的到14年的9月其实相当于找了一年的全职工作没有找到所以我记得当时是收到巨信收到大概三四十封巨信我在拿到第一个full time offer 之前,我大概收了三四十分句信,然后他拿到第一个full time offer但是我觉得在搞中国的过程中其实我是有很多时候就是在想为什么找工作挂了一开始的时候可能是跟我的表达的问题然后就是很多时候可能表达的时候有一些communication有一些问题然后后面的话有一部分是我coding的问题其实我当时背景看起来OK但是比如说LINKING当时LINKING给我的当时给我一个面试的机会的时候他问了一个这个当时Leadcode只有150题左右我记得然后那个LinkedIn当时问了一个比较难的题叫Leadcode第9题还是什么非常难的一道题就是说在二维屏面有很多点,如果一条线过去最多能穿,就是能路过多少个点,这个题其实counter case非常多,我又被考到过,你也被考到过去是吗?对对对,然后counter case非常多,这个题就答得相当糟糕然后呢就我感觉好像就上了link in的黑名单了导致后面好几年之后Linking基本上都不给我任何面试机会然后Twitter也是类似的就是推特当时面了一个partial order就是partial order导致那个题面试过了以后我过了很久都没有搞清楚这个partial order怎么怎么写这个code就是就是还是挺难的这个partial order这块所以也是推特基本面试也是比较失败的一个过程但是所以说第一我记得当时第一次找工作的时候就大概fail了30多家公司然后他开始找这样的第一份工作并且我第一份工作是这个Indeed在那个Austin的Indeed去第一份onsite,然后第二个onsite,第一个onsite是Amazononsite,也挂掉了。然后去那个Austin的Indeedonsite,然后非常非常开心的拿到了第一个offer,就是2014年10月,所以我从第一次从认真找全职工作到找见第一个全职工作,大概花了一年多一点点。虽然中间一直在上学,意识上研究生其实也没有毕业,我是14年底毕业,也没有毕业,但是确实是非常stressful的一个过程。然后早见第一份工作以后后面的工作反而就变得非常好早了就是之后早工作的时候之后早工作的时候就是后来灭了最后就是从14年9月到14年12月大概灭了10个on side,然后过了6个,所以通过率也是比较高的了。第一份工作确实是非常非常难的。我知道今年有期的困难,就是我知道很多今年早工作的同学有期的困难,因为这个new guys很多就是很多公司都不开了。然后不管是这个Google不开了还是这个Facebook不开了然后很多公司都不开了然后然后这个我们看到Alex可能掉线了,稍微等一下他,然后不开了以后就导致的这个这个其实会变成一个非常非常难的过程,因为你其实不管是Amazon,Google,Facebook,他其实是之前是这个之前能吸收到许多newgrads,给很多newgrads非常好的工作机会,但是现在不堪的话,其实对newgrads的竞争是非常大的,竞争压力是非常非常大的,非常非常困难的所以说
[10:00] 我知道今年NewGrad早工作是非常困难的,但是另一点来说,虽然我当时早工作的时候是非常不顺的,对比我其他同学我知道我有认识一个同学就是斯坦福毕业了以后早工作的时候就是Apple当时他是去Oracle,Oracle说你过来我们这吧,然后直接过起来,就只面试了一家,然后去Oracle然后后面找工作的时候,当然他也很顺利但是我第二次找工作我也很胜利,就是我从Salesforce去找第二份工作的时候,我当时申请了六个公司,然后六个都进onsite,最后拿了四个offer然后四个offer东西下来一下所以说我觉得不管大家是New Guides还是Experience Programmer,如果你有一次找工作不顺利的话,其实你有Experience以后第二次找工作不会受之前的影响的,我觉得这个其实不会受之前的影响,我觉得这点是相对来说,你不用担心第一次找工作非常不顺利,结果以后找工作的时候也会非常不顺利,我觉得这个是不用担心的。好对然后Alex你聊一下,我觉得这边的话也稍微闲聊一点,可能跟System Design不直接相关,也跟早工作不直接相关,你聊一下你最后一份工作以后开始全职写书这一块的经历吧,我觉得大家可能会比较感兴趣的好 我对我觉得我走这条路可能跟大家很可能不一定很一样吧我就先说一下我为什么决定接着全都写书吧,就是说这个事情其实这个决定其实不容易,因为因为可能大家不知道也可能知道就是说这写书其实是有点就是那种吃力不讨好的活就是说你可能是需要很多很多的时间但是呢就是说从那个经济上来说的话就是收益其实挺少的比如说你如果是走那种传统的印刷页的话比如像oreilly那种的话,作者就只能拿10%,尤其像tech这种小的这种category的话,基本上就是说即使是卖到最好最好的,在tech里面就排名第一的书,然后也还是没有办法养活自己的。然后所以呢我走的是那个Self-population,所以我没有走那种传统的那种印刷厂商,虽然也有不少的联系我,但是我走了自己的印刷厂商,然后呢,现在呢,就至少能够维持自己的生活通过那本书。然后我再说一下,就是说为什么做这个决定吧,就是说,我记得很早以前,我在17年以前,我就写了第一版的书,那是一本非常非常薄的,一百页不到的一本黄皮书,然后黄皮书,然后我当时就是觉得自己准备面试的时候做了一些很多的那些notes什么之类的然后啊然后就改了改了然后就发表出去然后我自己呢也没有就也没有署名 因为我觉得那个觉得让别人知道不大好 因为我觉得那个水平写的挺差的啊 然后那个书就就放在那儿 然后呢就是每个月呢就感觉呢就是交个电话费的钱还是能收回来的 然后就是在那儿 然后呢就是过了好几年以后呢就发现这个书还能卖然后那个review呢还是总体来说还是比较positive的大概有四型,然后它那里面呢,就是一共呢,除了那种比较好的review以外呢,就不好的review呢,大概就分两种。第一种就是说我因为没有经验嘛,然后我里面有很多彩图,就我说这有个红点,这有个绿点,这有个白点,然后结果其实印刷的时候的话其实是只有黑白的,所以的话大家那些读者根本就弄不清楚什么是红,什么是蓝,然后有一两张就没有办法,就没有办法读,然后那个是一个complaint,还有另外一个complaint呢,最主要就是说他们觉得太短了,就是感觉需要写的,长一点 然后我一看这个东西还是感觉这两个问题都可以解决所以呢嗯所以呢这也就你还这个其实就相当于是种下了那个阴嘛,然后我是小九,19年19年还是18年的时候我从那个推特辞职然后辞职我那时候其实对做那个用算法来做那个trading stock option很感兴趣,然后在推特的时候,我觉得那个,感觉挣了不少钱,然后觉得,哎,感觉自己还做得挺成功的,然后,但是很累,因为每天早上都得,先回这边是那个Pacific time啊所以每天早上就我就四五点就得起然后晚上呢又睡得比较晚 因为挺stressful的,然后我因为我的那种trading method就是我其实是因为我也是中国人嘛,然后就是啊我比较看中国的一种
[15:00] 股市然后就是做一些就是做一些对差的一些一些交易所以我就会比较关注一些news 什么之类的 然后然后呢我做stock trading做了一年多然后而后来觉得我这东西感觉又不是特别适合我,可能我不想作为我那个long term的一个career所以所以我就想要不要回去找工作这个时候我又想到了我写的那本书然后我想既然我现在没有工作 那可能就是做一些自己想做事情的黄金时间了然后我就想那我就抽两个时间然后把那书写完就提高一下吧把那个时候所以不定有人买 结果呢 就是一旦那个开始 然后就发现工作量跟想象的完全不一样,就原来觉得那个一周写个一张应该很轻松 但是真正弄下来都是一个月一个月可能才能写完一张然后结果呢就是断断续续全职写了一年多然后呢 最后发表出一些 其实的话这个就是其实也是很担心这个就像很多公司就startup一样就是product launch对吧其实就是你也不知道就是说大家真的会喜欢还是不喜欢这个东西,因为即使虽然我每一篇我都有很多人能给我review,然后因为我的那个target user就是说工作经验一到五年的呢,我希望他们能够80% 90%的东西能够看懂,所以我每一篇都会给两个就是一个做frontend 一个工作经验比较少的能量他们读过其实这样的话其实还是很担心的 因为如果如果反馈不好的话 那就是就感觉自己一年多的努力就是完全就是白费了,然后反正就是很担心,但是到最后呢,结果还是我觉得还是挺好的,所以还是挺开心的。对大概就是这样一个过程,现在这个时候做这个决定就是为什么要接着写呢?我觉得就相对于更容易一些了,因为因为至少我能够就是说我自己的自己的生活 对吧 通过这本书 或者自己开一个课这样的话 我选择的权利就是可能更多一些就压力可能就没有那么大一些不过我也想了好久我想了一个多月我到底要不要接写呢还是再找一份工作呢或再做一个startup呢然后呢就是我有一个我有一个很好的朋友他他是他技术非常非常强,很多大公司不需要面试就可以给他Senior Staff以上的title,但是他都是他都是那个他不去,他就不喜欢带那个大公司,他觉得那个politics太多,做事情太慢,或者什么之类的,所以他就一直在做一些startup的一些小公司在待着,然后他就告诉我,他年纪比我大一些,然后他就告诉我,他就觉得啊,我觉得自己年龄已经有点大了,但他就说你年纪还不算特别大,年纪更大的时候你更没有勇气去做更想做一些的事情,找工作或者什么时候随时都可以找,但是你如果真的想去放手去做一个startup或者想去做你可能就得以一个机会,然后永远不会有,就是说,时机永远都不会有特别perfect,然后我觉得,哎,这说挺有道理的,然后我就,再加上家人的话也比较支持然后我就觉得那我就接着做吧因为因为其实真正做好一件事情很不容易,而且我现在做的这个我觉得这个写的总体来说大家还比较满意的话我觉得这个比较有动力 所以要接著好好干一下 做下去OK说得非常好,Alex,这边我有好多comments,好多点我想挨口,不是很多点想挨口,首先就是今天Taker News有一篇文章写的是传统的publisher的书的销量,然后他把所有的书列出来,其实只有1/1的书是销量超过10万册的,然后4%的数销量超过1000册所以你这个数如果销量超过1000册的话其实已经就进了前4%的这个然后我相信Alex的数销量其实还是挺畅销的我看到上面关那个光那个评价其实已经好几百两,还去吧条了,我觉得这个就是写书是非常难的一条路,然后我这边也是有experience,就是我这因为我自己的话是全职创业了大概第四,第二个月,第二个月。第二个月多一点,两个月多一点并且我从Singularity Data离职了我现在自己全职自己做这个事情我觉得这个创业真的是就像那个Lincoln的老大Rate Hoffman说的就是他就有点像说把你从一个悬崖上扔下去然后你在这个悬崖下坠的过程中是吧build an airplane然后再起飞是吧这种感觉
[20:00] 谁说是嗯比较stressful的并且我觉得这边其实非常重要的一点是说需要有家人的支持我这点也是非常赞同就是家人需要支持并且他其实很多时候是一个stressful过程并且我想非常echo一下Alex就是他朋友说这点说这个创业的这个这个时间其实是有的有这个时间,这个time window的其实是对于一个人来说有time window的嗯我看到这个我最近在读很多这个Y Combinator 的这个其中有一条比较controversal的就是Paul Graham说大概创业的window可能在38岁之前就是38岁以后的这个就是founder和cofounder他那个就是这条这条话这句话非常controversial非常非常controversial但是他确实说Paul Graham确实说过说这个38岁以后的话可能创业的window会相对小一点总体来说可能就缺乏一些冒险精神总是会可能精力会缺乏一点总体来说就是跑过来还不说所以其实创业window还是有一个window它可能不是一个就是说超过这window一定不行但是可能在window内可能probability会大一点但是另一点来讲我去国内的时候跟很多VC聊我这次回国的话也是聊了许多个VC有的人是有的VCR只喜欢投40岁以上的那个就是创业者的,就是他觉得40岁以上的创业者更稳健一点,资源更多一点,然后soud process 更 mature 一点所以说他只是投这个40岁以上这个创业者的所以说就是不一样的事情是吧好,非常感谢,我觉得这个share了一些比较有趣的insights,我们下一个环节的话,我们简单讨论一下tips for interview training好了,就是我觉得是,这块的话,我觉得可能和Alex给大家提供一个不一样的视角,就是可能我们现在观众可能大部分人都没有经过interview training,就是你作为面试官,你需要经过什么training,然后通过面试官的角度来讲,就是能怎么样的,就是具有什么insights是吧,我这边想提这个的原因是有几点吗,就是虽然就是早些时候我其实面试过很多公司,大概面试了六七十家公司。但是之后的话面试别人的经历其实后面是远远超过被面试的经历的就是我在Uber的话大概有300多个interview然后这次之前的话是在这个创业公司的话其实我面试了大概也是面试了八九十人,其实并且八九十人在国内的面试,我相当于是看了一下国内的应该有应该有这个这个这个就是怎么样去interview别人然后以及candidates的这个south process和candidates这个水平是吧就大概大概是怎么样的大家怎么想的然后等等所以我们这块的话也简单要聊一下inture的这个这个experience就是inture training和inture是怎么样面试官是怎么样考虑这个问题的然后Alex, you can talk briefly about it. Then we'll talk about it. Okay, let me talk about some of my experiences. Because I wrote a book, I have a lot of hiring managers and other people. I think in terms of system design, it's usually a lot of people who are in the office.分为三种一种呢就是就非常open minded就是就是非常open 就是说那个比如是有比如就是比如我就有一个人他就会给你一个提比如像啊, 比如像啊, 比如像推特,然后呢就是他就再也不怎么管了,然后呢就是 drive 那个 whole process,然后你就不停的说,他可能偶尔问一下就说这个东西怎么样,那个东西怎么样,然后呢就是 take notes,然后他就不怎么说了,然后这是一种,然后还有一种呢就是,嗯这个呢也就是在很多大公司是比较popular的,它呢就是会有很多的考点,比如像,就举个例子,比如像是Design Payment System,它可能就是,首先呢你肯定要把那个high level的那个东西那个就是那个图肯定得要画出来然后在那个之后那是一个考点然后呢在之后呢他可能会会考你那个怎么样 handle double payment啊怎么样就是它可以asynchronize或者synchronize payment 因为你可能需要需要比较快嘛对吧然后呢因为payment system它还会跟第三方的交互所以呢第三方交互呢就是这一个是一个怎么过程啊然后因为是要跟第三方交互所以的话这里又涉及到他们很多系统有不同的状态,所以他们就需要eventual consistent然后还有呢就Payment System 因为它是非常的data那个就非常Sensitive data 然后一定要很精确所以呢这里呢一个又肯定是需要用那个relational database,就是说就是会有可能五六个考点
[25:00] 比如像考payment 就是这个interview呢 它就会就是你如果答对一点的话就可能会给你加一粉那可能你如果答得还不错 那可能就是还可以 然后完全答得不行 那可能就是可能会减分啊 所以在很多大公司呢 他们就是因为因为他们需要一个standard,就像coding一样,就是说你code的好坏,其实很容易看出来,但是因为system design,它是非常的open的,所以呢很多公司啊然后很多面试者呢所以他们就是会创造出一些提,而且这些提在很多公司,他们都有一个提供或什么之类的,他们会有一些standard,他们会有一些,就是说什么question,然后呢,就是问什么,然后就说,期待的可能是什么答案,当然那个答案不是唯一的,有可能是有多种。多种不同的答案 但是至少就是说 你可能就是需要往这些点上去打然后这一点我觉得是比较重要这个是从technical方面来说然后还有另外一点比较重要呢我觉得这就是communication非常非常的重要就是说因为我也面试挺多人,然后我发现就是有一些人他那个技术可能也挺强的,但是他们就是不停地一开始做面试的那个设计的时候他就开始就挑一块然后就是就是拼命的把那个说的很深这样的有一个问题就可能就是比如我可能并不想对那块我可能不感兴趣,因为我有时候我会有一个私物考点,我需要cover,因为面试的话其实时间很短,大部分公司都45分钟,然后还要介绍一下自己,然后可能还要说一下简历什么之类的,所以真正面试的时间很可能就只有35分钟 所以时间非常的宝贵所以呢 我基本上就是那有时候我就只能是打断那个人然后呢因为我不想让他在那个方面再继续走下去然后呢把他引导回来就是可能想要我想要的那块先讨论完然后如果有时间再去讨论他那个想要小于讨论这块所以啊所以呢就是communication非常重要而第三点呢我觉得就是那个time management也非常重要,就是像刚才说的那个,就时间非常的紧迫,就是说啊,一定要跟面试官沟通好,就是说他感兴趣什么,然后你就多说一点什么,啊,除非就是他让你多说一个东西了,然后你就可以多说了,然后就是一个,就像其实比较最好的那个season design interview,我觉得是就是相当于就是一个co-worker,就是你们两个就在就在谈话,就在讨论,然后呢,啊,也并没有什么solution,然后就是说,就觉得这个东西啊,讨论一些trader off,讨论optimization,就为什么这么做什么之类的,我觉得这样可能就是特别好的一种状态。对对我非常赞同Alex说的,我这边还想补充几点,就是呃呃,我也讲一下我当时在Uber interview的时候做了哪些training,其实在Uber interview没有做的training非常简单,就是说哪一些线是red light不能cross,啊其实就是说比如说有一些gender的问题不能问啊一些preference问题不能问啊有一些这个这个这个就是一些比较个人的问题不能改变的问题是不能问的个人的不能改变的问题不能问的然后呢然后就是everything is about signal就是everything is about signal就是就说 into your training就是说说所以说其实你不管怎么说不管你是怎么样就是说这个问题的approach 这个问题的然后去解决这个问题的其实你不需要完全去解决它包括coding也是一样的你不需要完全解决如果你解决的方式和解决的on the point是吧在点上然后并且其实你思维的方式是正确的那么其实你就是一个很多加分享加分加分享分享但是如果说你说了很多话但是你说的话全部在点上是吧你可能想show off一下你的理解但是你理解全部不在点上然后你其实都是减分项就是说说所以说其实intu about signals是吧关于一些 signals然后这些signals不只是technical signal还有一些就是你的culture fit signal还有一些你的 attitude signal 这都非常重要我觉得最常见的问题是说最常见的 culture feed signal 就是说有人就是intel问你说如果你之前和你的队友发生冲突首先你没有发生过冲突如果没有发生过冲突那你就直接这个问题是直接是一个red flag了不可能没有发生过冲突啊或者是除非你要么在line是吧要么就是你这个特别不因sensitive是吧所以这个所以你没有意识到有冲突这种或者是你就是一言堂是吧这个这个词文员一言堂这都不是一个一个house signal但是很多时候就说你首先就比如说问你发生了一个冲突如果发生冲突的话你是怎么样解决这个冲突的这个问题其实相对来说也是比较trick的啊就是我这边提这些东西呢是一个就是相对来说是behaveual 困局但是更重要的是大家interview的时候一定要想是一个signal就是就是interview在看的signal,然后你要想
[30:00] 办法把这个signal get it right 是吧然后这是比较重要的一点然后我想这边说的话这是当在uber进行interview training 的一个过程也就是说其实interview trading非常简单就是告诉你哪些red line然后告诉你应该去capture一些什么样的signal然后不停的做和baseline进行calibration一个interview就是一个interview往往就是从一个开始是做shadowinterview然后到reverse shadow,reverse shadow相当于是你在你在做interview,但是你之前培训你的trainer在看你做这个interview,是吧,就reverse shadow,然后到变成一个独立的interview,差不多要经过40多个interview。interview 才能变成一个独立的interview然后你可能经过50到100个interview然后你才能比较好的完整的完善一下自己的评估candidates 的 percentile 是吧就一般来说interview完了以后你会对candidate进行percentile 的评估是吧然后会有个overall percentile 的评估说比如说这个candidate我觉得bit 90%的candidate然后你有一些对于具体的是吧比如说technical 部分然后culture fit的部分还有这些motivation这些部分这些都是非常重要的一部分很多时候很多时候可能就是technical过了但是他整个soft skill不过的话还是有否决权的我这边想说的是其实我觉得最近一年我就有一些mind blown的一个事情就是说其实越senior的人越看好这个越senior的人越只看culture fit interview和你这个在culture fit这块表达的东西你怎么样去立一个team你有没有coaching junior people在过去有没有coaching的junior people然后这些其实是相对来说在interview中更重要的一部分因为这个其实technical problem很多时候大家都说面试的时候是造火箭但是进去以后你螺丝钉所以真正的时候他其实看的是就是特别一些general的岗位就是如果你的那个technical达到了以后他其实看的是你这个candidate合作起来是不是更容易去合作然后你这个candidate是不是能是不是那个communication有没有问题这些culture fit才有guarantee后面的过程所以说我相信我基本上想说一下就是大家可能更重要这种cutcher fit然后这种日常解决问题的这些这些日常解决跟对我交流的这一部分还有跟这部分其实非常重要的就是大家不要忽视这一部分然后这个其实是他们就是作为比较senior的管理人最重要的一部分然后最后的说话我想说一下就是intual的level就是很多时候intual的level其实不抵判这样的intual就是这个interview performance,interview performance只会说pass or not pass你的level是根据你的过去的experience决定的就很多时候就比如说比如说其实你已经pass了,但是你到底怎么样决定,它是L5,L6的话,很多时候是根据你过去experience,如果你过去experience,比如说lead过几十人的team,或十几人的team,领导过十几人的project,那你很多时候你pass了L5的自动就变成L6的level。所以说就是System Interview和Interview Not Everything很多时候你要更配合 focus 就是你要选好自己职业生涯的一个方向啊这个的话我觉得对于小公司尤其如此我自己做自己做自己公司的时候去Haren的时候也是说我其实也是也是说我怎么样就是我会看很多方面最重要的一点是他的过去的 experience后要找的人是不是matching的,他的算然后要找的这个要找的candidates的这个skill是不是matching的,是不是我现在是不是就需要一个优化一个optimizer是吧,做optimizing的人是吧,我现在是不是就需要做一个这个distribute system executor这块人是吧,那我这个点是非常重要的一部分。然后是说我这边的话也推荐大家是不是如果你想就是在这个职业生涯中发展就是给自己找一个方向的话可能早点定下来一个方向是吧比如说我就想做Networking是吧我想做这个我想做这个user growth这一块或者我想做这个cyber security这一块我想做这个公司sift这面是吧sift的地方也是相对来说也是其实也是比较大的一个领域我想做streaming这面对于这个其实相对来说我也建议大家尽量的找一个这个尽量的在职业生涯早期的时候找一个方向然后在这个上面积累经验相对来说如果我是一个雇人方我作为一个雇人方去雇人的话我比较我比较担心的是看到一个candidate可能有15-16年的经验但是他可能在这边做了5年在那边做了2年在那边做了3年然后比如说又去Bitcoin做了2年Blockchain做了2年这样的看点词,其实如果Hired不是一个generalist的话,我其实相对来说是比较有concern的。这也是我相对来说从interview的角度,给大家的一个想法Alex你有什么想补充的吗现在没有好的好的好的然后最后一点的话我想说大家在interview的时候一定要show your confidence就是你要显示送的自信的
[35:00] 就是说很多时候你interview的时候就是我最常见的interviewee呢就是被就是背面式同学呢就是它的level其实是在L4和L5之间就是在SD2和CENER之间这时候其实他Intel的时候过程很好其实他其实问题回答的非常smooth是吧,非常流畅的回答下来,但是对他level的时候,他问的一些问题,就有时候会说,我感觉他还没有到senior这个level是吧比如说常见的问题是说,你觉得我应该怎么样去立一个project是吧?你作为一个signior,你觉得我应该怎么立这个project?或者说,我觉得我自己没有一些很好的经验,就是你觉得这个signior和这个sd2的区别是什么?当你问了这个问题的时候,其实你自己给自己这样的半计所以这个Interval其实是Cells自己的一个过程就是说cells 就是cell自己的一个过程是吧所以你其实是其实是你应该不应该问说我怎么样能做的 better 应该说 I'm perfect for this job但是不要不要arrogant的是吧不要不要这个东卓Dick是吧不要arrogant但是你应该说I'm perfect for this但是我想知道你关于这些里面更challenge的部分是吧就super excited for the challenging 是吧但是不要问一些我怎么样可以做得更好我怎么样这种问题问出来的话其实对自己的这个level降了很多 除非你是new grads那其实这个leveling没有什么问题否则的话其实你对自己的leveling自己降了一部分这个也是我建了一个我感觉在intreview中过程中建了一些比较有趣的这个好,Alex这边准备一下slides讲一下他的system的谢谢大家好哎大家好啊我呢就是用一个比较具体的一个一个例子就是啊把自己呢就是设为是面试官,然后呢面我自己,然后我就说一下,就是说作为一个面试官,我可能就是看中一些什么东西,然后有哪些考点,然后作为一个面试者呢,然后我呢怎么样就是present自己,然后呢让面试官觉得我比较那个fit,嗯首先呢我就大概说一下这个其实我之前也提过就是说System Design Interview呢主要就是有两种一种呢就是非常Open Minded, Open Ended这种呢往往都是很多呢就是有一些是针对任何人还有这种呢往往是更普遍的就是对于一些面试一些startup一些小公司或者面试一些非常senior的position,比如像senior staff以上,跟我聊,我跟不少人senior staff以上的聊过,他们其实被考的往往都是很多更open-ended interviews第二就是往往都是公司呢当前碰到的一些问题然后他就问你啊去怎么样解决所以这种的话基本上就是没有什么答案就是你就have a good conversation 啊然后第二个呢就是less open ended 这种呢其实啊更普遍的在各大公司呢被被使用这也像scott之前说的就是有一些signal然后有一些有一些考点然后需要需要去cover这样一个例子来讲一下就是说是怎么样 approach这个problem比如呢 就是作为一个比如现在呢我就是作为一个面试官对吧啊 作为一个面试官呢我去我去问这个问题的时候我肯定往往都是我已经问过很多很多人可能几十个或者上百个人了然后我我呢就是会会有
[40:00] 我就说会会有一些考点就是在那里面就说我需要我会问一些特定的问题这样的话呢就是我可以评估就是说啊在这个考这个考嗯这个面试的人在我以前面试的里面就是说他他就是怎么样就是说到底我到时候要给过还是不过往往都是跟以前的人进行一些对比或者就是说再看看他答的怎么样就是以那个chess system为例的话我大概呢就是会准备五个考点然后呢比如第一个呢就是 high level design,就是说那个肯定的需要一个working solution,就是说这个这个呢就是说这个东西呢并不一定需要perfect,但是呢他是需要这个design的at least呢是是可以work的啊,然后如果这个都没有弄出来的话这个肯定是fail的然后第二点呢我会比如我会考一下那个101 chat就是说这个flow怎么design然后第三点呢,我会考一下比如像small group chat,比如像是微信什么之类的,这种的话,它有一个上限,比如像是500人,这个500人非常重要,或几百人,上千人非常重要,因为如果能更多的话,这个design就是不同的scale,就是完全不一样的。然后比如第四点呢,我很可能会去考察一下就是怎么样,支持那个多端的那个多端的同步因为因为其实系统设计的话有时候对于専业一些的人的话他们很可能会考两轮然后有一轮的话可能会比较考比较偏比较偏那个数据比如像database schema怎么计算所以的话对一个组来说的话就不想就是说面比较类似的东西所以呢就是我可能就是不会去比较偏面那个database的东西但我想就是面一下就是说啊 多端同步的话因为chat application 或者uber 呀或者news feed 这种的话其实往往很多东西有一个很容易被大家忽略的就是说其实它的优化在它其实前端做了非常多的优化所以会那么快比如像前端都会cache 很多的很多的东西比如你把你的那个啊在Airplane Mode的话你其实可以看还是可以看到那些Track History啊 什么之类的所以我觉得这点是挺重要的这话我会考一下然后到最后的话就是呢我会考一下就是Online Present就是上线下线这些东西是怎么样实现的最后两点呢其实就是呢是Bonus Point因为其实在面试一个过程当中,我不知道对别人怎么样,反正你觉得最尴尬一点的就是面试官面试者就坐在那儿,然后大家就没有话可以说了,就是可能那个人,有可能是那个人答的太好了,或者如果是扣定题他可能就是答太好了但是cc的底站的话那内容如果就是不上言辞或者啥之类的虽然他底站的非常好然后就是就感觉没有啥话可说了这种的话就是总需要就是说有些有些话题去去考但是最后两点呢很可能就是基本上就很可能就是没有什么人能够真正的都cover,因为其实就depend on,就是说之前的那些讨论的有多深,有多有多少或者什么之类的 但是对一个面试官往往都他都会准备上很多的点啊好了,现在呢,下一页呢,就是说先说一下Hello Design,Hello Design呢,这里呢,就是相当于我就是一个去面,我就是个面试者,然后我会说一下我自己呢,会怎么样 approach这个Hellow Design。首先这个Hellow Design对于Tri-System的呢,就是identify这个chats system 跟那种比较传统的那种系统的是不大一样的因为传统的那些Facebook那种的话其实基本上就是Client发一个request然后呢 这个就是HTP的协议对吧但是呢,Tri-System,它其实有三方,首先呢它需要一个Sender,它需要一个Receiver,然后中间还需要一个chessurface然后呢这个System呢还是需要real time的,所以这里呢很重要一点就是说它的那个它的protocol就是就不能是简单的HTTP然后我们再看一下那个像下面啊对于这里就是说我一般如我去面试的时候呢我一般喜欢就是把一个系统的就是先做一个总体的一个分块啊总体分块呢就是什么意思呢就是说我会把一个系统就就分一下就是说啊看看能不能哪些系统是那个Stateful service,哪些呢是stateless的,然后哪些呢是可能是third party integration,我先讲一下就是说为什么需要做一些划分,我喜欢做一个对话分,
[45:00] 原因呢就是说啊其实就是说当你要scale不同service的时候就是说啊stateful stateless其实这是非常重要非常重要的一点因为如果这个是stateless比如像http的话就是stateless啊stateless的意思就是说他不需要存任何的那个状态然后你如果要扩展的话 你就你就可以Holigentally scaling 你就可以加一些server 你可以remove server 你甚至可以auto scaling就说我设计一个百分比如果多于百分之80的机器都都已经被利用了然后你就呢就是再加一些server什么之类的所以对于那个stateless的surfing呢是比较容易的然后Stateful Service对于这个问题呢往往来说呢有两种的解答一种呢就是web socket啊还有另外一种呢就是long pooling嗯对这两种方法呢其实它都是那种statiful的就是说如果用户断线了他还需要就是技术就说它原来是在哪里,然后呢就要重新连回到那台server,啊,这个系统的话其实对于在游戏,游戏领域也是非常普遍被用的,因为当你比如像游戏有个人断线了,然后在玩那个poker或一个游戏的时候,它是其实很多时候就需要连回到那台server,然后才能continue,才能接下去做一些,别的一个事情然后第三个模块呢就是三个party,这三个party也是比较重要的,因为就是说一旦你跟第三方,嗯系统打交道的时候那个就是这个很多就会产生很多的麻烦首先那第三方的那个系统呢它是不可靠的它可能就是你发一个request它可能就是永远都不没有返回了那你怎么办这个所以你是很对一个reliable system肯定是需要需要考虑的对吧然后呢就是说如果那个request fail呢你可能还需要不停的retry然后呢retry呢又会有可能有更多的产生更多的问题可能那个message呢会发了很多次然后或者就是那个payment的可能会造成double payment的所以呢就是说这就有挺多的一个考点所以呢这也是一个展现你那个啊展现你知识的一个机会啊之前呢就是是就大概说了一下我大概会会怎么样的分块然后至于呢如果真正是一个interview的时候呢那我肯定可能前面那些图我就可能而第一个图我可能画一下但第二个图我肯定可能可能就没有时间画了啊所以呢这个图呢是我需要画的图啊然后呢我然后我画这个图呢就是我需要呢就是要把这些考之前的那些考点我都那些点都需要啊不是考点就说那些feature要cover啊比如上去可以chat可以发push notification然后可以呢就是online offline还有那个嗯这个比较小 所以我 OK就是Trust surface 为什么这么设计呢?原因就是我觉得这很重要一块反正我去面试的时候我就希望就是一个比较structured way 就是说比较structure 这样的一个好处呢就是可能不会觉得就是有一些东西就是比较乱啊然后我是怎么样structure呢就像之前那个thinking process 我会把它变成state for stateless然后左边这个到时候发那个push notification啊 还要user authentication啊所以什么什么之类的这些都是stateless surface然后右边这个呢是Stateful Service, it uses WebSocket, and it contains two services. One is a service, it's the charge service, it's the charge of the service, it's the charge of the service, and it's the charge of the other one. And then Online Presence, it's the charge of the online or offline, and the change of the change.最下面的就是Storage,Storage我写的keyverestore可能并不一定特别的其实他其实更我觉得这里一个比较啊 最要决定就是说是选择sql还是nonseql啊因为其实这期,因为你想就是这是一个啊读少写多的系统就是有很多很多的写但是读的话你其实就一个人很快就读完了所以这样的系统呢其实Nonsequel就是是比较适合的而且Nonsequel的他的那个嗯它的速度比较快因为很多就是那个毫秒级或几十毫秒这样的话其实也是比较接近real time
[50:00] 他会往往都会实现一些cash什么之类的对这个大概就是这个high level design啊,然后这一点呢,这一页呢,我就是作为一个面试官,因为我,我之前就准备了比如说我想考虑一下啊就是这个来面试的人他懂不懂就是说啊是这个realtime是怎么样怎么样解决的对吧啊如果如果就只是说那个HTTP那其实就是说 那那个server是没有办法返回那个那个消息给另外一方的啊,这里呢,我可能会考察一下,就是说啊,那个web socket就是因为它是state for surface,那是怎么样?知道去连哪台server呢这里呢就会考察到一个非常重要的一点就是那个嗯一个Discovered的一个Service这种比如像是Zookeeper就是挺popular的一个东西我就会考察一下这个东西它到底就是对这块懂不懂当然并不一定要需要这样一个实现我只是就这样一个考点就看看那个人就是会不会思考他可能会说可以存到cash里面或者就是说然后呢就是然后呢就知道从connect到那里这样其实也是可以的所以就是说这没有什么固定的答案就是说看看就是说是不是一个walking是不是要用作的解释对这比如像这是一个然后比如下一个好点的话我可能会简单的问一下这个GroopChat的那个schema的设计因为在这里其实一个是非常非常普遍的一个考点就是说就是说他你怎么样设计Primary Key怎么样设计那个Indexes,然后Groove Chat呢就是他其实这里呢有有两个就是非常非常有意思,然后独特也是经常被其他系统用到的,首先呢就是就是unique idunique id 呢 因为那个chinesis呢 它往往都是需要通过一个unique id 然后那个unique id 一般是那个time-thoughtable的 比如像snowflake或者那个cassandra的话有time的youyouid 就这种就是根据那个啊那个时间差来来来判断那个那个message的顺序,然后这里呢就是说,但是呢你维持一个全局的那个global的那个UUI,那个unique ID其实是比较困难的因为这个这个量是非常非常大的然后也有可能会造成那个single point failure然后这里呢往往的很多公司呢他们就是这里一个考察点就是说其实你是不需要就是一个全局的一个unique ID的因为当你chat的时候你往往就是跟你的一个朋友或者你在一个group里面所以你只要那个ID的话,只要在那个group或者地面用Dick就可以了那是一个靠点,然后另外一个,那个考点的可能就是说你怎么样那个你怎么样就是一个partition你的table这样的话呢 那个可以满足你的那个access pattern比如对于group chat里嘛其实大部分的那个操作都是往往围绕着那个那个Channel ID就是比如说返回所有的这个channel里面所有的message然后呢按那个时间来排一下,然后这样的话呢,那个Channel ID就是那个partition key,然后Message ID它是那个timeUID,这样的话它就可以做一个很快速的搜索,对嗯啊这里对于group chat呢还有一个考点呢,我可能会考一下呢,就是说啊,就是说怎么样存最简单的存储就是存一份然后这样的呢比如说我优秀A给优秀B优秀C啊都在那个group 然后呢就是存一份然后优秀B呢就是做一个quart就是selectStart from database, flow是从A,然后2是B这样可以,然后User C也是做一个同样类似的query,但是这样的话呢,可能就是不是特别的efficient的,因为每次都要去读 然后不是特别的有效然后这里呢也没有什么最优解 因为在这里呢就是需要做一个trade off就是说对于那个比较小的一个group像微信啊是他们上千是500人很多上千人估计也没有什么问题他他所做的呢他就是没有很多的copy就是说啊在群里的每个人他的那个数据呢都会做一个copy这样的话相当于就会有很多的copy但是这样的话呢他的读就很快然后User Experience就很好啊而且而且那个Storage其实是最chip的所以的话这是一个对于对于一个小的那个chat application的话
[55:00] 可能是一个是比较好的一个设计,但是比如像discord这种的话,可能这个就有问题了,因为它可能有几十万或几百万的那个,大群啊 你那个数据怎么存,这可能也就是需要考虑的一点,就是说这有很多的一些考点,就是说你并不一定就是说要给出最优解或者什么之类的,但是你如果就是考虑到一些不同好多点就是你都考虑到的话就是会有一些不同的加分项。好然后这里的话基本上就是那个bonus point了啊我之前也说过就是说啊其实这一点就是很多公司有点面试的人也具有点忽略这个其实作为前端的人他们是比较熟悉的就是说其实前端对于Uber对于Newsfeed这些Chat Service 前端都有非常非常多的优化,然后这些优化呢就是会有Cache很多东西,然后就是说你可以存就是说我上次就是读到哪里的消息在这台机器上,然后我在手机上又是读到哪里了,然后这样的话就是,这样的话就会很快,然后这样的就是也是一个考虑,尤其对于那比较senior一点的engineer,而且对于比如像startup,或者一些比较,尤其做一个,如果是考这个题,如果你是面试那个,Chat的公司或者啥的话,这些其实都是比较重要的。啊好然后还有一个bonus考点呢可能就是会就说这个online跟offline这里呢也是会设计一个比较啊比较 popular的一个一个一个pattern吧就是publisher subscriber就是说啊我那个用户A上线了然后呢我需要把我的那个上线的消息发送给那个所有的所有的那个subscriber因为这里其实到bonus point这里其实可能能说的时间已经比较少了这种的话往往的话我可能就是考虑考的考察的是他的那个那个广度就是考虑就说有哪些点就是他可能会也会考虑到而不是就说要把一个一个话题考虑的特别深啊这里还有一个就是说如果就是online presence这里有一个非常重要的就是说啊就是非常重要一点的就是说啊online presence 这也不是简单的就是说你online了然后你就马上发一个消息offline就马上又又发一个消息 因为这个Network呢要记住就是永远的是unreliable的所以呢就是说如果他一个user他是online offline不停的不停的动的话那那个另外一方可能就会不停的收到这个notification 用优质是很差的然后有可能会问一下这个怎么解决然后业界呢往往做的就是他们会introduce 一个 heartbeat比如就是每三秒钟五秒钟然后发一个 heartbeat 然后呢如果一直respond 那就是证明是online 但是在一定时间内他如果被不respond 那就是说这个就是disconnect了然后那就可能就是就是offline,然后到时候再发那个offline的消息对啊 然后这个这个一个就是这样的可能就是一个面试的过程然后对一个面试官呢然后在一个在一个公司里面呢啊 往往会就会需要需要写那个interview feedback,而且interview feedback,尤其比较成熟一些公司呢,他们都会有一个scorecard,上面呢很可能,那个像素会很多很可能有10项以上我就挑几个就是说大部分公司很可能都有的一几项对于C-CM提侦啊有一项肯定会考虑会有呢就是communication,就是说这个过程communication怎么样如果communication 不好的话其实这也是一个比较大的一个read flag 然后第二点呢就是肯定会有呢就是一个需要一个是working的solution 就是说这个东西呢至少是可以work的不需要并不一定需要最佳的但是它至少需要是work的 然后第三个呢就会评价一下就是说你有那个solution以后就是说你有没有profiere的那个reasoning 就是说你为什么要这么设计 然后呢你有没有给出那个就是合适的正确的理由,然后最后呢,可能会有一点的就是说,有没有考虑这些 trade-offs,然后有没有考虑这些 optimizations,这些呢,往往很多时候都是会贯穿在这个interview的之间,尤其对于更senior一点的人来说,这些 trade-offs跟optimization呢,他会可能,会会考台的更多一些这也是作为一个评价啊然后基于这些这个School Card 然后呢 民事官呢就会打个就会就会去去给往往的很多公司呢就会有有四个就是说strong yes yes no
[60:00] 他们大概是怎么样呢他们就是很多公司他会提供一个guide line就是说比如strong yes就是说把所有的feature都implemented都是那个design cover了而且是scalable solution或者把大部分的都cover然后第二点呢可能就是说有deep dive有一些就是说有展现了就是个人就是非常非常深刻的理解这种的话往往其实也跟个人的背景有关系如果比如像是对网络很熟悉比如像web socket那些层就是特别特别熟悉或者database特别熟悉对于machine learning 特别熟悉然后有展现就是说非常strong的一些东西这样的话这些都是非常positive他可能会给个strong yes其实给strong yes的是非常非常少的其实我觉得很可能可能十个里面可能有一两个即使被录取的人里面可能strong yes可能也就一两个至少我之前在工作公司可能是那样的然后回去也然后yes呢可能就是你把很大部分的feature都design出来了然后呢good understanding然后呢讨论了一些 trade-off觉得讨论的还不错还有呢就是就是对有一些有一些地方还是挺深刻的到最后那个fail的话其实就是可能就是没有workable的solution就是你没有设计出来然后呢或者就是 trade-off没有讨论或者那个solution不scalable大概呢就是这样一个面试的一个流程模拟了一下对我这面我这面说感觉说有点就是也加点comments啊就是加点那个data size就是大概可能就是strong yes可能就是不到百分之不到百分之十的样子百分之五的样子然后strong yes一般来说不同公司不一样了但是一般来说我知道这个相对来说在Uber啊在Google都是这样子就是说如果你不嗨这个人我想quit的这种感觉就是你不hide这个人我想quitstrong no就是如果你hide了这个人我要quit这种感觉但是我们经常debrief的时候有人给了一个strong yes然后这个人还是被hide然后有人给了strong no这个人还是被hide了所以说这个就是interview总体来说不管是interview还是debrief它不是一个sense它不是一个非常有时候不是一个非常reasonable的事情就是很多时候就是有点像就是很多时候就是如果你fuel掉一家particularfuel一家你其实就是move on就可以了就是很多时候就是大家会到了一个consensus就是yes和strong yes区分不是那么多不是那么强然后strong no和no区分也不是那么强然后很有可能这个人本来是strong no的然后跟其他人一calibrate一下就convert成一个no了然后最后就最后就变成一个soft yes这种也是偶尔会见到的就是no可能没有起到作用于soft yes了然后还有一点的话就是还有一点的话general speaking来说system design这一轮是非常非常重要的就是如果其他轮都是yes特别coding轮是yes但system design这一轮是strong no的话一般来说通过的可能性就是你的yes和no也是有weighted这个weight一般是面试你的人的senior程度这个是相对来说比较直观的然后大部分人都不会是清一色的yes清一色的no大部分人都是一半的yes一半no所以你差不多有两个strong yes基本上好像可以被hired掉了剩下的你比如说五六个人面试有两个strong yes差不多基本上这个人基本上可以拿到一个offer对然后Alex因为刚才没有机会因为这个好像technical issue,我没办法去提问,其实刚才有几个问题,这个chat system其实还是读的比写的多吧,尤其在group chat里面他读和写的比例很有可能是在这个channel里面参与的人说比如说如果这个group chat 500多人的话其实他可能只写了一次但是这个message可能被500人读了一次你说这个对我其实当时讨论的主要是针对那个就是1on1的就是1对1的对你说的那个group chat呢确实那个读也是比较对这个是挺好的一个point对然后然后第二点我就是当时有其中一点就是UUID其实可以就是generate从一个universal unique ID这个其实可以通过数学的UID来generate可以在保证distribute system连不conflict吧可能我刚才听错了但我好像基本上我觉得好像就是像snowflake的ID其实它也是最最最最基本的这个version 1的这个UIDUID version 1就是拿那个所有机器的Mac ID然后再加上它timestamp就是UID version one的这个UID所以其实
[65:00] 我看到你的design是ID是有个Zenware Service是ID Generator,这个当然是Worker,但是其实也可以用UID Generator,这样的话机器之间不需要community也可以generate unique ID对我觉得这一点就是其实比较如果像Cassandra那种的话它在那个DB内存它是可以就是有那个拥有ID的对吧但是呢 就是有很多的那个 有很多其他David的话 其实他可能就是没有好没有这个功能所以他很可能还是需要一个IT的generator,比如像Discord他的那个Message ID他用的就是Snowflake的ID而我不是很清楚他具体是怎么实现的但是他很可能也是用了就是类似的一个方法他就是用Snowflake他就专门的Snowflake然后是做一个就是产生这个一个ID的然后再做一个分配这边我想说一下就in case大家confused了就是snowflake的ID这个不是不是snowflake这个是twitter的snowflaketwitter propose的一个Snowflake ID,然后这个ID实际上和就是你传统使用的,比如说UOIDV4的话不同点就是说,这个其实含了一个partial的一个timestampPortual order timestamp,就是这个 timestamp是一个跟那机器相关的,你不能如果你不能用它来做TotalArter的排序,但是你大概有一个就是有一个顺序可以用这个做,所以这个snowid是那个id,snowflakeid是那个id指的是好,这边的话,我也简单就是summarize一下,就是Alex的这个就是这个讲的这个Chat system和我在那个就是讲的design slack视频的不同吧我觉得我们可以讨论一下其实design slack是我在uber面试system design的一个default question就是如果我看所以说这个其实我还是挺有挺多datasites的就是天堂对大家下次的我觉得就是总体来说如果你上来的话直接画architecture啊然后把它变成一个state for service其实已经超过30%了因为剩下30%的人首先就一直纠结的点就是怎么样让这个lentency拿到几毫秒之下什么十毫秒之下怎么样达到然后他就想的是直接从开一个web socket从clientA send到clientB了这个就是没有一个centralized server这个其实就filtred到至少30%的人了然后另一点来说其实这里面我觉得比较tricky的一点的Alex我看到他喜欢问就是multi device但我这边喜欢问的一个fullup question是highlight unread message好,谢谢,谢谢,谢谢也是比较有趣的一点就是这里面其实我觉得在这data model这块是有很多有趣的地方就是比如说你需要呃我常用的话就是chats message 肯定是有一个data model 的user是有一个model的然后这款channel是有一个model的但是channel就是哪个user属于哪个channel我一般会定一个叫channel membership model这个我是想教定其实相对来说slack我自己也实践过一个slack自己扣了一个slack,然后也是deploy到我之前的一个我之前做的一个上码的,之前做的一个side project上,也是用channel membership,然后你的highlight unread message就可以放到channel membership上面就是作为他其中的一个field,就是像是last read message但剩下的都是unread message嗯我觉得这边就是有一点稍微有点不一样可能我这块设计的时候更多多就花了很多时间在非常detail的data model上面Data model和database这些点,因为可能就是我相对来说我的视频上的focus,对,然后我觉得Alex这块focus了很多一些就是在这个比如说真正做一个slack上面常见的问题是吧,你matter device啊,然后这些怎么样显示online presence啊这些地方,然后这块有一些非常非常非常就是常见的这个跟这个slack相关的问题,其实这位Alex做了很多focusOK对然后我觉得其次的话我觉得iX这块讲的很好一点就是设计的时候怎么把Stateful和Cless这点分开其实这个就是System Design里面讲究就是很多这种Kpy,K constantpy,比如说separate concern然后如果你设计的时候经常考虑到Siferous Concern其实是很好的设计点然后比如说这个data model的话这个data model选database这块也是相对来说比较好设计然后data model这块设计的话你看一下他的lookup是吧,read/read ratio和lookup pattern,然后再放到database里面和datamono里面,就这一套设计下来是非常常见的设计点然后我觉得我自己的话我自己讨历问题的时候我很多时候可能希望希望的就是说把它这个常见的API和常见的access pattern拿出来然后把data model设计出来然后看你对这种这种常见的访问这个pattern你需要做多少的读你需要做多少个draw如果你需要
[70:00] A giant可能就可能skill出去就很有问题了如果你要做三个table join这肯定是不work的肯定是不能skill的这是我这个感觉稍微有些不一样的地方好Alex, you have something to add? I also want to add a little bit. I think this is a very interesting thing. You have a different topic, you might ask the things you ask 10 students, completely different.然后他考察点也不一样 然后所以的话就是说你及时知道即使可能,所以这就没有什么答案,就是说,所以就是一个compensation在一定程度上,所以很多时候呢,我觉得去一个公司面试前呢最好就是把那个公司的那些那个tech blog 如果有的话可以都好好读一读看看他们是怎么样实现的 然后他们用的是什么东西这样的话可能就是比较容易就是跟他们说的东西更加更加吻合一些Exactly,我想Iko加Alex的一点,其实我当时面Uber的时候,我面Uber的时候,fulltime工作时间就两年八个月嘛然后就是然后这样的话因为我当时读了一下Uber的那个skimeless plug然后特别focus on payment 那块所以他正好面我这个payment然后就直接把Uber的skimeless那块讲了一下然后这一轮拿了个strong yes然后相当于是直接upgrade了一级到senior了所以当时就是对我面uber之前其实fulltime大概两年八个月左右就是按理来说是相当比较margin那块,SD2和senior之间然后对然后Alex我觉得我们最后可以闲聊一下就是可能过去面试里面就是比较有趣的System就是意见的比较有趣的这个Interview的Experience或者是这个比较Impressive的Interview Experience然后大家有什么问题的话我们也可以解答一下就是大家有什么问题的话可以到留言框这边然后可以解答一下好,我先说一个就是我特别惨的一个去面试,我就不提哪家公司了,不过那个experience就非常非常糟。然后反正就是一家公司,然后他就面了我一个算法题。然后我当时可能工作了可能两三年吧。然后然后那个就是我当时工作经验挺少的,那个题反正就是非常的难,我现在也具体不记得是什么题了,反正就是答不上来,啊,就写了一点点,然后,啊,然后那个就是那个interview就是态度特别差,他就是说,啊,你怎么这个都不知道,那个不知道,反正就是,我从来没,没见到过就这种隐患,就是他就是,就把我就是说的一无是处,就是我去面试,你知道我当时一个什么感觉吗?我当时就想上个厕所然后赶紧去跑我当时就是我反正就说我当时就说我肯定不会来你这家公司其实你找我我也不来个公司但是我就想赶紧回去然后给HR写回戏了然后就跑了因为我觉得这个针对是非常的rood然后这就是最糟的一个经验,就是说我觉得这个就是什么其实什么经历可能都会有吧然后反正最后我也没有拿到offer然后但是呢就是这也是一个经历我觉得就是说当时的话因为我其实工作经验也挺少的然后也不是很不错如果是现在的话这种的话我觉得我肯定会跟HR反映一下,就是说这个事情就是说,我其实并不care,我自己拿不到offer,但我不希望这样的interview,就是去bully那个好,Interview E,对吧,因为这种的话会造成非常大的影响,也许有很多人的话就会造成很多心灵创伤或什么之类的。对,所以我觉得就是说这个就是一个所以我觉得这个就是说,也不要就是说有时候去面试了,也就不要就是觉得气馁,很多时候并不一定是自己的问题,很多时候其实根本就是不是自己的问题,有可能就是那个interview有问题,有可能就是不是good fit,其实受到挫折呢,我觉得就是把它当成一个learning experience,然后呢就是move on,然后可以用到下一个。然后还有另外一个例子呢就是说我可以讲一下就是说我怎么叫推特了我其实在我当时面了推特但是呢 这公司正好去IPO了然后去IPO他们就不招人了 就heiling free 我面完然后就把我晾在那了然后呢 我正好那时候我面了Apple 然后拿到了Apple的offer然后Apple过去工作几个月以后呢,然后推特又回我说,我这边又有head count,然后你又可以再回来。他当时其实聚了我,然后呢,我在Apple其实工作了几个月,然后又回到推特,因为我更喜欢推特一点。所以我觉得就是说在面试,一个公司据你当然但是推特也没有给我任何的理由就是说这个没有被列取然后到后来呢又录取我了也没所以这个时候其实很多公司有时候
[75:00] 它并不是就是说因为你没有面好或者什么之类的,有可能就是那个那个position不open了或者什么之类的,其实有很多很多的原因的。所以我想说就是说,呃,这面试是一个非常非常苦,非常stressful的一个过程,希望呢大家就是能够相互支持,然后呢就是,不要把事情当成太personal,然后呢,就是不停地面,然后呢,就是总结一下,然后呢,就是不停地前进,总有一天你会找到那个你非常满意的一个工作的。对我我我比较赞同我非常赞同觉得X总结得非常好嗯我我这边其实有很多这个面试比较悲惨的经历被人拒的经历然后这个啊我觉得其实来说任何就是给你就是面试完以后我觉得至少不管是为自己好还是相对来说给面试官留一个比较啊这个posit proactive的那个就是一个impression其实你都可以问一下就是啊可以follow up 一下就可以可以跟面试官follow up 一下是吧就是啊之后的话比如说留一个email然后问一下问题如果你答的比较好的话,你可以问一下,follow up,他觉得其他哪一块可以improve,如果你答的不好的话,你可以问一下,觉得他的正确的solution是什么,这样总是一种比较proactive的经验,我自己面试的时候,相对来说,我比较喜欢跟candidates多聊一下,额外聊一下,然后留一个email,如果他之后有一些follow up question,也可以问我。然后我相信大家之后自己要变成interviewer就是自己要变成面试官啊也是相互来说就是带入别人的这个数考虑一下就说面试其实面试其实更多的时候是一种就是讨论的过程不是来说你居高临下的看看这个也不是一个筛选的过程,先是一个筛选过程,但是更多是一个考验的过程从公司的角度来讲是一个商业过程从你的角度来讲是一个考论过程你希望去共同解决一个问题这样的话总体来说不管是给Candidates还是给你自己的impression和这个experience都会好一点,总体来说确实对然后呃我这边其实有很多比较有趣的这个这个system interview 的经验啊intero 的经验吧 general interview 的经验嗯我想想比较有趣的就是我记得我们当时的时候就是我们这个公司我们Uber的公司的一个VP当时来面试的时候就是然后我才第一次知道就是我讲两个就是两个非常high level 的人的面试第一个面试是Uber早些时候第一个CTOTUN的面试,TUN是Uber第一个CTO从1913年到19年他离职的时候然后我当时听说他的面试的时候,他跟别人讲的时候,后来那个人就讲给我说,他他串来面试的时候,是面试了整整一周,也就是说他首先跟这个TK和所有的这个管理成员,聊了一天,聊了一天以后呢,TUN就是TUN生活的地方跟他一起生活了一周,这种感觉。然后他决定说,我觉得这个确实可以把他招过来做我们的CTO,然后他把TUN招过去了,最后TUN也是非常passionate也是非常这个他也是非常这个这个真诚的一个人就是如果被他闷着管车他非常非常真诚的一个人就是他基本上就是尽他自己的能力就是非常替别人考虑尽他自己能力把他就是把Uber做得更好的一个人总体来说然后第二个的话是这个当时这个data组的一个老大就是这个这个back-end组的一个老大他是从之前是Alexa的那个Amazon Alexa的头然后他他过来以后他讲了一下他来这个Uber的面试经历他是从CEO到CTO面试了整个14轮面试14轮也是非常有趣他讲他自己作为这个作为这个VPo Engineer来了来Uber面试整整14轮然后其中有些technical论可能相对比较难,他可能就忘了,他有一个stuff engineer,面他这个design论,总体来说比较难,相当于是所有的管理层都面试了他一遍所以说我觉得讲这个两个的事情就是说也给大家提供一下不同的这个这个就是其实你到任何一个level如果你是还是要去面试的,并且你的面试只会变得越来越难,并且对你的这个个人的这个个人的这个考察,对你的motivation的考察,对你的vision的考察对你工作习惯的考察其实更多一点这个只会越来越多不会越来越少然后包括对你思维方式的考察所以我觉得System Design相对来说最有趣的一点是System Design的思维方式是可以你去carry on的就是不管是你在工作中你像迪赞slack你完全可以在工作中遇见其实这个我太太的公司的话他其实就自己迪赞了一个类似slack的东西这个迪赞的话其实也非常有趣啊然后就跟我写的proposal我proposal上面有些借鉴他的就是还是比较像的然后他其实就是
[80:00] 就是你这个Sysom自然可以去应用到那个里面然后其次的话你也是这个System Design其中很多一部分也是你之后做这个跟其他其他这个co-worker做讨论时候的这个能力的培养是吧包括你这个system design面试的过程和你和你跟co-worker讨论做这个engineering requirement review的时候是吧engineering design review 的这个这个过程是完全一样的所以这个能力其实是是可以carry on的就可以到后面也可以有用的好好,我们来回复一下comments啊,这面的话,Kenn说,想问如果找Big Data Engineer, Data Platform, Entger职位,还会考Design Twitter, Design Uber, Design Slack, General System, Design Question吗?这个看公司和看组。一般来说的话,我当时在这个Streaming Database Company的话,我们问问题是不喜欢问这个就是Design Twitter,Design Uber,Design Slack的很多时候问的是一些比较底层的这个就根据你过去的工作经验是吧比如说你在这个Execution这块经验的话可能问一些Execution的问题如果你在这个poster计划有机会可能问一些poster的问题或者是比如说你之前在这个Ocean Base,Ocean Base这个工作过的话,或者之前在PolarDB工作过是吧然后我们可能会问一些相关问题,不太会问这个主要general的问题,这块的话这个可能还是一个general的backend的这个Generally is the backend interview question但是这个也看有的公司的话还是有的公司的话即使他是招非常specific职位他也可能会跟一些general的问题这个跟面试官相关其实面试官问问题的时候,公司是不会指定的,大部分公司是不会指定的,你自己问你自己最熟的Calibrate过的问题,而不是说公司指定一个问题,然后你只能问这些问题。可能大半公司都是这样子嗯Alice 你有什么想补充的吗?我觉得就是说这个可能也是,我觉得跟你说差不多,可能就是还是看公司,像你说这种Data Engineer,可能就算是一种Specialty,然后有一些公司它的Specialty,它可能就是考System Design,比如Machine Learning,它就考Machine Learning,但是我记得可能Facebook它是考,它是需要考一轮specialty,但是它可能还会考一轮general system design。我觉得很多公司,它会给你那个,它的recorder会给你发一下,就是说它会具体考哪一轮。我觉得那样的话可能是最准确的,就是说这个公司考不考。对,这边的话,这个问题是一致的,我们这块也就不回答了。其实很有可能会问你一些前端相关的问题,但是这个是不是问system design问题也完全看那个组合,看个人。一般来说,甚至有的公司可能只能要求问提顾忠的问题,这样的话其实也跟公司相关,但是更多的是跟组合个人相关好这面的话说我现在在AWS工作平时都用AWS现有的service不熟悉市面上别的开业软件有什么好的准备面试吗准备建议吗如果使是看网上的资料没有实际使用的经验的话,很容易被被闪。嗯这个的话其实也是总体来说也是呃大部分人问的一个问题,就是说我只有三年的工作经验,或者只有五年的工作经验,我只熟悉整个大机器中一个小部分,一个小部分,我对这块比较熟那我现在问了一些这么high level design slack的问题,我其实经验不太多,那怎么办?其实你把这个分成两部分来做,我个人建议分成两部分来做你首先对System Design这块其实就相当于是解题一样你把这块搞熟,但是你要同时去找人不停的去polish,实际上System Design,你很难去做题,也很难像做题一点,你把这个问题写清楚以后就能打好,不是了,你需要找人去practice,你需要去找人practice,是吧,你不管找自己觉得比较熟的peer,或者找觉得比你能力强的人去practice,你practice熟了以后呢这块其实是可以面试这个system design 的部分这是一部分,另一部分考察的呢,就是对你的project,你的驾驭程度你对自己做的project加益什么如果你只有两年经历说你自己做的一个big data platform里面包含了flink,hadoop,hive,spark,你全部都做了那这作为面试官来讲我基本上这种简历也pass掉了这个除非你之前的话什么三年读完清华什么什么然后读了一个什么CMU PhD啊这种我可能会考虑一下,否则的话你来自一个不知名学校其实我在国内简历见挺多的来自一个本田我没有听过的学校做了什么一个data system全部做了一遍这个我基本上就简历就直接pass掉了这个可信度太低所以说你可以把它作为两部分来准备是吧对你的project那块你要就是如实的讲述出你在project碰见什么如果你是其中的这个Mate Coder是吧,就解释一下,你的Coding有一些trade-off是什么,然后你是包含了Design, Implement, Maintain,是吧,你这些计划可以
[85:00] 解释的更好,如果你只实现了其中一部分,那你解释一下你这其中一部分那部分已经怎么样做好了职责,就是不要夸大太多是吧,你可以简单夸大一下影响力,但不要夸大太多,这样的话别人的话会觉得你在扯淡是吧,在扯淡的话自动就alter field 了基本上如果别人觉得你有任何侧单的话这个Fill基本上就Fill掉了好比如说很多人面试的时候说他对Cassandra很熟,然后就对Cassandra怎么样做resolve conflict和timestamp这种,用last threat win这种有什么问题都不熟的话,其实这个就直接fuel掉了。Alix有什么想说?这一点我觉得就是说系统面试的话,我觉得其实最重要的不是就是说是用什么,我觉得它其实更好的一种是一种思想就说其实并不是说你选Sequel或Non-Sequel,就是说有什么是选哪个,就是说其实对于大部分的应用来说你选哪个都可以,但是重要的就是说就是说你为什么选这个 然后把那个理由弄明白然后我觉得把那个理由弄明白的话就是非常的重要 所以就是说 比如像你带比如在亚马逊工作可能都是用的他那一套对吧如果只是用那个框架,那可能不明白它具体怎么work,那可能是一个问题,但是如果你明白,比如像DynamoDB,它大概是怎么样work的,对吧?一个问题的对对赞同好然后下面有一个问题说请问系统设计里面有没有好的resource用来mark因为没有标准的NPC没有接触到distribute system不知道自己准备对不对这个其实确实是比较难的一点就是比较难的一点,我建议是觉得就是我这边我觉得比较实用的建议就是说你找一个比你强的Friends,然后让他推荐一个比他强的Friends,然后尝试去mark。就是你希望每次mark的时候,你的那个面试官然后给你提供出一点没有想到的一点或者是能提供一出非常有insights的一点一到两点这样的话它能显示的才能比较有效果否则的话确实来说是没有效果的然后这个其实和工作是一样的就是我三号是大家很喜欢问我一些工作经验就是很多人问的问题是我是不是应该跳槽了,我觉得我现在工作没有,就是我不知道工作有点迷茫,是不是应该跳槽了,我觉得这个,我觉得这个比较好的一个criteria,就是看待的criteria,就是你不要跟别人比,你不要跟,朋友也不要跟你认识的牛人比,也不要跟自己认识的比较弱的人比你跟自己比,如果你过去跟过去自己前一年的比,去年的比,如果有很强的进步的话,那我觉得你还是在这个组或者在这个公司但是还是有很多的发展空间的或者是跟三个月前的自己比出来如果你觉得过去三个月自己还是非常passionate去工作的话或者是比三个月前的自己有明显的进步的话那我觉得这个在组里面还是有比较大的发展空间你可能可以再多学一段时间然后再考虑其他的选择然后这边有一个问题说,请问Scott在国内面试高级别的工程师系统设计环节与美国一样的?比如国内一般有阿里云和自建计方,国内 somehow我接触的人对阿里云都很鄙视,就是不用阿里云,有多个原因吧,总体来说可能阿里云的开放程度还是不是很多,其次的话他们很多做 business 其实都在 AWS 做的,不是在阿里云上做的然后系统设计环境和美国一样吗在国内的话因为我之前做的是streaming database所以不考系统系统我现在的话我现在在想一些brainstorm一些其他的这个因为我自己在自己solo是吧,现在solo一个stuff,我再brainstorm一些其他的东西,如果我设计的话设计系统面试题的话我可能会尽量设计一个我从面试官的角度来说比如说我真的要配这个candidates说我配candidates雇用candidates的话我设计面试题我会设计一个不效很难但是最好市面上没有的题这是最能考察出这个Candidate这个水平的就是如果这个Candidate见到这个题那他其实回答的话这个不管答得怎么样其实可能不是他自己的思考所以我从我过去面试观察的话我会找一个这个Candidate从来没有见过的题然后来看他回答怎么样,然后跟过去面试的几十个case做这个BaseLight进行Calibration,然后最后决定一下这个Candidize解决的能力,所以说我觉得这个
[90:00] 如果我进行面试的话,我可能会面试是这样子的我看看还有什么其他问题好,这个其实也跟问题不直接相关了然后我们这块有另一个问题是Adam问说,Engineering Block有没有特别推荐的公司,Facebook,Airbnb,UberAlex,你计划有什么想提的吗?对,我觉得这三个是很不错的,Netflix也很不错,然后那个亚马逊他的那个AWS,他会有很多的那个他的视频,AWS的那些视频很多,关于Database的也很不错然后还有的话,很多公司做那个Tech Talk,他们在那个叫什么我想想想我比较喜欢看,叫InfoQ,InfoQ是不错的,InfoQ不错,我觉得这对然后那个我最近比较喜欢看一些就是Kubernetes和CNCF系列就是在Kubernetes上CNCF系列我觉得他那些talk还是挺不错的然后有一些具体的talk其实也挺有趣的但是可能跟这些开源的tool更specific有一些languagetalk比如说这基于Rust的一些REST的这个有一些talk还是蛮有趣的然后基于Language Go有一些talk也蛮有趣的然后基于Plikhouse也蛮有趣的总体来说还是有一些比较有趣的一些YouTube talk也不错的然后Engineer Block我觉得Jobbox engineering block也是不错的然后我记得有一个high available一个一个一个一个Aggregation website它也是Aggregate的很多就是Reading不错的highscalability.com对,highscalability.com它上面也aggregated很多不错的这个block reading好,我看一下还有没有额外的comments这块有一个问题说问到一些非常非经典的题目比如说怎么样设计一个跟火星的通信设备之类的之类的我觉得这边可能是有一些information的一些差就是我这边是没有任何我个人是没有任何通信的背景的那你可能说你有没有一些knowledge就是他面试官知道但你不知道的有一些assumption和knowledge面试官知道你不知道你可能先把这些问题问清楚然后我觉得这个就有点像brainstorm的一道题我也觉得brainstorm对我觉得这个里面我让我想的话我觉得火星通信设备其实最重要的是你怎么样排错就是你这个首先你得把信息传过去但你得保证你接听到的信息和你传的信息是同一个星期是吧然后其次的话因为在火星中你其实有很多那个我记得是干嘛射线什么的你其实整个data就propted了这个其实你其实这个排序你可能需要就是这个error rate就会高很多是吧并且这个我记得当时记得在里面,甚至在CPU处理的这里面就在CPU处理的那块都可能会crafted在register那层就crafted了这个其实也有可能然后最后一个问题就是这边有个同学是请问在职业生涯早期的时候选择方向有什么额外的建议那我先回来一下吧就是我觉得这边职业生亚早期的选择的时候其实你的可选的是比较少的就是很有可能是你只能选就是录取你的公司的那块录取你的主然后他那个做的问题你先对那块进行研究然后把那块研究透了然后做出一些贡献然后这可能是你的初始选择但是你确实又可以看一下其他组的选择总体来说我觉得这边的话我觉得可能要看几个方向最重要的是你要对这个事情真的很passionate就是变成你的mission的一部分我觉得这个其实对Alex和我是更为重要的因为其实自己做startup的话你做什么都可以但是你要做的做的有没有把它变成mission的一部分就这些事情再做五年再做十年你是不是还是能很passionate的这是很重要的一个很重要的一个选择的一个criteria我觉得像刚才Alex讲的时候他当时做hedge fund自己做stock trading的时候也是觉得stock trading不能把它变成mission的一部分然后他选择批味的做其他的事情这个其实对你来说对junior candidates,junior engineers也是一样的你做的东西能不能把它变成passionate变成mission的一部分
[95:00] 你比如说你做比如说做video processing这块,你是不是对video processing非常passionate,你觉得能做5年10年,分成20年如果不行的话你可以花点时间去pivot是吧然后其次的话我觉得作为一个engineer来讲任何时间进行改变都不是太迟的因为你的职业生涯可能至少30年是吧如果你不打算retire early的话至少30年30年的职业生涯的话,其实你花其中一两年甚至五年时间去订一个新的东西,也是完全值得的。五年时间甚至十年时间去订一个东西,然后变成这个domain expert,也是非常值得的。所以说我觉得这个选择方向不是只有职业生涯早期才有选择,其实中期也可以选择,工作30岁也可以选择,35岁也可以选择,任何时候都不是太值。更重要的是你要对你做的东西非常passionate,Alex 你有什么想补充的吗?我觉得跟你 我觉得挺同意的然后我就补充一点我觉得就是说其实很多时候,总有时候也是身不由己,尤其在公司的时候,其实你很多时候,你选哪个组或什么之类的,其实很多时候都是你就去了那个组 然后到时候你就知道好与不好或什么之类的然后呢 你可能下一份工作呢 可能也是不停的 有可能会变 有可能就换个组或什么之类的我觉得就是说 你只有在那个position的时候 你可能才知道你真的是喜不喜欢这份这份工作或者这个东西,然后呢就是,然后呢你可以再做一个judgment,你是需要换的还是不换,还是,我觉得,我觉得一点比较重要就是,比较open-minded,就是说,接很多东西,我觉得没有任何人知道是好与不好,然后可能自己都试一试,然后,呃,去做一做或者看一看 我觉得这样的话其实当你看的多了 做的多了 我觉得你可能也就你想要做的事情可能也就更明朗一些,其实对于很多很多安Geneer,其实做了很多年,也还是很多人还是很模糊,其实这样也没有特别大的问题,我觉得只要自己开心,然后觉得干得开心就可以了。对,所以我觉得大家,就是我感觉在国内的时候这个贩卖焦虑的真的很有市场,国内真的将来说,不管是安Geneer还是个人生活的焦虑感还是挺强的我在国内生活了大概一百多天有这样的感觉就是非常焦虑但是其实我觉得其实大家没有必要那么焦虑,就是尝试上,就是focus上,就是我这边给的建议,就是我个人的observation,就是尝试work on something innovation,就是innovative,就是focus上一些innovative的事情。然后你就就可以避免被内卷是吧然后其次年龄不是一个比较大的问题我个人觉得年龄不是一个比较大的问题更重要的是你要找见自己的mission,找见自己的这个voice, find your voice, find your mission,然后如果你focus on the mission上,就是你自发的就是非常开始的做一件事情的话,我觉得总是会做好的总体来说总是会做好的,对我觉得这个工作一点,其实没必要那么强的年龄交流我觉得。我想补充一点,我突然想到说说到这一点,我觉得做的开心其实很重要,因为我其实在在Apple的时候,我的那个是一个非常非常senior的一个比director还要高的级别的一个人,但是那个人呢就是每次看到他都特别的不高兴,然后让我印象非常深刻,就是他就是我见过在做Tech里面就是最不高兴的一个人。我知道他肯定就是能力都很强,因为他否则不能做到那么高层,对吧?但是我就想我一定不能做得像他那样,因为他感觉特别不开心,我觉得开心一点,然后做一些事情,然后我觉得就可以了。好的好的啊那今天到这儿为止吧我们我们其实也是直播100分钟了非常感谢Alex然后我之后的话可能和Alex商量的再有一些额外的这个赛事到时候我们可以到时候看大家有什么额外的问题,我们讨论一下,我们可以对其中的一部分System Design进行一些更顺弱讨论。非常感谢大家也非常感谢Alex我们见到这为止非常感谢拜拜