1.ajax
如何实现,readyState
的五种状态的含义?
-
0
---(未初始化
)还没有调用send()
方法 -
1
---(载入
)已调用send()
方法,正在发送请求
-
2
---(载入完成
)send()
方法执行完成,已经接收
到全部
响应内容 -
3
---(交互
)正在解析响应内容
-
4
---(完成
)响应内容解析完成
,可以在客户端调用了
2. RESTful
REST
指的是一组架构
约束条件
和原则
,满足这些约束条件
和原则
的应用程序或设计就是RESTful
GET
get
方法在Rest
中主要用于获取资源
,能够发送参数
,不过有限制
,且参数都会以?
开头的形式附加在URL尾部
规范的get
方法处理器应该是幂等
的,也就是说对一个资源不论发送多少次get
请求都不会更改数据
或造成破坏
POST
post
方法在Rest
请求中主要用于添加资源
,参数信息存放在请求报文
的消息体中相对安全,且可发送较大信息
PUT
put
方法在Rest
中主要用于更新资源
,因为大多数浏览器不支持put
和delete
,会自动将put
和delete
请求转化为get
和post
因此为了使用put
和delete
方法,需要以post
发送请求,在表单中使用隐藏域发送真正的请求
put
方法的参数是同post
一样是存放在消息中的,同样具有安全性
,可发送较大信息
put
方法是幂等
的,对同一URL
资源做出的同一数据的任意次put
请求其对数据的改变都是一致的
DELETE
Delete
在Rest
请求中主要用于删除资源
,因为大多数浏览器不支持put
和delete
,会自动将put
和delete
请求转化为get
和post
因此为了使用put
和delete
方法,需要以post
发送请求,在表单中使用隐藏域
发送真正的请求
Delete
方法的参数同post
一样存放在消息体中,具有安全性
,可发送较大信息Delete
方法是幂等
的,不论对同一个资源进行多少次delete
请求都不会破坏数据
3.ajax
和fetch
区别
ajax
是使用XMLHttpRequest
对象发起的,但是用起来很麻烦,所以ES6
新规范就有了fetch
,fetch
发一个请求不用像ajax
那样写一大堆代码。
使用fetch
无法取消一个请求,这是因为fetch
基于promise
,而promise
无法做到这一点。
在默认情况下,fetch
不会接受或者发送cookies
fetch
没有办法原生监测
请求的进度,而XMLHttpRequest
可以
fetch
只对网络请求报错,对400
,500
都当做成功
的请求,需要封装
去处理
fetch
由于是ES6
规范,兼容性上比不上XMLHttpRequest
4. 为什么用Nodejs
,它有哪些缺点?
事件驱动
,通过闭包
很容易实现客户端的生命活期
不用担心多线程
,锁
,并行计算
的问题
V8
引擎速度非常快
对于游戏来说,写一遍游戏逻辑代码,前端后端
通用
当然Nodejs
也有一些缺点:
-
nodejs
更新很快,可能会出现版本兼容
-
nodejs
还不算成熟,还没有大制作 -
nodejs
不像其他的服务器,对于不同的链接,不支持进程和线程操作
5.NodeJS
的工作原理
事件循环
6.Node
的应用场景
RESTFUL API
、实时聊天
、客户端
逻辑强大的单页APP
;
本地化的在线音乐应用
,本地化的在线搜索
应用,本地化的在线APP
-
实时应用:如在线聊天,实时通知推送等等(如`socket.io)
-
分布式应用:通过高效的并行
I/O
使用已有的数据 -
工具类应用:海量的工具,小到前端压缩部署(如`grunt),大到桌面图形界面应用程序
-
游戏类应用:游戏领域对实时和并发有很高的要求(如网易的
pomelo
框架)
利用稳定接口提升Web
渲染能力
前后端编程语言环境统一:前端开发人员
可以非常快速地切入到服务器端
的开发(如著名的纯Javascript
全栈式MEAN
架构)
7. 什么是error-first callback
?
error-first callback
用来传递错误
和数据
第一个参数永远是一个错误对象(error-object)
,回调函数必须检查它。余下的参数用来传递数据
8. 如何避免回调函数嵌套?
使用
Promises
将回调写成单独的函数
9. Node
程序如何监听80
端口?
使
Node
监听1024
以上的端口,然后在Node
前面部署nginx
反向代理
10. 什么是事件循环(event loop)
?
从开发者的角度来看,
Node.js
是单线程运行的,底层使用libuv
使用多线程。
每一个
I/O
操作都需要一个回调,一旦操作完成会被事件循环
执行
11. 使用什么工具检查代码风格?
JSLint by Douglas Crockford
JSHint
ESLint
JSCS
开发团队项目时,强制指定代码风格
和使用静态分析
,捕捉常见的错误
,这些工具都非常有用。
12. 操作错误
和程序错误
的区别是什么?
操作错误不是bug
,是系统
的问题,例如超时
或者硬件故障
;
另一方面,程序错误(programmer errors
)是实际的错误。
13.为什么
npmshrinkwarp`非常有用?
这个命令在部署Node.js
应用时是非常有用的——它可以保证所部属的版本
就是依赖的版本
14. 什么是stub
?说出他的用途?举个使用场景?
stubs
是模拟模块
或组件
行为的程序。
stubs
提供已知的答案来调用函数
,另外你还可以断言哪个stubs
被调用
15. 什么是测试金字塔?在做HTTP API
的时候要怎么实现?
测试金字塔
意思是在写测试时应该编写的底层
的端到端测试要多于高级
的端到端测试。
对于HTTP APIs
,应该归结为:
-
对
模型
多很多单元测试
-
在
模型
与其他交互
时更少的集成测试
-
更少的验收测试,在
HTTP
端
16. 你最喜欢的HTTP
框架,并说明原因?
LiteHttp
单线程
灵活的架构
轻量级
多文件上传
自动重定向
禁用一种或多种网络
17. 对Node
的优点和缺点提出了自己的看法
优点
因为Node
是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node
上的代理服务器
相比其他技术实现(如Ruby
)的服务器表现要好得多。此外,与Node
代理服务器交互的客户端代码
是由javascript
语言编写的,因此客户端
和服务器端
都用同一种语言编写,这是非常美妙的事情。
缺点
Node
是一个相对新的开源项目
,所以不太稳定
,它总是一直在变,而且缺少
足够多的第三方库
支持;看起来,就像是Ruby/Rails
当年的样子。
18. ES6
都有什么Iterator
遍历器
Set
Map
-
遍历器
(Iterator)
是一种接口
,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator
接口,就可以完成遍历操作(即依次处理该数据结构的所有成员) -
Iterator
的作用有三个:-
一是为各种
数据结构
,提供一个统一的
、简便的
访问接口; -
二是使得
数据结构
的成员能够按某种次序排列
; -
三是
ES6
创造了一种新的遍历命令for...of
循环,Iterator接口主要供
for...of`消费。
-
-
默认部署了
Iterator
的数据有Array
、Map
、Set
、String
、TypedArray
、arguments
、NodeList
对象,ES6
中有的是Set
、Map
19. 说说你对promise
的了解
promise
是异步编程
的一种解决方案,比传统的解决方案: 回调函数
和事件监听
更合理和更强大。所谓promise
,简单说就是一个容器
,里面保存着某个未来才会结束的事件的结果。从语法
上说,promise
是一个对象,从它可以获取异步操作
的消息。promise
提供统一的API
,各种异步操作
都可以用同样的方法进行处理。
promise
对象有以下两个特点:
-
对象的状态
不受外界影响,promise
对象代表一个异步操作
,有三种状态:
Pending
(进行中)
Resolved
(已完成,又称Fulfilled
)
Rejected
(已失败)
- 一旦
状态改变
,就不会再变,任何时候
都可以得到这个结果。
20. class 的讲解
class
语法相对原型
、构造函数
、继承
更接近传统语法
它的写法能够让对象原型
的写法更加清晰
、面向对象
编程的语法更加通俗
网友评论