2022web前端开发校招面试腾讯云一面总结2

一、如何更改this的指向

 call、apply、bind都为改变this指向的方法。

 共同点:第一个参数都为改变this的指针。若第一参数为null/undefined,this默认指向window

 call(无数个参数)

  • 第一个参数:改变this指向
  • 第二个参数:实参                                     使用之后会自动执行该函数
function fn(a,b,c,d){
        console.log(this,a+b+c+d); // this指向window
    }
    fn();
    fn.call(test,1,2,3,4);//call改变之后this指向document  
    //输出 #test  10   1,2,3,4是实参 结果相加为10

 apply(两个参数)

  • 第一个参数:改变this指向
  • 第二个参数:数组(里面为实参)            使用时候会自动执行函数
function fn(a,b,c){
        console.log(this,a+b+c); 
    }
    fn();
    fn.apply(test,[1,2,3]); 

 bind(无数个参数)

  • 第一个参数:改变this指向 
  • 第二个参数之后:实参                             返回值为一个新的函数
  • 使用的时候需要手动调用下返回 的新函数(不会自动执行)
function fn(a,b,c){
    console.log(this,a+b+c);
}
let p = fn.bind('test',1,2,3); //需要手动调用
p();

//String {"test"} 6

  总结一下call、apply与bind区别

  • call和apply可以自动执行,bind不会自动执行,需要手动调用
  • call和bind有无数个参数,而apply只有两个参数,而且第二个参数为数组

二 、讲一下TCP的三次握手,为什么不是两次或者四次?

第一次握手
客户主动去连接服务器,并且发送SYN 假设序列号为J,服务器是被动打开(passive open)

第二次握手
服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户,
ACK的序列号是 J+1表示是给SYN J的应答,新发送的SYN K 序列号是K

第三次握手
客户在收到新SYN K, ACK J+1 后,也回应ACK K+1 以表示收到了,
然后两边就可以开始数据发送数据了

  如果是两次握手的话,A先给B发同步信号,B再给A回,没有第三次的话B无法知道A是否已经接收到自己的同步信号,如果这个同步信号丢失了,A和B就B的初始序列号将无法达成一致。所以在这里A必须给B一个确认,以确认A已经接收到B的同步信号。

 如果是四次握手的话,很显然我们能想到是多余的,三次能解决的事情为什么还要分四次浪费服务器资源呢

三、给你1000条数据,你怎么处理?

  1. 从数据上处理:分页分表,比如前端可以把数据分页展示,后端也分段吐数据
  2. 从渲染上解决:               

          2.1 异步渲染,比如进入页面先不渲染,然后加载好页面再渲染。

          2.2 局部渲染:只渲染目前可见区域的数据,再渲染次屏数据。

          2.3 还有性能瓶颈,可以考虑web worker 做压缩和解码,也可以考虑离屏canvas做预渲染。

     3. 减少网络耗时:压缩数据,gzip等

四、讲一下JS的原型链

 之前的笔记

 五、说一下var和let的区别

var:

    用关键字 var 声明一个变量,这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,这个变量就属于全局作用域。即变量会挂载在window上。

var 声明的变量属于函数作用域,let 和 const 声明的变量属于块级作用域

var声明变量存在变量提升,let、const声明的变量不存在变量提升。

let:

1.let 声明的变量具有块作用域的特征。

2.在同一个块级作用域,不能重复声明变量。

3.let 声明的变量不存在变量提升,换一种说法,就是 let 声明存在暂存死区。

const:

 const 定义的变量,一旦定义后,就不能修改,即 const 声明的为常量。如果声明的是复合类型数据,可以修改其属性

六、箭头函数和普通函数之间有什么区别? 

1:写法不一样,箭头更简洁

2:普通函数存在变量提升的现象

3:箭头函数不能作为构造函数使用,不能使用new,箭头函数没有原型属性

4:两者this的指向不同,函数体内的this对象,就是定义时所在的对象从上下文捕捉而来,而不是使用时所在的对象,用call apply bind也不能改变this指向,只传入了一个参数,对 this 并没有影响。

5:箭头函数的arguments指向它的父级函数所在作用域的arguments

6:箭头函数没有new.target,不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

七、说一下vue-router中的history和hash模式

    hash —— 即地址栏 URL 中的 # 符号。比如这个 URL:http://www.baidu.com/#/home hash 的值为 #/home。它的特点在于:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。hash模式下即使没有做到对路由的全覆盖,也不会返回 404 错误。
    history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。
因此可以说,hash 模式和 history 模式都属于浏览器自身的特性,Vue-Router 只是利用了这两个特性(通过调用浏览器提供的接口)来实现前端路由.

    history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致,如 http://www.abc.com/book/id 如果后端缺少对 /book/id 的路由处理,将返回 404 错误。要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。”
 

之后的就是问了问项目,问了校园经历中参加有关活动是具体干什么,然后就让我反问他一些问题啦,我真的第一次感觉有点紧张,就只问了对我什么印象,面试官说还看不出我的潜力,就给我留了一道题,在之前发过了有兴趣可以去看看哦。

今天收到了二面的邮件,啊我还以为我没二面的机会了,看到短信超激动!要开始闭关准备了,希望能够有机会加入到腾讯云吧。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值