百度作业帮网上收集的面试题

1.js继承方式有哪些

js中的继承就是获取已有对象的方法和属性的一种方式;

共有6种方法:

  • 属性拷贝:将父类对象的成员复制一份给需要继承的对象(问题:如果父类对象的某个成员是引用类型的变量时,这个成员子啊父对象和子对象之间是共享的,修改其中一个,另一个会受影响)
  • 原型式继承:借用构造函数的原型对象实现继承。即子构造函数.prototype=父构造函数.prototype(问题:只能继承父构造函数的原型对象上的成员, 不能继承父构造函数的实例对象的成员, 同时父构造函数的原型对象和子构造函数的原型对象上的成员有共享问题)
  • 原型链继承:子构造函数.prototype = new 父构造函数()(问题:问题是不能给父构造函数传递参数, 父子构造函数的原型对象之间有共享问题.)
  • 借用构造函数:使用callapply借用其他构造函数的成员, (问题:可以解决给父构造函数传递参数的问题, 但是获取不到父构造函数原型上的成员.也不存在共享问题.)
  • 组合继承(借用构造函数+原型式继承)(问题:共享的问题)
  • 借用构造函数加深拷贝(推荐使用

2.什么是原型链?原型链终点在哪里?引擎是如何遍历原型链从而找到某个节点的?

一个对象所拥有的属性不仅仅是它本身拥有的属性,它还会从其他对象中继承一些属性,当js在一个对象中找不到需要的属性时,它会到这个对象的父对象上去找,以此类推,这就构成了对象的原型链;原型链终点是Object;向上遍历原型链,直到找到给定名称的属性为止;

3.instanceof 和原型链的关系

Instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是一个函数,暂时称为B。
Instanceof的判断队则是:沿着A的proto这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。

4.为什么要封装组件?封装组件或模块如何考虑利他性

封装组件优点:

  • 组件化是对实现的分层,是更有效地代码组合方式
  • 组件化是对资源的重组和优化,从而使项目资源管理更合理
  • 组件化有利于单元测试
  • 组件化对重构较友好
  • 复用友好

如何设计组件?

这个组件可否(有必要)再分?

组件划分的依据通常是 业务逻辑、功能,要考虑各组件之间的关系是否明确(如组件树方式管理组件间依赖关系,兄弟组件不可见),以及组件的可复用度。划分粒度的大小需要根据实际情况权衡,太小会提升维护成本,太大又不够灵活和高复用性。

每一个组件都应该有其独特的划分目的的,有的是为了复用实现,有的是为了封装复杂度清晰业务实现。

这个组件的依赖是否可再缩减?

缩减组件依赖可以提高组件的可复用度,常用的方法是IoC(依赖注入),对外弱类型依赖。

这个组件是否对其它组件造成侵入?

一个组件的封装性不够,或者自身越界操作,就可能对自身之外造成了侵入,这种情况应该尽量避免,确保组件的生命周期能够对其影响进行有效的管理(如destroy后不留痕迹)。

较常见的一种情况是:组件运行时对window对象添加resize监听事件以实现组件响应视窗尺寸变化事件,这种需求的更好替代方案是:组件提供刷新方法,由父组件实现调用(最终由根组件统一处理)。

次优的方案是,当组件destroy前清理恢复。

一个组件不应对其它兄弟组件造成直接影响。

这个组件可否复用于其它类似场景中?

需要考虑需要适用的不同场景,在组件接口设计时进行必要的兼容。

这个组件当别人用时,会怎么想?

接口设计符合规范和大众习惯,尽量让别人用起来简单易上手,易上手是指更符合直觉。

假如业务需要不需要这个功能,是否方便清除?

5.url输入到页面呈现,详细分析过程

  • DNS域名解析:将输入的域名解析成ip地址,找到目标服务器。

    查询顺序:浏览器缓存,系统缓存,路由器缓存如果还是没有,那么就去检查ISP有没有吧(缓存,host文件,dns服务器) 

  • 发送HTTP请求给服务器
  • 服务器处理请求:服务器解析出HTTP包中的内容,准备好浏览器要请求的文件。
  • 服务器返回相应结果
  • 浏览器解析html
  • 浏览器渲染展现:

6.transform和position相比,前者有哪些地方提升了性能,为什么

7.如何开启3d动画加速

由GPU处理,加快处理速度。

当浏览器监测到含有某个css属性或规则的时候,就会创建新的layer开启GPU加速,最常用的是3d转换(translate3d)。

所以,有一些属性的改变可以略过relayout,减少浏览器在动画运行时所需要做的工作,其原理也是创建了一个新的layer,这只是一个无害的语法糖。

GPU加速也是有缺点的,GPU使用会增加内存消耗,同时也会影响字体的抗锯齿效果,导致文本在动画期间会显得有些模糊。

所谓的GPU加速,也是将属性交给GPU处理,GPU处理速度为什么比CPU快?一个是减少了浏览器处理流程,另外一点,和GPU的设计有很大的关系,GPU专为处理图像而生,内部的处理单元比CPU多很多,在处理多并发的时候比CPU有很大优势,CPU在逻辑运算方面比GPU要快,但处理多并发不如GPU。

在css3中,最推荐的还是使用transform:translateZ(0);来创建一个新的layer,成本低,影响小。

8.封装一个Slider要考虑哪些要点,如何保证过渡的平滑性,移动端如何检测手势是左滑还是右滑

9.封装一个Dialog,你会怎么考虑

10.前后端分离时,模板如何工作,如何去渲染到后端的数据,如果是基于js的模板引擎,cdn上这个引擎挂了怎么办。

11.数据双向绑定有哪些弊端

12.cookie,session区别有哪些,cookie,webStorage区别

用cookie和session做登陆保持时的各自特点,他俩各自的缺点是什么,如何权衡和改善

13.面对棘手问题会通过什么渠道解决

14.三列布局想让中间列先出现在页面怎么做

15.对移动端了解多少

16.纯CSS实现一个hover气泡用在不同地方

17.Promise解决了什么问题

18.let,var区别

19.浏览器缓存如何控制,如何工作

20.对于max-age特别大的缓存,如何让浏览器拉取最新资源而不是走缓存

21.如何实现一个自动监听,来让浏览器在页面遭到攻击篡改以后通知到服务端报警

22.前端模版和后端模版的区别,分别如何工作

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值