秋招面试题记录

396 阅读5分钟

字节

一面

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数组ab并排序,如果有一个数出现多次,如a数组有15b数组有25,合并出的数组应该有25,即按出现次数多的保留,如:
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会阻塞吗?