您的位置:首页 > Web前端

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

2017-07-30 08:15 387 查看

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

正确答案为: post

常见的存储方式有六种:IndexDB/Cookie/get请求/post请求/Session/Storage

IndexdDB 是 HTML5 的本地存储,把一些数据存储到浏览器(客户端)中,当与网络断开时,可以从浏览器中读取数据,用来做一些离线应用。

Cookie 通过在客户端 ( 浏览器 ) 记录信息确定用户身份,最大为 4 kb ,也就是4096B 一般4095B

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: