bilibili前端实习一面-上海T2

3.22晚上6点半面试的,一共50分钟

1.自我介绍

2.有了解过es6嘛,简单介绍一下

3.var/let/const

4.一段代码看输出(先变量提升再函数提升)

console.log(a); //打印a函数
function a() {
    return 4;
}
var a = 3;
console.log(a); //打印3

5.箭头函数的特性

语法更简洁、清晰
箭头函数不会创建自己的this、而是从它定义的地方继承过来
不能作为构造函数使用
没有arguments对象
不能作为生成器函数

6.浅拷贝与深拷贝,以及复杂对象深拷贝的实现

可以使用JSON.stringify、JSON.parse来实现简单的深拷贝,但这种情况对于循环引用以及对象属性是函数的情况下会失效
//weakmap来解决循环引用的问题
function deepClone(target, map = new WeakMap()) {
    if(typeof target === 'object') {
        if(map.has(target)) return map.get(target);
        let cloneObj = Array.isArray(target) ? [] : {};
        map.set(target, cloneObj);
        for(let key in target) {
            cloneObj[key] = deepClone(target[key], map);
        }
        return cloneObj;
    }
    else {
        return target
    }
}

7.一段promise、setTimeout代码的输出

8.vue的响应式原理

vue2.x:使用Object.defineProperty劫持对象属性 + 发布订阅模式实现
vue3 使用Proxy实现对对象的代理

9.vue2.下中对数组push一个值可以实现响应式嘛

可以的,vue2.x对能改变数组的七个方法push、pop、shift、unshift、sort、splice、reverse进行了重写

10.vue中key的作用

和diff算法有关系,标识虚拟节点,使得它做比较的时候更快一些

11.diff算法的实现过程

diff算法在比较新旧虚拟dom,再将其差异反映到真实dom上去
虚拟dom是一个用来表示 真实DOM的js对象,比较的过程是深度优先遍历的,一层层的去比较
如果当前层节点不一样,则更新节点;一样则取比较他们的孩子节点,vue里面的key就可以用来标识孩子节点,这又分为了四种情况,新节点新增孩子节点、新节点删除孩子节点、新旧节点孩子节点内容一样、新旧节点孩子内容不一样
为了更好的复用孩子节点,将其移动到改变后的位置效率更高,因此这个问题可以抽象为编辑距离问题,即新旧两个字符串,只能对旧字符串做三种操作,分别是插入一个字符、删除一个字符、替换一个字符
,求最终将旧字符串变成新字符串的最小操作次数;这个问题的解法又是依靠动态规划去做的。

12.了解浏览器的重排和重绘嘛

从浏览器的渲染机制说起,对于html会渲染成DOM树,对于css会渲染成cssom树,两颗树进行结合形成render tree,再回流/重排去计算元素的几何属性,重绘是将元素的样式绘制出来。
当元素的几何属性发生变化的时候会引起重排,其元素的样式发生变化的时候会引起重绘
重排一定会去引起重绘,重排的性能开销更大一些

13.有没有了解过减少回流操作的方法

css3的transfrom、translate新建了一个图层,在GPU层面上减少回流的发生
批量操作DOM

14.在js中引入了vue框架,会减少回流的发生嘛?

应该是会减少的,vue是有虚拟dom的

15.那你认为原生js不管怎么写都是比不过vue的性能嘛?

不太了解

16.浏览器的缓存有哪几种

强制缓存和协商缓存,服务器返回头里cache-control里的字段控制使用哪种缓存,分别有max-age、no-cache、no-store
强缓存没过期则直接去向浏览器缓存里拿数据,过期了则向服务器查询缓存是否可用,有etag和last-modify字段来进行判断是否缓存资源有更新,没更新则返回304状态码告诉客户端缓存可用,更新了则返回新的资源

17.使用过webpack嘛?

没有

18.了解过https嘛

https在http的基础上加了证书认证与数据加密,首先介绍下对称加密与非对称加密,对称加密的密钥是一样的,非对称加密的密钥是不一样的,分为公钥与私钥,用公钥加密的只能用私钥解开,用私钥加密的只能用公钥解开,
所依据的原理是大数的因子分解是特别困难的。顾名思义公钥发布在互联网上,私钥自己保留。然后有个第三方的证书机构,服务器会将自己的公钥与域名发布给证书机构,机构用自己的私钥对其进行加密生成证书发给服务器,
服务器再将这个证书发给客户端,客户端这边可以用证书机构的公钥解密证书确认服务器的身份,同时得到了服务器的公钥,然后客户端生成对称密钥,使用服务器公钥加密对称密钥再发送给服务器,服务器收到后用私钥解密得到对称密钥,
这样双方就建立了一个信任关系并且之后使用不会被破解到的对称密钥来加密之后的http消息

19.后端返回是对象数组,每个对象都是具体的商品及其所对应的类别,将其转换为新的对象数组,新的对象是每个商品的类别即其对应的商品

