• 2017面试题2


    1、用两个栈实现一个队列

    转载:http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html

    思路

      入队:将元素进栈1;
      出队:判断栈2是否为空,如果为空,则将栈1中所有元素pop,并push进栈2,栈2出栈; 如果不为空,栈2直接出栈。

    大多数人的思路是:始终维护s1作为存储空间,以s2作为临时缓冲区。

    入队时,将元素压入s1。

    出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。

    见下面示意图:

    2Stacks1Queue

    2个栈都为空的时候,出队操作一定会引起异常)

    2、javascript中的深拷贝和浅拷贝

    链接:https://www.zhihu.com/question/23031215/answer/124017500

    1,对于字符串类型,浅复制是对值的复制,
    对于对象来说,浅复制是对对象地址的复制,并没 有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变,
    而深复制则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。

    3、
        var callbacks = []
        for(var i =0;i<3;i++){
            callbacks.push(function(){
                console.log(i)
            })
        }
        callbacks.forEach(cb => cb());

    结果 3 3 3.

    4、javascript 如何判断变量foo类型是不是

    String? typeof foo === "string"

    Number? typeof foo === "number"

    Date? Object.prototype.toString.call(foo) === '[object Date]'

    Array? Object.prototype.toString.call(foo) === '[object Array]'

    Object?  Object.prototype.toString.call(foo) === '[object Object]'

    5 如下代码

        function doSomething() {
            console.log(this)
        }
        var obj = {
            doSomething2: doSomething
        }
        var doSomething3 = doSomething
        var doSomething4 = obj.doSomething2
    
        // 请描述this
        doSomething() //Window
        obj.doSomething2() // Object
        doSomething3() // Window
        doSomething4() // Window
        doSomething4.apply("abc",[obj]) // String

    6 请填写输出结果

        function print(num) {
            console.log(num);
        }
        print(1)
        setTimeout(function(){print(2)},100)
        print(3)
        setTimeout(function(){print(4)},0)
    
        // 1 3 4 2

     7、假设一个极大的对象数组(比如100万)主键id ,如果要频繁的查找元素,如何才能最快的查找到

    8、关于dtd 你知道哪些

    9、css选择器有哪些,css3新增伪类举例

    10、ajax 请求post 和get区别解释jsonp原理。

      jsonp原理:能利用scrip标签src的属性来实现跨域。通过前端方法,作为参数传递给服务器,服务区注入参数后再返回,就是服务器提供一个回调函数,用来接受

      json数据,再浏览器执行,并处理要过来的数据。

    区别:

      get 使用url和cookie传参,post将参数数据放在body中

      GET的URL会有长度上的限制,则POST的数据则可以非常大。

      POST比GET安全,因为数据在地址栏上不可见

      GET请求的参数会保存在浏览器的历史记录中

    11、继承几种方式

        // 原型链继承和构造函数继承
        function Parent(age) {
            this.name = ["mike", "jack"];
            this.age = age;
        }
    
        Parent.prototype.run = function() {
            return this.name = "are both" + this.age;
        }
    
        function Child(age) {
            Parent.call(this, age);
        }
    
        Child.prototype = new Parent();
        // 寄生组合继承
        function object(o) {
            function F() {}
            f.prototype = o;
            return new F();
        }
    
        function inheritPrototype(sub, sup) {
            var prototype = object(sup.prototype);
            prototype.constructor = sub;
            sub.prototype = prototype;
        }
        function extend(sub, sup) {
            // 目的: 实现只继承父类的原型对象
            var F = new Function(); // 1 创建一个空函数    目的:空函数进行中转
            F.prototype = sup.prototype; // 2 实现空函数的原型对象和超类的原型对象转换
            sub.prototype = new F(); // 3 原型继承 
            sub.prototype.constructor = sub; // 4还原子类的构造器
            //保存一下父类的原型对象: 一方面方便解耦  另一方面方便获得父类的原型对象
            sub.superClass = sup.prototype; //自定义一个子类的静态属性 接受父类的原型对象
            //判断父类的原型对象的构造器 (加保险)
            if (sub.prototype.constructor == Object.prototype.constructor) {
                sup.prototype.constructor = sup;
            }
        }

     12、一个页面从输入 URL 到页面加载完的过程中都发生了什么事情

  • 相关阅读:
    MVC新手指南
    BufferedReader方法-----Scanner方法
    sin=in.readLine();
    STL:string 大小(Size)和容量(Capacity)
    2014=9=24 连接数据库2
    2014=9=24 连接数据库1
    常用英语单词
    Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
    linux 常用快捷键
    启动sh文件注意的问题
  • 原文地址:https://www.cnblogs.com/y896926473/p/7226791.html
Copyright © 2020-2023  润新知