Hello,大家好,我是雷布斯。
今天想给大家分享一篇社招的面经,作者拿到了 7 家公司的 offer,其中包括快手、腾讯、字节等大厂。
作者在面试前并没有太多的准备,面试过程中不断复盘,最后收获了心仪的 offer,这种复盘的经验也值得大家学习。
由于原文比较长,我们分成两篇进行分享。
面试结果统计:
状态 | 数量 |
---|---|
Offer | 7 |
一面挂 | 2 |
二面挂 | 1 |
薪资没谈拢 | 2 |
最终拿到了58
、UMU
、便利蜂
、虾皮
、快手
、腾讯
、字节
的offer。
金三银四面试的,这次整体面试通过率还挺高的,面试前没有太多准备,基本上是面试过程中不断复盘,整理面试遇到的问题,到最后面几家自己心仪的公司,其实就会发现大家问的问题都差不多。
时间过去比较久了,最近得空了稍微整理一下发出来(不过有些比较重复的问题我当时没有记录,现在也记不起来了)
第一家就面的滴滴,啥都没准备,中间很多没答好,但是意外的到了HR面,可能由于面试表现并不好,所以给的薪资不及预期。
其中印象比较深刻的是三面面试官:
面试官
:问A入职后和上级意见不合应该怎么处理
我
:我官话回答了半天说要考虑当时的背景、双方的观点正确与否再考虑,最终选择最有利于业务发展的一方
面试官
:说这些都没用,如果最终上司的方案确实不如A的,但上司就是坚持自己的意见怎么办?
我
:那我不知道,请问您有什么看法
面试官
:不招A就行了,面试阶段就不能让他通过
【代码题】
实现一个节流函数?如果想要最后一次必须执行的话怎么实现?【代码题】
实现一个批量请求函数, 能够限制并发量?【代码题】
数组转树结构
const arr = [{
id: 2,
name: '部门B',
parentId: 0
},
{
id: 3,
name: '部门C',
parentId: 1
},
{
id: 1,
name: '部门A',
parentId: 2
},
{
id: 4,
name: '部门D',
parentId: 1
},
{
id: 5,
name: '部门E',
parentId: 2
},
{
id: 6,
name: '部门F',
parentId: 3
},
{
id: 7,
name: '部门G',
parentId: 2
},
{
id: 8,
name: '部门H',
parentId: 4
}
]
【代码题】
去除字符串中出现次数最少的字符,不改变原字符串的顺序。
“ababac” —— “ababa”
“aaabbbcceeff” —— “aaabbb”
【代码题】
写出一个函数trans,将数字转换成汉语的输出,输入为不超过10000亿的数字。
trans(123456) —— 十二万三千四百五十六
trans(100010001)—— 一亿零一万零一
整体面试比较顺利,就是没想到三轮远程面试后,最终还去现场经历了一次交叉面和业务负责人面试,不过HR确实是很热情也很专业。
不过最终选择了其他offer,甚至有点感觉对不起大家的热情。
一面二面三面都很不错,交叉面和业务负责人面试有点水,就随便问问。
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function () {
console.log('setTimeout');
}, 0)
async1();
new Promise(function (resolve) {
console.log('promise1');
resolve();
console.log('promise2')
}).then(function () {
console.log('promise3');
});
console.log('script end');
【代码题】
给几个数组, 可以通过数值找到对应的数组名称// 比如这个函数输入一个1,那么要求函数返回A
const A = [1,2,3];
const B = [4,5,6];
const C = [7,8,9];
function test(num) {
}
【场景设计】
设计一个转盘组件, 需要考虑什么, 需要和业务方协调好哪些技术细节? 前端如何防刷【代码题】
数组转树, 写完后问如果要在树中新增节点或者删除节点, 函数应该怎么扩展const arr = [{
id: 2,
name: '部门B',
parentId: 0
},
{
id: 3,
name: '部门C',
parentId: 1
},
{
id: 1,
name: '部门A',
parentId: 2
},
{
id: 4,
name: '部门D',
parentId: 1
},
{
id: 5,
name: '部门E',
parentId: 2
},
{
id: 6,
name: '部门F',
parentId: 3
},
{
id: 7,
name: '部门G',
parentId: 2
},
{
id: 8,
name: '部门H',
parentId: 4
}
]
一面感觉不错,面试官非常专业,态度也和蔼可亲。
但终面的大哥比较盛气凌人,疯狂PUA,聊完后让我降薪,就直接告辞了。
【代码题】
不定长二维数组的全排列// 输入 [['A', 'B', ...], [1, 2], ['a', 'b'], ...]
// 输出 ['A1a', 'A1b', ....]
【代码题】
两个字符串对比, 得出结论都做了什么操作, 比如插入或者删除pre = 'abcde123'
now = '1abc123'
a前面插入了1, c后面删除了de
【场景设计】
大数据列表如何设计平滑滚动和加载,下滑再上滑的操作,上下两个buffer区间如何变化和加载数据。整体面试比较顺利,三位面试官也都比较健谈,最终给了一个很高的总包。
不过感觉面试题太简单,给的钱又多,有点担心就选择了其他offer。
纯聊项目
【代码题】
sleep函数【代码题】
节流防抖整体给我的感觉是为了面试而面试,体验极差。
一面面试官只是机械的提问,提问完也不认真听我的回答,上一个问题跟下一个问题根本没有关联性,就像是在对着题库随便选题。
二面面试时好像一直在电脑上聊天,结束后说是会约三面,过了大概两周说是只招leader,我不符合。
var b = 10;
(function b(){
b = 20;
console.log(b);
})();
async function async1() {
console.log('1');
await async2();
console.log('2');
}
async function async2() {
console.log('3');
}
console.log('4');
setTimeout(function() {
console.log('5');
}, 0);
async1();
new Promise(function(resolve) {
console.log('6');
resolve();
}).then(function() {
console.log('7');
});
console.log('8');
async await的原理是什么?
async/await, generator, promise这三者的关联和区别是什么?
Webpack的原理, plugin loader 热更新等等
Set和Map
vue的keep-alive原理以及生命周期
vuex
【代码题】
ES5和ES6的继承? 这两种方式除了写法, 还有其他区别吗?
【代码题】
EventEmitter
【代码题】
使用Promise实现一个异步流量控制的函数, 比如一共10个请求, 每个请求的快慢不同, 最多同时3个请求发出, 快的一个请求返回后, 就从剩下的7个请求里再找一个放进请求池里, 如此循环。剩余部分的面经将在下篇文章继续分享。
另外,也给“前端面试题宝典”的辅导服务打下广告,目前有面试全流程辅导、简历指导、模拟面试、零基础辅导和付费咨询等增值服务,感兴趣的伙伴可以联系小助手(微信号:interview-fe)了解详情哦~
原文作者:路从今夜白丶
原文地址:https://juejin.cn/post/7142690757722243102