NodeJS的特点是什么?

它是一个Javascript运行环境
依赖于Chrome V8引擎进行代码解释
事件驱动
非阻塞I/O
轻量、可伸缩,适于实时数据交互应用
单进程,单线程 (一个应用程序对应一个进程, 一个进程下面会有多个线程, 每个线程用于处理任务..)

事件的订阅和发布的设计模式是什么?

其实就是收集事件名, 对应的方法体, 当触发对应事件名时, 把事件名对应的所有方法体调用执行一遍

什么是同步, 异步?

同步操作, 当代码运行到同步操作的代码时, 所在线程等待结果返回, 而异步操作, 则是不会耽误代码继续执行, 当异步操作成功, 
一般使用回调函数来处理异步成功的动作(常用在ajax/定时器/计时器等)

NodeJS环境中, 模块加载的规范和使用规则是什么?

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

npm作用是什么?

允许用户从NPM服务器下载别人编写的第三方包到本地使用
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用

常用的npm指令有哪些?

npm init / npm search /  npm install / npm remove / npm uninstall  / npm config set /

fs模块能否删除一个, 非空的文件夹, 如果不能应该怎么做?

首先封装函数, 用于读取目标路径下所有文件/文件夹的名字
开始遍历每个相对路径, 判断是文件夹, 就递归调用次函数
如果是文件, 则删除此文件
当上面循环结束以后, 则删除当前所在的文件夹即可

module.exports和exports的区别?

本质上是无区别的, 最终暴露给外部的都是module.exports, exports只是module.exports的辅助工具, 他们是相等的,
所以既用exports.xxx 也用module.exports, 则之前的exports.xxx会被覆盖掉

MIME类型的作用?

后端利用MIME类型告诉前端浏览器, 要以怎么样的方式去解析, 后端传给前端的内容数据

路由是什么?

后端路由, 其实就是提前规定好的一串url路径, 当前端访问不同的路径, 后端做出不同的处理

静态化资源是什么?

其实就是存放在服务器上的一些文件, 这些文件可能是.txt, .rmvb, .avi, .html, .css, .js

express中Router的作用?

* express.Router 可以认为是一个微型的只用来处理中间件与控制器的 app,它拥有和 app 类似的方法,例如 get、post、all、use 等等。
* router它解决了直接把 app 暴露给其它模块使得 app 有被滥用的风险, 优化路由管理

npm自定义命令在哪里配置?

在运行命令时, 所在目录下的package.json中的scripts字段对应的位置进行配置
* key是npm run 要执行的自定义命令的名字
* value是 执行自定义命令时, 真正对应的cmd命令

请回答, 前端Ajax请求后台接口 /api/login, 并且前端post方式发送了参数, 请阐述一下这个登录的流程, 那些代码执行了?

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

express优点是什么?

Express 的优点是线性逻辑:路由和中间件完美融合,通过中间件形式把业务逻辑细分,简化,一个请求进来经过一系列中间件
处理后再响应给用户,再复杂的业务也是线性了,清晰明了。

什么是中间件?

中间件其实就是一个个的函数, 当调用next时, 才会执行下一个中间件函数Express是一个自身功能极简,完全是路由和中间件
构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件函数。封装了一些或许复杂但肯定是通用的功能,
非内置的中间件需要通过安装后,require到文件就可以运行

express缺点是什么?

Express 是基于 callback 来组合业务逻辑。Callback 有两大硬伤,一是不可组合,二是异常不可捕获。

session和cookie的作用, 以及区别是什么?

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

ejs的作用是什么?

EJS是一个JavaScript模板库, 用来从JSON数据中生成HTML文件

pug的作用是什么?

Pug是一款健壮、灵活、功能丰富的HTML模板引擎,专门为 Node.js 平台开发。Pug是由Jade 改名而来。是一种通过缩进(表示标签间的嵌套关系)
的方式来编写代码的过程,在编译的过程中,不需要考虑标签是否闭合的问题。可以加快写代码速度,也为代码复用提供了便捷。

解释, 前后端分离的项目是什么意思? JS渲染的项目又是什么意思?

前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互

JS渲染的项目就是通过Ajax请求数据以后, 通过JS代码动态创建html的标签和数据等(一般右键查看网页源代码 是看不到渲染后的HTML标签的)

什么是后端渲染的项目?

浏览器请求静态网页资源, 服务器端会在后端把数据渲染到HTML页面上, 再把html文件内的字符串一起返回给浏览器进行展示的一种手段,
Nodejs中体现为ejs和pug模板引擎

跨域是什么, 如何解决跨域问题?

当ajax请求所在域名或接口和请求目标url的域名或接口, 有一个不同, 即发生了跨域请求, 浏览器会阻止这次ajax请求.

如果能让后台改代码, 可以让后台开启跨域支持/ 使用jsonp方式处理跨域

如果不能让后台改代码, 则需要在本地使用服务器, 进行代理转发

关系和非关系型数据库的区别?

存储方式
传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储,要读取和查询都十分方便。而
非关系型数据库通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构或者文档。
存储结构
关系型数据库按照结构化的方法存储数据, 每个数据表都必须对各个字段定义好(也就是先定义好表的结
构),再根据表的结构存入数据。NoSQL 数据库采用的是动态结构,对于数据类型和结构的改变非常的适应,
可以根据数据存储的需要灵活的改变数据库的结构。
存储规范
关系型数据库为了避免重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存
储。而 NoSQL 数据库的数据存储方式是用平面数据集的方式集中存放。
扩展方式
关系型数据库只具备纵向扩展能力。非关系型数据库还可以采用横向的方式来扩展。
查询方式
关系型数据库采用结构化查询语言(即 SQL)来对数据库进行查询,NoSQL 中的文档 Id 与关系型表中
主键的概念类似,NoSQL 数据库采用的数据访问模式相对 SQL 更简单而精确。

webpack的作用是什么,谈谈你对它的理解?

答案: 现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScript的复杂度增加和需要一大堆依赖包,还需要解决SCSS,Less……新增样式的扩展写法的编译工作。所以现代化的前端已经完全依赖于WebPack的辅助了。
现在最流行的三个前端框架,可以说和webpack已经紧密相连,框架官方都推出了和自身框架依赖的webpack构建工具。
React.js+WebPack
Vue.js+WebPack
AngluarJS+WebPack

webpack的工作原理?

答案: WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言
(Sass,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。在3.0出现后,Webpack还肩负起了优化项目的责任。

为什么要进行模块化?

答案: 目前前端的开发形势就是模块化和组件化;从软件工程学分析来说就是有了更好的可维护性、可复用性等好处;但是前端的主要语言js在es6
之前却没有模块化功能,之前有使用require.js和sea.js但是推出es6的模块化之后,es6的模块化使用形式基本统一了。

谈谈你对AMD和CMD的理解?

答案: AMD:
AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
同样都是异步加载模块,AMD在加载模块完成后就会执行改模块,所有模块都加载执行完后会进入require的回调函数,执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。
CMD:
CMD推崇就近依赖,只有在用到某个模块的时候再去require
CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的。
特点:AMD用户体验好,因为没有延迟,依赖模块提前执行了;CMD性能好,因为只有用户需要的时候才执行。

谈谈文件上传的思路?

答案: 准备好服务器, 和接受前端提交表单数据的后台接口, 以及对应解析和业务逻辑代码
前端, 利用Ajax, 获取图片表单数据, 然后调用对应后台接口地址, 上传表单文件数据, 得到后台的操作结果, 前端相应展示页面