阿里巴巴2016前端工程师笔试题1总结

来源:互联网 发布:网络架构工程师干什么 编辑:程序博客网 时间:2024/06/05 16:40

1.浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式?

正确答案为: post
常见的存储方式有六种:IndexDB/Cookie/get请求/post请求/Session/Storage
IndexdDB 是 HTML5 的本地存储,把一些数据存储到浏览器(客户端)中,当与网络断开时,可以从浏览器中读取数据,用来做一些离线应用。
get 方法,从服务器上获取数据,大小不能大于 2 kb 。
Session 是服务器端使用的一种记录客户端状态的机制 。
post 是向服务器传送数据,数据量较大。
Storage 是 HTML5 的本地存储,将数据保存在客户端中


2.在JS语言特性中,有很多方面和其他的编程语言不太一样,比如,javascript的语言实现继承机制的核心是prototype原型机制,javascript解析器在读取一个Object的属性值时,会沿着_proto_原型链向上查找,如果最终没有找到该属性,则该属性值为undefined;如果找到则返回对应的结果。


3.填写内容让一下代码支持: a.name=”name1”; b.name=”name2”

function obj(name){    (1) }obj. (2) = "name2";var a = obj("name1");var b = new obj;
正确结果为:
1: if(name){    this.name = name;  }  return this;2. prototype.name;
通过obj(‘name1’)调用,返回this引用,并传给a, 此时a等于window对象,即可输出属性name值
new操作, new obj 等价于 new obj() ,实例化一个对象,这时this指向obj,要拿到b.name的值,需要保证name属性存在,属性查找原则是先查找当前实例有没有属性,如果有就直接使用,如果没有就到原型上面找,再没有就接着原型链一步一步,这里为了和a.name作属性区别,使用了if(name)有条件地构建this的属性name。所以,现在实例name属性提供给a使用,原型上的name提供给b使用。


4.请实现一个fibonacci函数,要求其参数和返回值如下所示:

/** *@desc: fibonacci *@param: count {Number} *@return: result {Number} 第count个fibonacci值,计数从0开始  fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]  则getNthFibonacci(0)返回值为1  则getNthFibonacci(4)返回值为5 */function getNthFibonacci(count) {}
此题应该避免使用递归的方法,因为当count较大时,递归的方法耗时较长。故考虑使用迭代法,可以使用数组记录每一项。但此题只需要用到前面两项,从节约空间的角度讲不需要开辟数组。
使用数组的答案:
var obj = [];obj[0] = 1;obj[1] = 1;for(var i=2; i<=count; i++){    obj[i] = obj[i-1]+obj[i-2];}return obj[count];
不使用数组的最佳答案:
function getNthFibonacci(count) {    if(count<0) return 0;    if(count<=1) return 1;    var first = 1;    var second = 1;    var third = 0;    for(var i = 2; i <= count; i++) {        third = first + second;        first = second;        second = third;    }    return third;}