字节
一面
1.如何实现一个对象的私有方法?
2.virtualDOM的数据是从哪里来的?
3.css的计算属性
4.右边定宽,左边自适应(左边一个input输入框,右边一个按钮)
5.二叉树的左视图,右视图。
6.网络七层模型。TCP如何解决网络拥堵?
7.taro多端开发是怎么支持的?原理是什么?
8.webpack里面loader和palugin有啥区别?
二面
1.实现九宫格,边框都是一像素
2.cookie不安全,那localStorage安全吗?
3.cookie中一般带的是什么?用户名、密码会带吗?
4.ul > li 第三个往后的偶数序号的li
5.history路由后退,如何监控? 如果后退到京东,如何做到的?
6.编程,连续最大子序列的和。
三面
1.手写观察者模式。
2.vue-router原理
3.移动端布局兼容性
4.vuex原理
字节飞书
一面
1.link 的ref有哪些属性?阻塞页面吗?
2.读取offset族会重排,解决方法是什么?(getBoundingClientRect())
3.let, const, var的作用域
const a = 1;
const b = () => {
console.log(this.a);
};
b();
const obj = {
a: 10,
b: function(){
console.log(this.a);
}
}
obj.b();
const c = obj.b;
c();
二面
1.promise.all实现过程中怎么保序?
let myPromise = function(promises){
let result = [];
let count = 0;
return new Promise((resolve, reject) => {
for(let i in promises){
Promise.resolve(promises[i]).then((res) => {
result[i] = res;
count++;
if(count === promises.length){
resolve(result);
}
});
}
});
}
let promise1 = new Promise((res, rej) => {
setTimeout(() => {
res(1);
}, 5000);
});
let promise2 = new Promise((res, rej) => {
setTimeout(() => {
res(2);
}, 3000);
});
let promise3 = new Promise((res, rej) => {
setTimeout(() => {
res(3);
}, 1000);
});
const a = myPromise([promise1, promise2, promise3]).then(res => {
console.log(res);
});
2.手机扫码登录的过程。
3.正则判断IPv4是否合法?
4.async await 和 promise的区别。
5.localStorage有什么问题?如果空间已满的情况下,再存时,会发生什么?是FIFO吗?
6.cors跨域时,预检请求和真实的请求是一起发出去的吗?
7.promise中向then中传两个方法,和.then.catch有什么不同?
8.进程和线程之间的通信是怎么样的?
9.ES6实现继承
10.代码题
合并两个number数组a和b并排序,如果有一个数出现多次,如a数组有1个5、b数组有2个5,合并出的数组应该有2个5,即按出现次数多的保留,如:
function mergeArr(a, b) {
// TODO
}
mergeArr(
[1, 2, 100, 5, 5],
[2, 2, 2, 5, 0],
);
// [0, 1, 2, 2, 2, 5, 5, 100]
字节产品研发
一面
1.标准盒模型和怪异盒模型设置background时,生效的范围分别包括哪些?
2.媒体查询用过吗?(可以做PC和移动端的兼容)
3.设置position: static时,会对子元素的绝对定位有作用吗?(不会,只有relative、absolute、fixed)
4.代码题:无重复子串指:子串中每个字符都不相同, 例如:s = 'baaabcdddde' 最长的无重复子串为'abcd'长度为4。求一个字符串的最长子串。
二面
1.encodeURI和encodeURIComponent的区别?
encodeURI()主要用于整个 URI(例如,http://www.wrox.com/illegal value.htm),而
encodeURIComponent()主要用于对 URI 中的某一段(例如前面 URI 中的 illegal value.htm)
进行编码。
它们的主要区别在于,encodeURI()不会对本身属于 URI 的特殊字符进行编码,例如冒号、正斜杠、
问号和井字号;而 encodeURIComponent()则会对它发现的任何非标准字符进行编码。
2.cookie由谁生成,怎么产生的?是一个随机的key-value吗?那其他人也可以冒充,怎么来保证安全?
3.token相比于cookie,为什么更安全?
网易
一面
1.实现三角形
2.实现随机字符串
3.实现反转字符串
4.算法题
在一个 w*h 的平面上,我们可以把一些格子涂黑。
给出以下定义:
r[i] = 第 i 行从最左边开始,从左到右有连续 i 个格子是涂黑的。r[i] = 0表示第i行的第一格是
空的
c[j] = 第 j 列从最上边开始,从上到下有连续 j 个格子是涂黑的。c[j] = 0表示第j列的第一格是
空的
现在输入w, h(1 <= w, h <= 1000)以及两个数组r和c,找出满足以上条件的填充方案数。由于满
足条件的方案数可能很大,最后的输出值为方案数对100000009取模
样例输入:
3 4
0 3 1
0 2 3 0
样例输出:
2
// 思路: 初始化数组为w*h维,值都为-1,先把能确定的确定下来,不涂就为0,涂黑了就为1,看最
后为-1的有几个,表示不确定的方案有几个。
let f = (w,h,r,c) => {
let row = 0;
let col = 0;
let arr = new Array(w).fill(undefined).map(item => new Array(h).fill(-1));
while(row < w){
if(r[row] === 0){
arr[row][0] = 0
}else if(r[row] > 0){
for(let i = 0; i < r[row]; i++){
arr[row][i] = 1
}
if(r[row] < h){
arr[row][r[row]] = 0;
}
}
row++;
}
while(col < h){
if(c[col] === 0){
arr[0][col] = 0
}else if(c[col] > 0){
for(let i = 0; i < c[col]; i++){
arr[i][col] = 1
}
if(c[col] < w){
arr[c[col]][col] = 0;
}
}
col++;
}
console.log(arr);
}
微信
一面
1.说项目没啥难点。
2.token是放在cookie里面的吗?
3.csrf攻击,我还是没太明白。
4.sort底层用的是什么排序算法?
5.cdn原理
6.对称加密,非对称加密。
7.数字证书验证过程。
二面
1.数字证书认证哈希函数的输入是什么?
2.js单线程如何处理高并发请求?
3.私钥是用来加密的吗?
4.用户登陆的细节
5.数字签名是什么?过程是怎么样的?
6.对称加密是使用明文传输吗?
三面
1.less中实现继承的方式。
2.keep-alive使用场景和作用。
3.谈一谈web标准化
4.XSS攻击银行账户是怎么发生的?(安全很重要!!!)
腾讯视频
一面
1.一群精于计算的人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一 顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的 是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。 第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三 次关灯,才有打耳光的声音响起。问有多少人戴着黑帽子?
2.代码题:字符串的全排列。
3.代码题:判断括号的有效性。
二面
1.逻辑题
A先生和A太太以及三对夫妻举行了一次家庭晚会.规定每两人最多握手一次,但不和自己的妻子握手.握手完毕后,A先生问了每个人(包括他妻子)握手几次?令他惊讶的是每人答复的数字各不相同.那么A太太握了几次手?
2.问项目
三面
1.有一个整数数组a[N],存储的元素取值范围为(1,N),其中有且只有两个元素是相同的,找到这个相同的元素值
2.有一只驴要运3000斤草,到1000里以外的地方,驴每次最多运1000斤,并且每走1里需要吃一斤。有什么办法,能让目的地有尽可能多的草
腾讯文档
一面
1.页面引入两个js文件,其中一个报错了,另一个还能执行吗?(可以,报错只是清空当前执行栈的同步任务)
2.cookie容量比较小,为什么不搞大一点?(应该是因为http请求的效率和性能)
3.输的遍历方式:广度优先和深度优先。(前序,中序,后序是二叉树才有的)
4.301重定向后页面会自动打开吗?新地址存在哪?(会自动跳转,存在响应头Location里面)
5.404页面为什么不是直接报错?(用户体验?)
京东京喜
一面
1.Promise中如果catch里面本身发生错误,应该怎么捕获?
2.H5的新特性有哪些?
3.transform的作用,问如何实现垂直居中?
4.vue3的新特性, proxy相比Object.defineProperty不同点在哪?
5.spa有什么优缺点?
// 采访N个人,每个人都报出跟自己穿同样衣服的人的数量,求最少有多少个人?
function members(answers) {
let res= 0;
let map= new Map();
for(let i = 0; i < answers.length; i++){
if(map.has(answers[i])){
map.set(answers[i], map.get(answers[i])+1)
}else{
map.set(answers[i],1);
}
}
let keys = [...map.keys()];
for(let i = 0; i < keys.length; i++){
res += Math.ceil(map.get(keys[i]) / (keys[i] + 1)) * (keys[i] + 1);
}
return res;
}
console.log(members([1,0,1,0,0]));
6.0.1+0.2 问题怎么解决?
富途
一面
1.移动端布局适配方案。
2.vue的生命周期哪个阶段可以操作DOM?
二面
1.TCP拥塞控制
2.两个容量一样的容器A,B分别装着红蓝颜料。从A中用勺子装一勺子到B中,再用勺子从B中装一勺到A中。假设可以均匀混合,且
虾皮
一面
1.二叉树的遍历
2.keep-alive原理
3.手写防抖
4.http安全相关
5.http缓存
二面
1.快排的时间复杂度是多少?怎么计算?最坏情况下是多少?怎么优化?
2.let arr = []; 写出它的原型链。Array.prototype的原型是什么?
3.实现call
4.闭包。
小红书
一面
1.css阻塞DOM数的解析吗?
2.请求JS文件可以缓存吗?
3.执行JS时遇到CSS的资源链接,会阻塞JS吗?
// 读输出顺序
// 注意此处的resolve和then的关系。
setTimeout(function() {
console.log(1)
}, 0)
new Promise(function executor(resolve) {
console.log(2)
setTimeout(() => {
resolve()
}, 0)
console.log(3)
}).then(function() {
console.log(4)
})
console.log(5)
二面
1.父组件传递一个对象给子组件,在父组件中改变这个对象的值,子组件中会变化吗?
2.compute中两个变量互相依赖,a = b + 1;b = a + 1;会怎样?(死循环)
3.正则匹配邮箱,\w包含@吗?
4.代码题、把金额每三位隔开。
快手
一面
1.vue中怎么获取真实的DOM?
2.块级作用域有哪些?
3.map和weakMap的区别?
4.OPTIONS成功和失败分别是什么状态码?
5.避免重排和重绘有哪些方法?如果要对一个DOM元素频繁操作,怎么避免重排?
6.z-indx在任何情况下都可以提升DOM的层级吗?
// 读输出
var a = 'a';
function obj() {
var a = 'b';
return function () {
console.log(a);
};
}
var fn = obj();
fn();
var obj = {
bar: function() {
var x = (() => console.log(this));
return x
}};
var fn = obj.bar();
fn();
var fn1 = obj.bar;
fn1()();
二面
防抖函数如何每次在一开始执行,n秒之后才能再次执行。相当于最开始那次触发有效。
利用时间戳
let count = 0;
function getUserAction() {
count++;
};
function debounce(func, wait) {
let last = 0;
return function () {
let now = +new Date();
if((now-last) > wait){
func.apply(this);
last = now;
}
}
}
document.addEventListener('scroll', debounce(getUserAction, 4000));
美团
一面
1.JS的模块管理有哪些?
2.css在头部,js放在body底部的原因。
3.git回到指定版本用的什么命令?
4.对面向对编程和面向过程编程的理解。
二面
1.git回滚版本,除了git reset,还有什么?
2.写正则,要求用户名输入至少包含三种字符,总长度为八。
3.如果网络不好,有哪些优化方法,让用户体验更好?
4.js、css阻塞问题,img里面的src会阻塞吗?