image

编辑人: 长安花落尽

calendar2025-02-06

message6

visits151

阿里面试经历及题目

/*http和https区别

  1. HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头

  2. HTTP 是不安全的,而 HTTPS 是安全的

  3. HTTP 标准端口是80 ,而 HTTPS 的标准端口是443

  4. 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 工作在传输层

  5. HTTP 无法加密,而HTTPS 对传输的数据进行加密

  6. HTTP无需证书,而HTTPS 需要CA机构颁发的SSL证书

DOM事件三个阶段

① 事件捕获阶段

② 处于目标阶段

③ 事件冒泡阶段

说下事件冒泡

在一个对象上触发某类事件,如果定义了处理此事件的程序,则调用程度处理,若没有定义或返回true,则会向父级传播,调用父级的处理,直到达到对象最顶层。

不是所有的事件都能冒泡。以下事件不冒泡:blur、focus、load、unload

事件代理

传统的事件处理中,你按照需要为每一个元素添加或者是删除事件处理器。然而,事件处理器将有可能导致内存泄露或者是性能下降,JavaScript事件代理则是一种简单的技巧,通过它你可以把事件处理器添加到一个父级元素上,这样就避免了把事件处理器添加到多个子级元素上。

ajax和JSONP

说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理来解决。

首选的方案还是用JSON来传数据,靠JSONP来跨域。

1、ajax和jsonp这两种技术在调用方式上"看起来"很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;

2、但ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。

列举JS数组中的方法:

1 shift()t:删除数组的第一个元素,返回删除的值。这里是0

2 unshift(3,4):把参数加载数组的前面,返回数组的长度。现在list:中是3,4,0,1,2

3 pop():删除数组的最后一个元素,返回删除的值。这里是2.

4 push(3):将参数加载到数组的最后,返回数组的长度,现在List中时:0,1,2,3

5 concat(3,4):把两个数组拼接起来。

6 splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...

7 reverse:将数组反序

8 sort(orderfunction):按指定的参数对数组进行排序

9 slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组

10 join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符

JavaScript模块

JavaScript和java比较

相同之处:

❶ 语法和C语言都很相似

❷ 都是面向对象的

❸ JavaScript在设计时参照了Java的命名规则

不同之处:

❶ JavaScript是动态类型语言,而Java是静态类型语言

❷ JavaScript是弱类型的,Java属于强类型

❸JavaScript的面向对象是基于原型(prototype),Java是基于类的(Class)

❹javascript采用动态联编,即javascript的对象引用在运行时进行检查。Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。

Promise模式:

异步模式在 Web 编程中变得越来越重要,如何处理异步请求后的操作是一件麻烦事。Promise 是一种异步编程模型,术语称作 Deferred 模式,它通过一组API来规范化异

步操作,让异步操作的流程控制更加容易。

Promise 编程模式也被称为 thenable,可以理解为 延迟后执行。每个 Promise 都拥有一个叫做 then 的唯一接口,当 Promise 失败或成功时,它就会进行回调。

它代表了一种可能会长时间运行而且不一定必须完成的操作结果。这种模式不会阻塞和等待长时间的操作完成,而是返回一个代表了承诺的(promised)结果的对象。

当前的许多 JavaScript 库(如 jQuery 和 Dojo、AngularJS)均添加了这种称为 Promise 的抽象。通过这些库,开发人员能够在实际编程中使用 Promise 模式。

其实就是通过回调的方式提供容错支持。在某个操作成功或失败或任何情况下都执行对应的回调,尽量把某段逻辑可能出现的情况都 handle 住。

Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。它的作用是为Promise实例添加状态改变时的回调函数。前面说过,then方法

的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数。

then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。

getJSON("/posts.json").then(function(json) {

return json.post;

}).then(function(post) {

// ...

});

上面的代码使用then方法,依次指定了两个回调函数。第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。

采用链式的then,可以指定一组按照次序调用的回调函数。这时,前一个回调函数,有可能返回的还是一个Promise对象(即有异步操作),这时后一个回调函数,就会等待该Promise对象的状态发生变化,才会被调用。

getJSON("/post/1.json").then(function(post) {

return getJSON(post.commentURL);

}).then(function funcA(comments) {

console.log("Resolved: ", comments);

}, function funcB(err){

console.log("Rejected: ", err);

});

上面代码中,第一个then方法指定的回调函数,返回的是另一个Promise对象。这时,第二个then方法指定的回调函数,就会等待这个新的Promise对象状态发生变化。如果变为Resolved,就调用funcA,如果状态变为Rejected,就调用funcB。

下面是一个用Promise对象实现的Ajax操作的例子。

var getJSON = function(url) {

var promise = new Promise(function(resolve, reject){

var client = new XMLHttpRequest();

client.open("GET", url);

client.onreadystatechange = handler;

client.responseType = "json";

client.setRequestHeader("Accept", "application/json");

client.send();

function handler() {

if ( this.readyState !== 4 ) {

return;

}

if (this.status === 200) {

resolve(this.response);

} else {

reject(new Error(this.statusText));

}

};

});

return promise;

};

getJSON("/posts.json").then(function(json) {

console.log('Contents: ' + json);

}, function(error) {

console.error('出错了', error);

});

jQuery中Deferred对象的理解

deferred对象就是jQuery的回调函数解决方案;

$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作。

现在,新的写法是这样的:

  $.ajax("test.html")

  .done(function(){ alert("哈哈,成功了!"); })

  .fail(function(){ alert("出错啦!"); });

deferred对象的一大好处,就是它允许你自由添加多个回调函数。

还是以上面的代码为例,如果ajax操作成功后,除了原来的回调函数,我还想再运行一个回调函数,怎么办?

很简单,直接把它加在后面就行了。

  $.ajax("test.html")

  .done(function(){ alert("哈哈,成功了!");} )

  .fail(function(){ alert("出错啦!"); } )

  .done(function(){ alert("第二个回调函数!");} );

deferred对象的另一大好处,就是它允许你为多个事件指定一个回调函数,这是传统写法做不到的。

请看下面的代码,它用到了一个新的方法$.when():

$.when($.ajax("test1.html"), $.ajax("test2.html"))

  .done(function(){ alert("哈哈,成功了!"); })

  .fail(function(){ alert("出错啦!"); });

这段代码的意思是,先执行两个操作$.ajax("test1.html")和$.ajax("test2.html"),如果都成功了,就运行done()指定的回调函数;如果有一个失败或都失败了,就执行fail()指定的回调函数。

deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。也就是说,任何一个操作----不管是ajax操作还是本地操作,也不管是异步操作还是同步操作----都可以使用deferred对象的各种方法,指定回调函数。

deferred.resolve()方法和deferred.reject()方法用于手动改变执行状态

deferred.promise()方法。它的作用是,在原来的deferred对象上返回另一个deferred对象,后者只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。

总结:

(1) $.Deferred() 生成一个deferred对象。

  (2) deferred.done() 指定操作成功时的回调函数

  (3) deferred.fail() 指定操作失败时的回调函数

  (4) deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。

  (5) deferred.resolve() 手动改变deferred对象的运行状态为"已完成",从而立即触发done()方法。

  (6)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。

  (7) $.when() 为多个操作指定回调函数。

除了这些方法以外,deferred对象还有二个重要方法,上面的教程中没有涉及到。

  (8)deferred.then()

有时为了省事,可以把done()和fail()合在一起写,这就是then()方法。

   $.when($.ajax( "/main.php" ))

   .then(successFunc, failureFunc );

如果then()有两个参数,那么第一个参数是done()方法的回调函数,第二个参数是fail()方法的回调方法。如果then()只有一个参数,那么等同于done()。

  (9)deferred.always()

这个方法也是用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。

   $.ajax( "test.html" )

   .always( function() { alert("已执行!");} );

CSS水平居中

1、div {margin-left: auto; margin-right: auto; }

2、div { margin:0px auto; }

3、父层设置浮动和相对定位以及 left:50%,子元素设置相对定位和 left:-50% 来实现水平居中、

CSS垂直居中

http://www.cnblogs.com/yjzhu/archive/2012/11/19/2773209.html

闭包的好处和坏处,举例说明

<table>相关的标签

<tr>

<td>

<th>

<caption>-----表格标题

<col>----为表格中一个或多个列定义属性值

<colgroup>

<thead>

<tfoot>

<tbody>

jQuery中所有API

call和apply

这两者都是调用一个对象的一个方法,用另一个对象替换当前对象。

相同点:两个方法产生的作用是完全一样的。

不同点:方法传递的参数不同。

透明色设置

CSS3:opacity:x x的取值从0到1

IE中专属filter:alpha(opacity=x) x取值从0到100

在JS中设置:

var alpha = 30;

div.style.filter='alpha(opacity:'+alpha+')'

div.style.opacity = alpha/100;

属性存在对象或原型中

使用in操作符和hasOwnProperty()方法可以判断一个属性在实例中,还是在原型中。

若in返回true,但hasOwnProperty()返回false,则说明在原型中。

若in返回true,hasOwnProperty()也返回true,则说明在实例中。

*/



创作类型:
原创

本文链接:阿里面试经历及题目

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share