2023 雅虎软件工程师 软件工程师面试

2023 雅虎软件工程师 软件工程师面试

序言

在撰写这篇软件工程师面试技巧之前,我首先要特别感谢 KyleMo愿意让我参考他文章的结构。

2023 Web 全栈和 FE 工程师面试回顾.这是一篇非常好的访谈文章,我建议您仔细阅读。

背景介绍

  • 我之前的工作是为期一年零八个月的全职工程师,前半年在一个应用程序团队使用 Flutter 开发 IOS 和 Android 应用程序,后一年使用 React 和 ASP.Net 进行开发。
  • 他在大学时就开始参与项目,毕业后加入了一个新团队,担任了一段时间的前端工程师。
  • 前端技能:后端技能 7 : 3
  • 面试时,我是以裸辞的方式准备面试的。
  • Leetcode 近 300 个问题,其中一半以上是Medium
  • 毕业于成功大学电机工程系

目标

  • 加入跨国团队,用英语交流。
  • 灵活的远程工作(尽管我个人喜欢在实体地点工作的想法)

雅虎软件工程师面试

雅虎的软件工程师是一名面向前端的软件工程师。除了前端开发,他/她还需要接触后端开发和项目管理。

当我在 LinkedIn 上看到这个职位空缺时,我让朋友推荐我。我还从朋友那里了解到,这个职位是在一个跨国团队中,需要用英语进行日常会议,而且可能会有时差。

面试流程

第 0 通人力资源电话 → 第 1 次在线面试(2 小时) → 第 2 次现场面试(4.5 小时) → 人力资源部通知面试通过 → 台湾口头录取 → 美国总部实际录取

面试的整体体验非常好,人力资源部门会在面试前详细说明面试会强调哪些部分。

因此,我根据硅谷公司的面试技巧做了一些准备,又刷了一下 Acreage 的文章,让自己在准备的方向上不至于那么散乱。

每关相隔近一个月,在进入下一关之前,HR都会再次询问目前的意愿,是否还有其他面试在进行中,能真切地感受到HR在招聘方面的用心和专业。

第0關 D + 14

我与人力资源部谈了谈,大致了解到这个职位空缺是为一个使用本地编程语言的跨国团队提供的。

随后的级别将侧重于英语、本地代码、系统设计、数据结构算法和专业知识。

第 1 關 D + 33

一共有三位面试官,他们问了我过去的工作经验、前端和后端知识、信息安全和浏览器知识等问题。

第一部分:经验

例如,简历的经历就是详细询问的主题:

为什么选择 Flutter 而不是 React Native?

为什么选择使用 Tailwind 有哪些优缺点?

为什么要使用 MonoRepo,有什么困难?

面试官还会问到各种技术,并会结合工作经验进行深入探讨,因此建议在反反复复的过程中分析每种技术的优缺点。

我曾听过一句话,觉得很有用"如果你对一个问题想不出三个以上的解决方案,那就意味着你不知道问题是什么"。因此,对于简历中列出的任何经验或技术,我都会花时间温故而知新,重新思考使用它的背景以及是否有其他解决方案。

以下是简历中列出的知识,稍后将添加到简历中,例如 Kubernetes、Docker、TypeScript、PHP、Flutter、GCP....

第二部分:领域知识

继续做知识前端和后端的问答。

如果您对 JavaScript Async Await 感兴趣,请参阅 本条

如果您对 JavaScript 高阶函数感兴趣,请参阅 本条

第 2 關 D + 64

面试官共有四位,分为英语面试、经验提问和方案实践等几个部分。

第一部分:英语自我介绍和行为面试

面试时间约为半小时,包括用英语介绍自己和自己的经历。

不过,我一直在练习英语,所以这次面试不用专门用英语准备。

第二部分:简历透视

这一次,我们就简历提出了更深入的问题,包括 Flutter 的基本原理,以及我们是否曾遇到过 Android 设备和软件包不兼容的问题。

第三部分:HTML、CSS 布局

我使用 CodePen 进行了现场编码面试,但其中出现了一些小插曲。

恰好当时编写任何 HTML 代码都会自动生成多余的代码,解决这个 bug 花了十多分钟,最后我不得不打开我习惯的 VS 代码,完成了这个项目。

