【备战秋招Day 1】经典面试题1-4及在线编程题1-3答案

【备战秋招Day 1】经典面试题1-4及在线编程题1-3答案

经典面试题

1.什么是盒子模型?

在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域。4个部分一起构成了css中元素的盒模型。

2.简述一下src与href的区别

href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。

src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

3.简述同步和异步的区别

同步是阻塞模式,异步是非阻塞模式。

同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

4.怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

createDocumentFragment() //创建一个DOM片段

createElement() //创建一个具体的元素

createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替换

insertBefore() //插入

3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的Name属性的值

getElementById() //通过元素Id,唯一性


在线编程题

1.查找数组元素位置



function indexOf(arr, item) {

  if (Array.prototype.indexOf){

      return arr.indexOf(item);

  } else {

      for (var i = 0; i < arr.length; i++){

          if (arr[i] === item){

              return i;

          }

      }

  }     

  return -1;



}


2.数组求和

不考虑算法复杂度,用递归做:

function sum(arr) {

    var len = arr.length;

    if(len == 0){

        return 0;

    } else if (len == 1){

        return arr[0];

    } else {

        return arr[0] + sum(arr.slice(1));

    }

}


常规循环:

function sum(arr) {

    var s = 0;

    for (var i=arr.length-1; i>=0; i--) {

        s += arr[i];

    }

    return s;

}


函数式编程 map-reduce:

function sum(arr) {

    return arr.reduce(function(prev, curr, idx, arr){

        return prev + curr;

    });

}


forEach遍历:

function sum(arr) {

    var s = 0;

    arr.forEach(function(val, idx, arr) {

        s += val;

    }, 0);

  

    return s;

};


eval:

function sum(arr) {
    return eval(arr.join("+"));
};


3.移除数组中的元素

题目要求不改变原数组,所以可以声明一个数组a用于保存arr中不同于item的值,最后将a返回。

function remove(arr, item) {

     //声明一个新数组保存结果

     var a = [];

     //循环遍历

     for(var i=0; i < arr.length; i++){

         //如果arr[i]不等于item,就加入数组a

         if(arr[i] != item){

             a.push(arr[i]);

         }

     }

     return a;

 }

编辑于 2017-07-13 10:36