大家好,
自从我回到Uber以来,很多人都来询问在Uber的面试经历以及如何准备。我已经尝试在这篇文章中整理了面试的经验。希望这能帮助到你。
准备对于Uber的软件工程师职位,你应该准备好以下两个领域,我已经提到我为准备L5A(高级软件工程师)职位所使用的一些资源。
数据结构与算法
- Leetcode Blind 75 Questions :首先在广泛使用和被频繁提问的数据结构上巩固你的基础知识,然后开始练习不同的问题。看看你在哪些地方卡住了,哪些领域在规定的时间窗口内难以解决。
- Grind75 由 TechInterviewHandbook 提供
系统设计与架构
- Grokking the System Design Interview : 通过参考这里提到的一些主要示例(如 TinyURL、Facebook、Twitter、Uber 等)学习如何设计大规模系统。
- 可以参考一些 YouTube 频道进行进一步准备,例如 codeKarle,ByteByteGo,TechDummiesNarendraL
- https://github.com/donnemartin/system-design-primer
我的面试流程总共分为5轮,这是针对L5A职位的,但L4职位的面试流程也类似。你也应该和你的招聘协调员确认整个面试流程。
第一轮:编码BPS (1小时)
这是淘汰轮,他们给我出了一道编程题,难度大约是LeetCode的中等水平。这道题可以考察我对数据结构和算法的核心知识,同时也考察了我编写良好类的基本知识,包括模块化结构、变量和类的良好命名约定等。
如果你通过这一轮,接下来的4轮将会为你安排,无论你在后续轮次中的表现如何。
第二轮:算法和数据结构 (1小时)
这是一个核心的软件工程轮次,主要关注算法和数据结构。前5分钟将用于介绍评委和候选人,最后5分钟将留作提问时间。你将有50分钟的时间来讨论与编码问题相关的内容。
我总共被问了3个问题。第一个问题是基于动态规划的,难度为LeetCode中等难度,我能够在接下来的15分钟内提供一个可行的解决方案,然后又问了一个后续问题,这个问题也在接下来的15分钟内解决了。到这个时候,我还剩下15分钟,于是评委又问了一个不需要实现工作解决方案的问题。我口头解释了我的方法,然后我们进入了我提问关于团队的部分。
第三轮:深度专精 (1小时)
这是第二轮编码测试,但重点不是算法和数据结构,而是你能否写出符合生产环境的代码。在你的代码中,会考虑以下几个因素:为不同的职责创建不同的类,遵循单一职责原则(SRP),为类创建对象并使用面向对象编程调用相应的方法,变量和方法有良好的命名规范,代码有适当的缩进使其易于阅读等。
我能够实现不同的类和方法,并同时使用合适的数据结构解决了核心问题。最后的10分钟又用来回答问题。
第四轮:设计与架构(新问题)(1小时)
系统设计环节对于L5角色来说非常重要,在这一环节中会测试你作为高级软件工程师的能力。这一环节通常涉及一个全新的问题陈述,你需要首先澄清需求,估算所需资源,然后制定系统的高层次设计。接下来,你需要深入探讨低层次设计,包括API设计和数据库设计。在所有这些准备完成后,你也应该解决潜在的瓶颈和可能的故障点,并提出一些解决方案来扩展你的系统以处理高负载。
第五轮:协作与领导力,设计与架构(之前解决过的问题)(1小时15分钟)
这一轮由一名经理主持,包括行为问题和对之前设计的系统进行讨论。
在我的面试中,前45分钟我们讨论了我之前参与过的项目,我在这些项目中做出的设计决策,我从中学到了什么,哪些地方可以做得更好,以及我现在会如何处理同样的问题陈述。
接下来的30分钟,我们讨论了如何应对领导挑战,如何更好地解决冲突,如何更好地与同事协作,以及团队中应该有哪些标准做法来建立良好的文化。
这些轮面试结束后,招聘协调员向我反馈了面试结果和 offer 的详情 🎊
我于2024年4月1日加入Uber,撰写这篇面试经历时(2024年5月1日),我在Uber工作已经一个月了。
此外,这也不是我第一次在Uber工作了,我之前从2021年7月到2022年11月曾在Uber工作过。这次我加入了不同的一个团队,但新团队和老团队的每个人都非常友好,非常感谢大家 ❤️
随时可以通过 LinkedIn 与我联系。再见 👋
祝你在未来的面试经历中一切顺利 🤞
共同學習,寫下你的評論
評論加載中...
作者其他優質文章