字节提前批 杭州飞书前端 凉经(四面的一周后收到感谢信)

一面
听你说你刷了些 lt 算法题,来,我们先做道题
1. 给一个无序数组,让你判断能否组成一个等差数列(排序算法很简单,不排序呢)。
排序算法,先排序,取最小值及次小值 ,相减得差,挨个便利数组元素比差。
非排序算法,第一次遍历取最小值,第二次遍历取次小值,数组中每个元素与最小值的差 除以 次小值跟最小值的差是整数倍,通过一个数组记录其是否出现过。
// 排序实现
const isArithmeticSequence = function (arr) {
    let len = arr.length;
    if (len <= 2) {
        return true;
    }
    arr.sort((a, b) => a - b);
    let gap = arr[1] - arr[0];
    for (let i = 2; i < len; i++) {
        if (arr[i] - arr[i - 1] !== gap) {
            return false;
        }
    }
    return true;
}
let arr = [2, 4, 6, 10, 8, 12];
console.log(isArithmeticSequence(arr)); // true
console.log(isArithmeticSequence([2, 5, 6, 8, 10])); // false


// 非排序实现
const isArithmeticSequence = function (arr) {
    let len = arr.length;
    if (len <= 2) {
        return true;
    }
    let min1 = Math.min(...arr);
    let minIndex = arr.indexOf(min1);
    let min2 = Math.min(...arr.slice(0, minIndex), ...arr.slice(minIndex + 1));
    let gap = min2 - min1;
    let set = Array(len).fill(0);
    for (let num of arr) {
        let times = (num - min1) / gap;
        if (set[times] === 0) {
            set[times] = 1;
        } else {
            return false;
        }
    }
    return true;
}
let arr = [2, 4, 6, 10, 8, 12];
console.log(isArithmeticSequence(arr)); // true
console.log(isArithmeticSequence([2, 5, 6, 8, 10])); // false
实际面试过程中,非排序算法面试官给了提示,也没让我具体写。在时间复杂度上,排序O(nlogn)),非排序 O(n),即线性复杂度,这也是面试官考察面试者非排序算法的原因。

2. 数据整合
let input = [{ count: 1, value: 2 }, { count: 3, request: 2}, { response: 0 } ];  // => {count: 4, value: 2 ......}
const addAll = function (input) {
  let res = {};
  input.forEach((obj) => {
    Object.keys(obj).forEach((k) => {
      if (res[k] === undefined) {
        res[k] = obj[k];
      } else {
        res[k] += obj[k];
      }
    })
  })
  return res;
}
console.log(addAll(input)); // { count: 4, value: 2, request: 2, response: 0 }
用 reduce 也行,感兴趣的同学可以自己试下。

3. 你刷过lt,一定知道有效的括号,给出一个数字 n , 表示有 n 对括号" () ",需要返回能够组成的有效的括号序列的组合数,不需要输出具体的组合方式。
听到面试官说不要返回组合方式,第一反应是 dp 。后面在面试官给到了转移方程的前提下写完了代码。
const validParenthesesCnt = function (n) {
  let dp = Array(n + 1).fill(0);
  dp[0] = 1;
  for (let i = 1; i <= n; i++) {
    for (let j = 0; j < i; j++) {
      dp[i] = dp[i] + dp[j] * dp[i - j - 1];
    }
  }
  return dp[n];
}
console.log(validParenthesesCnt(0)); // 1
console.log(validParenthesesCnt(1)); // 1  ()
console.log(validParenthesesCnt(2)); // 2  ()() (())
console.log(validParenthesesCnt(3)); // 5 ((())) ()()() (())() ()(()) (()())
4. 鼠标悬停,展示下拉菜单;如何不依赖js实现
当时说伪类:hover 配合 visibility 属性(说的不对的地方还请各位牛友指正)。
.button .drop-down {
    visibility: hidden;
}
.button:hover .drop-down {
    visibility: visiable;
}
5. 实现 useToggle,为难.jpg,面试官表示辣我也不为难你。
6.反问:你对应届生的预期。 面试官:说实话你还蛮符合我对应届生的预期的。  双方蛤蛤蛤蛤蛤。

二面

1. 填充 inherit 完成输出。
function inherit() {
  
}

let animalNum = 0;
function Animal(name) {
  animalNum ++;
  this.name = name;
}
Animal.prototype.getName = function() {
  return this.name;
};
const Cat = inherit(Animal, {  
    say:function() {
        console.log(`NO${animalNum}:${this.getName()}`);
    }
});
const cat1 = new Cat('小花');
cat1.say(); // NO1:小花
本来想推荐有兴趣的同学搜一下 mdn object.create() 的,不知道是不是因为 Mozilla 裁员的关系,至少我这儿 mdn 官网打不开。。。
实现(注释里头提供了一种备选的方式):
function inherit(Fn,obj) {
  function ret (name) {
    Fn.call(this, name);
  }
  // function F () {}
  // F.prototype = Fn.prototype;
  // var prototype = new F(); //创建对象
  // Object.assign(prototype, obj);
  // prototype.constructor = ret; //增强对象
  // ret.prototype = prototype; //指定对象
  ret.prototype = Object.create(Fn.prototype);
  Object.assign(ret.prototype, obj);
  ret.prototype.constructor = ret;
  return ret;
}
2. 给你一个存放 url 的数组,要求按序请求资源, 用fetch请求就行,关键词: map, Promise, reduce
3. 优化项目的手段有哪些?
(1) http 缓存
(2) 负载均衡
(3) script async defer,async 不保证执行顺序, defer 保证顺序。
(4) 减少回流和重绘,改变 offsetHeight, offsetWeight 的值会导致回流,那单纯的访问呢,也会~
(5) 事件委托
。。。。。。。。。
二面效果一般,但是末了面试官还是说后续 hr 会联系你的。

