zoukankan      html  css  js  c++  java
  • 前端面试题(二)

    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处理,绘制的内容的事件需要自己做处理。依赖于像素,无法高效保真,画布较大时候性能较低。

  • 相关阅读:
    GyPSii API PHP应用初探
    无缝滚动图片的一个简单封装
    Linux设置固定IP
    DIV卷帘效果示例
    vsftp安装配置
    PHP判断FORM来的数据是否为整数
    Linux下设置apache开机启动
    从Discuz提取的数据库和模板操作文件,很容易使用哦
    discuz 表情的提取
    IE6、IE7浮动层被下面的动挡住的问题
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/10212877.html
Copyright © 2011-2022 走看看