『前端面试题纪实』2021年春招面经(美团offer)
作者:互联网
文章目录
声明
-
写面经
我不知道面试完把面试题贴上来算不算侵权,有问题请随时联系我
我也不相信写面经能攒人品那一套,也从不转锦鲤
纯粹是希望如果有跟我类似境遇的人,这面经或许能帮助到你们吧 -
CSDN最后一篇Blog
CSDN给我的使用体验比较一般
大量的复制粘贴的“原创”文章千篇一律
大量的“面经”、“攻略”后面全是加群(或者“裙”)领资料
爬
写完这篇掘金见
个人背景
-
学历
上海倒第一985,CS专业,GPA60%-70%,六级还没过400
录取时是历史系,高考文科,之后转专业转到CS -
项目
一个毕业设计项目,大型数据库汇总计算器,Vue全家桶开发
一个小型课程设计项目,二手书商城,原生JS、AJAX+Node.JS -
实习
2020.11.4 - 2021.4.12 上海DaoCloud Vue前端开发 -
技术栈
Vue全家桶
H5、CSS3、Scss
ES6、TS、Webpack等 -
春招投递岗位
Web前端
北京
准备手稿
见我的另一Blog: 『前端面试资料』 个人面试准备手稿 2021/4
2021年春招笔试题&面试题
百度(一面后无消息)
笔试(2021.3.25)
-
选择题
好像是20道选择,分多选和单选
印象深刻的,第一个单选题就哈夫曼编码,早就忘了,而且还没按要求准备草稿纸
多选题都是linux命令 -
大题
- 给定一个数字字符串序列,只有0-9
让你从第一位开始往后走,可以一次走一步,也可以一次走到后面一个和当前数字相同的位置,问最少需要多少步
PS:秒了 - 2n个数字,分成n组,每组2个
扔硬币,对于每组,都有概率p扔出正面,扔出正面就取两数较大值,否则去小值
给定这2n个数字和p,问如何将他们分配成n组,可以得到最大数学期望,并输出
PS:我人没了 - 虚拟DOM
给定一个DOM树,一个div,一个ul(包含两个li和文本),(两个li中也包含文本),和普通文本
将其转化为JSON结构,包含每个DOM的标签类型,属性,以及子DOM
格式大概如下,具体名字不太记得了
而且文本也要算一种类型
PS:因为允许用本地编辑器,所以我console.log一直在查DOM节点对象的属性,nodeType啊之类的,后来做对了也是0分,不知道,机器判的
{
nodeType: 'div',
nodeAttribute: {
id: "div1",
},
children: [
{ /* 递归,格式和这个整体一样 */ },
],
}
意外发现了自己保存了当时提交的代码,就写一下吧,虽然没卵用
<html>
<head>
<title>hello</title>
<style type="text/css">
body{
margin: 0;
font-size: 14px;
}
</style>
</head>
<body>
<div id="jsContainer">
<ul class="js-test" id="jsParent">
<li data-index="0">1</li>
<li data-index="1">2</li>
</ul>
<span style="font-weight: bold;">3</span>
4
</div>
<script>
function getDom(dom) {
if (dom.nodeType !== 1 || dom.nodeType !== 3) {
return false;
}
const tag = dom.tagName?.toLowerCase() ?? 'text';
if (tag === 'text') { // text就有可能是假元素
const trimValue = dom.nodeValue?.trim(); // 正则 or trim算长度
if (trimValue?.length > 0) {
return {
tag,
content: trimValue,
};
} else { // 是假的元素,换行,跳过
return false;
}
} else { // 标准dom
const ans = {};
ans.tag = tag; // tag
ans.attributes = {}; // 需要空
if (dom.attributes) {
Array.from(dom.attributes).forEach((val) => {
ans.attributes[val['nodeName']] = val['nodeValue'];
});
}
ans.children = []; // 需要初始化
if (dom.childNodes) {
dom.childNodes.forEach((val) => {
const value = getDom(val);
if (value) {
ans.children.push(value); // recursion
}
});
}
return ans;
};
}
function dom2json() {
const container = document.getElementById('jsContainer');
const val = getDom(container);
if (val) {
return getDom(container);
}
}
console.log(dom2json());
</script>
</body>
</html>
- 总结
100分满的话,估计也就40分?
太难了太难了
为什么会通过,可能是从上往下掐,全都毙掉了才轮到我
一面(2021.4.8)
-
自我介绍,项目相关
最大的困难 -
vue2和vue3原理上的区别
主要说了响应性,其他对于我只是API的区别,比如去掉过滤器,modelValue,组合API等 -
原型链讲一讲
背了一遍 -
如何清除浮动
背了一遍 -
非技术题
未来规划打算
爱好的运动
优点和缺点
技术问题倾向于自己解决还是问别人 -
反问
技术栈:React
前端是否有细分领域:无
给我的建议: 过了HR会通知你的 / 多思考 多学 多沉淀 -
总结
面试使用的视频,不用打代码
是一个女声没开视频单用语音面的我,我开了视频
问的最简单的一个面试
想通过可能远比想象中要困难
字节(准备三面)
笔试(2021.3.21)
- 单选1
<div id="div1">
<div id="div2">
<div id="div3">hello</div>
</div>
</div>
<script>
function log() {
return console.log(this.id);
}
document.getElementById("div1").addEventListener("click", log, false);
document.getElementById("div2").addEventListener("click", log, true);
document.getElementById("div3").addEventListener("click", log, false);
</script>
问:输出结果
答:div2 div3 div1
解释:
第三个参数是是否使用事件捕获,true捕获,false冒泡。
最简单记法,false和不写是冒泡,从内向外;否则是捕获,从外向内。
-
单选2
题:4*4个点 矩阵型 每次只能往下或者往右走
问:从左上角走到右下角有多少种走法
答:dp
0 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20 -
单选3
题目:以下说法哪个是选择正确的
选项与答案:
unshift没有return值
——错,unshift返回数组总长度(易错)
pop不会更改原数组
——错,pop和push都会更改,除此之外还有shift,unshift,pop,splice等
concat会更改原数组
——错,是返回副本,原数组+参数数组
数组的length可以获取和更改
——对,length确实可以更改 -
多选1:
题目:以下选项对于http://www.xxx.com/a.index是否算跨域
选项与答案:
https://www.xxx.com/a.index
——对,不同协议
http://www.xxx.com:81/a.index
——对,不同端口
https://xxx.com/a.index
——对(?),同一域名,不同二级域名
http://www.yyy.com:/a.index
——对,不同域名 -
多选2:
题目:以下关于<script>标签说法是否正确
选项与答案:
src标签只能引用同域
——错,src标签甚至可以用来跨域,参考JSONP
html5可以不写type,默认javascript
——对
defer是等DOM解析完,但是DOMcontendLoaded之前执行
——对
async脚本不会立即执行
——对,先不打断的情况下加载,全部结束后再执行 -
编程1:
题:一组猴子吃香蕉,每只猴子都贪吃,会吃自己食量的二倍,但最多不超过当前剩下香蕉的一半(最后一只除外,可以全拿走)
问:最少需要多少根香蕉能满足所有猴子的需求
输入:一行,k个数字,表示k个猴子的食量
输出:一个数字
PS:暴力拿了满分 -
编程2:
题:给定一排蛋糕n个,对于每个蛋糕i都有一个美味值a[i],你最多吃m个,且必须连着吃
问:最多获取多少美味值
输入:第一行两个数字,n、m;第二行n个数字,表示a[i]到a[n]
输出:一个数字
PS:数组连续最大值dp,但我是暴力做的,拿了70% -
编程3:
题:需要N个连着的字符(必须是N),给你个空文本,你可以用A的时间把现有字符复制一遍,可以用B的时间把现有字符+1或-1
问:最少需要多少时间
输入:一行三个数字,N、A、B
输出:一个数字
PS:前面耗时太久没做 -
总结
大概得分56%
笔试里做得最好的一份了
他们比较坑的是,不让用本地IDE,试卷的IDE编译错误不报
编译错误就不输出任何内容,要人肉Debug的,一个标识符的字母拼错了我找了好几分钟
一面(2021.4.1)
-
自我介绍
主要说在公司实习做了什么,延伸到优化
其他优化有尝试过吗
你自己提的PWA,有了解吗,说了不了解
大家不要学我,专门把自己往火坑里带,后面携程也是这样,反正不会的少提 -
webpack了解吗
说了不了解 -
css动画了解吗
说了不了解 -
代码:做一个电子钟表模型,挂在DOM上,时分秒,每隔一秒都变化秒数
一开始用了setInterval + new Date() 被问了new Date()输出什么,我还说错了,我说new Date()不输出秒
然后继续做,中途自己定义了3个变量:时分秒,然后逻辑判断 +1这样的
但我忘了满了之后给它归零,还被面试官说,你这个可能不会很理想,0分60秒之后会变成1分61秒
这里出了个插曲,出第二道题的时候我直接快捷键全选清屏了……面试小姐姐惊呼了一声,然后说没事,总之大家网络面试不要乱清代码屏 -
计算机网络模型分几层
熟悉那个说哪个,七层五层都ok
我反正两个都说了一遍,送分题多说点 -
你说了TCP和UDP,哪个可靠
TCP -
那什么时候用UDP
说了需要速度的时候,有一些协议比如DNS用的就是UDP -
http1.0 1.1 2.0区别
背了一遍,中间有点忘了什么多路复用之类的 -
跨域了解过吗
背了一遍,CORS、Nginx、JSONP,还自己手欠地写了个今天刚背的jsonp简单实现
被反问,那它怎么获取结果?(一脸尴尬) -
代码题,补全代码让代码正常运行
实现数组乱序,总之在Array.prototype上加这个方法,返回this.sort(() => Math.random() - 0.5)
const arr = [1, 2, 3, 4, 5, 6, 7, 8];
arr.random();
console.log(arr); // 数组乱序
-
代码题,矩阵,只有0和1,问有多少个连续1的区域数量
总之写了20分钟,3层循环
把思路讲明白了,就是用visited[]跟踪
然后每次清除一片区域
边界条件那里留了注释,没有去写
她也提了问题,说我忘了循环结束后处理原数组,导致无限循环
代码没run,我知道run了必爆炸 -
反问
问用vue还是react,理由
问我哪里表现的好哪里不好
她说我这么直接就想知道结果吗
我说不是,我知道自己表现比较差,想得到一点建议,大概得到的就是,不要做API使用者,你做过的东西要知道技术原理
让我拿接下来时间补一补css动画,webpack相关,自己项目相关之类的
告诉我给我过了,希望有机会可以成为同事 -
总结
小姐姐很好看,态度很好,人也很nice
字节处理起来效率很高,总之体验比较好
二面(2021.4.15)
-
简历深挖
登录注册怎么实现
md5加密在哪一层
持久化存储你会怎么做 -
八股文
cookie与LocalStorage
GET与POST
浏览器缓存策略 -
深度
Node.js了解到什么程度,做过中间件吗 -
基础
如何判断数组是数组 -
代码
url字符串,实现查query功能,很快写出来后,又改变了要求:如果query重复,要取第二个/要都取出来作为数组。反正必须再改写
手写数组排序,写了个归并,他说快排掌握的不错,估计口误,高情商的我当场:“这是归并” -
反问
业务具体,讲了字节比较激进,敢用Flutter -
总结
中途宿舍断电了,还出去打电话面了十几分钟,后面的代码题实在不能电话,就回宿舍面,还好来电了
十分八股文的一次面试,白给
三面(2021.4.20)
等待中
携程(二面后无消息)
笔试(2021.3.24)
行测
一面(2021.4.8)
- 自我介绍
学前端的时间,选择前端的理由 - 上来就问代码题
- 对象a赋值给b,b赋值给c,b修改属性,c指向新对象,问输出
如何在不改变a的情况下赋值,答了浅拷贝 - for循环var i,setTimeout输出,问结果
这里有个坑就是setTimeout里用了this,面试官指点我才发现,直接会报错
为什么var换let就可以工作了 - 给数字,3位分隔,转化为字符串,小数部分四舍五入
- 给定输入串,筛出数字部分作为数组输出
用了把非数字正则替换为其他东西,然后问我不能直接用正则筛数字吗
正则加g和不加g的区别,讲一讲贪婪匹配和非贪婪匹配,有系统学习过正则吗
- 继续问基础
- 数组去重
引用类型怎么办,说了weekSet,又问(引用类型Set不可以去重吗)?引用类型和对象的区别
const的数组可以变化吗(如何让const的数组不可变)说了Object.freeze
- 知识面
- node了解吗 react呢
说只知道做项目用了些请求处理 - cookie与安全
cookie和localStorage区别
问了cookie在请求中携带是本身还是js操作的
cookie和CSRF的关系,说了设置为httponly就行,被问为什么
攻击者为什么不受跨域限制?说了可能服务端做了反代
Https下有没有必要对敏感信息加密,为什么,给一个理由,说了非对称加密 - 循环引用
报错吗 怎么做,我瞎说的报错
import和require的区别
-
反问
问了技术栈
对我的建议:夯实基础
给我介绍了现在的业务线,然后重视应届生
又问了前端细分领域 -
总结
最为崩溃的一次面试,问的全是知识盲区,或许因为我的知识盲区本来就比较大吧
但是意外的是我反问完了他给我讲了很多他们业务,然后说公司很注重校招生,让我等hr再联系
二面(2021.4.14)
-
自我介绍
讲了两个优化,一个是直接替换,一个是缩减打包体积 -
代码题
第一个前面做过了 说了
统计字符串出现频率最多字符
数组去重降序排序 -
js题
闭包变量提升
事件循环 -
css
垂直水平居中
有没有做过移动端适配 -
优化
vue做过哪些处理
vue首屏优化 -
网络
输入URL到看到页面的过程
为什么css放在head后面 js放在body后面 -
事件
点击dom输出index
如果特别大怎么办 说了事件委托
如果某一个我不想要事件怎么办 说了阻止冒泡 -
vue
有做过组件么
v-if与v-show
知道什么指令
v-model怎么做的 -
webpack
loader plugin做什么的
es6怎么弄到es5的 说了babel-loader 语法层解析 -
ssr
什么原理 -
vue-router
什么原理,hash模式需要服务端做什么 -
node
有做过中间件吗 -
反问
技术栈
业务 -
总结
把自己带到了各种不熟悉的领域的坑上
过的概率不大,随便吧
网易(一面挂了)
笔试(2021.3.25)
行测
一面(2021.4.9)
-
自我介绍
-
css布局
三栏布局自适应
父子,子margin-top为100px,问父子顶部距离(margin溢出)
兄弟节点分别设置margin,他们的margin是多少 -
vue
created想获取dom怎么办,(nextTick)
数组中某个对象被监听到了,但是没有更新dom怎么做 -
数组
push返回值(长度)
const是否会变
去重
扁平化
转字符串join -
函数
防抖 -
总结
nextTick我不熟,Vue.set也没用过
前面的父子margin重叠我也没说出来
懒得反问了,面试官直接说等hr通知
第二天就感谢信,网易效率还是挺高的
PS:我把身份证号最后一位填错了,清明假期内让我确定面试时间,我登录不上去,也找不到客服,后来hr主动打电话给我联系面试,给我安排到周三,周三实习请假后跟我说你不是周四面试吗,我说也罢,她就给我安排在周五了。我还担心身份证号填错会不会有影响,不过证明我的担心很多余。
美团(已签offer)
笔试(2021.3.27)
-
给定一个数字序列,得出以下操作可能得出结果的字典序最小值:可以改变一个数把它变成回文序列,可以随便改变一个数
-
给定一个字符串只有T和F,问改变多少个F可以不出现连续的>=3个F
题目略坑,结果要乘m或n,还问最小值,m和n都是正数,有一个数字完全浪费掉不知道意义何在 -
给定一个数字序列,然后执行多次询问,问某个数字最早和最晚的出现位置
-
没看,反正涉及dp和异或
-
没看,不想做了
- 总结
得分:18% 45% 45% 0 0
我甚至提前一个小时把卷交了不想做了
我觉得我做的都对,无论如何只能过45%数据点,如果用Java和JS只能过36%因为超时
后来路上觉得第三题可以把询问结果缓存一下的
后面收到约一面的电话我还挺惊讶的,我觉得我必挂,hr说他是美团的,我说我投过美团啊,笔试结束应该挂了啊,balabala……就是没意识到是笔试之后约的面试
一面(2021.4.2)
-
自我介绍,实习遇到的难点
-
事件循环,this指向
有一个地方错了,外部var a = 1
函数内部console.log(a),然后var a = 2
由于变量提升应该是undefined -
node环境运行事件循环的差别
我说不知道,但是知道this是undefined -
一个div包6个div,实现屏幕宽度>1024,6列等间距;否则3列等间距,分两行
说了用js获取宽度,他说css也可以
我说可以设置宽度让他恰好每行3个,也可以flex
总之感觉这道题答得很差 -
页面在浏览器加载的过程
-
有哪些事件
说了onLoaded、onDomContentLoaded(还是字节笔试时候记住的) -
前端优化
他跟我提了SSR和骨架屏 -
算法:单链表反转
-
前端兴趣体现在哪些方面
说了做东西的成就感
高效处理数据的那种自豪感 -
自己哪些事做的超过同龄人90%
说了思考和记事 -
有没有遇到搞不清楚领导安排任务的时候
说经常 -
碰到问题怎么解决的
我的回答很直接,先百度再google然后stackoverflow,没有就问领导
然后分场景,紧急的话以问为主,否则倾向于自己找答案 -
插曲
我因为在外面面试,手机热点网不太好,一开始换了个热点,后来因为忘了关流量限制还断了一次 -
反问
技术栈vue or react
对我有什么建议(先夸了一番,思维敏捷,思考事情多;说了浮躁,一边敲代码一边说;结果又直接告诉我过了) -
总结
面试是我捡来的机会,笔试考成那个德行居然给了面试
然后在公司,我是去楼下找了个楼梯坐着面的,就是很佛系,反正捡来的机会,早晚会丢,很无所谓
中途手机热点给我自己断了,我还办了个流量接着回去面的
感觉自己像玩一样,根本没上心
二面(2021.4.7)
-
自我介绍
问了实习有哪些做的比较有趣的事 -
js和你学过的其它语言的特点
-
进程和线程的区别
-
http和https
-
ca具体的有了解过吗
-
算法:上台阶
每次1 or 2,dp -
算法:最长公共子串
肠子悔青,以前从来没看过这道题题解
暴力做的,面试官说了ok,没细究 -
讲讲快排
-
未来规划和打算
-
反问
1 前端细分哪些领域
感觉他说了好多
2 对我的建议
说了深度还有待提高
能遇到很多优秀的同学,要么实习好看,要么基础扎实
说我潜力巨大
感谢参加美团的面试
总之就是听这意思多半是凉了 -
总结
面完之后脸都是绿的
一是面试官的语气潜力巨大很像是黑话,就是现在比较差的意思
二是算法题碰到过很多遍,没看题解,今天真的问了
我用了10分钟就把dp看会了……后悔为什么不早点看,早点看是不是就过了
hr面(2021.4.13)
- 前面几轮面试的体验
- 自己的实习公司做什么业务的,对我们的业务有了解吗
- 在上海为什么投北京
- 投了哪些公司,会怎么选择
我说美团用Vue和我主技术栈很搭,优先考虑,被告知不要通过技术栈来选择公司
我说那就是公司氛围吧,问我怎么感觉出来的,我说面试体验很好,有效率 - 反问
问了你觉得技术人员最重要的是什么
offer(2021.4.17)
给了48小时期限,如果不签就不会再发了,反正我是签了
问了确定不来提前实习是吧,我说是,问了会不会有影响,hr说不会
估计就是确认一下选择而已,反而给我吓一跳
360(准备二面)
笔试(2021.3.28)
-
40个选择40分,比较基础
-
大题1:一个数组,输出总和+两两或运算后的和
犯了个蠢,我把a | a 当成了 a ^ a,当成0算了 -
大题2:n个数对,排序的,表示位置和值,给你一个机器,最多启动k次,每次最多走m步,问最多拿到多少数值
-
总结
因为数据看不到,只能看见自己过了多少数据点
所以一直没发现题1自己的幼稚错误
考完还和朋友吐槽这种看不见数据点的算法题很烦
吐槽着吐槽着就想明白了自己错在哪里了
一面(2021.4.9)
- 各种代码题
var a = 10
function b() {
a = 100
}
b()
console.log(a) // 100
var a = 10
function b() {
a = 100
return;
function a() {}
}
b()
console.log(a) // 10 function被变量提升了
var a = 10
if (true) {
var a = 100
}
console.log(a) // 100 var没有块级作用域
var name = 'map';
function func() {
console.log(this.name);
}
var object = {
name: 'object',
getNameFunc: function(fn) {
fn && fn(); // map 返回匿名函数被window调用
return () => {
return this.name; // object 作用域是在obj之内
}
}
};
console.log(object.getNameFunc(func)());
牢记一下,面试肯定考特殊情况,普通不变的怎么可能拿来考
而且一般答案都不一样,不会两个都指向同一个,而且另一个没用
-
var、let、const
-
浅拷贝深拷贝
-
数组方法说一遍,改变数组的,迭代数组的
-
vue生命周期函数 组件通信
-
做一个布局,上中下,中间三栏布局中间自适应
-
有没有其他公司offer,确定来北京么
-
总结
也是个姐姐,还是挺nice的
js基础的题我一错再错
为什么过了我也不知道
二面(2021.4.19)
等待中
其他投递公司
投递后石沉大海
- 搜狗
- 小米
有个行测 - 贝壳找房(通过智联)
- 在线途游(通过智联)
- 爱奇艺
- 快手
- 京东
- 滴滴
- 软通动力
做了个笔试,都是计算机相关的,也不限制百度,规定时间做完就行…… - 搜狐
要求精通jQuery - 完美世界
- 经纬恒润
- 爱读掌阅
- 陌陌
- 竞技世界
- 祖龙娱乐
投递后挂了
- 图森未来
投完第二天邮件告知不符合 - 北森
投完做了个行测+两道白给代码题
难度大概就是数组第i位到第j位求和
给我印象深刻的是这家公司Web端表单真的感人
一个输入框全屏 3个Label+3个输入框占了我整个屏幕
然后代码题要求用function参数作为输入,用console.log作为输出
标签:面试题,面经,2021.4,offer,笔试,面试,数组,dom,log 来源: https://blog.csdn.net/GLZX_HM/article/details/115839015