1. 阐述一下异步加载 JS
异步加载的方案: 动态插入script标签
通过ajax去获取js代码,然后通过eval执行
script标签上添加defer或者async属性
创建并插入iframe,让它异步执行js
2. 请解释一下 JavaScript 的同源策略
同源策略是客户端脚本(尤其是 Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。所谓同源指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。
3. GET 和 POST 的区别,何时使用 POST?
GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在 2000个字符,有的浏览器是8000个字符;POST:一般用于修改服务器上的资源,对所发送的信息没有限制在以下情况中,请使用POST请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST比GET更稳定也更可靠
4. ajax 的优点
通过异步模式,提升了用户体验。来自服务器的新内容可以动态更改,无需重新加载整个页面。
优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。
5. ajax 的最大的特点是什么?
ajax可以实现异步通信效果,实现页面局部刷新,带来更好的用户体验;
按需获取数据,节约带宽资源;
6. ajax 的缺点
ajax不支持浏览器back按钮
安全问题ajax暴露了与服务器交互的细节
对搜索引擎的支持比较弱
破坏了程序的异常机制
7. ajax请求的时候get和post方式的区别
get一般用来进行查询操作,url地址有长度限制,请求的参数都暴露在url地址当中,如果传递中文参数,需要自己进行编码操作,安全性较低
post请求方式主要用来提交数据,没有数据长度的限制,提交的数据内容存在于http请求体中,数据不会暴露在 url 地址中
8. 解释jsonp的原理,以及为什么不是真正的ajax, 以及优缺点
jsonp是用来解决跨域获取数据的一种解决方案,具体是通过动态创建script标签,然后通过标签的src属性获取js文件中的js脚本,该脚本的内容是一个函数调用,参数就是服务器返回的数据,为了处理这些返回的数据,需要事先在页面定义好回调函数,本质上使用的并不是ajax 技术
jsonp的优缺点
jsonp优点:
完美解决在测试或者开发中获取不同域下的数据,用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON 数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。简单来说数据的格式没有发生很大变化
jsonp 缺点:
1).jsonp只支持get请求而不支持post请求,也即是说如果想传给后台一个json格式的数据,此时问题就来了,浏览器会报一个http状态码415错误,告诉你请求格式不正确(在登录注册中需要给后台传一大串数据),如果都用参数的形式拼接在url后面的话不太现实,后台取值也会显得繁琐,
2).在登录模块中需要用到session来判断当前用户的登录状态,这时候由于是跨域的原因,前后台的取到的session是不一样的,那么就不能就行session来判断.
3).由于jsonp存在安全性问题,可以让后台进行设置允许跨域请求;
HeadersetAccess-Control-Allow-Origin为了防止XSS攻击我们的服务器,我们可以限制域
9. 什么是Ajax和JSON,它们的优缺点。
Ajax是全称是asynchronous JavaScript andXML,即异步JavaScript和xml,用于在Web页面中实现异步数据交互,实现页面局部刷新。
优点:可以使得页面不重载全部内容的情况下加载局部内容,降低数据传输量,避免用户不断刷新或者跳转页面,提高用户体验
缺点:对搜索引擎不友好;要实现ajax下的前后退功能成本较大;可能造成请求数的增加跨域问题限制;
JSON是一种轻量级的数据交换格式,ECMA`的一个子集
优点:轻量级、易于人的阅读和编写,便于机器(JavaScript)解析,支持复合数据类型(数组、对象、字符串、数字)
10. 什么是json,优缺点
JSON(JavaScript Object Notation)
优点:
数据格式比较简单,易于读写,格式都是压缩的,占用带宽小
易于解析这种语言,客户端javascript可以简单的通过eval()进行JSON数据的读取搜索
支持多种语言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,php,Python,Ruby等语言服务器端语言,便于服务器端的解析
在PHP世界,已经有PHP-JSON和JSON-PHP出现了,便于PHP序列化后的程序直接调用.PHP服务器端的对象、数组等能够直接生成JSON格式,便于客户端的访问提取.另外PHP的PEAR类已经提出了支持
因为JSON格式能够直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,但是完成的任务不变,且易于维护
缺点:
没有XML格式这么推广的深入人心和使用广泛
没有XML`那么通用性
JSON格式目前在WebService中推广还属于初级阶段
11. 一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么?
浏览器地址栏输入url
浏览器会先查看浏览器缓存--系统缓存--路由缓存
如有存在缓存,就直接显示;
如果没有,域名解析(DNS)获取相应的ip
浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手
握手成功,浏览器向服务器发送http请求,请求数据包
服务器请求数据,将数据返回到浏览器
浏览器接收响应,读取页面内容,解析html源码,生成DOm树
解析css样式,浏览器渲染,js交互绑定多个域名,数量不限;
12. XML和JSON的区别?
1).数据体积方面
JSON相对于XML来讲,数据的体积小,传递的速度更快
2).数据交互方面
JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互
3).数据描述方面
JSON对数据的描述性比XML较差
4).传输速度方面
JSON的速度要远远快于XML
13. ajax请求时,如何解析json数据
使用eval()或者JSON.parse()鉴于安全性考虑,推荐使用JSON.parse()更靠谱,对数据的安全性更好
14. 异步加载和延迟加载
异步加载的方案:动态插入script标签
通过ajax去获取js代码,然后通过eval执行
script标签上添加defer或者async属性
创建并插入iframe,让它异步执行js
延迟加载:有些js代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。
15. eval是做什么的?
把对应的字符串解析成js代码并运行;
16. AMD和 CMD规范的区别
1.对于依赖的模块,AMD是提前执行,CMD是延迟执行
2.CMD推崇依赖就近,AMD推崇依赖前置
17. HTTP`状态码
100? continue?
一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200? OK?正常返回信息
201?Created?请求成功并且服务器创建了新的资源
202 ?Accepted ?服务器已接受请求,但尚未处理
301 ?Moved Permanently ?请求的网页已永久移动到新位置
302 Found ?临时性重定向
303 See Other ?临时性重定向,且总是使用GET请求新的URI
304 ?Not Modified ?自从上次请求后,请求的网页未修改过
400 Bad Request ?服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求
401 Unauthorized ?请求未授权
403 Forbidden ?禁止访问
404 Not Found ?找不到如何与URI相匹配的资源
500 Internal Server Error ?最常见的服务器端错误
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)
18. 栈和队列的区别?
栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。
队列先进先出,栈先进后出。
栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入,在表头一端进行删除
19. ajax加载的页面,跳转到另外一个页面再跳转回来,内容相同,如何节约读取请求?
后台做缓存,读取缓存里面的数据、CDN
20. ajax`实现的原理
浏览器提供的XMLHttpRequest对象