本人19年毕业,毕业之后一直在深圳一家中厂工作,在公司的时候主要做的都是一些内部的系统,就想趁着这一波金三银四换一下工作,接触更多偏C端的东西,前前后后也准备了一个来,包括算法和手写等,这篇文章主要讲述的是shopee,YY,企业微信的面经~
shopee(toC)
一面
shopee的话一面比较偏基础偏八股文,而且每一面都会有一道算法题,听面试官说算法占的比重还是比较大的。
xss和csrf原因,如何避免 juejin.cn/post/684490…
vue双向绑定原理(2.0和3.0),3.0为什么改用proxy
vue3的主要变化 juejin.cn/post/691000…
vue生命周期,beforeCreate可以获取data吗?created可以获取data吗?在created要获取dom要怎么操作?【next-tick 事件循环】
http1和http2的区别 yuchengkai.cn/docs/cs/#ht…
https yuchengkai.cn/docs/cs/#ht…
在vue中如何操作数组会让视图更新,对象新增属性呢?
vue dom diff是如何比较的
css的margin重叠问题 【BFC】
浏览器缓存【强缓存,协商缓存】,不缓存要设置哪个属性
扫码登陆原理.
做过什么性能优化
移动端渲染长列表如何优化
移动端适配方案特点
类型转换相关 {}+{}结果
if([]){xxxxx}会执行吗?
if({}){xxxxx}会执行吗?
为什么?
深拷贝
跨域问题,解决方式,预检请求有注意过吗
算法:求一个数平凡根,保留三位小数【没有思路,所以换了一道题,后面看了一下,用二分法就能解决了】
算法 --->将数组对象转化为类似于级联选择框要的输入
const input = [ {province:'广东',city:'深圳',area:'宝安'}, {province:'广东',city:'深圳',area:'南山'}, {province:'广东',city:'汕头',area:'潮阳'}, {province:'广东',city:'广州',area:'天河'}, {province:'浙江',city:'杭州',area:'西湖'},]
const output = [ { value: '广东', children: [ { value: '深圳', children: [ { value: '宝安' }, { value: '南山' } ]
},
{
value: '汕头',
children: [
{ value: '潮阳' },
]
},
]
},
{
value: '浙江',
children: [
{
value: '杭州',
children: '西湖',
}
]
}
]
二面
二面的话,主要都是根据简历来问的
根据简历,问了js堆栈的相关概念
var a = function b(){}发生了什么?www.zhihu.com/question/26…
为什么js中的string存放在栈中?
堆是什么数据结构?
根据简历,问了文件上传相关问题
根据简历,问了web component相关问题(日常工作中有没有其他地方用过shadow dom)
算法:二叉树相关 leetcode199 leetcode-cn.com/problems/bi…
已拿offer
YY(hago)
一面
工作中遇到什么问题,如何解决,最好体现你的技术深度。
margin重叠的原因,如何解决?
box-sizing的两个种类,以及他们的区别。
如何理解ts中的泛型?工作中如何运用?
在vue2.0项目中使用ts要配置什么?
rem和em的区别是什么?
说一下http中的缓存,开发中如何利用?
在项目中如何保持代码的可维护性?
代码题: 九宫格,只能走格子的上下左右格子,其他走法就是不合法的,用代码去判断,自己抽象输入输出。
二面
说一下项目
说一下nexttick原理,nexttick有什么应用场景
vue3新特性
跨域问题
http2与http1.1的区别
你刚刚说到头部压缩,可以讲讲怎么压缩的吗
你刚刚说到tls,可以说下这个过程吗,为什么建立链接时候用非对称加密 juejin.cn/post/684490…
base64编码的原理,为什么会有base64编码
怎么操作cookie,请求怎么携带cookie
cookie和localstorage,sessionstorage的区别
cdn原理了解过吗。 juejin.cn/post/684490…
css3动画了解过吗
已拿offer
企业微信
一面
一面前面试官给了四道面试题,给了四十分钟。
- 洗牌算法:对52张牌洗牌,要求尽量洗乱,而且原牌不能在原位置上重复
- 给定一个字符串,编写一段代码测试该段字符串的括号是否完全闭合。
[()]{}{[()()]()} - true
[(()] - false
- 现有新旧两个数组,旧数组经过一系列操作(包括新增、删除、移动等)后可得到新数组。请实现一个函数,找出旧数组上应该执行的操作列表。
const nodes = ['A', 'B', 'C', 'D'];
const after = ['B', 'A', 'E', 'D', 'C'];
const operations = [];
// 请自行定义VDomElement结构
function diff(nodes, after) {
}
- 数组a[N],存放了数字1至N-1,其中某个数字重复一次。写一个函数,找出被重复的数字。时间复杂度必须为O(N), 空间复杂度不能是O[N]。 函数原型: int find(int a[], int N)
接下来是面试
问项目相关的问题
vue父子组件如何通信
用webpack做过哪些优化(开发和生产)
tree-shaking原理 juejin.cn/post/684490…
node和浏览器 事件循环的不同之处
讲下vue 为什么要用虚拟dom ,优缺点是?
dom diff如何比较?是从左到右还是从右到左 zhuanlan.zhihu.com/p/362539108
讲下防抖跟节流的原理和应用场景。
讲下你对闭包的理解,以及闭包的应用场景。
讲下http和https的不同之处。
有了解过webassembly吗?
做出来了三道算法题还是挂了,有的题面试官说时间复杂度不符合要求,不得不说,微信对算法的要求是真的高,大家还是没事多刷刷算法吧🤕🤕🤕