【面经】5 年前端 - 历时 1 个月收获 7 个 offer (下)

大家好,我们在上一篇《【面经】5 年前端 - 历时 1 个月收获 7 个 offer 》中介绍了一位同学面试滴滴、58 同城等公司的经历,今天继续来分享他在 UMU、网易、快手、虾皮、字节的面经。

UMU (offer)

前两面都是远程,终面去了公司现场。

到了之后先做了一份测试题,大概就是考察基本认知能力的。完事后 CTO 来面试,直接在现场小黑板上写题。大佬对各种技术都能侃侃而谈,确实很厉害。

不过听说周六可能要加班,而且担心稳定性,就没选择这里。

一面

除了项目, 基本都是问的日常开发相关的东西, 比较实在。

二面

终面

  • 【代码题】 给一个字符串, 找到第一个不重复的字符
ababcbdsa
abcdefg
  • 时间复杂度是多少?
  • 除了给的两个用例, 还能想到什么用例来测试一下?

网易

一面直接挂掉, 代码题整体写的乱七八糟, 挂掉理所应当...

一面

// 题目需求

let middleware = []
middleware.push((next) => {
    console.log(1)
    next()
    console.log(1.1)
})
middleware.push((next) => {
    console.log(2)
    next()
    console.log(2.1)
})
middleware.push((next) => {
    console.log(3)
    next()
    console.log(3.1)
})

let fn = compose(middleware)
fn()


/*
1
2
3
3.1
2.1
1.1
*/