对我来说,最困难的部分是现场反应,因为我前一天还用 CodePen 练习过手写,但没想到会遇到一个 bug,让我无法写出程序,哈哈。

第四部分:数据结构和算法

我有刷题的习惯,通常使用 Python,但对于可以直观编写的简单问题,我会使用 JavaScript。

一共有三道题,个人经验题是一题易二题中的一题,第一道热身题是一道经典题,这边直接快速使用 JavaScript 给出两种解法。

第二题和第三题我都忘了,但都用到了递归函数。第三题也是一看就知道是个回溯题,由于刷题时对 Python 语法比较熟悉,我还问了面试官是否可以用 Python,结果第二题和第三题都提前做完了。

第五部分:JavaScript Dom 操作

这是我花了很多时间准备的级别之一,因为我知道这个团队使用的是 Vanilla JavaScript(纯 JavaScript),所以我花了很多时间去看 FAANG 的前端面试技巧,这也是一个 Vanilla JavaScript 测试。

虽然这一关有些仓促,没有实现最后的键盘控制,但还是与面试官进行了沟通,解释了如何实现键盘功能,最后的奖励分也得到了落实。

第 VI 部分:行为问题

其他面试官先下线,最后由技术经理主持面试。实际上,我单独准备了行为问题。

尽管很多人认为行为面试只问一些非常基本的问题,比如你在工作中是否遇到过困难,你是如何解决的?

不过,其实这类问题可以用 STAR 的方法来回答,还可以让面试官知道是否有跨团队、跨部门甚至是唯一的面试官,所以我准备了两三种常见问题的回答方法。

最后,我和面试官聊了三十分钟,介绍了公司、团队、技术 ....。当时,我个人感觉这部分面试的气氛很愉快。

人力资源部通知通过面试 D + 77

面试时,我被告知面试结果会在一到三周内通知我。但我在这里真的很幸运,我被告知在一周内就通过了面试,还被告知在我通过面试后,需要一两周的时间来讨论后续事宜,包括薪资、福利等。我还被告知,我将在一两周内得到面试结果。

雅虎台湾口头 D + 80

事实上,面试通过后没几天,我就收到了雅虎的口头offer!我想,这可能是因为批准的薪水已经与理想薪水一致,而且我不需要提出Compete Offer,所以速度比较快。

拿到台湾公司的口头offer后,HR还帮忙送到美国总部跑流程,还告诉我需要近一个月的时间才能拿到正式offer。

雅虎美国总部 D + 84

直到四天前,我才再次接到通知,美国的录取通知已经寄到了我的手中,我真的很幸运!

因为我自己预计 10 月底完成面试,12 月签署 Offer,明年 1 月报到上班。

但我没想到,时间表整整提前了一个月,11 月初我就收到了正式聘用通知。

准备工作

准备考试的方法是在考试开始时就准备好考试的预期内容。

此外,还建议看看国外是如何进行面试的,强烈建议在开始撰写方案之前与面试官来回沟通,确认要求。

我本人将编程面试视为职场场景,将编码面试阶段视为结对编程,在这个过程中,你们来回交流,确保面试官理解你的想法,并梳理编程过程和你的思维。

虽然系统设计部分没有在面试中测试,但我还是要和大家分享一下,因为我花了很多时间来准备。

数据结构和算法

这其实就是俗称的刷题,面试的时候,一共有将近 300 道题,其中包括:JavaScript 30 道题、Blind 75 道题、Neetcode 道题、SQL 道题:JavaScript 30 道、Blind 75 道、Neetcode、SQL 等问题,但我还是挑了比较常见的算法和数据结构做了练习。

数据结构

Array & Hashing、Stack、Tree、Tries、Heap、Queue、Graph

算法

Two Pointer、Sliding Window、BInary Search、Backtracking、Dynamic Programming、Greedy

不过,老实说,动态编程并不容易准备,所以大多数情况下,你应该把重点放在大公司常见的问题类型上。

特别建议

NeetcodeBlind 75一畝三分地javaScript-algorithm

如有需要,请参阅我在 Github 上发布的 Leetcode 解决方案。 leetcode-solution

我们仍将定期更新,请随时点赞和收藏!

Domain Knowledge

