28 个相关的 JavaScript 面试题 第一部分 - 前 4 个

封面图片:来自 Pixabay,可在 Pexels 免费获取
目录
稍微换个角度看问题
过去12年里,我既做过前端面试官,也做过面试官。遗憾的是,在这些面试环节中,重点总是放在JavaScript上,而另外两种重要的语言——HTML和CSS——通常得不到同等的重视。
然而,JavaScript 很难全面概括,因为它已经从最初的 DOM 操作框架发展到几乎任何你想做的事情。更不用说那些如雨后春笋般涌现的 JavaScript 库和框架了,它们就像一群兔子在漫长严冬后破茧而出——春天来了!
玩笑归玩笑,你可能在一次面试中表现出色,感觉自己无所不能,也可能在另一次面试中被狠狠地打击。
整个面试流程都存在缺陷,令求职者和试图招聘合适人才的公司都感到沮丧。
我决定贡献自己的一份绵薄之力,希望能成为解决方案的一部分。我认真阅读了数百道常见的面试题,感觉对这些题目进行回顾和重构是解决更大问题的关键,但我需要你们的帮助 :)
我将分享一份精心挑选的清单,其中包含我挑选、改编甚至原创的资料,这些资料不仅对求职者准备工作至关重要,对公司评估求职者也很有帮助。这份清单显然带有很强的个人观点,但希望在JS社区的帮助和建议下,它能逐渐变得有价值,甚至成为行业标准。
以下是第一批四个问题,请阅读并在评论区告诉我您对其中一部分或全部问题的看法。我非常鼓励您在评论区提出一些可能的面试问题。请将此内容分享给任何可能对讨论有所贡献或有所助益的人。
1. 著名的 FizzBuzz
最适合:青少年 | 成人 -阶段:第一轮 | 所有轮次
1A. 挑战
编写一个程序,打印 1 到 100 之间的数字。但对于 3 的倍数,打印“Fizz”而不是数字本身;对于 5 的倍数,打印“Buzz”。对于既是 3 的倍数又是 5 的倍数的数字,打印“FizzBuzz”。
1B. 背景
FizzBuzz挑战并非JavaScript独有,几乎所有编程语言的面试流程中都会出现它。它通常用于快速评估候选人的基本编程能力,但如果面试官认为有必要,也可以将其作为深入知识的评估。
这通常是屏幕共享过程中进行的轻量级技术面试的一部分。非 JavaScript 程序员也喜欢用这个问题来快速评估你的技术知识和方法。
在JavaScript编程中,需要展现对以下部分或全部概念的熟悉程度:
- 逻辑运算符
- 循环
- 虚假值
- 三元运算符
- 类型强制
2. 数组方法 Polyfill
最适合:青少年 | 成人 -阶段:第二轮 | 现场
2A. 挑战
你可能需要将一个数字数组中的所有元素相加。你一直在学习 JavaScript 的新知识,但不确定`sum()`是否属于数组原型方法。
编写一个小程序,将数字数组中的所有元素相加,并使用数组求和函数(如果存在)或自定义函数返回总和。
// should output 21
[1,2,3,4,5,6].sum();
// should be chainable and also output 21
[1,2,3].concat([4,5,6]).sum();
2B. 背景
在 JavaScript 圈子里,扩展原生对象通常不被提倡。这个问题应该能引发一场关于这样做利弊的“良性”讨论。最终,它应该能凸显候选人对防止现有和未来功能被覆盖的意识。
我认为这是一个很好的代码筛选问题,或者可以作为现场面试的第一个问题。
3. 计算员工总工资
最适合:高级 | 专家 -阶段:第二轮 | 第三轮 | 现场面试
3A. 挑战
作为 Kora Inc. 开发团队的新成员,您的首要任务是协助人力资源部门快速计算员工的总薪酬。以下是各岗位的薪酬模型:
const associate = { roleId: 3, rate: 12.5,overtime: 18.75 };
const supervisor = { roleId: 2, rate: 15,overtime: 22.5 };
const admin = { roleId: 1, rate: 30, overtime: 0 }; // salary no overtime
编写一个基础函数,该函数接受角色(对象)、工时(数字)和ovtHours(数字)作为参数,并返回员工的总工资。基于此基础函数,创建三个分部应用程序函数,分别用于计算员工、主管或管理员的总工资。
3B. 背景
乍一看,编写一个计算总工资的函数或程序非常简单。但在筛选候选人时,我会特别关注他/她是否花时间仔细阅读了所需解决方案的具体要求。
我预计你们会问很多关于基本函数和部分应用概念的问题。我不会要求你们深入理解函数式编程的概念,例如柯里化,但我希望你们对这些概念有一定的了解。
4. 成卷的硬币
最适合:初级 | 高级 | 专家级 -阶段:第二轮 | 第三轮
4A. 挑战
阿米娜下班时,她的小费罐里装满了硬币。她需要人帮忙清点和整理这些辛苦赚来的钱。她想把硬币卷起来,这样方便带回银行。
编写一个程序,帮助她快速找出每种面额硬币的卷数以及每种面额硬币的剩余数量。
下表列出了每种面额硬币每卷应包含的数量:
| 硬币 | 每卷硬币 | 价值 |
|---|---|---|
| 便士 ==> 1 | 50 | 0.50美元 |
| 镍 ==> 5 | 40 | 2.00美元 |
| 一角 ==> 10 | 50 | 5.00美元 |
| 季度 ==> 25 | 40 | 10.00美元 |
你的程序将接收一个未排序的硬币数组。你可以假设每个硬币的面值要么是 1,要么是 5,要么是 10,要么是 25。程序应该输出类似下面的信息:
1美分硬币:10卷 - 剩余39枚;
5美分硬币:25卷 - 剩余0枚;
10美分硬币:12卷 - 剩余49枚;
25美分硬币:2卷 - 剩余20枚
4B. 背景
这是HackerRank 上的 Socker Merchant Challenge的一个略微变化和变体。
这是一个频率统计练习,由于它可以用无数种方法来解决,因此它是让考生向我们展示他们解决问题的方法和迭代过程的完美选择。
我非常支持“先保证代码能运行,之后再进行优化和重构”的方法。我会特别关注那些整体上可读性强、自文档化的代码。
最后
好了各位,这篇文章有点长,如果你能读到这里,我真是佩服你。让我们继续在评论区讨论吧。第二部分很快就会发布。
干杯
文章来源:https://dev.to/adyngom/28-relevant-javascript-interview-questions-part-i-the-first-4-2a16