从翻译者那里:他们发表了Maria Perna(Maria Antonietta Perna)的文章,其中谈到了JavaScript中的典型任务,这些任务通常是在面试时提供给求职者-开发人员的。 本文将主要对新手程序员有用。 下面是解决问题的示例,如果您觉得它们不太好,并且有更好的选择-请在注释中提出替代方案。长期以来,对技术公司的采访一直是一个代名词。 这不足为奇-成功的面试使您有机会找到一份好工作。 但这并不是那么简单,因为通常有必要解决复杂的问题。
而且,大多数情况下,大多数任务与申请人将要执行的工作无关,但仍然需要解决。 有时,您必须在板上进行操作,而无需与Google或任何其他来源核对。 是的,情况正在逐渐改变,一些公司拒绝接受这种面试,但许多雇主仍然坚持这一传统。 本文专门分析典型的JavaScript任务,这些任务通常用作申请人的任务。
我们提醒您: 对于所有“ Habr”读者来说,使用“ Habr”促销代码注册任何Skillbox课程时均可享受10,000卢布的折扣。
Skillbox建议:实用课程“ Mobile Developer PRO” 。
最主要的是为面试做准备
是的,在开始分解任务之前,让我们看一下准备面试的一般技巧。
最主要的是提前准备。 检查您对算法和数据结构的记忆程度,并在您不太熟悉的领域积累知识。 有许多在线平台可帮助您准备面试。 我们建议使用
GeeksforGeeks ,
Pramp ,
Interviewing.io和
CodeSignal 。
值得学习大声宣布这一决定。 建议告诉申请人您在做什么,而不仅仅是在黑板上写东西(或在计算机上静默键入代码)。 因此,如果您在代码中犯了一个错误,但是该决定通常是正确的,则可以增加成功的机会。
在继续解决方案之前,必须先理解该问题。 在某些情况下,您可以从表面上理解任务,然后走错路。 可能需要向面试官提出一些澄清的问题。
您需要练习手动编写代码,而不是在PC上。 碰巧在面试过程中给申请人一个记号笔和一个标牌,没有提示或自动格式化。 在寻找解决方案时,请将代码写在纸上或直接在板上。 如果您牢记所有内容,则可以忘记一些重要的内容。
JavaScript模板任务
其中一些任务可能已经为您所熟悉。 您要么进行了面试,要么不得不解决类似的问题,要么在学习JavaScript时就进行了练习。 好了,现在是时候再次解决它们,并详细说明过程。
回文回文是指可以沿相同方向和相反方向完全相同地读取的单词,句子或字符序列。 例如,“安娜”是回文,但是“桌子”和“约翰”不是。
分期给定一个字符串; 您需要编写一个函数,如果字符串是回文,则返回true;否则返回false。 在这种情况下,您需要考虑空格和标点符号。
回文('racecar')=== true
回文('table')===否我们拆解任务这里的主要思想是沿相反方向翻转线。 如果“反向”行与原始行完全相同,则我们得到了回文,并且该函数应返回true。 如果不是,则为false。
解决方案这是解决回文的代码。
const palindrome = str => {
第一步是将输入字符串的字符转换为小写。 这是保证程序将完全比较字符本身,而不是大小写或其他内容。
第二步是反转线。 这很容易做到:您需要使用.split()方法(字符串库)将其转换为数组。 然后,我们使用.reverse()(数组库)翻转数组。 最后一步是使用.join()(数组库)将逆数组转换为字符串。
现在,所需要做的就是将“反向”字符串与原始字符串进行比较,返回结果为true或false。
嘶嘶声最受欢迎的面试任务之一。
分期需要向控制台编写一个显示从1到n的数字的函数,其中n是该函数作为参数的整数,并具有以下条件:
- 模糊输出,而不是3的倍数;
- 蜂鸣输出,而不是5的倍数;
- fizzbuzz输出,而不是3和5的倍数的数字。
例子嘶嘶声(5)结果// 1
// 2
//嘶嘶响
// 4
//嗡嗡声我们拆解任务这里最主要的是使用JavaScript搜索多个数字的方法。 可以使用模块运算符或余数-%来实现,这允许您在将两个数相除时显示余数。 如果余数为0,则意味着第一个数字是第二个的倍数。
12%5 // 2-> 12不是5的倍数
12%3 // 0-> 12是3的倍数因此,如果我们将12除以5,我们得到2除以2。如果我们将12除以3,我们得到4与除以0。在第一种情况下,12不是5的倍数,在第二种情况下-12是3的倍数。
解决方案最好的解决方案是以下代码:
const fizzBuzz = num => { for(let i = 1; i <= num; i++) {
该函数使用条件语句执行必要的检查,并产生用户所需的结果。 任务应注意if ... else语句的顺序:以双精度条件(&&)开头,以找不到多个数字的情况结束。 因此,我们涵盖了所有选项。
字谜这是一个单词的名称,其中包含相同数量但顺序不同的另一个单词的所有字母。
分期您需要编写一个函数来检查两行是否是字谜,字母的大小写无关紧要。 仅考虑字符; 不考虑空格或标点符号。
anagram('finder','Friend')-> true
anagram('hello','bye')-> false我们拆解任务重要的是要考虑有必要检查两个输入行中的每个字母及其在每一行中的编号。
查找器-> f:1朋友-> f:1
i:1 r:1
n:1,i:1
d:1 e:1
e:1 n:1
r:1 d:1要存储字谜数据,您应该选择一种结构,例如JavaScript对象文字。 在这种情况下,键是字母符号,值是其在当前行中的重复次数。
还有其他条件:
- 您需要确保比较时不考虑字母的大小写。 只需将两个字符串都转换为小写或大写即可。
- 我们从比较中排除了所有非字符。 最好使用正则表达式 。
解决方案
请注意上面片段中
Object.keys()的使用。 此方法返回一个数组,其中包含名称或键的顺序与对象中出现的顺序相同。 在这种情况下,数组将如下所示:
['f','i','n','d','e','r']因此,我们无需执行体积循环即可获得对象的属性。 在任务中,可以将此方法与.length属性一起使用-检查两行中是否有相同数量的字符-这是七巧板的重要特征。
元音搜索采访中经常会遇到一个相当简单的任务。
分期您需要编写一个将字符串作为参数并返回包含在字符串中的元音数量的函数。
元音是“ a”,“ e”,“ i”,“ o”,“ u”。
一个例子:findVowels('hello')//-> 2
findVowels('why')//-> 0解决方案这是最简单的选择:
const findVowels = str => { let count = 0 const vowels = ['a', 'e', 'i', 'o', 'u'] for(let char of str.toLowerCase()) { if(vowels.includes(char)) { count++ } } return count }
重要的是要注意.includes()方法的使用。 它适用于字符串和数组。 它应用于确定数组是否包含特定值。 如果数组包含指定的值,则此方法返回true,否则返回false。
有一个更简洁的解决方案:
const findVowels = str => { const matched = str.match(/[aeiou]/gi) return matched ? matches.length : 0 }
这涉及.match()方法,该方法使您可以实现有效的搜索。 如果在指定的字符串中找到了作为方法参数的正则表达式,则匹配字符的数组将成为返回值。 好吧,如果没有匹配项,则.match()返回null。
斐波那契可以在各个级别的采访中找到经典任务。 值得回顾的是,斐波那契数列是一系列数字,其中每个后继数字是前两个数字的和。 因此,前十个数字如下:0、1、1、2、3、5、8、13、21、34。
分期我们需要编写一个函数,该函数以一定顺序返回第n条记录,而n是作为参数传递给该函数的数字。
斐波那契(3)//-> 2此任务涉及循环执行参数中指定的次数,然后在适当的位置返回值。 这种陈述问题的方法需要使用循环。 如果您改用递归,那么面试官可能会喜欢它并给您一些额外的积分。
解决方案 const fibonacci = num => {
在结果数组中,前两个数字包含在一行中,因为序列中的每个记录都包含前两个数字的和。 在开始时,没有两个数字可以获取下一个数字,因此循环无法在自动模式下生成它们。 但是,众所周知,前两个数字始终为0和1。因此,您可以手动初始化结果数组。
至于递归,这里的一切同时变得更加简单和复杂:
const fibonacci = num => {
我们继续调用fibonacci(),并传入越来越小的数字作为参数。 当传递的参数为0或1时,我们停止。
结论
如果您因接受前端或JavaScript开发人员的工作而接受采访(尤其是初级),则很可能已经遇到了这些任务中的任何一项。 但是,如果没有遇到您,他们将来会派上用场-至少对于一般开发而言。
Skillbox建议: