第二轮前端面试题目总结

319 阅读7分钟

前言

我的第二轮前端面试总结来啦。这一次是以大三的身份去投的简历,在boss上投了30份,收到了三个面试,相比于上一次投了一百份才获得一次面试来说幸福地太多了。

下面来分别总结一下这三次实习面试的题目。

面试

第一家:广州某企业数字化服务商

这家的规模应该是三家里面最大的一家,业务上主要负责汽车、餐饮业、数码产品等领域的数字化,我面试的部门是负责餐饮业的部门。

下面说几道有价值的面试题:

1、假设有一个抽奖的活动,活动包含登录、抽奖、抽奖记录模块,你需要哪些后端接口,接口的入参和返回值分别是什么?

我的回答

1.登录接口,入参包括登录用户的账号以及密码,返回值为后端生成的token

2.抽奖剩余次数接口,入参包括用户的token,返回值为该用户抽奖的剩余次数

3.抽奖接口,入参包括用户的token,返回值为中奖的奖品

4.抽奖记录接口,入参为用户的token,返回值为抽奖记录

2、为什么这个抽奖的算法要在后端进行,而不放在前端浏览器去运行?

我的回答

1.抽奖算法属于业务层的功能,按照架构分析来说应该放在后端

2.从性能方面分析,算法运行在浏览器中可能会导致页面应用的卡顿

面试官补充

1.如今的浏览器性能已经有了很大提升,就算是算法运行在浏览器中也不会有太大的问题

2.安全性问题,如果将算法放在前端的话,那么抽奖结果则作为入参发送给后端,此时可以通过抓包篡改抽奖结果

3、Js如何实现一个字符串的随机乱序

我的回答

可能需要自己对排序函数进行定义,具体写法说不出来

4、深拷贝和浅拷贝的区别,以及如何实现深拷贝

我的回答

在深拷贝是对于数据进行独立副本的创建,修改副本不会对原来的数据产生影响,因为它们指向了不同的内存地址。浅拷贝只是复制了对原数据的引用,修改副本可能会对原数据产生影响。

实现深拷贝可以通过JSON来回转换实现

(这题是很常见的面试题了,但是值得注意的点还是有很多)

5、vue和react的区别?

我的回答

vue提供了更加直观的模板用于描述组件,也提供了很多的指令和生命周期,显然这种开发方式更加模板化,门槛相对来说更低,但同时也带来了开发过程不够灵活的问题。

react为开发者提供了多种hooks,但它不具备vue的模板化,相对来说更加自由,也可以说基本每个人写的react代码风格都不会统一,带来的门槛较高的问题。

同时二者在数据传递方向、组件实现原理等等底层实现上都具有差别。

6、git如何切换分支?切换分支中加不加-b有什么区别?

我的回答

通过git checkout -b 分支名的命令来实现分支的切换。

加上-b为创建新分支并切换,不加则是切换到已有分支。

总结

因为过年期间基本没怎么写代码背面试题,所以面这第一家的时候我的大脑有点不清醒,很多本来可以答到的题目都没有回答好。面试官已经是开发负责人了,也很久没有敲代码了,所以对于技术方面也没有过度深究,对我的项目问的会更多一些。

第二家:广州某电商服务平台

这家的规模应该是三家里面最小的了,boss上写的规模是100-499,我到了现场以后发现大概也就30人左右,后面他说这里不是本部,可能本部会多人吧,具体我也不知道咯。哦对了,这个技术面的面试官给我一种很无精打采的感觉,可能被生活摧残了吧哈哈哈哈哈,所以体验上不是特别好。

继续说说几道有价值的面试题:

1、js原型链的理解,以及对象上挂载的原型是存在堆里的还是栈里的,在对象上修改原型,是否所有原型本身会被修改?

我的回答

对象上挂载的原型应该是存在堆里的。在对象上修改原型,应该是所有原型本身都会被修改。

(发现自己的原型链还是不过关,后面再专门写一篇文章研究下)

2、跨域是什么?解决方案是什么?

我的回答

跨域的初衷是保护浏览器遭受攻击,因此在协议、ip地址、端口号不完全相同的情况下,不能正常接收响应。解决跨域可以通过服务端设置响应头为允许跨域,也可以通过客户端在开发模式下设置proxy代理服务器,或是上线后在nginx中配置反向代理服务器。

3、如何改变this的指向?

我的回答

1.通过箭头函数改变this指向

2.通过bind(),call(),apply()指定调用的函数以及this

4、箭头函数和普通函数有什么区别?

我的回答

1.普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。

2.箭头函数使用箭头定义,普通函数中没有

3.箭头函数不能用于构造函数,不能使用new;普通函数可以用于构造函数,以此创建对象实例。

4.在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例;箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用。

5、new一个函数发生了什么?

我的回答

1.开辟一片内存空间,建立一个空对象。

2.将空对象的原型指向构造函数的原型对象。

3.将空对象的上下文与构造函数绑定。

第三家:广州某保险代理公司

这家的面试应该是三家中整体回答的比较流利的,面试官也比较和善,面试的时候也是像聊天一样,可能有时候面试真的是看缘分的吧。

1、settimeout如果没有设置时长,回调函数会立刻执行吗?

不会立即执行,settimeout涉及到异步编程,其中的回调函数会进入浏览器渲染进程的微任务队列,当前执行队列中清空后再执行该回调函数。

2、vue中scoped的样式隔离是如何实现的

为组件实例生成一个唯一标识,给组件中的每个标签对应的dom元素添加一个标签属性,data-v-xxxx 给中的每个选择器的最后一个选择器添加一个属性选择器,原选择器[data-v-xxxx]

如:原选择器为.container #id div,则更改后选择器为.container #id div[data-v-xxxx]

总结

这一次面试有了上一次的经验,让我在心态上都加沉稳,面试表现上也有所进步。不过至今为止都是中小型公司的简单面谈,期待下一次大厂多轮面试的磨练!