笔试
笔试一共四题
第一题考的是组件的封装,因为我使用的是vue所以我用vue进行实现。大致内容就是实现一个图片长宽比是固定的宽度自适应,及下面文本内容占两行多余部分…(抖音的界面)
第二题则是找出两个数组互斥的元素
第三题是考的递归(树形结构),行政区划找指定id的name(考虑时间复杂度优化)
第四题的是分析题,分析的是今日头条的一个页面,主要讲述技术实现及自己的看法。
一面
由于我一年工作经验不到且面的是外包,所以问题可能不是很难。主要问的题目也没有特别大的难度,都是一般面试会问的闭包啊,原型链之类的。然后vue的话问的也不多,因为他们用的技术栈是react。面试官就问了一下vuex的一些东西包括vuex的实现原理,不过我是真的没有看过源码,所以就直接回答的是使用及持久化,大概说了一下自己的猜测,当然也直接和面试官说了自己没有读源码,然后面试官还问了关于项目中的难度,我大概说了四个,由于是后台管理系统所以没有接触到特别难的点,于是勉强说了四个认为花时间想的及在开发中遇到的element的BUG的问题,面试官说前两个还算是一些难点,第一个是百度地图使用路径的时候图标的更换,第二个是iframe使用时需要进行和页面有互动操作。但是我只说了百度地图图标更换,因为iframe使用的时候也是找的不太记得了。然后面试官就问了一些百度地图的实现原理,我说我不太清楚,但是提到了webGL,不过真的没有看过啊,然后可视化一面提到了echarts。echarts通过canvas或svg实现。但是也没有说原理,自己也没有太看。说了一下自己平时是看着文档使用echarts。然后面试官就开始了手写题面试。由于技术栈也不一样,而且题目也答的不是很好,我认为是凉了,没想到一面居然过了。
第一题是闭包相关的
for(var i = 0 ; i < 3 ; i++){
setTimeout(()=>{
console.log(i);
})
}
问打印什么?变成let打印什么?如何让他打印0,1,2。
第二题是原型链相关的
let F = function(){}
Object.prototype.a = function(){
console.log('a');
}
Function.prototype.b = function(){
console.log('b');
}
let f = new F()
f.a()
f.b()
F.a()
F.b()
控制台结果是啥
第三题是简单一点的算法,合并数组(3分钟)
[1,6],[2,3,4,5] => [1,2,3,4,5,6]
我第一种方法用的srot加展开运算符。但是面试官说你考虑一下sort底层实现,那这个题的时间复杂度是多少。
于是我就用指针写了一下,最后时间复杂度为O(n)
第四题是函数科里化,实现求和f(1)(2)(3,4)(5,6,7)(8,9)(10).valueOf()输出为55
function add(){
let sum = 0;
[...arguments].forEach(item=>sum+=item)
const test = function(){
[...arguments].forEach(item=>sum+=item)
return test
}
test.valueOf = () => {
return sum
}
return test
}
console.log(add(1,2)(3,4)(5,6)(7,8)(9,10).valueOf());