前端

JavaScript、HTML、CSS、Vue、React,所有常见和不常见的问题都准备好了,我可以熟练地说,遇到的 80% 的问题都可以直接通过条件反射来回答,其中还包括更新的技术、非常底层的技术、性能优化、前端架构等。

後端

Python、Node.js、OOP、SQL语法,这边的准备方式其实没那么深入,大概点到为止,毕竟真正要准备的东西太多了,除了数据库优化、API优化要看一系列文章。

手機端

Flutter、React Native 这两个都是我有另外的时间去研究它们的底层操作,我有预感自己会被问到很多相关的问题,所以在准备面试的阶段,有好好了解它们的底层实践、区别、优缺点。

前端编码

JavaScipt Dom 操作

例如,我还有一些使用 Pure JavaScript 实现的部件: Todo List、Typeahead、Validation Form、Cacluator、Timer、Tic Tac Toe、Infinite Scroll、Drag Drop List。

CSS 布局

因为我是前端出身,又经常在切版,所以切版部分比较麻烦,还要练习 Flex & Grid。

在这里,我自己的假设是,如果我今天用 Flex 完成了一个页面,我也应该能用 Grid 完成剪切,并分析两三种不同写法的优缺点。

JavaScript 实现

这里的实现范围其实很广,所以我有一个自己实现所有常用功能的地毯。

Curry、Throttle、Debounce、DeepEqual、Memoize、Promise、Flatten、Polyfill、PromiseAll、Promisify、ShallowClone、DeepClone、Apply、Generator。

还有另一种做法 Reduce、Event Loop、Promise、Proto 在这里,您可以找到大量编程主题。

推荐资源

You Dont Know Js

莫立全 KyleMo Medium & 前端效能優化大補帖

K 前端工程师

Yii|Flutter|Cross-Platform Developer

AlgoExpert Fullstack Package

行为面试

在这里,我准备了近 10 道硅谷常见的行为问题,并对每道题进行了条件反射式的回答练习。我特别推荐大家看看《一亩三分地》,里面有很多硅谷华人的文章,通过他们的文章,你可以真正知道自己有太多不足的地方。

除了在行为问题上使用 STAR 方法外,我还重点关注了 "职位描述 "和 "雅虎企业文化",以优化和修正我的答案,从而避免在不重要的页面上花费过多时间。

推荐资源

一畝三分地

Explain This

系统设计

当我在《人力资源电话》中听到系统设计测试时,其实心里挺紧张的,毕竟这是一次从未准备过的面试,于是我爬梳了很多文章,对比了很多不同类型的系统设计文章。最后,我在 ByteByteGo 和 Grokking Modern System Design Interview 之间做出了选择。最后,我使用了 Grokking Modern System Design Interview 来准备知名系统设计文章 Repo 的面试。

系统设计原则

一开始,在准备系统设计时,我先从规则入手,了解其中的内容:

Availability、Reliability、Scalability、Maintainability、Fault Tolenrance、Back-of-the-envelope Calculations

系统设计组件

然后从广度入手,找出每个系统组件:

Domain Name System、Load Balancers、Database、Key-value Store、Content Delivery Network、Sequencer、Monitoring、Cache、Messaging Queue、Pub-sub、Blob Store、Distributed Search

系统设计练习

然后练习其中包含的常用系统设计:

Youtube、Uber、Web Crawler

然而,当我真正全部实践后才发现,自己真的有太多的不足,还好端端的居然在面试时,没有过系统设计这一关,今后应该慢慢写成系统设计的文章。一方面,我会弥补自己的不足,另一方面,我也会把自己的技术分享给大家。

推荐资源

ByteByteGo

Grokking Modern System Design Interview

system-design-primer

后记

采访即将结束,我要感谢很多人。

我还向很多人请教了如何进行面试和模拟面试。

我真的很幸运,我被问到的问题都是我为这次面试准备的。

而随后的过程也确实是在幸运女神的主持下进行的,所以我才能如此顺利地签下 Offer。

最后,我想宣传一下我正在经营的自媒体业务。 hogan.tech如果您感兴趣,请继续关注!

目前,所有与面试相关的问题和答案都发布在订阅者专区。

欢迎订阅支持!

zh_CN简体中文