【面试复盘】985硕科班远景科技集团前端一面面经
远景科技集团
时间:2022年4月7日 星期四17:00 ,时长50min左右,腾讯会议-视频面试
写在前面:面试官态度很好,语气平缓,我太菜了,面试官也是耐心给我解释
以下是靠回忆的,部分题目顺序可能有变化
- 自我介绍(主要讲了学校、个人小项目,时长1min左右)
- 学习前端多久了?为什么要学习前端?你现在在什么城市呢?公司在上海,实习的话来这边方便不?
- 介绍一下项目除了vue,还用到其他的框架吗(是想问node之类的框架吧)项目中的模块,项目(面试官想问的是让我用一些术语/行话,来介绍,如:登录、查询等模块,但是我没有明白面试官到底想知道什么,就答了这个项目中用到什么技术,实现什么功能,如列表展示,分页等,这个还是面试最后,他给我我解释的,希望自己的项目要用一些API,要尽可能贴近真实的项目开发场景)
- 项目中用到了路由vue -router,能解释一下路由切换的原理是什么呢?我刚开始没太明白题目的意思,就回答的是怎么使用路由,后来面试官重新解释了题目,我只能回答说不了解这个
- 介绍项目中,你认为有哪些亮点?介绍一下(我介绍了项目中设计到查询一个用户的信息,面试官问:这个查询的话,是严格匹配吗?)
- 介绍一下es6的特性(我说了let、const,箭头函数、promise等)
- 介绍一下let、const和var的区别,什么叫做变量提升,变量提升之后,第一行打印一个在第二行用var声明的变量为什么是undefined?如果第一行打印变量a,第二行var a,第三行定义了一个function a(),那么第一行输出什么?
注:面试结束后,我自己重新思考了这个问题:
console.log(a) var a = 1 function a(){ }输出:函数 a ,我第一次解释是正确的,哭死!
输出什么内容?答:10个10,为什么会有这个结果?怎么修改代码,才能输出0,1,2……呢?
方法一:var 改let,解释为什么这样写
方法二:使用闭包,让我共享桌面,写出来,解释为什么这样写,解释闭包(闭包的产生条件,漏掉了内部函数引用外部函数的变量)
for (vari=0; i<10; i++) { (function (j) { setTimeout(function () { console.log(j) }, 0) })(i) }
代码输出题目二:
varobj= { name: '章三', hi() { console.log(this.name) } } varfun=obj.hi fun() //????
执行fun(),输出什么?我刚开始答 ‘章三’,面试官说不对,我然后发现应该是输出undefined,面试官问为什么?我提到了this指向的是window,让我解释一下this,
(这里需要注意:window中有一个同名属性name,且这个是一个空字符串,,原代码,应该输出的是空字符串,面试官应该没有考虑到同名属性name这个问题,以为window中没有name属性)
问:怎么修改代码,让fun()输出‘章三’?我刚开始回答使用闭包,面试官让我修改,我改不出来,最后面试官说这个是不能使用闭包修改的,因为obj是一个对象
面试结束后,自己尝试修改,最终明白这道题目,是考察的this指向
方法一:只改一行 ,让this指向obj,bind()返回的是一个函数,所以需要fun再执行一次
var fun=obj.hi.bind(obj)
方法二:修改两行 ,让this指向obj,apply()和call()返回函数执行的结果,所以不需要再执行fun
var fun=obj.hi.apply(obj) 或者 var fun=obj.hi.call(obj) fun
我实在不知道,面试官就说,不用class,用其他的方法,实现一个属性,一个方法
最后面试官终止了这个题目
面试结束后,我查看阮一峰的es6文档,发现了很多class的例子https://es6.ruanyifeng.com/#docs/class
方法一:使用类class
class A{ construcor(b){ this.b= '123' } test(){ console.log(this.b) } }
方法二:使用构造函数的形式
function A(){ this.b = '123' } A.prototype.test = function(){ console.log(this.b) }