前端面试题(二)

11:函数A和函数B,实现B继承A,说明优缺点?


  1. // 方式1

function B(){}

function A(){}

B.prototype = new A();

 

// 方式2

function A(){}

function B(){

  A.call(this);

}

方式3

function B(){}

function A(){}

B.prototype = new A();

function B(){

  A.call(this)

}

方式1:简单易懂,但是无法实现多继承,父类新增原型方法/原型属性,子类都能访问到

方式2:可以实现多继承,但是只能继承父类的实例属性和方法,不能继承原型属性/方法

方式3:可以继承实例属性/方法,也可以继承原型属性/方法,但是示例了两个A的构造函数

12:CSS和JS位置为什么会影响页面效果?

css在加载过程中不会影响到DOM树的生成,但是会影响到Render树的生成,进而影响到layout,所以一般来说,style的link标签需要尽量放在head里面,因为在解析DOM树的时候是自上而下的,而css样式又是通过异步加载的,这样的话,解析DOM树下的body节点和加载css样式能尽可能的并行,加快Render树的生成的速度。

 

js脚本应该放在底部,原因在于js线程与GUI渲染线程是互斥的关系,如果js放在首部,当下载执行js的时候,会影响渲染行程绘制页面,js的作用主要是处理交互,而交互必须得先让页面呈现才能进行,所以为了保证用户体验,尽量让页面先绘制出来

 

13:flex布局

  //自行百度,主要几个API 

14:描述一下this

    this,函数执行的上下文,可以通过apply,call,bind改变this的指向。对于匿名函数或者直接调用的函数来说,this指向全局上下文(浏览器为window,nodejs为global),剩下的函数调用,那就是谁调用它,this就指向谁。当然还有es6的箭头函数,箭头函数的指向取决于该箭头函数声明的位置,在哪里声明,this就指向哪里。

15:游览器的缓存机制

    浏览器缓存机制有两种,一种为强缓存,一种为协商缓存。

对于强缓存,浏览器在第一次请求的时候,会直接下载资源,然后缓存在本地,第二次请求的时候,直接使用缓存。

对于协商缓存,第一次请求缓存且保存缓存标识与时间,重复请求向服务器发送缓存标识和最后缓存时间,服务端进行校验,如果失效则使用缓存。

 

协商缓存方案:

Exprires:服务端的响应头,第一次请求的时候,告诉客户端,该资源什么时候会过期。Exprires的缺陷是必须保证服务端时间和客户端时间严格同步。

Cache-control:max-age,表示该资源多少时间后过期,解决了客户端和服务端时间必须同步的问题,

If-None-Match/ETag:缓存标识,对比缓存时使用它来标识一个缓存,第一次请求的时候,服务端会返回该标识给客户端,客户端在第二次请求的时候会带上该标识与服务端进行对比并返回If-None-Match标识是否表示匹配。

Last-modified/If-Modified-Since:第一次请求的时候服务端返回Last-modified表明请求的资源上次的修改时间,第二次请求的时候客户端带上请求头If-Modified-Since,表示资源上次的修改时间,服务端拿到这两个字段进行对比。

16:ETag这个字符串是怎么生成的?

Etag由服务器端生成,客户端通过If-Match或者说If-None-Match这个条件判断请求来验证资源是否修改。常见的是使用If-None-Match。根据Etag,判断文件内容自上一次请求之后,有没有发生变化。情形一:若两种判断的结论都是文件没有被修改过,则服务器就不给浏览器发index.html的内容了,直接告诉它,文件没有被修改过,你用你那边的缓存吧—— 304 Not Modified,此时浏览器就会从本地缓存中获取index.html的内容。此时的情况叫协议缓存,浏览器和服务器之间有一次请求交互。情形二:若修改时间和文件内容判断有任意一个没有通过,则服务器会受理此次请求,之后的操作同情景一。

17:二叉树的几种遍历方式

    自行百度:前序遍历,中序遍历,后序遍历

18:说明你所掌握的所有的排序?实现原理

    //选择,冒泡,快速,插入排序,一般这四种

19:请手写实现一个promise

  http://www.cnblogs.com/huansky/p/6064402.html

20:svg和canvas各自的优缺点?

svg优点:矢量图,不依赖于像素,无限放大后不会失真。

以dom的形式表示,事件绑定由浏览器直接分发到节点上。

svg缺点:dom形式,涉及到动画时候需要更新dom,性能较低。

canvas优点:定制型更强,可以绘制绘制自己想要的东西。非dom结构形式,用JavaScript进行绘制,涉及到动画性能较高。

canvas缺点:事件分发由canvas处理,绘制的内容的事件需要自己做处理。依赖于像素,无法高效保真,画布较大时候性能较低。

posted @ 2019-01-03 10:40  INSTANCE_SELF  阅读(233)  评论(0编辑  收藏  举报