offer已拿,技术栈纯Vue,学历双非一本,无实习经历,考研失败。
注意,纯Vue的技术栈不吃香,有比较大的概率会面到toB的部门。进大厂还是React+移动端开发经验好。
一面:
算法/语言特性/编程基础面。面试官会布置代码题给你,并且ta会出示一些题目,你需要写出答案。
- js基础 - 类型基础。
typeof undefined
typeof null
typeof new String('foo')
typeof (() => {})
- js基础 - 返回值和函数考察。
var a = x => x;
var b = x => {x;};
var c = x => ({x});
console.log(a(1));
console.log(b(1));
console.log(c(1));
- js基础 - const考察
const a = {b: 1};
a.b = 2;
- js基础 - var 和 函数作用域考察。
// 3 3 3 3
for (var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
附加问题:如何改动?
// 使用包裹函数
function func(n) {
setTimeout(() => {
console.log(n);
}, 1000 * n);
}
for (var i = 0; i < 3; i++) {
func(i)
}
// 使用let
for (let i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, 1000 * i);
}
- 实现任务队列。支持如下链式调用
new Queue()
.task(1000, () => {
console.log(1);
})
.task(2000, () => {
console.log(2);
})
.task(1000, () => {
console.log(3);
})
.start();
这个我之前的文章实现过async/await版本,其实用一个全局的变量也可以。面试官引导我写出全局变量版本。
class Queue {
construcotr() {
this.arr = []
this.time = 0
}
task(ms, f) {
this.arr.push([ms, f])
return this
}
start() {
while(this.arr.length) {
const [ms, f] = this.arr.shift()
this.time += ms
setTimeout(f, this.time)
}
this.time = 0
}
}
- this指针考察
window.name = 'ByteDance';
function Foo () {
this.name = 'bar';
}
Foo.prototype.getName = function(){
console.log(this);
return this.name + 1;
}
let foo = new Foo();
let getName = foo.getName;
console.log(getName());
console.log(foo.getName());
console.log(getName.call(Foo));
- css问题 实现条纹表格,实现三角形
- 算法问题 爬楼梯 - 动态规划
追问:空间复杂度优化改进
假设你正在爬楼梯,需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶,你有多少种不同的方法可以爬到楼顶呢?
/**
* @param {number} n
* @return {number}
*/
function climb(n) {
};
climb(20)
- 闭包柯里化考察
实现一个求和函数 sum
1. 支持任意参数:sum(1), sum(1,2,3,4)
2. 支持连续调用:sum(1)(2)(3)
示例:
const result = sum(1)(2,3)(4);
console.log(result); // 输出 10
3. 如果无法完成 result 直接打印可以简化如下:
console.log(result.value()); // 输出 10
function sum(...num) {
let total = num.reduce((prev,curr)=>prev+curr,0)
function add(...args) {
total=args.reduce((prev,curr)=>prev+curr,total)
return add
}
add.toString = () => total
return add
}
二面
开始问项目经验
- Vue依赖收集考察
下面代码会不会触发实例更新
var vm = new Vue({
data: {
test: 2,
count:1
},
render(){
return <div :click={()=>this.data.test=this.data.count+1}>{this.data.count}</div>
}
})
- this 指针考察
window.name = 'ByteDance';
function A () {
this.name = 123;
}
A.prototype.getA = function(){
console.log(this);
return this.name + 1;
}
let a = new A();
let funcA = a.getA;
funcA();
- 算法 - 数组去重
- 算法 - 实现大整数相加
- 算法 - 实现trim
三面
聊天+项目经验询问
- Vue patch算法更新节点、删除节点、增加节点的具体操作
- 算法 - 判断回文数
- 算法 - 对称二叉树判断
网友评论