如何在10分钟内丢掉工作

2025-05-24

如何在10分钟内丢掉工作

白板编程面试可能会让你丢掉工作

最近,我差点就被五大会计师事务所之一录用了。我顺利通过了筛选流程和家庭作业,但却没能通过最后阶段的一对一或二对一面试:

  • 白板编码面试:算法。
  • 技术面试:JavaScript、CS、React。
  • 文化契合:就是这样。
  • 第二次白板面试

出了问题

有几个错误导致了这次暂时的失败。

我可能通过了技术测试和文化适应(我们假设是这样),但我承认我在白板编码面试中表现很差。

回想那一天,我无法期待任何不同的结果。

事实是:我还没有准备好进行白板面试

白板面试

从某种程度上来说,白板面试是对知识深度的技术测试和社交练习的混合体
来源

我们都知道它是什么,对吧?它和代码没太大关系,而是和你的解决问题的能力有关,等等等等……

我是一名前端开发人员,我通常不会在编码时实现类似面试的算法或表达我的思维过程,我大部分时间都在制作交互式 UI。

这些测试到底能说明多少有关候选人的信息?

甚至有人说:

在实际生活中,你很少会在编程过程中凭记忆即兴地想出一个算法。你几乎总是会使用现有的库,这些库有自己的测试套件,并且经过了其他开发人员的严格审查。

你真正需要能够回忆起算法的唯一世界是世界末日之后,所有连接到互联网的计算机的硬盘都被烧毁,所有基础学术论文和计算机科学教科书的副本都化为灰烬。

我的观点倾向于与上述作者的观点一致,尽管我喜欢相信这种技能(擅长白板面试)是关于拥有一套非常好的其他技能,软技能和硬技能。

首先是减轻处罚情节

我列出这个清单是因为你可能对其中一些有共鸣,但最重要的是我还是需要发泄一下😄

  • 我没有用我的母语去面试。在压力和压力之下,用英语交流突然变得困难起来。
  • 我是一名自学成才的前端开发人员。我缺乏学术方面的准备。
  • 我职业生涯中参加过的面试并不多,而且很少有像白板面试那样的测试。
  • 我很少公开演讲。很遗憾,目前确实不多。

您可能会反对说,这些实际上都不是减轻处罚的情节,您是对的。

根据定义,减轻处罚的情况是我们无法控制的:事实是,我可以提高我的英语水平做更多的计算机科学做更多的采访做更多的公开演讲


我将尝试按照那天应该做的方式解决第一个白板测试,并尝试在这里报告该过程。

测试

;['Tokyo', 'London', 'Rome', 'Donlon', 'Kyoto', 'Paris'][
  // YOUR ALGORITHM
  (['Tokyo', 'Kyoto'], ['London', 'Donlon'], ['Rome'], ['Paris'])
]
Enter fullscreen mode Exit fullscreen mode

就是这样。如果你旋转每个城市的字母,你可能会匹配到其他城市,也可能不会。如果匹配到了,就把它们单独放在一个数组里。

工作中你每天都要躲避成千上万行代码的迷宫,向这些人展示如何解决这个简单甚至有点滑稽的问题有多难?等等我。

是的…

让我们假设事情进展稍有不同。

完美的白板面试

段落标题很吸引人,虽然错了。这正是我解决这个测试的方法,既能写代码,又能表达思路。谁知道还有多少其他方法呢!

我:非常感谢。我很乐意帮你解决这个问题(微微鞠躬)

我:第一个问题,字母只是“旋转”还是可以随机混合?

拉里(为了保护面试官的隐私,我把他们的名字改得更醒目一些):轮换一下就行了。第一个字母放在最后,等等。

我:对。

拉里:对。

我:对了!我猜首先我需要一个方法,把每个城市的字母轮换一下。Tokyo 会变成 okyoT,然后是 kyoTo,哦,太棒了!现在我们得到了 kyoto!好的,我需要一个函数来实现这个功能。

我:我还需要一种方法来循环遍历输入的城市,对字母进行“旋转”,进行匹配,最后将它们分组。我发现输入和输出都是数组,并且它们包含相同的值,唯一的区别在于两个数组的深度:一个是平面数组,另一个是数组的数组。

还是我:我现在要写点伪代码来验证一下我的想法。之后我也会测试一下,因为我太厉害了。😏

