OPPO校招提前批前端面试

一面

今天早上,大雨滂沱!我还是冒雨去了相隔十多公里的OPPO面试点,面试官很nice,很多问题答不上来还会一步一步指导我,感激…
废话不多说了,下面是一面的面试题目及参考答案。

自我介绍

面试官看简历中…

谈谈js的数据类型

包括基本类型和引用类型,基本类型包括undefined,null,String,Boolean,Number,引用类型包括Object,Array,Function

Array数组的判断方法

有三种方法,instanceof,Array.isArray(),Object.prototype.toString.call()

判断方法如下:

array类型判断方法

typeof是不能判断数组类型的

call,apply的区别

用途一致,传参方式有区别,具体参考红宝书

js阻塞的问题(问的比较细,基本上没回答出来)

具体问的什么忘记了,反正回答的模模糊糊,本身也不是很清楚这个知识点
参考链接:
https://www.zhihu.com/question/61309490

cookie和session的区别

cookie主要是用于客户端存储用户数据,隐私等信息
session用于服务器端存储数据,保存会话信息
session使用时需要用到cookie吗?需要
我智障了回答了不需要,然后面试官就给我举了一个例子

假如要去一家店办会员卡,客户办了一张会员卡且在自己手上,这就是cookie
如果店员将客户信息登记到电脑上,可以看成session,客户到店里去消费时,店员有了客户的会员信息,同时也需要客户提供会员卡验证

http状态码,304代表什么?301,302呢???

304表示所请求的资源在本地有缓存。自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容

301永久重定向。请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302暂时重定向。 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

了解防抖和节流吗?

防抖:上次触发事件和这次触发之间满足一定的空闲时间,js方法才执行一次
节流:规定的时间内,多次触发事件,js方法只执行一次

vue数据动态绑定原理

我回答用Object的defineProperty属性,设置get和set

Object.defineProperty的缺点是啥

我没有回答出来。
《深入浅出Vue.js》书上的讲解:Vue.js通过Object.defineProperty来将对象的key转换成getter/setter的形式来追踪变化,但是getter/setter只能追踪一个数据是否被修改,无法追踪到新增属性和删除属性

数组元素的变化侦听

紧接着面试官就问了通过数组下标去改变一个数据的元素,Vue能检测到变化吗?这个概念我在《深入浅出Vue.js》这本书中看过,答案是不能的,面试官就是为了说明上一个问题Object.defineProperty的缺点,才这么问的。紧接着就问了怎么解决这个问题,我还是不知道,面试官就给我说了vm.$set方法,参见《深入浅出Vue.js》第四章4.2节
具体的还要细看《深入浅出Vue.js》这本书的第三章。

Array追踪变化的方式和Object不一样。因为它是通过方法来改变内容的,所以我们通过创建拦截器去覆盖数据原型的方式来追踪变化。
除了侦测数组自身的变化外,数组元素的变化也需要侦测。我们在Observer中判断如果当前被侦测的数据是数组,则调用observerArray方法将数组的每一个元素都转换成响应式的并侦测变化。
除了侦测已有数据外,当用户使用push等方法像数组中新增数据时,新增数据也要进行变化侦测。我们使用当前操作数据的方法来判断,如果是push,unshiftsplice方法,测从参数中将新增元素提取出来,然后使用observerArray对新增数据进行变化侦测。
由于在ES6之前,JavaScript没有提供元编程的能力,所以对于数组类型的数据,一些变化无法追踪到,只能拦截原型上的方法,而无法拦截到数据特有的方法,例如使用length清空数组的操作就无法拦截。

给定一个对象a.b.c,如果改变了c,vue能监听到变化吗

答案应该是的,具体可以参考《深入浅出Vue.js》一书 2.7 递归侦测所有key

会用React吗?

不会。。。

还有什么问题吗

问:贵公司前端岗位需要什么样的人?需要掌握哪些知识?

答:基础知识扎实,对于某项技术的原理了解的很透彻,而不是单纯限于会用。。。

一首凉凉送给自己,我基础知识全忘光了!


二面

啊啊啊…感谢一面的面试官,我还没有凉,还能再战!当天晚上就收到复试通知了,还好一面面完回来又刷了一些题

二面的面试官也很nice,面试过程中主要围绕着项目问,基本上都能答上来,具体问题如下:

  • 自我介绍

  • 介绍一个你认为做的最出彩的项目

  • 有和比较大的团队一起开发过项目吗?

  • 看你用了Vue.js,你认为Vue.js有哪些好处?

  • 除了Vue.js 还学过其他框架吗?

  • 平时通过什么渠道学习当下最流行最新的技术?

  • 关注过哪些大佬的博客?

  • 有没有做过学生工作?参加过什么学生社团等等?

  • 为什么去了这个学院,不学跟安全相关的东西?

  • 你认为一个页面的加载时间多久比较合理?

  • 如果一个页面加载很慢,你会怎么处理?

  • 是哪儿人?考虑去深圳工作吗

二面过程比较愉快,大概30分钟的样子吧


三面——HR面

二面结束后回到休息区,屁股都还没坐热就听到三面的面试通知了。
跟HR聊聊人生…OPPO提前批的前端面试就这样结束了。当天晚上会通知结果!
二面三面的两个面试官都好可爱呀!有点微胖,脸圆圆的,眼睛也圆圆的,被OPPO的面试官圈粉了!


拿到了OPPO的offer,可惜工作地点深圳,成都不招前端。
不得不说,OPPO的效率真的很高!