node常见面试题

node的特色

  1. 他是一个JavaScript的运行环境
  2. 依赖于Chrome V8 引擎进行代码解释
  3. 事件驱动
  4. 非堵塞
  5. 单线程
  6. 轻量,适用于实时数据交互

exports和module.exports的区别

  1. exports是对module.exports引用
  2. node为每一个模块提供一个exports变量,他指向module.exports
  3. 不能将它直接指向一个值,那样会改变他的指向
  4. 若是exports和module.exports同时存在,那么只显示module.exports

http请求和响应的报文格式和常见http状态码

  1. 请求: 请求行,请求头,空行,请求体
  2. 响应: 状态行,响应头,空行,响应头
  3. 编码格式 1.. 表示请求已发送 2.. 表示请求成功 3.. 表示等待用户进一步操做,重定向 4.. 表示页面加载错误 5.. 表示服务器错误

MIME类型有什么用

  1. http协议中定义文档性质及格式的标准
  2. 服务器经过MIME告知响应内容什么类型,而浏览器经过MIME类型来缺点如何让处理文档

模块加载机制

Nodejs遵循commonjs规范的模块加载机制,使用require加载文件,使用exports和module.exports导出文件css

NPM的做用html

  1. 容许用户从NPM服务器下载别人编写的第三方包到本地使用
  2. 容许用户从NPM服务器下载并安装别人编写的命令行程到本地使用
  3. 容许用户将本身编写的包或命令行程序上传到NPM服务器供别人使用

url组成

协议+域名+端口+pathname+search+hash前端

fs文件操做模块可否删除一个非空目录,若是不能应该怎么作

不能 它只能删除空的目录 若是目录不为空,他必须先遍历文件夹,删除里面的内容,而后若是还有文件夹,继续遍历 从而递归执行操做,只有当里面的内容所有清空后,才会删除一个目录html5

exports 中Router要解决的问题?

  1. 能够认为他是一个处理中间件和控制器的微型app,他拥有和app相似的方法
  2. 他解决了把模块暴露给其余模块被滥用的风险

npm start命令,应该在哪里配置,在哪里能够正确运行?

  1. 在package.json 中的script中配置npm命令
    • key是npm的自定义命令名称
    • value是真正终端中执行的命令
  2. 在使用npm 运行自定义命令时, 须要确保命令路径的位置上拥有package.json文件

express生成器的做用是什么

能够经过express-generator能够快速建立一个应用骨架,包含一整套配置好的服务器配置,文件和文件夹,包括静态资源的暴露,路由和模板引擎的配置,以及错误页面的处理node

请回答, 前端Ajax请求后端接口/api/getNews, 接口过程当中, 都发生了什么?

首先前端代码运行在浏览器中,由浏览器的XMLHTTPRequest发起一个请求, 若是经过了跨域的检测, 进行http链接, 发送请求信息, 服务器触发对应监听的"/api/getNews"接口的回调函数, 执行其中的代码, 最后res返回响应的内容等给本次请求的地方.webpack

请求对象中包含哪些内容

请求协议,请求方式,请求地址,请求头,请求头web

响应对象中包含哪些内容

响应协议,响应状态码,响应状态信息,响应头,相应数据ajax

express的优势

Express的优势是线性逻辑:数据库

  1. 路由和中间件完美结合
  2. 经过中间件形式把业务逻辑细分,简化
  3. 随随便便的一个请求,经过一系列中间件处理后再响应给客户,在复杂的逻辑也线性了

###什么是中间件express

  1. Express是一个自身功能及其简单,彻底由路由和中间件构成的文本开发框架

  2. 他就是在操做各类中间件处理复杂的逻辑

  3. 非内置的中间件经过require导入就可使用了

  4. 经常使用第三方中间件:

    • cookie-parser
    • ejs
    • express-session
    • http-errors
    • Multer
    • Nodemon
    • config-lite

express 缺点是什么

  1. express是基于callback来组合业务逻辑
  2. callback有两大缺点:
    1. 不可组合
    2. 异常不可捕获

同步/异步

同步操做