v8打印对象会只显示object,需要JSON.stringify将其转化为JSON字符串
var products = [
    {name:"1", category:['a','b','c']},
    {name:"2", category:['a','b']},
    {name:"3", category:['a','c'}
]

//完成以下函数使得输出为
 [
     {name:'a',children:[{name:1}, {name:2}, {name:3}]},
     {name:'b',children:[{name:1}, {name:2}]},
     {name:'c',children:[{name:1}, {name:3}]}
 ]    
function getCategory(products) {
    //todo
    //使用map, map的key即为商品种类,value为数组,数组元素为具体商品
    //先遍历原先的对象数组生成map
    //再遍历map生成目标对象
}

20.连续子数组的最大和

//输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
function getMax(nums) {
    //动态规划,dp[i]表示以nums[i]为结尾的最大连续子数组和
    //dp[i] = dp[i-1] < 0 ? nums[i]: dp[i]+nums[i];
    const l = nums.length;
    const dp = new Array(l);
    dp[0] = nums[0];
    let ans = dp[0];
    for(let i=1;i<l;i++){
        dp[i] = Math.max(nums[i]+dp[i-1],nums[i]);
        ans = Math.max(ans,dp[i]);
    }
    return ans;
};

console.log(getMax([-2,1,-3,4,-1,2,1,-5,4]))

21.介绍一下在实验室的项目(部署基于OpenStack的私有云平台)

22.分布式对象存储三副本策略,数据有没有主从关系,读数据的时候是读哪一台的

23.介绍做的xx系统中遇到的问题、挑战

反问:

1.贵部门的业务与技术栈

b端技术部,包括的业务包括up主投稿、激励,视频审核平台、mcn机构签约后台、版权相关的中台;技术栈主要就是vue

2.对实习生的培养过程

#B站##实习##哔哩哔哩##面经#
全部评论
我跟你估计是一个面试官,问题都一样的。不过我没被问到项目。我后面那个算法还没敲完,应该是凉透了😢
点赞 回复 分享
发布于 2022-03-24 16:24

相关推荐

咦哟,从去年八月份开始长跑,两处实习转正都失败了,风雨飘摇,终于拿到offer了更新一下面试记录:秋招:多部门反复面试然后挂掉然后复活,具体问了啥已经忘了,只是被反复煎炸,直至焦香😋春招:base北京抖音hr打来电话说再次复活,准备面试,gogogo北京抖音一面:六道笔试题:1.promise顺序2.定义域问题3.flat展开4.并发请求5.岛屿数量算法(力扣)深度,广度都写6.忘记了,好像也是算法,难度中等其他问题多是框架底层设计,实习项目重难点~~~秒过😇北京抖音二面:三道笔试题:(为什么只有三道是因为第三道没做出来,卡住了)1.中等难度算法(忘记啥题了,应该是个数组的)2.认识js的继承本质(手写继承模式,深入js的面相对象开发)3.手写vue的响应式(卡在了watch,导致挂掉)---后知后觉是我的注册副作用函数写得有问题,有点紧张了其他题目多是项目拷打,项目亮点,对实习项目的贡献~~~第二天,挂,but立马复活转战深圳客服当天约面深圳客服一面:六道笔试题,由于面过太多次字节,面试官叫我直接写,不用讲,快些写完😋,具体都是些继承,深拷贝(注意对数组对象分开处理,深层次对象,循环引用),加中等难度算法题~~~秒过深圳客服二面:口诉八股大战:大概囊括网络,浏览器渲染原理,动画优化,时间循环,任务队列等等(你能想到的简单八股通通拉出来鞭尸😋)算法题:笔试题6道:1:找出数组内重复的数,arr[0]-arr[n]内的数大小为[1-n],例如[1,2,2,3,3]返回[2,3],要求o(n),且不使用任何额外空间(做到了o(n),空间方面欠佳,给面试官说进入下一题,做不来了)2:原滋原味的继承(所以继承真滴很重要)3:力扣股票购买时机难度中等其他滴也忘记了,因为拿到offer后鼠鼠一下子就落地了,脑子自动过滤掉可能会攻击鼠鼠的记忆😷~~~秒过深圳客服三面:项目大战参与战斗的人员有:成员1:表单封装及其底层原理,使用成本的优化,声明式表单成员2:公司内部库生命周期管理成员3:第三方库和内部库冲突如何源码断点调试并打补丁解决成员4:埋点的艺术成员5:线上项目捷报频传如何查出内鬼成员6:大文件分片的风流趣事成员7:设计模式对对碰成员8:我构建hooks应对经理的新增的小需求的故事可能项目回答的比较流利,笔试题3道,都很简单,相信大家应该都可以手拿把掐😇~~~过过过无hr面后续煎熬等待几天直接hr打电话发offer了,希望大家也可以拿到自己心仪的offer
法力无边年:牛哇,你真是准备得充分,我对你没有嫉妒,都是实打实付出
查看19道真题和解析
点赞 评论 收藏
分享
评论
10
36
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务