字节提前批前端一面二面(已收到意向)
一面
- 自我介绍
- 聊项目(主要讲自己用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];
} 