百度提前批前端一二三面面经

我创建了一个 GitHub 仓库,用来汇总自己 2021 秋招经历,整理笔试题以及面经,使用 Issues 进行进度管理,并且自动同步 Google Calendar 的面试日程。
链接:https://github.com/Mayandev/interview-schedule

百度前端一面面经

问题

1、讲一下 Promise,链式调用,Reject 状态是否还可以变成 Fullfilled 状态

2、解构复制,说一下下面的答案:

const {a: A} = {a: 1};
const [a, b] = [1];
const [a, ...b] = [1];
const [a, b] = [1, 2];

3、ES6 还知道哪些,balabala

4、讲一下 react hooks,应用场景,如何用好它

5、跨域解决的几种办法,jsonp 如何实现

6、cookie、session

7、登陆校验如何做,保持登陆态,token 如何传递,如何判断是否失效

8、各种 http 的状态码,具体讲一下 304

9、项目是如何优化的,分析步骤

10、组件异步加载如何做的,分 bundle 打包的原理是什么

手写题

1、promise 处理请求超时

function timeoutPromise(reqestFunc, time) {
  const timeout = new Promise((resolve) => {
    setTimeout(resolve, time);
  }).then(() => {
    throw new Error('Timeout!');
  })
  return Promise.race([reqestFunc, timeout]);
}

2、数组去重,延伸:去除指定的重复数字

const arr = [1, 2, 2, 3, 3, 4];
const newArr = Array.from(new Set(arr));

3、数组转对象,能否用 reduce 实现一下

/**
 * @example
 * [{id: '1001', name: 'jack'}, {id: '1002', name: 'rose'}] =>
 * {'1001': {id: '1001', name: 'jack'}, '1002': {{id: '1002', name: 'rose'}}}
 */
const users = [{id: '1001', name: 'jack'}, {id: '1002', name: 'rose'}];
const obj = users.reduce((prev, curr) => (Object.assign(prev, {[curr.id]: curr})), {})

4、实现一个 compose 函数

下面是自己补充的例子,面试时没听懂面试官所描述的。

/**
 * 接收若干个函数作为参数,每个函数执行后的输出作为下一个函数的输入。
 * 执行方向是自右向左的,初始函数的参数在最右边
 */
function compose(...fns){
    // ...
}
// compose(f,g)(x) === f(g(x))
// compose(f,g,m)(x) === f(g(m(x)))
// compose(f,g,m)(x) === f(g(m(x)))
// compose(f,g,m,n)(x) === f(g(m(n(x))))
// ···

实现:

function compose(...fns) {
  return function(x) {
    return fns.reverse().reduce((arg, fn) => {
      return fn(arg);
    }, x);
  }
}

const add = x => x + 1;
const multiple = x => x * 2;
const minus = x => x - 1;

console.log(compose(minus, multiply, add)(1)) // 3

百度提前批前端二面面经

1、自我介绍

2、无障碍具体做了什么

3、code smell 你是如何做的

4、如何理解副作用

5、for...let of 语句为什么一定有 副作用

6、有没有自动化的手段将有副作用的 forEach 转换为 map、filter 等形式

7、flutter skia 引擎工作原理

8、dart 这门语言的特性,设计之初舍弃了什么、留下了什么

9、monorepo 迁移做了哪些工作,用的什么工具管理的

10、手撸代码,实现一下这个 before 函数
图片说明

/**
 * 传入任意一个函数,只能调用指定的次数
 * @param {*} count 调用次数
 * @param {*} func 传入函数
 * @returns 
 */
function before(count, func) {
  var temp = count;
  return function() {
    if (temp > 1) {
      temp--;
      const args = [...arguments];
      func.apply(this, args);
    }
  }
}

const log = a => console.log(a);

const log3 = before(3, log);

log3(2);
log3(1);
log3(3);

11、react 懒加载,suspense 有用过吗

百度前端三面面经

三面面试官主要对前两轮的面试做了一个复盘,问了一些横向的内容。

1、compose 函数参数为什么要从右至左

2、柯里化的本质,复用数据还是复用逻辑(这里和面试官探讨代码的写法,感觉很有意思,面试官还当场写给我看)

3、探讨 code smell,代码规范,代码复杂度如何降低,设计模式

4、为什么用 for ...let of 替换为 forEach

5、单例模式和静态类的区别

6、网络相关:缓存、身份校验、token 刷新机制等

#秋招##百度##面经##校招#
全部评论
问的有点难
1 回复 分享
发布于 2021-08-10 17:24
请问是百度什么部门
点赞 回复 分享
发布于 2021-08-16 19:37
请教二面第6题怎么回答的
点赞 回复 分享
发布于 2021-08-15 20:46
promise处理请求超时最好是用reject,这样可以把成功的和失败的分开,然后做重传和响应处理
点赞 回复 分享
发布于 2021-08-12 08:57
大佬tql
点赞 回复 分享
发布于 2021-08-11 21:09
老哥投的哪个部门,base哪里
点赞 回复 分享
发布于 2021-08-10 17:20

相关推荐

头像
2025-12-14 11:33
门头沟学院 Java
这是一篇迟来的秋招反思总结。虽然可能是拿到了开发的大sp,或者说小ssp的开发offer,但是真正签下三方的那一刻却并没有什么情绪波动,只觉得“这事结束了,我该继续定下下一个阶段的目标了”。回顾一下自己的秋招历程。我的秋招真正的起点可能起源于去年的年中。那时的我可以说对于求职所需的技巧都完全不懂。没有人带,没有带我求职的“导师”,我所做的只能是问几个学长,然后在各种平台找大佬咨询。最后还是选择了资料最多的Java后端开发,从此我的学习便开始了。刷力扣、刷视频、写项目,日复一日,加了知识星球还去打卡,回看当时打卡记录持续了180+天,直到找到了日常实习才结束。不能说是007,但是平均下来也有了995的强度。在年底找到了第一份日常实习,于是踏上了说走就走的旅程。实习的时候每周都要请半天假从公司坐高铁回到学校,开完会再回去,从中午12点到晚上12点全都在路上,这份辛苦只有自己心里清楚。接着开始找暑期实习,先是被腾讯搞了一通,面微信面穿后录用评估挂,接着又是美团全部答上来后超时自动挂,最后在一个普通的下午突然收到了阿里的实习offer。那一刻所有的努力和辛苦都具象化。暑期实习的过程中,运气好进到了一个强度相对比较低的组,于是在7、8月份每天晚上下班后回去继续刷题、复习各技术栈,还要抽时间面试。到了9月初已经面了40+场,进了面的只挂过一次岗位不匹配的腾讯的存储类岗位。9月陆续收到了多个offer,我以为自己也许会算比较优秀?开始谈薪后发现自己其实只是普通的一员,加了各大信息共享群,发现总是有比我更强的人,也有算法的大佬比我断档的领先。至于我为什么没选算法,在之前的文章里有讲到;而开发的大佬则从本科就开始有了相关的沉淀,我自然无法比肩。于是我想到了“比你优秀的人比你还努力”,我有什么可骄傲的。于是开始继续学习,继续成长,这不是抖M式的强迫自己受苦,也不单纯是为了以后的竞争力,还是为了自己的充实感和心理满足。签下三方的时候没有什么情绪波动,只是普通的点了下按钮,然后转头又去继续改bug了。我想我老了也会继续保持学习,让我不被时代抛弃。
NBA球星伦纳德:这段时间看了佬的故事, 也狠狠的激励了我, 保持持续学习的状态
26届校招投递进展
点赞 评论 收藏
分享
评论
1
26
分享

创作者周榜

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