首页  >  文章  >  web前端  >  通过练习题提升面试游戏水平

通过练习题提升面试游戏水平

WBOY
WBOY原创
2024-08-21 06:18:02998浏览

Level Up Your Interview Game with Practice Problems

介绍

对于那些不认识我的人来说,我是一名拥有 10 多年经验的前端工程师,他还创建了 BigDevSoon - SaaS(下一代代码学习平台,您可以通过从第一天开始构建东西来学习。)很快就会有 10k+ 用户/本月 MRR 为 1,000 美元。

尽管我很喜欢在 React 中构建现代 UI,但多年来“前端”角色的转变迫使我多次成为全栈开发人员、创建 BFF(前端的后端)、分析和思考大量的数据结构并使用数据库。从其他方面来说,我们不再是“网站”开发者,为了跟上步伐,我们需要一直学习和适应。

在当今艰难的市场时期,我花了一个多月的时间才找到最新的工作,您可以在这里阅读这一历程。通过通常 10 多个阶段的马拉松式面试,我了解了新模式以及我们需要如何更轻松地适应陆地工作。

我注意到的模式之一是沟通和软技能,例如“录制您的欢迎视频并向我们介绍一下您自己。”或 3 次以上行为/文化访谈“在某种情况下你会做什么,为什么,请解释一下。”但这是另一天的主题,我不会在这篇文章中讨论。

上面我只会提到一件事,如果您还不是“影响者”,那么值得做的就是尝试记录自己,甚至尝试做您创建的演示功能、副项目或介绍您自己和您的职业(例如,最多 3-5 分钟总结您的简历、经验、过去的项目)。听完这个后,您可能会发现自己的声音太小了,或者您在镜头前压力太大了。这是一个很好的练习,可以克服这种恐惧,想象一下通过 9/10 阶段,却因为没有练习而未能与 CEO/TL/经理交谈。那就可惜了。

另一个主题是众所周知的练习问题,但相信我,你不需要掌握整个 DSA,包括 Dijkstra 算法或红黑树之类的东西(尽管这对你下次面试有帮助)。

所需要的只是一点点的磨练和准备,这样你就不会措手不及,并且可以解决这些现在许多公司用来筛选候选人的“小问题”,而不是在长时间的面试上浪费时间通过投入资源(例如需要采访的人等等)

新兵训练营/课程后的许多“瀑布”开发人员缺乏的是解决问题的能力,这些程序经常牵着你的手,不允许你自己思考太多 - 不是说这是错的,而是要变得更好需要不同的技巧,要在压力下顺利进行面试,能够快速拿出 10 分钟前承认的问题的解决方案,并且面试官希望它在不到一小时内解决,这是一个巨大的改变。

让我们从我经历过的一个例子中进一步了解这一点,然后我将分享一个在面试中帮助我的日常习惯,并提出一些有价值的解决问题的练习题。

回文问题

所以回文是一个从向后或向前读取相同的值。例如。 Racecar 是回文,但 hello 不是回文,因为当你反转该值时,它会变成 olleh。

我正在与我所申请的一家公司的招聘人员通电话,我们进行了冷静的闲聊,因为这是该公司的第一阶段之一。现在,面试的最后 10 分钟“嘿,最后一个问题,你能为回文问题编写一个代码解决方案吗?” ……我有点措手不及。

但是我们得到了这个,立即跳入 https://jsfiddle.net/ 并写道:

function isPalindrome(string) {
  return string.split('').reverse().join('') === string;
}

为自己感到骄傲,但招聘人员说“请不要使用内置方法。”。

好的,没问题,我们很快就没有时间了,但我明白了。

花一些时间想出一个愚蠢的解决方案,如下所示:

function isPalindrome(string) {

  let isValid = true;

  for (let i = 0; i < string.length / 2; i++) {
    if (string[i] !== string[string.length - i - 1]) {
      isValid = false;
    }
  }

  return isValid;
}

当然,招聘人员开始谈论大 O 表示法。我们又聊了一会儿,我又崩溃了,措手不及。

假设一个可接受的解决方案是这样的:

function isPalindrome(string) {
    const normalizedString = string
    .toLowerCase()                    // Convert to lowercase
    .replace(/[^a-z0-9]/g, '');       // Remove non-alphanumeric characters

  for (let i = 0; i < normalizedString.length / 2; i++) {
    if (normalizedString[i] !== normalizedString[normalizedString.length - i - 1]) {
      return false;
    }
  }

  return true;
}

我们在这里做了两件事,首先,我们标准化了一个字符串,因此对于一个男人,一个计划,一条运河:Panama,我们得到了 amanaplanacanalpanama,并且我们提前退出循环,而不是总是迭代“半通过字符串值”。

这只是一个例子,但让我们了解一下发生了什么错误。

  1. 缺乏沟通,我什至没有问招聘人员是否意味着伪代码,想要制作像 TypeScript 这样的严格类型,或者小提琴是否是正确的选择。
  2. 我没有验证是否可以使用 Google/ChatGPT(嗯,这是一件超级容易解决的事情,但我几乎没有时间,写完一行字后我更加心烦意乱)。
  3. 我提到我的上一个解决方案可以改进,但我们没有时间把它写下来。也许这是一个奇怪的面试问题最终抓住了我,但通过提出适当的问题,例如“我可以使用内置方法吗?我应该使用循环吗?我应该编写伪代码还是可行的解决方案,我可以用谷歌搜索吗?” /聊天GPT?”肯定会节省我很多时间。

吸取教训,我开始了 leetcode 的磨练。每天总是 1+ 个问题,但大多从简单/中等难度中进行选择,并尝试专注于“人性”的问题,因为招聘人员通常会使用这些问题,例如买卖股票的最佳时机 我在接下来申请的一家公司中接到了一项任务,并解决了这个问题。我喜欢向 ChatGPT 询问我正在申请的公司的情况,并推荐可能相关的练习问题,甚至添加招聘人员的一些信息作为额外的背景信息。 (是的,如果他们解释得不太清楚,你可以通过电子邮件询问他们在面试过程中会发生什么)。

一段时间后,您将开始看到模式、数组问题、字符串问题、连接部分,并且会变得更好,因为即使测试用例不同或问题性质不同,您用于解决这些问题的方法也可以共享完全不同。

值得检查的问题

随着我们向平台添加越来越多的功能,我将在 BigDevSoon 上无耻地提前插入练习题(目前有 41 个),试图让事情变得简单 (KISS) 并策划最相关的问题+ 还有一些热身(简单级别)。

我在下面列出了其中 10 个我认为值得解决的问题。

1. 回文

2. 找到最大值

3. 买卖股票的最佳时机

4. 盛水最多的容器

5. 数韵律

6. 组字谜

7. 字符串压缩

8. 子集

9. 最常用的 N 个单词

10. 查找数组中的所有重复项

概括

就是这样!从这些练习题中可以学到很多东西,每一个都是激活大脑的有趣方式。

长期以来,我的目标是在社区中传播基于项目的学习方法,并启动并运行 BigDevSoon,这是我们在过去 3 年里一直致力于开发的应用程序。这对我们来说是一项伟大的成就。

继续编码! ?‍♂️

以上是通过练习题提升面试游戏水平的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn