阅读 3016

OPPO外包面试完整记录

今天是面试的第一天,记录一下.话说投简历投了不少天了,不知道为什么全是外包岗位.我本来开始没有想外包岗的,不过实在没有面试机会,于是就接了一个OPPO的外包岗.

公司环境

我住在龙华这边,离后海那边非常远.大约八点50出发,到OPPO的时候已经10点半了.办公地点还是很高大上的,具体怎么样深圳这边的朋友应该有经验.

OPPO在31楼,上楼的时候碰到了不少OPPO的员工一起坐电梯.后来问了下面试官OPPO是不是弹性上班,面试官说是9点半上班.这么多人10点半才上班,多半是因为昨天加班晚了,加班晚的人可以晚一点来公司.看来OPPO加班还是挺严重的.

到了之后在前台登记了一下,就坐下来等面试官.大约五分钟之后,面试官到了.找了下面试地点,就开始正题了.首先开始自我介绍,我重点介绍了自己在目前公司做的事情以及使用的技术栈.面试官等我自我介绍完成以后,开始提问.

面试官从他非常关注的性能优化部分开始问起,后面又问了基础知识.这部分基础知识包括网络安全问题,http,css布局,css动画,js基础.

性能优化部分

首先提问的是性能优化问题.这一部分涉及到我目前的工作,制作电商促销专题.

面试官:你做的这些专题里面,哪些地方用到了性能优化?
我:这些电商专题有一个共同的特点,就是图片特别多,因此基本上都用到了懒加载.

面试官:还有别的性能优化吗?
我:据我的了解,就是这个了.

面试官:你觉得这些专题还有什么性能优化的手段吗?
我:我知道的就是把JS代码放到页面底部了.不过因为这些专题是跨平台的,需要在小程序和APP两端展示,
因此只有一部分JS代码能放到页面底部.

面试官:你还能想到什么性能优化的手段吗?
我:(尴尬,开始转移话题)这个...这些专题好像没有太多优化的地方可以谈,要不说说我的另外一个项目吧

于是我们接着开始聊我们另外一个项目.

面试官:可以啊,那你说说这个项目吧.
我:我这个项目是一个类似于论坛的项目,有完善的内容展示和用户信息管理.主要用到的性能优化有三点:图片懒加载,
数据分页请求配合节流防抖函数以及本地缓存.

面试官:你这个本地缓存是怎么做的?
我:用户个人中心的数据,是只有在用户有操作之后才需要重新请求接口数据的.针对这点,
我在本地缓存了一个状态叫hasUpdated,这个状态默认为false.
当用户第一次进入个人中心的时候,通过接口请求数据,并将接口返回的数据缓存,修改该状态为true.
用户下次进入个人中心的时候,由于已经更新,所以直接使用本地缓存数据,这样二次访问就不需要再请求接口数据了.
(这里的文字介绍比我面试的时候口头介绍说的好很多)

面试官:你做的这个优化给页面带来了什么变化?节约了多少页面响应时间?
我:额...嗯...这个...(嗯了半天不知道要怎么回答)这个带来的变化好像就是,秒开?
(这是后面组织的语言,实际上说的很结巴)

面试官:你这个优化会不会带来什么问题?比如跨平台访问的时候?
我:跨平台访问的时候,用户看到的个人中心的数据可能会不一样.但是实际上用户基本不会遇到这样的场景.
面试官:那这样不行吧?
我:我这个项目主要的场景是在微信内部的,用户基本不会通过PC来访问我们这个网站,只有我们内部的测试人员才会遇到这个问题.
(这个地方答得非常不好,实际上应该是用户第一次跨平台的时候不会有任何影响,
第二次跨平台访问的时候,如果只有一端用户发生了操作后进入个人中心,
和没有发生操作的个人中心显示的数据就会不一样,比如多了一个收藏或者少了一个收藏.)

面试官:那你做这个项目的时候有没有碰到什么问题?
我:有碰到一个问题,这个问题我到现在也没有很好的解决手段.
这个项目主要是在微信内部使用的,微信内置的QQ浏览器缓存非常严重.
当我多次提交代码的时候,如果用户之前已经访问过这个项目,那我提交的变化用户就不能立刻收到了.
用户只能通过多次刷新页面,才能够接受到我修改以后的代码.

面试官:那这样肯定不行,你都想了什么办法呢?
我:一个办法是在头部加上no-cache的meta标签,另一个办法是在链接后面加上参数.
这两个手段在别的平台都能奏效,但是在微信内置的浏览器中大部分时间是无效的,所以我说没有很好的解决方案.
(掘金的朋友们有什么好的解决方案吗?)

面试官:你对后端了解怎么样?
我:只用node写过增删改查的Demo.
面试官:其实可以考虑让后端提出一个解决方案.(面试官说了一个解决方案,但是我没有听懂,好像是路由相关的响应)
我:我把这个情况跟我们后端说了,他们也没有很好的解决办法.
复制代码