因此线程都得等待,只有上一段代码执行完毕,而后下一段代码才会执行,堵塞线程

异步操做

不会等待,当有程序在执行过程当中,后面的代码继续执行,当异步操做成功,通常使用回调函数来处理异步成功的动做

ejs

EJS是JavaScript的模板库,用来从json数据生HTML文件

koa

优势:
  1. 借助promise和generator的能力,丢掉callback,完美解决异步组合问题和异步异常捕获问题
  2. koa把router,view等功都移除了,更加轻量级
缺点
  1. Connect/Express 的中间件基本不能重用,基本要重写

pug

  1. pug是一款健壮,灵活,功能丰富的HTML模板引擎,专门为Node.js平台开发
  2. 是一种经过缩减方式编写代码,不须要考虑闭合标签,能够提升速度和复用性

设计一个先后端交互的流程?

前端编写HTML+CSS代码之后, 经过JS的Ajax进行网路请求, 请求后台指定的数据接口, 根据业务需求, 能够还须要传递参数等信息, 获取数据之后, 进行JSON解析和DOM建立展现. 服务器端 编写接口, 接收参数等, 链接数据库, 根据业务逻辑编写业务代码, 返回不一样的数据

分页功能,先后的如何交互

分页功能分先后端

  1. 前端
    • 根据页码数,截取后台返回的所有数据,进行分段展现
  2. 先后端配合
    • 传递页码数给后台,后台作出处理后返回给前台

cookie和session区别

session是区别于数据库存在的一种服务器临时存储技术, 它主要存储一些无需持久化的数据, 好比临时的登陆状态信息等 cookie是存在于浏览器上的一种浏览器本地存储的方式, 同域名下的cookie不一样标签页能够共享, 默认过时时间是浏览器关闭时, 并且在进行http请求时, 会自动带上浏览器所有的cookie发给后台, 后台也能够获取cookie, 设置能够在响应时, 想浏览器中设置cookie。

解决跨域

当ajax请求所在的域名或者接口和请求目标的域名或者接口有一个不一样,即发生跨域

解决
  1. 若是可让后台改码,可让后台开启跨域支持/使用jsonp处理
  2. cors设置set.heaader
  3. webpack设置跨域

为何进行模块化

  1. 是目前前端的开发趋势
  2. 有更好的维护性,可复用性等好处

模块化和组件化的区别

  1. 组件化让一些小功能通用性和可复用性来抽象组件
  2. 组件化更多的关注UI部分,好比用户看到的弹出框,页脚,确认按钮等,这些组件能够组合成新的组件,又能够和其余组件组合组合成新的组件
  3. 一些小模块的复用

  1. 模块化是按照业务逻辑划分大模块
  2. 模块化侧重于数据的封装,一组相关的组件定义成一个模块,一个json对象能够是一个模块

AMD 和 CMD

AMD 依赖前置 CMD 就近依赖

常见的web优化有哪些?

  1. 减小代码重复
  2. 压缩 css,js
  3. 减小图片大小数量
  4. 减小http请求,合理设置缓存
  5. CDN加速
  6. 反向代理
  7. js减小DOM操做,编码使用eval和function,减小做用域链查找

koa与express的区别?该如何选择?

websocket是什么

他是html5新增的协议,创建浏览器和服务器之间不受限制的双向通道

websocket的优势:
  1. 持双向通讯,实时性更强。
  2. 减小通讯量,只要创建起websocket链接,就一直保持链接,在此期间能够不断的传送消息,直到关闭请求。
  3. 节约带宽。

为何要进行先后端分离?

  1. 提高开发效率,由于能够先后端并行开发,而不是像之前的强依赖
  2. 能够实现真正的先后端解耦(前端能够根据用户不一样时期的体验需求迅速改版,后端对此毫无压力。同理,后端进行的业务逻辑升级,数据持久方案变动,只要不影响到接口,前端能够绝不知情。)、增长代码的维护性及易读性
  3. 先后端开发人员的职责更加专一:前端倾向于呈现,着重处理用户体验相关的问题;后端则倾向于业务逻辑、数据处理和持久化等。
相关文章
相关标签/搜索