春招已经结束了,从三月初到到四月中,陆陆续续笔试面试了将近一个半月,也拿到了许多offer,现在来一发迟到但是热乎的面筋……
从二月底开始投,然后慢慢开始从笔试到面试,基本投了的90%都有笔试或者面试,可能是学校带给我的优势吧,毕竟说实话我的简历确实有点拉闸,被吐槽了好多次,面试官和朋友以及同行都吐槽过我的简历……笔试好像除了滴滴没过,其他公司都过了;面试的话好像投了的基本都给机会面试了,除了一两家(可能是我不配),这里另外吐槽一下赛码网笔试是真的难用。
下面说一下我面试过程中遇到过的问题吧!
-
JavaScript部分
- 作用域:let、const的块作用域,暂时性死区?var的函数作用域、变量提升、静态作用域动态作用域、作用域链、
- 原型链:定义?这里被问到了查找对象上的属性过程,for in遍历会不会遍历原型链(会),如果不想遍历用什么方式
obj.hasOwnProperty(key),继承 - 执行上下文?(作用域和执行上下文两个好好看一下,创建过程,函数定义创建啥,执行时创建啥?分别做了什么事情?)
- 闭包:什么是闭包?闭包的原理是什么?闭包的应用场景?如何清除?内存泄漏?V8的垃圾回收?(反正扩展就完事了,背八股)
- 垃圾回收:如何避免内存泄漏?知道weapMap/weakSet吗?什么是弱引用?
- 定时器的回调函数什么时候执行,定时器的时间一定是准确的吗?怎么解决不准时?
- ES6:暂时性死区?箭头函数的缺点?Proxy和defineProperty对比,哪个性能更好?
- 异步:事件循环(浏览器和Node事件循环的区别)、Promise(这里每次都问,问的很多,可能让你看代码输出,也可能让你手写个方法,比如Promise.all()、Promise.race()等……)?
- async/await:这里单独把这个拿出来说是因为被问到也挺多的,首先就是和promise结合看输出,另一个就是问原理,generator生成器,await原理,另外刚才那个箭头函数可不可以定义为generator函数?
- 回调地狱,链式调用巴拉巴拉……
- for循环和for-of遍历数组的区别,性能对比?
- 伪数组?怎么转换为真实数组?多来几种方法
-
HTML、CSS部分
- 语义化?SEO?SPA?PWA?SSR?CSR?
- 盒模型,给一段css让你看盒子的大小
- flex布局?会让你写布局,也会让你看弹性盒子大小、flex布局原理
- grid布局,这里被问了一次吧好像
- BFC:原理?应用场景?margin重叠?
- 居中方式,水平垂直居中,越多越好
-
VueJS
- 生命周期?重要的就是
created和mounted,就是获取vue实例和获取dom,对了还有一个被问到父子组件的生命周期是怎么样的?跳转到其他页面如果让原来的页面组件不销毁?知道组件缓存吗?actived? - vue-router原理?hash模式和history模式的区别,分别的实现原理?就离谱,字节面试的时候让我手撸一个vue-router……我直接好家伙
- vuex:vue状态管理器,说一下作用,然后就会顺着引出组件传值,巴拉巴拉……然后问mapState和this.$store.state获取值的区别,vuex里的值是保存在哪里的?(内存,所以刷新页面就消失了)
- 说一下通过ref获取dom和原生方法获取dom的区别?
- MVVM?MVC?
- 双向数据绑定原理?defineProperty绑定的缺陷?怎么解决?数组下标修改怎么办?怎么劫持数组?然后收一下vue3的proxy,如果多问点可能会问Reflect……
- Virtual Dom,说一下虚拟dom,有什么好处?虚拟dom的缺点是什么?怎么挂载的?这里会被问到
this.$nextTick,实现原理,然后又扯到事件循环,然后又问深了,浏览器刷新每次都重新渲染吗?可不可以不渲染? - Diff算法:vue-for中key值的作用是什么?key值可以是哪些类型?可以是object吗?是如何保存的?这里又扯回es6了map/weakmap……然后就问到diff算法,巴拉巴拉,新旧节点如何比较,层级比较巴拉巴拉……
- 生命周期?重要的就是
-
webpack
- webpack的打包构建过程?
- 如何设计一个loader?
- 如何设计一个plugin?
- 常用的loader,常用的plugin?
-
计网
-
http缓存?强制缓存协商缓存?区别?强缓存的状态码是什么?(200)和普通的200有什么区别?缓存都保存在什么位置?(memory、disk)巴拉巴拉……expires的缺陷?last-modified的缺陷?
-
经典问题:输入url(关键词)到展示页面发生什么?
-
常用的http请求方法?
-
常见的http状态码?
-
跨域?跨域的原因?同源策略?怎么解决跨域?
- jsonp需要后端配置吗?怎么配置?
- cores的原理?有哪些相关字段?
acess-control-allow-credentials这个字段是干什么的?这里会问到csrf攻击、options预检请求做了什么?什么时候会触发预检请求? - nginx反向代理?
webpack devServer跨域的原理是什么?生产环境可以用吗?- iframe?postMessage?
- websocket?
-
xss攻击?
-
csrf攻击?
-
安全这部分不能简单背八股,腾讯和跟谁学面试的时候我被好好上了一课,反正好好仔细研究一下,不能简单背
另外就是一些八股
- OSI七层网络模型,TCP/IP模型
- 各个层做了什么?分别有哪些协议?为什么要分层?
- 全双工是什么?
- TCP和UDP的区别是什么?
- 有些奇葩公司会问端口号和协议号,TCP和UDP的协议号,还有一些应用层协议的协议号,STMP、Telnet、DNS、FTP端口号……(秋招的时候被问了一次,春招没有被问)
- 三次握手,四次挥手(这里扩展的题有些,比如为啥要握手三次,两次会怎么样?挥手为啥要四次,三次不行吗?最后为啥要等待2msl?)
- HTTPS握手?(反正这个里面东西也贼多,对称加密非对称加密、怎么生成最后的密钥?客户端怎么验证证书的安全?)
- HTTP和HTTPS对比,HTTPS耗时主要是哪部分耗时?(SSL握手和对内容的加密,因为最后的其实还是http,但是需要对内容加密,这个加密耗时和最开始的ssl握手耗时)
- HTTP0.9--HTTP3,背就完事了,
- 长连接keep-alive?
- 队头堵塞?
- 一个域名最大连接数?
- HTTP2.0新特性?(重点说一下二进制分帧和多路复用)
- HTTP3的下层协议是UDP如何保障可靠的,巴拉巴拉
- TCP如何保障可靠传输?(这里好好去看看,重传是怎么做的?流量控制怎么做的?滑动窗口是什么?慢启动是什么?快速恢复……说简单也简单但是挺多的)
-
-
操作系统
操作系统部门其实问的有点少,就那么点
- 进程和线程的区别?JavaScript为什么是单线程的?
- 进程通信方法?
- 调度算法有哪些?
-
数据结构
- 有哪些常用的数据结构?
- 满二叉树?完全二叉树?
- 数组和链表的区别?存储方式?查找速度、增删速度对比?
- 堆和栈的区别?平衡二叉树?堆排序?
- 图?不记得了有一家笔试的时候让我求图最短路径?
Dijkstra迪杰斯特拉算法,心态直接炸裂 - 另外的就是一些八股,而且数据结构通常体现在算法题里面……
-
算法
-
链表
- 反转链表
- 链表排序
- 判断链表是否有环
- 合并链表(2个和n个,其实原理差不多)
- 删除(找到)链表的倒数第k个节点
-
二叉树
- 前序后序中序遍历
- 层次遍历,(两种,一种是全部放到一个数组里返回,另一种需要每一层单独放到一个数组,最后再全部返回)
- 之字形遍历
- 二叉树深度
- 判断平衡二叉树
- 是否存在权值为n的路径
- 重建二叉树
-
多叉树
- 是否存在一条m-n的路径,输出这条路径(这题笔试了一次,面试也手写了一次)
- 多叉树遍历?深度优先广度优先
-
图
- 最短路径
- 遍历
-
数组字符串
数组和字符串相关的其实是最多的,也很常见,而且数组和字符串其实可以相互转化,所以很多题重复的
-
首先肯定是排序,常见的得会手写,选择插入冒泡必须会,另外就是快排必须得会手写,我当时还被问到js的sort排序是怎么实现的复杂度是多少?
-
斐波那契数列?最优的版本是O(n)时间,O(1)空间
-
数组去重,多来几个方法,es6的set用起来,这里会结合排序,数组去重后排序
-
反转字符串
-
比较版本号
-
进制转换
-
合并有序数组?O(n)复杂度
-
洗牌算法?
-
统计字符串(数组)中出现次数最多的字符(数字)?
-
统计dom中出现次数最多的标签?
-
设计LRU缓存结构?
-
有序矩阵搜索?
-
合并区间(猿辅导)
-
dom转换,将一个虚拟dom(对象)转换为dom结构或者dom结构转为对象(json)
-
大数相加
-
括号是否匹配?用个栈就ok了
-
O(n)两数之和
-
最长递增子序列
-
无重复序列的最长子串(这里其实有两个,一个是求长度,一个是求子串,看好题目,我字节面试的时候就搞错了)
-
数组的最大累加和
-
最长回文子串
-
买卖股票的最佳时机
-
打家劫舍
-
call、apply、bind?
-
instanceof、new?
-
节流和防抖?
-
手写完整的promise倒是没有遇到,但是很多方法,all、race、any
-
日期格式化?正则?正则当时被问到贪婪匹配和非贪婪匹配
-
组合继承继承
-
数组拍平(虾皮笔试的时候贼恶心,ACM模式给个数组拍平的笔试题,兄弟们想象一下……)
-
数字千分位展示、保留小数、保留小数后千分位
-
深拷贝?
-
reduce实现map?(这里其实八股看一下,reduce实现其他函数,有好多的)
-
-
-
其他面试题
-
二维码扫码登录原理?
-
页面监控?埋点?
-
一个网站的性能有哪些指标衡量?
-
前端工程化?
-
大前端方向?
-
前端业内新技术有关注吗?
-
怎么学习前端?为啥选择前端?(开放性问题)
-
如何查看一个网页的加载时间?
performance -
cookie和session?
-
浏览器存储,sessionStorage和loacalStorage的区别,存储大小?当满了怎么办?会报错吗?如果继续存储怎么办?淘汰算法怎么设计?
-
cookie会跨域吗?怎么让他跨域?然后又扯到网络安全上去了……
-
性能优化?(其实这个题我个人理解是从上面那个题(url到页面展示)顺着说就完事了)
- cdn原理?
- 如何实现缓存?前端和后端分别怎么做?
- 哪些情况防抖节流?
- 回流和重绘的区别,怎么减少?
- async/defer?
-
-
总结
整个过程还是非常漫长的,持续了一个多月,最多的时候一天三四场面试,而且面试的时候在宿舍,舍友在的时候一度很尴尬,而且自我介绍真的说吐了,基本每次都一样,说了估计至少五六十次吧,甚至我舍友都能背我的自我介绍了……阿西
但是最后的结果我觉得还行,至少拿到了几个我满意的offer,最可惜的是腾讯的面试因为百度面试冲突被迫放弃了,主要当时不知道百度是连续面试的直接一天面试完。阿里没投,京东拼多多和网易没笔试,京东和拼多多实在太晚了,那个时候已经快结束了,滴滴笔试没过(吐槽赛码网的ACM模式,真的拉跨),小米就纯粹简历没过还是什么原因,测评之后就没有结果了,其他的好多因为时间冲突或者其他原因放弃了很多笔试和面试。
说一下最后拿到offer的吧:百度、美团、好未来、跟谁学、猿辅导、携程、龙湖、OPPO……还有一些其他就不说了,有些是银行子公司,有些是一些小厂。当时还作死了一波,有好几个offer本来能拿到的(中小厂),但是因为那个时候有几个很不错的offer了,所以我hr面试的时候要了好高的薪资,然后hr直接把我挂了……
整个春招过程中其实一开始没有保底的时候每次都慌的不行,但是慢慢的随着面试尤其是有了保底offer的时候都成老油条了,都不想复习了,面试前面5分钟可能都还在床上躺着,到面试前两三分钟才爬下来进入面试聊天室,简直了……
还有很多很多已经不记得了,一直没有录音,全靠印象写了上面那些,所以各位大佬勉强看一下吧……
一面其实基本都是基础八股文,随便问一点,然后问问简历上的项目,然后写一两个题看看输出就过了,二面三面的话就开始问一些原理性的东西,开始深挖项目,反正直接问到你说不出话来为止,估计面试官就喜欢这个调调……
吐槽一下:面试过程中千万不要去刷脉脉!!!最后全部结束的时候选择offer的时候可以去脉脉上看一下,让大家给点建议,但是呢建议选择性的看,因为脉脉整体风向就是所有公司都是垃圾,脉脉上就没有一家能去的公司………………