三面
1. lt 130 被围绕的区域,将被围绕的 0 替换成 1,思路,对外圈的 0 做 dfs ,将其所连通的 0 替换成 '#' (任意非1的数据),然后整体遍历数组,0 => 1,'#' => 0。

1 1 0 1              1 1 0 1
0 1 0 1      =>    0 1 0 1
1 0 1 1              1 1 1 1
1 1 1 0              1 1 1 0

10分钟A了
2. https 建连过程
3. event loop, 看代码说输出,解释原因。
问:假如给你offer你能提前过来实习么?
答: 如果是正式 offer 那我很乐意来。

一周后 hr面
为什么要学计算机。经历过的项目。如何学习前端的。职业规划。。。。。

一周后(8.14)收到感谢信,捂泪哭,嘤嘤嘤。
原本以为跟三面面试官聊得好好的,以为稳了呢,哎。

#面经##校招##字节跳动##前端工程师#
全部评论
飞书感觉就不缺人   刷kpi的
2 回复 分享
发布于 2020-08-15 10:33
笔者哪一面没答好啊,看你写的面经每一面都很稳啊
2 回复 分享
发布于 2020-08-14 23:44
他在哪听说你刷了些算法题
1 回复 分享
发布于 2020-08-15 11:17
我也是hr之后死了,审批很难说的是
1 回复 分享
发布于 2020-08-15 01:16
能进三面都有很多机会的
1 回复 分享
发布于 2020-08-15 01:02
1 回复 分享
发布于 2020-08-14 23:36
请问按顺序请求资源是怎么写的呀~
点赞 回复 分享
发布于 2020-08-24 18:45
前三轮面试都是在一天吗?第三轮面试完什么时候通知的结果啊
点赞 回复 分享
发布于 2020-08-23 21:54
同学写得很有借鉴意义呀,可以把帖子链接放到秋招面经征集活动下面,这样就能领奖品了哦,活动详情:https://www.nowcoder.com/discuss/445455
点赞 回复 分享
发布于 2020-08-15 10:34
浙江大学审批还会不过?字节跳动到底要的什么人才啊
点赞 回复 分享
发布于 2020-08-15 10:04

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
emmm别问我为啥上一条帖子隔了两个月我才开始投简历和拿offer,因为我懒😰简单流程如下:周一凌晨改好的简历,然后到处乱投简历;周二接到了三维家的一面通知,临时抱佛脚的背了一些八股;周三上午一面下午通知第二天hr面;周四上午hr面下午拿offer,遂收手支线:在BOSS上顺手投了几个大厂,投字节的时候不小心投城客户端了,结果过了一天HR突然把我简历要走了,还问我能不能整客户端,我直接一口答应(脏面评警告😢)结果在周三下午的时候给我打电话,说前端有空缺实习岗,问我有没有兴趣,然后就跟我约了周四下午一面😰我都没咋准备啊,咩都不会啊😭结果周四下午面完,晚上打电话通知过一面了,赶紧把二面约在下周一下午,留点缓冲时间。逆大天了,我一半的问题都不会,他居然给我过了?运气未免有点好了😥现在正在恶补计网、网安、性能优化的东西(这三大板块我是几乎一点不会,一面几乎一点答不出来,加上我又没怎么背八股,这块被干烂了😵)心得体会与经验:1.&nbsp;我giao怎么这么快就结束了,我还以为要找好久😨2.&nbsp;大厂的面试问题真的和中厂小厂很大不同,比如在三维家我能自己吹水到vue的数据劫持、Proxy代理响应式之类的他们就觉得很不错了,但是在字节你但凡敢提到一下就会追问你细节了,一追问马脚就全漏出来了3.&nbsp;有信心真的很重要,我感觉我能拿中厂offer最重要的就是吹水吹出自信来了,以至于三维家面试反问面试官有哪里还需要改进的时候,他就说很不错了解的很多😦4.&nbsp;理解很重要,我从头到尾真没背过很多八股,不过有一些知识确实是敲过代码验证过,所以面试的时候能吹水吹得出来😇想了解面经啥的可以直接评论区问我,但我可能也说不全,因为我没有记录,而且今天摆了一天感觉记忆快清空了😵下面是故事时间:我暑假刚开始的时候才开始准备八股,印象很深那个时候连什么原型、事件循环、闭包这些名词都没听过,资料也不知道怎么找,就一直零零散散的准备,感觉也只有js稍微背了一下八股,其他很多时候都是靠完全理解和手写熟悉一些机制的,但这样做效率很低,反正准备了一个多星期半个月就开摆了😭结果一摆就摆到了开学,笔记是乱七八糟的,八股是忘光光的,简历是一直没改的,实习也是一直没投过的。直到上周日晚上偶然和师兄聊天,他突然问我“你怎么还不找实习”,那天晚上才幡然醒悟,是时候做点事情了😡然后就按照上面描述的来走了。其实我感觉我从头到尾都没背特别多八股,也没怎么找刷题资料啥的,早期就是翻尚硅谷或者黑马的入门视频从头学起,中期用面试鸭看了一点点题,主要是在学js机制和敲js代码,后期才发现了w3c的面经网站,然后在那里看着学(那个时候已经懒得敲了,因为有些问题与代码感觉不像是给找实习的看的,忒细了点😂)接下来继续准备字节二面吧,虽然几乎没啥可能可以通过,但是万一有奇迹呢?😍😍😍也祝大家能够早日拿到心仪的offer
我的offer呢😡:我已经预见10天后你会发,节孝子启动了
投递三维家等公司10个岗位
点赞 评论 收藏
分享
评论
8
48
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务