网络安全问题

总算熬过了性能优化部分,接下来开始问一下基础知识.首先问的是网络安全问题,由于我平时基本没有接触到网络安全问题,所以这部分实在不知道怎么回答(尴尬)

面试官:有了解前端部分的网络安全问题吗?
我:我只知道XSS攻击.具体好像是攻击者通过JS代码注入.然后是在什么场景使用,我就没有接触过了.
(所以XSS攻击的场景到底是啥?)
复制代码

css布局

这一部分也是面试官重点关注的部分,我也回答的不好.

面试官:平时会用到哪些布局?
我:flex布局用的比较多.

面试官:除了flex布局呢?
我:grid布局算吗?

面试官:grid布局也算,但我想问的不是这个.
我:你指的是双翼布局之类的吗?

面试官:就是你平时经常用到的布局.
我:(实在没明白什么意思)可能css布局写的比较少,你可以说一下具体的场景吗?
复制代码

这个话题好像就此跳过了,接下来是css动画部分.

css动画

这部分的回答也很难说让人满意...

面试官:有用过CSS动画相关的属性吗?
我:用过transition和animation.

面试官:它们的区别是什么?
我:transition的变化是在JS中进行的,animation需要指定初始帧和结束帧.

面试官:transition的变化是在JS中进行的?
我:就是...这个要怎么说呢,就是(我也忘了自己是怎么忽悠过去的,汗)
复制代码

跨域问题

这个回答的好像还可以

面试官:知道哪些跨域解决方案?
我:一个是后端指定access-control-allow-origin,一个是jsonp.

面试官:jsonp的原理是什么?
我:jsonp是通过向服务器请求一个script标签,在script标签加载完成之后,自动执行js指定的回调函数.

面试官:为什么会自动执行?
我:它不是使用xhr进行请求,有点类似于AMD加载.script标签在加载完成后内部的代码会自动执行,这个是浏览器决定的.
复制代码

重绘重排

这一部分是突然想起来的,后面补上

http相关

这个问题只能怪自己没有做好提前工作,两个专业术语居然没有听过.回答负分~

面试官: 了解http协议吗?
我:知道http的底层是TCP链接.

面试官:讲一下http的强缓存和协商缓存.
我:(一脸蒙蔽,完全没有听过)这个好像没有听过.
复制代码

面试完了之后赶紧查了一下,发现问的居然是cache-control,expires和if-modified-since这三个头部属性,汗!!!

我问的问题

其实之前想了很多问题,当时太紧张了,居然没有问到,实在是可惜.

我:你觉得我的面试过程中,你对我最满意的一点是什么?最不满意的是什么?方便说一下吗?
面试官:最满意的是你做过专题(汗...),我们这个组是做OPPO手机内置的浏览器,应用商店里面的活动的,所以如果经常做专题活动会比较好.不太满意的地方是你对性能优化,http协议和css动画不够深入.(终于知道为什么一直揪着性能优化部分不放了)

我:你们组前端有多少人?后端有多少人?前端和后端是在同一个组里面吗?
(问这个是怕后期跟后端是跨部门沟通.如果是的话会很麻烦)
面试官:我们组前端大概7,8个人,后端10来个,前端是一个组,后端也算是一个部门的,但是是另外一个组.

我:接口是后端组那边做吗?前端组这边会不会涉及到后端接口的工作?
面试官:是后端做,前端不会涉及接口工作.

我:那前端这块也不需要用node做中间层吧?
面试官:目前暂时没有用node做中间层,后面可能会用.但是前端的工程工作需要使用到node.

我:你是你们组组长吗?(纯粹是好奇)
面试官:不是.

我:这个岗位是外包,后期是一直在OPPO这边吗?还是说会被派到别的公司?
面试官:后期是一直在OPPO这边.另外,如果很优秀的话,这边工作2年以后会转为正式工.

我:假如我有幸进了你们部分,那我主要要做什么呢?
面试官:主要就是做H5页面.如果特别优秀的话,那也会让参与组件开发.


我:我问完了.
面试官:那今天面试就到这里吧,你先回去等消息.
复制代码

面试完后复盘,最大的感觉就是很多东西没有问到.更应该问一些这个项目组做的H5跟性能优化相关的使用场景以及用到的技巧.另外赶紧查了一下强缓存和协商缓存的知识,当时感觉眼前一黑...

结果

面试后第一感觉是凉了.谁知道下午居然接到了电话说通过了!我表示unbelievable,果然外包的要求就是比较低是吗?

这是今年的第一个面试,也是拿到的第一个offer(现在还没有正式敲定,汗!)

关注下面的标签,发现更多相似文章
评论