//实现compose函数
function compose(middlewares{

}

  • 【代码题】 遇到退格字符就删除前面的字符, 遇到两个退格就删除两个字符
// 比较含有退格的字符串,"<-"代表退格键,"<"和"-"均为正常字符
// 输入:"a<-b<-", "c<-d<-",结果:true,解释:都为""
// 输入:"<-<-ab<-", "<-<-<-<-a",结果:true,解释:都为"a"
// 输入:"<-<ab<-c", "<<-<a<-<-c",结果:false,解释:"<ac" !== "c"

function fn(str1, str2{

}

快手 (offer)

整体面试的感觉很专业, 面试态度也很认真, 考察的比较全面, 不过比较蛋疼的是 HR 面结束后拖了好久, 我 Shopee、腾讯、字节口头 offer 都拿到了, 快手最后才给的口头 offer, 也可能是想对比一下其他家的价格吧。

一面

console.log(typeof typeof typeof null);
console.log(typeof console.log(1));
var name = '123';

var obj = {
 name'456',
 printfunction({
  function a({
    console.log(this.name);
  }
  a();
 }
}

obj.print();
function createRepeat(fn, repeat, interval{}

const fn = createRepeat(console.log, 34);

fn('helloWorld'); // 每4秒输出一次helloWorld, 输出3次
  • 【代码题】 删除链表的一个节点
function deleteNode(head, node{}
class LRU {
 get(key) {
 }

 set(key, value) {
 }
}

二面

三面

没有记录,应该都是问的项目

高德

一面直接挂掉, 面试官一直怼着各种 api 考察记忆力, 都是一些非常偏非常不常用的 api。

  • 比如 css 有没有用过 xx 属性,是做什么的?
  • Promise 有个 xx 方法,你知道是做什么的吗?

最终就是挂在了 css 的各种属性背诵上, 麻了, 面试的时候让候选人从头背这些 api 真的有意义吗?

一面

Shopee (offer)

面试比较痛快,一共两面,一下午直接搞定。

一面结束后直接约了一个小时后二面,二面结束后直接约了一个小时后的 HR 面。

但是最后谈薪的时候 HR 也是比较磨叽,一直说要等快手或者字节的价格出来,他们才会给价格,说是这样才更有竞争力。

一面

const deepClone = (obj, m) => {

};
  • 【代码题】 二叉树光照,输出能被光照到的节点, dfs 能否解决?
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

输入: []
输出: []

/**
 * @param {TreeNode} root
 * @return {number[]}
 */

function exposedElement(root{

};

  • 【代码题】 输出顺序题
setTimeout(function ({
  console.log(1);
}, 100);

new Promise(function (resolve{
  console.log(2);
  resolve();
  console.log(3);
}).then(function ({
  console.log(4);
  new Promise((resove, reject) => {
    console.log(5);
    setTimeout(() =>  {
      console.log(6);
    }, 10);
  })
});
console.log(7);
console.log(8);
 var a=3;
 function c(){
    alert(a);
 }
 (function(){
  var a=4;
  c();
 })();
function Foo(){
    Foo.a = function(){
        console.log(1);
    }
    this.a = function(){
        console.log(2)
    }
}

Foo.prototype.a = function(){
    console.log(3);
}

Foo.a = function(){
    console.log(4);
}

Foo.a();
let obj = new Foo();
obj.a();
Foo.a();

终面

  • 错误捕捉
  • 前端稳定性监控
  • 前端内存处理
  • 【代码题】 好多请求, 耗时不同, 按照顺序输出, 尽可能保证快, 写一个函数.
const promiseList = [
 new Promise((resolve) => {
  setTimeout(resolve, 1000)
 }),
 new Promise((resolve) => {
  setTimeout(resolve, 1000)
 }),
 new Promise((resolve) => {
  setTimeout(resolve, 1000)
 })
]

fn(promiseList);
  • 【代码题】 一个数组的全排列
输入一个数组 arr = [1,2,3]
输出全排列

[[1], [2], [3], [12], [13], ...., [1,2,3], [1,2,4] ....]

腾讯 (offer)

腾讯的整体流程是最长的,一共面了 5 次,整体面试难度倒不高,只有前三轮是正经问技术问题,后面更像是在聊天聊项目。

因为当时整体其他 offer 都快到 ddl 了,就赶紧催 hr 给个数字,最终薪资不及预期就没去了。

一面

  • 普通函数和箭头函数的 this 指向问题
const obj = {
 fn1() => console.log(this),
 fn2function({console.log(this)}
}

obj.fn1();
obj.fn2();

const x = new obj.fn1();
const y = new obj.fn2();
function layerSum(root{

}

const res = layerSum({
    value2,
    children: [
        { value6children: [ { value1 } ] },
        { value3children: [ { value2 }, { value3 }, { value4 } ] },
        { value5children: [ { value7 }, { value8 } ] }
    ]
});

console.log(res);

二面

没记录,应该是和前面遇到的面试题重复了

  • 【代码题】 虚拟 dom 转真实 dom
const vnode = {
    tag'DIV',
    attrs: {
        id'app'
    },
    children: [{
            tag'SPAN',
            children: [{
                tag'A',
                children: []
            }]
        },
        {
            tag'SPAN',
            children: [{
                    tag'A',
                    children: []
                },
                {
                    tag'A',
                    children: []
                }
            ]
        }
    ]
}

function render(vnode{

}

三面

  • 前端安全 xss 之类的
  • Https 中间人攻击
  • 前端 History 路由配置 nginx

【代码题】 有序数组原地去重

四面(gm?忘记了)

  • 如何估算一个城市中的井盖数量

终面

都是项目

字节 (offer)

之前听说字节各种 hard, 给我吓惨了, 不过可能是运气好, 碰到的题都很简单。

一面

  • 【代码题】 二叉树层序遍历, 每层的节点放到一个数组里
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是 [ [3], [9,20], [15,7]
]
  • 【代码题】 实现一个函数, fetchWithRetry 会自动重试 3 次,任意一次成功直接返回

  • 【代码题】 链表中环的入口节点

对于一个给定的链表,返回环的入口节点,如果没有环,返回null

二面

三面

  • 【代码题】 叠词的数量
Input: 'abcdaaabbccccdddefgaaa'
Output4

1. 输出叠词的数量
2. 输出去重叠词的数量
3. 用正则实现

写在后面

最近的整体行情好像更差了,Shopee 也传出了很多毁 offer 的事情,当时幸亏没去...

不过劝想看机会的大伙还是骑驴找马,可以先简单试试水,看看行情到底如何,不要只听网友怎么说。

最终愿大家变成 offer 收割机,每个人都能拿到自己心仪的 offer。

最后,还给“前端面试题宝典”的辅导服务打下广告,我们目前有面试全流程辅导简历指导模拟面试零基础辅导付费咨询等增值服务,感兴趣的伙伴可以联系小助手(微信号:interview-fe)了解详情哦~

原文作者:路从今夜白丶

原文地址:https://juejin.cn/post/7142690757722243102