雪球,通过初筛
0817 字节前端一面(挂)
- 自我介绍
- 根据项目经验问答
- 技术选型与开发架构问题
- 三个细节问题
- Echarts用的多,它底层怎么实现的,创建画布、绘制、GPU、shader、硬件调度
- 如果设置8px字体,怎么保障它准确显示出来
- 笔试算法
- 二叉树问题
- 循环链表问题
总结,技术负责人应该从更高的层面去体现自己,考虑把控整个项目,从技术选型、架构到开发,再到自动化部署与测试,以及系统稳定性、错误监控等方面,而不应该太过于拘泥于业务细节。
简历要体现大局观,面试也要体现大局观,业务部分要精简提炼语言
学习数据结构与算法,刷刷算法题目
0826 龙湖一面 (过)
- 自我介绍
- display的inline、inline-block、block区别
- div.aaa内部div.bbb,样式解析时,从内到外,还是从外到内
- 跨域如何解决
- SPA的优缺点
- vue的data为什么是一个函数
- vue-route的hash和history区别
- template模板解析的了解
- 同一系统的多标签页面怎么通信
- localSorage和sessionStorage区别
- XSS、CRFS是什么怎么办
- Object.difinePropety与Proxy区别
setTimeout、Promise、async/await区别
0831 龙湖二面 (待定)
http缓存
- vue-route
- vuex的使用和install的实现方式
- $set的使用
- 深拷贝浅拷贝,JSON的问题
- 抽离组件的考虑内容
- 如何实现一个 n*n 的多宫格布局,保证单元格正方形,同时适配移动端
- 高可用高并发怎么处理
- 微前端、BFF、serverlet了解吗
0826 旷视科技一面 (过)
上来直接做题 ```javascript // [[1,2],[3,4], [1,2], [5,6]] // [ [1, 2], [3, 4], [5, 6] ]
function myFlt(arr) { // 先内部排序 var temp = arr.map(i => i.sort()) // 然后去重,也可以别的方法 var obj = {} temp.forEach((item) => { obj[JSON.stringify(item)] = item }) return Object.keys(obj).map(i => JSON.parse(i)) }
```javascript
// 实现一个对象深层合并
objA = {
a: {
a_1: 1,
a_2: {
a_2_1: 'a',
a_2_2: null
}
},
b: 'b',
c: 4
}
objB = {
a: {
a_2: {
a_2_1: 'a!',
a_2_2: 'a',
a_2_3: 2
}
},
b: 'c'
}
function deepmerge(input1, input2) {
if (typeof input1 ==='object' && typeof input2 ==='object') {
Object.keys(input2).forEach((key) => {
let item = input2[key]
if (typeof item === 'object') {
input1[key] = deepmerge(input1[key], input2[key])
} else {
input1[key] = input2[key]
}
})
} else {
input1 = input2
}
return input1
}
deepmerge(objA, objB)
res = {
a: {
a_1: 1,
a_2: {
a_2_1: 'a!',
a_2_2: 'a',
a_2_3: 2
}
},
b: 'c',
c: 4
}
- 哪个项目比较得意,遇到什么问题
- 了解 canvas、webgl、shader 吗
- vue-route哪些模式,特点是什么
- 路由如何匹配的,如何更新 ```javascript /document/{id} /document/{id}/edit
/docuemnt/1 /docuemnt/2 /docuemnt/other
path: ‘document/other’ path: ‘document/:id’
route = { name, path, params: { id, } }
按顺序,正则匹配
- 有什么要了解的吗
<a name="wjkNc"></a>
#### 0826 旷视科技二面 (过)
```javascript
// promise实现一个请求超时
function myFetch(params, time) {
return new Promise((res, rej) => {
let timeout = setTimeout(rej, time)
fetch(parmas).then((result) => {
clearTimeout(timeout)
res(result)
})
})
}
// 做一个请求取消
function myFetch(params, time) {
let pReject = null
const p = new Promise((res, rej) => {
pReject = rej
let timeout = setTimeout(rej, time)
fetch(parmas).then((result) => {
clearTimeout(timeout)
res(result)
})
})
p.abort = pReject
return p
}
面试官给的答案
function myFetch(params, time, event) {
return new Promise((res, rej) => {
event.on('abort', () => {
rej()
})
let timeout = setTimeout(rej, time)
fetch(parmas).then((result) => {
clearTimeout(timeout)
res(result)
})
})
}
var event = new Listener()
myFetch(params, time, event)
event.fire('abort')
// 实现一个上面的监听器
function Listener() {
this.eventList = {}
this.propetype.fire = function(type) {
const funcList = this.eventList[type]
if (funcList) {
funcList.forEach((func) => {
func()
})
} else {
throw new Error('xxxxx')
}
}
this.propetype.on = function(type, func) {
if (!this.eventList[type]) {
this.eventList[type] = [ func ]
} else {
this.eventList[type].push(func)
}
}
}
var a = [1,2,6,7,88,95]
var b = [2,4,6,8,11]
var c = [ ...a, ...b ]
// 实现有序数组的合并,合并后依然是有序的
var c = a.concat(b).sort((a, b) => a - b) // 太天真了
// 比较a和b的第一个
// 谁小,删除谁,放到c里
// 相等就两个都删,都放到c里
// 直到a,b其中一个为空时,把另一个剩余部分,全放到c里面
- 项目上遇到过什么问题,怎么解决的
-
0830 旷世科技三面四面(过)
自我介绍
- 以往项目的难点
- 接雨水题目
- 递增后递减数组,求最大值
- 自我介绍
- 项目技术难点及个人收获
- 再做一次,有什么需要优化的,哪些提升的
-
0826 翼欧教育ClassIn 一面 (过)
说一下闭包
- 原型、原型链
- promise与async/await
- 如何理解http
- 对工程化的理解
- 持续集成怎么做的
- 微服务框架干了啥
-
0831 翼欧教育ClassIn 二面(过)
express 中间件有哪些
- vue-route或vuex的实现过程
- redis用过什么功能
- docker能够封装吗
-
0901翼欧教育ClassIn HR面(待定)
-
0827 白龙马 一面 (过)
讲一下闭包,优缺点,怎么回收内存
- 防抖与节流
- 双向绑定原理
- 引用类型的处理,深层监听
- 怎样实现一个自己的订阅器(类似旷世科技二面第三题)
- vue-router模式及原理
- webpack配置及优化
- react高阶组件用过吗,装饰器
- 结合场景封装组件(收集需求,设计组件、提取配置、传参、合并参数、事件、扩展插槽等方面)
组件同时适配el-table与antv-table时的特殊场景(样式重写、方法事件重写与扩展)
0901 白龙马云行 二面(待定)
深浅拷贝
- 数据结构知道哪些,堆栈队列树链表等,以及实际的应用
- 各个版本http协议
- 长连接,webSocket,断开重连,心跳、假死
- 路由钩子
- tab切换,如何保存前一个面板中输入的内容(keep-alive、vuex)
-
0831 神策数据一面(待定)
深拷贝浅拷贝,JSON的问题,递归循环引用的问题
- vue-route
- vue数据劫持原理,对象和数组怎么处理的
- 手写事件监听器,比旷视的题目增加一个 once 绑定和off方法
- 事件队列管理和最大可执行数量的实现
- 宏任务微任务的执行顺序,及给定题目的输出结果
大数运算,出了bigInt还有什么方法
class Event {
constructor() {
this.list = {}
}
on() {}
once() {}
emit() {}
off() {}
}
```javascript const p1 = Promise const p2 = Promise
var myShcedule = new Schedule(2)
myShcedule.add().then() myShcedule.add().then()
class Schedule { constructor(count) { } add() {} _schedule() {} }
```javascript
var a = 1
var obj = {
a: 2,
getA: function() {
console.log(this.a)
}
}
obj.getA()
// 输出什么,
// 如果用箭头函数呢
滴滴网约车部门 一面 (待定)
- webpack与rollup区别
- 他俩 tree-shaking 的区别
- 做过哪些优化
- loader和plugin区别
- 为什么用PG而不是mysql或其他
- 编程题目三选二
- 单链表翻转
- 树的后续遍历
- 合并两个有序数组,要求时间复杂度为O(n)
- 程序输出题
- Promise.race 和 Promise.any 有什么区别,请手写一个 any
- catch之后还可以跟then吗,finaly呢(
都可以
) then中的reject和catch有什么区别
如果在then的第一个函数里抛出了异常,后面的catch能捕获到,而then的第二个函数捕获不到
catch就是一个then的语法糖
Vue2 和 Vue3 有哪些明显区别(数据劫持、compositionAPI、diff算法、Ref)
- $nextTick 用法及原理 ```javascript // 单链表翻转 function reserve(head) { let cur = head // 1 let next = cur.next // 2 while (cur.next) { let temp = next.next // 3 cur.next = null // 1 -> null next.next = cur // 2 -> 1 cur = next // 2 next = temp // 3 } return cur }
// 合并两个有序数组,例如[1,2,5,7,88], [2,3,5,77,99],合并为一个数组,要求时间负责度O(n) function (arr1, arr2) { let res = [] while (arr1.length && arr2.length) { if (arr1[0] < arr[0]) { res.push(arr1.shift()) } else if (arr1[0] === arr[0]) { res.push(arr1.shift()) res.push(arr2.shift()) } else { res.push(arr2.shift()) } } return res.concat(arr1, arr2) }
// 程序输出题目 1 async function async1() { console.log(‘async1 start’) await async2() console.log(‘async1 end’) } async function async2() { console.log(‘async2’) } console.log(‘script start’) setTimeout(() => { console.log(‘settimout’) }) async1() new Promise((resolve) => { console.log(‘promise1’) resolve() }).then(() => { console.log(‘promise2’) }) console.log(‘script end’)
// script start // async1 start // async2 // promise1 // script end // async1 end // promise2 // settimeout
// 程序输出题目 2 Function.prototype.a = () => { console.log(1) } Object.prototype.b = () => { console.log(2) } function A() {} const a = new A()
a.a() a.b() A.a() A.b()
// a.a is not a function // 2 // 1 // 2 ```