function groupCitiesByRotatedNames(cities) {
  // use a variable to contain the output.
  let output = []
  // loop through each of the cities
  //  rotate the name in any possible combination
  //  check if the output contains a city that matches a combination
  //   add that city to the array containing the match
  //   otherwise add the city to the output as a new array
  return output
}
Enter fullscreen mode Exit fullscreen mode

我,像摇滚明星一样自信:让我们对我的伪代码进行伪测试(😛)。

const input = ['Tokyo', 'London', 'Rome', 'Donlon', 'Kyoto', 'Paris']
console.log(groupCitiesByRotatedNames(input))
// That's how it would build up. The final output would be the last array:
// [
//     ["Tokyo"]
// ]
// [
//     ['Tokyo'],
//     ['London']
// ]
// [
//     ['Tokyo'],
//     ['London'],
//     ['Rome']
// ]
// [
//     ['Tokyo'],
//     ['London', 'Donlon'],
//     ['Rome']
// ]
// [
//     ['Tokyo','Kyoto'],
//     ['London', 'Donlon'],
//     ['Rome']
// ]
// [
//     ['Tokyo','Kyoto'],
//     ['London', 'Donlon'],
//     ['Rome'],
//     ['Paris']
// ]
Enter fullscreen mode Exit fullscreen mode

让我们开始实现这个算法。

首先,我们需要实现对城市名称字母进行旋转的功能。我将创建一个实用函数:

我:让我们把这个函数改得更流畅一些(可读性也差一点)。过度自信到了极点。

我:对!我喜欢 reduce 方法,我还会再用它!(它也很函数式编程,所以在面试中用起来很酷😎)

reduce()方法对累加器和
数组中的每个元素(从左到右)应用一个函数,以将其减少为单个值
MDN)。

我们的唯一价值就是期望的输出。

让我们总结一下这个算法的作用:

我们检查城市数组中的每个城市,旋转其名称,并将
每个组合与累加器值进行匹配。如果找到匹配项,就将新的城市添加到包含匹配项的数组中(使用Array.splice),否则,就直接推送一个包含新城市的新数组。

瞧:

现在大家一起!

在这里获取要点

真正的白板面试

我从解决方案开始。我说,好的,我需要一个 reduce 方法。我立即走到黑板前,开始编写实际代码,但其实我根本不知道具体方案。我其实对解决方案有个想法,跟上一章写的差不多,但我没有清晰地表达出来,也没有向可怜的面试官们解释得前后一致。所以我迷失在代码中,思路好几次都打乱了,还在糟糕的伪代码和实际代码中犯了语法错误。到了这个时候,已经没有办法扭转局面了。这样的表现会对面试结果造成很大的损害,尤其是如果你让它影响到你接下来的面试流程的话。

我现在该怎么办

练习,练习,再练习。

拿一块白板,选择一个问题,大声地对着空气说出来并写下来,经常这样做。

练习白板面试,学习常规。你的常规,任何常规。就像吉他弹奏一首歌、玩纸牌魔术,或者用滑板表演任何危险特技一样,学习它。

你需要准备一次演讲,它就像一次演示。

这就像一个带有变量的演示文稿。

变量就是问题所在。

我会像这样:

  • 我会花一些时间分析需求(1 分钟)
  • 如果有必要,我会提出问题并得到答案(3 分钟)。
  • 我会停下来思考要采取的方向(几分钟,不要害怕保持沉默一会儿)。
  • 我将提出初步解决方案并获得面试官的反馈(5 分钟)。
  • 我将再次暂停并选择一个解决方案(2 分钟)。
  • 我将编写伪代码(5 分钟)
  • 我将测试我的伪代码(5 分钟)
  • 我将通过将伪代码转换为实际代码来完成。(除非有必要)

大约 30 分钟后,我将以一种愉快且协调的方式解决问题。

结论

感谢阅读

感谢Adam MackintoshJosh Comeau对此的校对 :)

你好,我叫 Albino Tonnina,我是一名前端工程师,目前在白板面试方面做得不好,在伦敦工作,你可以在TwitterGithubInstagram或伦敦市周围找到我。

文章来源:https://dev.to/albinotonnina/how-to-lose-a-it-job-in-10-minutes-35pi
PREV
学习 Elixir 如何让我成为更好的程序员
NEXT
JavaScript:从 ES2016 到 ES2019 的所有内容