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语法相对原型、构造函数、继承更接近传统语法
它的写法能够让对象原型的写法更加清晰、面向对象编程的语法更加通俗












网友评论