zoukankan      html  css  js  c++  java
  • JavaScript面试题

    1.javascript的typeof返回哪些数据类型

    • Object number string function boolean underfind;

    2.例举3种强制类型转换和2种隐式类型转换?

    • 强制(parseInt,parseFloat,Number)隐式(==  –  *  /);

    3.数组方法pop() push() unshift() shift()

    • Push()尾部添加 pop()尾部删除

    • Unshift()头部添加 shift()头部删除

    4.ajax请求的时候get 和post方式的区别?

    • 一个在url后面 一个放在虚拟载体里面
      有容量大小限制

    • 安全问题
      应用不同 一个是论坛等只需要请求的,一个是类似修改密码的;

    • get有缓存适于收藏与分享

    5.call和apply的区别

    • Object.call(this,obj1,obj2,obj3)

    • Object.apply(this,arguments)

    6.ajax请求时,如何解释json数据

    • 使用eval parse,鉴于安全性考虑 使用parse更靠谱; eval需要加(),eval('('+json+')');

    7.事件委托是什么

    • 利用事件冒泡的原理,自己所触发的事件,让他的父元素代替执行!

    8.闭包是什么,有什么特性,对页面有什么影响?简要介绍你理解的闭包

    • 闭包就是子函数可以使用父函数的局部变量。

    9.添加 删除 替换 插入到某个接点的方法

    obj.appendChidl()
    obj.innersetBefore()
    obj.replaceChild
    obj.removeChild

    10.说一下什么是javascript的同源策略?

    • 一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合

    11.编写一个b继承a的方法;

    function A(name){
        this.name = name;
        this.sayHello = function(){alert(this.name+” say Hello!”);};
    }
    function B(name,id){
        this.temp = A;
        this.temp(name);        //相当于new A();
        delete this.temp;       
         this.id = id;   
        this.checkId = function(ID){alert(this.id==ID)};
    }

    12.如何阻止事件冒泡和默认事件

    function stopBubble(e)
    {
       if (e && e.stopPropagation)
           e.stopPropagation()
       else
           window.event.cancelBubble=true
    }
    return false

    13.下面程序执行后弹出什么样的结果?

    function fn() {
        this.a = 0;
        this.b = function() {
            alert(this.a)
        }
    }
    fn.prototype = {
        b: function() {
            this.a = 20;
            alert(this.a);
        },
        c: function() {
            this.a = 30;
            alert(this.a);
        }
    }
    var myfn = new fn();
    myfn.b();
    myfn.c();

    14.谈谈This对象的理解。

    this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。
    但是有一个总原则,那就是this指的是调用函数的那个对象。
    this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象

    15.下面程序的结果

    function fun(n,o) {
      console.log(o)
      return {
        fun:function(m){
          return fun(m,n);
        }
      };
    }
    var a = fun(0);  a.fun(1);  a.fun(2);  a.fun(3);
    var b = fun(0).fun(1).fun(2).fun(3);
    var c = fun(0).fun(1);  c.fun(2);  c.fun(3);

    //答案:
    //a: undefined,0,0,0
    //b: undefined,0,1,2
    //c: undefined,0,1,1

    16.下面程序的输出结果

    var name = 'World!';
    (function () {
        if (typeof name === 'undefined') {
            var name = 'Jack';
            console.log('Goodbye ' + name);
        } else {
            console.log('Hello ' + name);
        }
    })();

    17.了解Node么?Node的使用场景都有哪些?

    • 高并发、聊天、实时消息推送

    18.介绍下你最常用的一款框架

    • jquery,rn,angular等;

    19.对于前端自动化构建工具有了解吗?简单介绍一下

    • Gulp,Grunt等;

    20.介绍一下你了解的后端语言以及掌握程度

    其它



    1.对Node的优点和缺点提出了自己的看法?

    (优点)

     因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
     因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
    此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,
    因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

    (缺点)

     Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,
    而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。 

    2.你有哪些性能优化的方法?

    (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
    (2)前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
    (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
    (4) 当需要设置的样式很多时设置className而不是直接操作style。
    (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
    (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
    (7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。
    (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示div+css布局慢。对普通的网站有一个统一的思路, 就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器 上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据 库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使 用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。

    3.http状态码有那些?分别代表是什么意思?

    100-199 用于指定客户端应相应的某些动作。
    200-299 用于表示请求成功。
    300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
    400-499 用于指出客户端的错误。400 1、语义有误,当前请求无法被服务器理解。401 当前请求需要用户验证 403 服务器已经理解请求,但是拒绝执行它。
    500-599 用于支持服务器错误。 503 – 服务不可用

    4.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

    • 查找浏览器缓存

    • DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求

    • 进行HTTP协议会话

    • 客户端发送报头(请求报头)

    • 文档开始下载

    • 文档树建立,根据标记请求所需指定MIME类型的文件

    • 文件显示

    • 浏览器这边做的工作大致分为以下几步:

    • 加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。

    • 解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)

    5.你常用的开发工具是什么,为什么?

    • Sublime,Atom,Nodepad++;

    6.说说最近最流行的一些东西吧?常去哪些网站?

    • Node.js、MVVM、React-native,Angular,Weex等

    • CSDN,Segmentfault,博客园,Stackoverflow等

  • 相关阅读:
    241. Different Ways to Add Parentheses java solutions
    89. Gray Code java solutions
    367. Valid Perfect Square java solutions
    46. Permutations java solutions
    116. Populating Next Right Pointers in Each Node java solutions
    153. Find Minimum in Rotated Sorted Array java solutions
    判断两颗树是否相同
    求二叉树叶子节点的个数
    求二叉树第k层的结点个数
    将二叉排序树转换成排序的双向链表
  • 原文地址:https://www.cnblogs.com/yang0902/p/5722718.html
Copyright © 2011-2022 走看看