总时长30分钟,面试官很好,体验很不错,题目都挺顺利地答上来了,应该是没有实习经验,项目开发经验不太够被拒了hhh,还需继续努力。
先自我介绍,略。
一、算法题
翻转所给字符串中的每个单词,但不改变每个单词所在的位置
eg:str = “This is an example”,
正确结果:“sihT si na elpmaxe”
个人思路:首先将所给字符串以空格为界切割为数组(假设每个单词之间只有一个空格)并存到一个input变量中,先遍历每个单词input[i],再每个单词从后往前遍历依次输入进res中,每个单词结束补一个空格,最后用join('')无符号拼接起来即可。
var str = "This is an example";
function flipWords(str) {
//将字符串以空格为界分割成数组(本题各单词之间设只有一个空格)
var input = str.split(' ');
var res = [];
//遍历每个单词
for (let i = 0; i < input.length; i++) {
//每个单词从后往前遍历,同时压入res
for (let j = input[i].length - 1; j >= 0; j--) {
res.push(input[i][j]);
}
//每个单词结束补一个空格
res.push(' ')
}
//由于res中已包含空格,直接无符号拼接
return res.join('');
}
console.log(flipWords(str));
二、由于在写代码的时候既用到了var,也用到了let,就问了var、let区别
var具有变量提升,let、const具有块级作用域等等,网上详尽的答案很多,此处不做详细解答。
三、回答以下输出结果
var a = 1;
var obj = {
a: 2,
say1: () => {
console.log(this.a);
},
say2: function () {
console.log(this.a);
}
};
obj.say1(); //1
obj.say2(); //2
let say3 = obj.say1;
let say4 = obj.say2;
say3(); //1
say4(); //1
this指向问题,function的this指向其调用者,obj.say2()的调用者为obj,故this指向obj,其a为2;箭头函数的this指向是在定义时决定的,箭头函数本身不会创建this,只会从自己的作用域的上一级继承this,此处的上一级继承对象为window,故this指向window,obj.say1()为1。
后两个say不用去考虑中间过程,最后调用时可以看做window.call(say1/say2)的语法糖,对于箭头函数来说,无论谁调用this都指向window,say3()输出为1;对于function()来说,调用者为window故this应指向window,say4()输出为1。
四、个人方面,看你专业应该是自动化,为什么选择前端? 略
五、反问
没有问到项目相关的问题,可能是二面才会问?面试官很耐心,体验很好,总时间长比较短,故题目数量不多,但难度都不大,力扣做一做就能轻松拿下。难点应该还是在校生的项目经历、实习经历的缺乏,现在我就陷入了找实习→没有实习经历→失败→找实习的死循环中,希望能早日有一家公司收了我吧T T
|