一面
今天早上,大雨滂沱!我还是冒雨去了相隔十多公里的OPPO面试点,面试官很nice,很多问题答不上来还会一步一步指导我,感激…
废话不多说了,下面是一面的面试题目及参考答案。
自我介绍
面试官看简历中…
谈谈js的数据类型
包括基本类型和引用类型,基本类型包括undefined
,null
,String
,Boolean
,Number
,引用类型包括Object
,Array
,Function
;
Array数组的判断方法
有三种方法,instanceof
,Array.isArray()
,Object.prototype.toString.call()
判断方法如下:
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
,unshift
和splice
方法,测从参数中将新增元素提取出来,然后使用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的效率真的很高!