字节提前批前端一面二面(已收到意向)
一面
- 自我介绍
- 聊项目(主要讲自己用vue3.0写的开源项目,顺带连vue3和vue2的区别也讲了点)
- 设计一个函数实现微信红包
function hongbao(money, n) { const arr = [] for (let i =0;i < n;i++) { let max = money / (n - i) * 2, min = 0.01 let tmp = Number((Math.random() * max).toFixed(2)); tmp = Math.max(min, tmp); money -= tmp; arr.push(tmp); } return arr; }
- 随机排序
function randomSort(arr) { return arr.sort((a, b) => Math.random() > 0.5 ? -1 : 1); }
- 字符串首字母大写
function upperFirst(str) { if (typeof str !== 'string' || str.length === 0) return if (str.length === 1) return str.toUpperCase(); return str.charAt(0).toUpperCase() + str.substr(1) }
typescript中type和interface的区别
如何实现typescript中的readonly语法
用css实现列表内除最后一个元素外其余元素加上下划线
... 后面记不得了
面试官是一位开源作者,最近被业务困扰几乎没有接触新的技术,同组也有从element跳槽过来的,隐约间能感觉有点丧气。可能国内大厂的开源技术只是为了KPI吧,后来问了我点为什么要做开源项目,为什么之前实习的老板支持你做这件事……说实话我毕竟还是学生确实有精力去探索,也没为什么只是感觉好玩而已。
二面
- 自我介绍
- echarts中使用svg和使用canvas的区别
- 如何在echarts中使用svg模式,原理是什么
- 项目中为什么决定用canvas模式来绘图
- 后端如何修改cookie
- 父域可以修改子域下的cookie吗
- vue3中的hooks式的编写方式有什么优点
- vue3中的生命周期部分产生了什么变化
- 实现promisify函数,将如fs.readFile函数promise化
function promisify(fn) { return function (...args) { return new Promise((resolve, reject) => { fn.apply( null, args.concat((err, data) => { if (err != null) { reject(err); } else { resolve(data); } }) ); }); }; }
- 青蛙跳台阶,一次能跳一次或者两次
function jump(n) { if (n === 0) return 0; if (n === 1) return 1; let prev = 1, next = 2; for (let i = 2;i < n;i++) { let tmp = next; next = prev + next; prev = tmp } return next }
- 变态青蛙跳台阶,一次能跳1,2,3...n阶(动态规划)
// f[n] = f[n - 1] + f[n - 2]+...+f[n - i]+...f[0] // f[n - 1] = f[n -2] + f[n -3]+...+f[0] // -> f[n] = 2 * f[n - 1] function jump2(n) { const dp = Array.from(new Array(n + 1), () => 0); dp[0] = 1; dp[1] = 1; dp[2] = 2; for (let i = 3;i < n + 1;i++) { dp[i] = 2 * dp[i - 1]; } return dp[n]; }