更新0914
昨天刚二面完,今天早上就收到问卷了,多半是挂了,写下面经吧。
9月9号 --- 字节一面【80分钟】
总体来说体验非常好, 问题都是基于项目的,我自己的基础和深度都有,一面完第二天下午就学面了。问题大致涉及以下几个方面
前端监控
webpack
同源与缓存
前端监控
算法题考的是 最长不重复子串
9月13号 ---- 字节二面【60分钟】
总结起来就是触不及防, 因为之前在春招投实习的时候,二面重点问的是vue框架原理,就以为这次也会往原理这个方向问。
结果问了 编译原理,操作系统,然后其他的会问你一些简历中知识点比较偏僻方向,这个还好,主要是那两门课基本上都没怎么答上来。 感觉就是来刷人的
算法题考的是 合并数组,将有相同元素的数组合并,类似于并查集。
总结
从最开始的面试到现在,概括了以下几个考察的方向
1. 前端基础(广度)
2. 前端深度(项目)
3. 底层框架的原理
4. 计网,编译原理,操作系统
5. 经历类问题(如怎么解决问题,遇到什么困难等等)
以上5个方向目前就第四个 中的除计网外的课程没把握,其他的都没问题………
现在已经不想投秋招了,准备投实习去了
第一道是与完全二叉树有关的。 第二道是数组乘积(最开始用暴力过了30%后, 确认了不是乘积太大的问题。 后来改了40多分钟, 最后用双指针解决了)
第二题有两个关键点
第一个是是那个0, 要连续乘积最大, 肯定是以0分隔的嘛
第二个关键点就是 x 和 y 的值, 应该在什么时候更新?
- x 要最小, 即连续区间的第一个点, 那么在遇到0的时候考虑更新即可。
- y 要最小, 就有可能出现这种情况 1 2 4 1, 此时y应该是4, 而不是1, 所以在遇到0之前与maxSum比大小
// 获取节点
let nodes = [1,-1,3,-1,-1,2,5];
let m = 12;
//handle();
function handle() {
let sum = 0;
let count = 0;
let isleaf = false;
// 判断是否是完全二叉树, 只用遍历父节点
for(let i = nodes.length - 1; i >= nodes.length / 2; i--) {
let cur = nodes[i];// 当前节点
// 找父节点
let f = nodes[(i - 1) / 2 ];
if(f == -1) {
console.log(false);
console.log(0)
return;
}
}
// 判断第二行是否合法
if(m < 0 || m > 100) {
console.log(false);
console.log(0)
return;
}
// 判断节点是否合法
for (let i = 0; i < nodes.length; i++) {
if (nodes[i] < -1 || nodes[i] > 5) {
console.log(false);
console.log(0)
return;
}
if(nodes[i] !== -1) {
sum += nodes[i];
count++;
}
}
console.log("true");
let diff = m - (count * 5 - sum)
console.log(diff < 0 ? 0 : diff);
function handle2() {
let n = 5
let line = [1,2,4,0,8]
let maxSum = -1;
let point = {x: 0, y: 0}
let start = 0;
let sum = 1;
let pre = 0; // 前一个指针
let las = 0; // 移动的指针
point.x = 0;
point.y = 0;
let isZero = false;
while (las < n) {
let cur = line[las]
if (cur == 0) {
las++;
pre = las;
sum = 1;
isZero = true;
} else {
// 正常情况 1 2 4 0 在2时
// 计算sum大小, 如果大, 就更新y;
sum *= cur;
if (sum > maxSum) {
maxSum = sum;
if (isZero) {
point.x = pre;
isZero = false
}
point.y = las;
}
las++;
}
}
console.log(point.x+1,point.y+1)
}
#字节跳动笔试##字节跳动##字节跳动面经##前端##面经#