1、node如何创建服务器,写出代码?
var http = require(‘http’);
var server = http.createServer(function(req,res){
Res.end(‘服务端响应’);
});
server.listen(3000);
2、querystring模块如何解析如下字符串,(‘user=tom&pass=123456’)?
querystring模块如何解析如下字符串,
(‘user=tom&pass=123456’);
Var qs = require(‘querystring’);
Var str = ‘ user=tom&pass=123456 ’;
qs.parse(str);
// 把字符串解析成对象{ user: 'tom', pass: '123456' }
3、Node是什么。【考核知识点:node的定义】
Node是一个基于Chrome V8引擎的JavaScript代码运行环境。
4、express创建的项目中文件夹和文件有哪些?各自含义?
Bin:项目执行运行所在的文件夹
Node-modules: 依赖包的文件夹
Public: 静态资源托管
Views: 视图、模板引擎等文件
Routes: 存放路由文件
Package.json: 工程项目描述文件
App.js: 入口文件 项目主文件
5、命令行更新 user集合中name为‘李四’的文档,sex改为女,其他字段不变?
Db.user.update({“name”:”李四”},{$set:{“sex”:”女”}});
6.为什么要学习node?【考核知识点:为什么选择node】
使用JavaScript语法开发后端应用
前端开发工具大多基于Node开发 vue打包 react打包等
一些公司要求前端工程师掌握Node开发
生态系统活跃,有大量开源库可以使用
7.全局安装express-generater 指令是?
npm install express-generater -g
8.命令行向user集合添加文档{user:tom,pass:123456}的指令?(第8天5题)
Db.user.insert({“user”:”tom”,”pass”:”123456”});
9. 系统环境变量path的作用【考核知识点:path环境变量】
path变量的作用,简单地说,我们如果把文件夹的路径设置到path变量里。
那么这个路径下的所有可执行文件,都会具有全局性,无论在何时何地,只要输入该文件名,就可以直接执行。
10. url模块如何解析请求地址req.url, 得到如下参数{pathname:’/’,query:{user:xxx,pass:xxxx}}?(第2天8题)
Req.url = “http://www.baidu.com/s?wd=html&pass=123;”
{pathname:’/s’,query:{user:xxx,pass:xxxx}} ?
url.parse(req.url,true).query
url.parse(req.url,true).pathname
11、请使用http、fs搭建一个最简单的服务器,直接写代码?
var http = require(‘http’);
var fs = require(‘fs’);
var server = http.createServer(function(req,res){
Fs.readFile(‘文件路径’,function(err,data){
Res.write(data);
Res.end(‘服务端响应’);
});
});
server.listen(3000);
12、同步和异步的区别?各举一个Js中同步和异步的案例?
同步:上一件事情没有完成,继续处理上一件事情,只有上一件事情完成了,才会做下一件事情
异步: 规划要做一件事情,如果是异步事情,不是当前立马去执行这件事情,需要等一定的时间,这样的话,我们不会等着他执行,而是继续执行下面的操作
同步案例:for循环语句,alert(),console.log()等 js大部分都是同步编程
异步案例:所有定时器,ajax异步请求,readFile writeFlie 等
13、node服务器如何设置跨域请求和中文乱码?
解决中文乱码
res.setHeader('Content-Type','text/html;charset=utf8');
// 解决跨域
res.setHeader('Access-Control-Allow-Origin','*');
14.请简述mongoose中schema、model、entity概念?
Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model : 由 Schema发布生成的模型,具有抽象属性和行为的数据库操作
Entity : 由 Model创建的实体,他的操作也会影响数据库
15、若通过mongoose创建的集合模型为Student,Student集合删除{_id:12345}的集合,删除成功后向前端响应json数据为{code:1,msg:”删除成功”}? Student.remove({_id:‘12345’},function(err){
If(!Err){
Res.send({code:1,msg:”删除成功!“})
}
})
16,请简述commonjs规范中模块导入和导出语法?
module代表当前模块。这个变量是一个对象,加载该模块的module.exports属性。
module.exports = 对象;
Var 命名 = require(“模块名”) ;
17.Express创建项目流程:【考核知识点:Express-generator模板介绍】
express -e 项目名
cd 项目名
npm i
npm start
express -e projectName
cd projectName
npm install / cnpm install / yarn install
npm start / yarn start
18.express路由传参数的方式有哪些
req.query (查询get请求中的参数)
req.body (查询post请求)
19.端口号的作用是什么
不同的端口号 在电脑上开启不同的服务
20.Cookie和session的区别是什么
sessionStorage:5M或者更大,仅在当前浏览器窗口关闭之前有效,关闭页面或者浏览器会被清除
cookie:一般不超过4K,一般由服务器生成,可以设置失效时间;若没有设置时间,关闭浏览器cookie失效,若设置了时间,cookie就会存放在硬盘里,过期才失效
21.为什么npm start可以启动express项目?
因为在package.json中设置了
"scripts": {
"start":"nodemon ./bin/www"
},
自定义 脚本 需要 使用 npm run build , run -- 运行
22、模板引擎的作用
取得数据并加以处理,最后显示出数据
23、Localstorage和cookie的区别
cookie:一般不超过4K,一般由服务器生成,可以设置失效时间;若没有设置时间,关闭浏览器cookie失效,若设置了 时间,cookie就会存放在硬盘里,过期才失效
localStorage:5M或者更大,永久有效,窗口或者浏览器关闭也会一直保存,除非手动永久清除,因此用作持久数据
24.怎么验证用户名的唯一性,写出思路即可【考核知识点:ajax验证用户名的唯一性】
1.获取文本框并为其添加离开焦点事件
2.向服务器端发送请求,检测用户名是否被别人注册
3.根据服务器端返回值决定客户端显示何种提示信息
25.MongoDB中如何实现模糊查询【考核知识点:MongoDB模糊查询】
db + 表名 + find({属性名:{$regex:{/查询的内容/}}}) $regex:{/查询的内容/}}--正则表达式 实现模糊查询
- 什么是回调函数
一个函数作为参数,传入到另一个函数,这个函数在某个时机调用,这个作为参数的函数称为回调函数。
回调函数,就是放在另外一个函数(如 parent)的参数列表中,作为参数传递给这个 parent,然后在 parent 函数体的某个位置执行,Node.js 异步编程的直接体现就是回调。
27.node模块分几类
内置模块 自定义模块 第三方模块。
28.npm 下载模块的命令是什么
npm install(i)模块名 --save
29.npm 本地下载和全局下载的区别是什么
--save -g 一个是功能模块 一个是工具.
30.http请求消息的格式和响应消息的格式分别是什么
请求行 请求头 空行 请求数据
响应行 响应头 空行 响应正文
- http状态码有哪些?
1)1xx:指示信息--表示请求已接收,继续处理
2)2xx:成功--表示请求已被成功接收、理解、接受
3)3xx:重定向--要完成请求必须进行更进一步的操作
4)4xx:客户端错误--请求有语法错误或请求无法实现
5)5xx:服务器端错误--服务器未能实现合法的请求
32.什么是域名?
域名(英语:Domain Name),又称网域,是由一串用点分隔的名字,组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)
33.说一下对ip的理解?
IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议
IP地址是用来识别网络上的设备,IP地址是由网络地址与主机地址两部分所组成
34.什么是中间件。【考核知识点:中间件概念】
中间件就是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理
35.mongoose操作mongoDB数据库,连接数据库的步骤
引入第三方模块mongoose
连接数据库:mongoose.connect(‘数据库的地址’)
设置集合规则:new mongoose.Schema ()
创建集合:mongoose.model(‘集合名’, 集合规则)
36.什么是同源策略?
同源策略 是由NetScape提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能
所谓的同源,指的是协议,域名,端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,不能读写对方的资源。
37.jsonp的原理?
script的src属性不受同源策略的限制;将不同源的服务器端请求地址写在 script 标签的 src 属性中
38.http工作原理? 从网址url 按下回车发生了什么?
1)客户端连接到Web服务器
2)发送HTTP请求
3)服务器接受请求并返回HTTP响应
4)释放连接TCP连接
5)客户端浏览器解析HTML内容
39. get与post请求有什么区别
1. get是从服务器上获取数据,post是向服务器传送数据。
2. POST比GET安全,因为数据在地址栏上不可见。
3. get方式提交的数据最多只能有1024字节,而post则没有此限制。
4. GET使用URL或Cookie传参。而POST将数据放在request BODY中。
5. GET与POST都有自己的语义,不能随便混用。
40.Javascript 模块化主要有三种方案。【考核知识点:模块化开发的分类】
CommonJs
AMD 即Asynchronous Module Definition,中文名是异步模块定义 模块化工具 require.js
CMD规范 模块化工具 sea.js
- requset,response分别代表什么?
req --- request 请求对象 缩写 --客户端向服务端发送请求
包括 url 客户端参数 资源文件 头部信息设置客户端编码等
res ---response 响应对象 缩写 -- 服务器响应给客户端的参数
包括 返回码 响应请求数据 头文件 http头部
- get与post有什么区别
- get是从服务器上获取数据,post是向服务器传送数据。
- POST比GET安全,因为数据在地址栏上不可见。
- get方式提交的数据最多只能有1024字节,而post则没有此限制。
- GET使用URL或Cookie传参。而POST将数据放在request BODY中。
- GET与POST都有自己的语义,不能随便混用。
- npm包的发布流程?
- 注册用户2、用户登录3、创建工程4、npm publish 发布。
- 什么是模块化
将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起
块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信
模块化的优点
避免命名冲突(减少命名空间污染)
更好的分离, 按需加载
更高复用性
高可维护性
- 请简述mongoose中schema、model、entity概念?
Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model : 由 Schema发布生成的模型,具有抽象属性和行为的数据库操作
Entity : 由 Model创建的实体,他的操作也会影响数据库
46. 说说什么是浅拷贝,什么是深拷贝?
深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。
深拷贝
深拷贝复制变量值,对于非基本类型的变量,则递归至基本类型变量后,再复制。 深拷贝后的对象与原来的对象是完全隔离的,互不影响, 对一个对象的修改并不会影响另一个对象。
浅拷贝
浅拷贝是会将对象的每个属性进行依次复制,但是当对象的属性值是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化。
可 以 使 用 for in 、 Object.assign 、 扩 展 运 算 符 ... 、Array.prototype.slice()、Array.prototype.concat() ,递归等递归函数实现深拷贝。
- 说地址栏输⼊ URL 敲下回⻋后发⽣了什么?
大致过程是这样的:
- DNS 解析
- TCP 连接
- 发送 HTTP 请求
- 服务器处理请求并返回需要的数据
- 浏览器解析渲染页面
- 连接结束
48. 说⼀下forEach、map、filter、reduce、some、every等⽅法的作⽤?
forEach (循环)
让数组的每一项分别去做一件事情
let a = [1,2,3];
a.forEach(function(value,i){
console.log("第" + (i + 1) + "项 :" + value)
})
// 第1项 :1
// 第2项 :2
// 第3项 :3
map (映射)
跟forEach功能类似, 但是map有返回值,产生一个新的数组,不改变原来数组
let a = [1,2,3];
a.map(function(value,i){
return value * 2
})
// 第1项 :2
// 第2项 :4
// 第3项 :6
reduce (累计)
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
前项和后项做计算
let a = [1, 2, 3];
a = a.reduce(function (prev, next) {
return prev + next // 1+2+3 = 6
})
filter (过滤)
过滤掉不符合条件的值, 返回新数组
let a = [1, 2, 3];
a = a.filter(function (value, i) {
return value > 2
})
console.log(a) // 3
every (全部)
判断每一个元素是否全部满足条件, 有的话返回true, 否则false
let a = [1, 2, 3];
a = a.every(function (value, i) {
return value > 2
})
console.log(a) // false
some (任意)
判断每一个元素是否有任意一个满足条件, 有的话返回true, 否则false
let a = [1, 2, 3];
a = a.some(function (value, i) {
return value > 2
})
console.log(a) // true
49.MongoDB如何排序【考核知识点:MongoDB sort】
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
- Ajax的实现流程是怎样的【考核知识点:XMLHttpRequest】
(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.
(3)设置响应HTTP请求状态变化的函数.
(4)发送HTTP请求.
(5)获取异步调用返回的数据.
(6)使用JavaScript和DOM实现局部刷新.
- 什么是中间件。【考核知识点:中间件概念】
中间件就是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理
- 什么是同源策略?
同源策略 是由NetScape提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能
所谓的同源,指的是协议,域名,端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,不能读写对方的资源。
- 什么是跨域及跨域的解决方案都有哪些?
跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。
解决方案:Jsonp, CORS, 代理,反向代理,哈希处理跨域,a链接处理跨域。
54. 说⼀下数组去重的⽅法有哪些?es6如何实现数组去重?
A.使用 indexOf 来循环判断一遍,
B.使用 Set 和 Map 数据结构,以 Set 为例,ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
55.Axios是什么?怎么使用?
axios 封装了原生的 XHR,让我们发送请求更为简单,
axios.get()或 axios.post().
56. 说⼀下箭头函数与普通函数的区别?
1>.箭头函数全都是匿名函数;普通函数可以是匿名函数,也可以有命名函数
2>.箭头函数没有原型对象,不能用作构造函数,不能使用new;普通函数可以用于构造函数,以此创建对象实例
3>.this指向问题:
- 在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。
- 而**箭头函数本身没有this**,但是它在声明时可以捕获其所在上下文的this供自己使用。也可以理解为它使用的是父级的this。
57. ES6的模板字符串怎么使用?
可以作为普通字符串;更多的是用来定义多行字符串;也可以在字符串中插入变量(常量)或表达式或函数调用,进行字符串内容扩充和计算。
如:
let title = '商品的总金额是';
let price = 29;
let num = 3;
let testStr = `<p>${title}${(price*num).toFixed(2)}元</p>`;
console.log(testStr);
- 说⼀下map⽅法、forEach⽅法、filter⽅法的作⽤以及他们之间的区别
Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数,加强版的for循环
主要使用场景:遍历数组的每个元素
filter() 方法创建一个新数组,其中填充了旧数组中通过特定测试的所有元素,作为函数提供。
- 介绍下 Set、Map的区别?
Map和Set查找速度都非常快,时间复杂度为O(1),而数组查找的时间复杂度为O(n)。
Map对象初始化的值为一个二维数组,Set对象初始化的值为一维数组。
Map对象和Set对象都不允许键重复(可以将Set对象的键想象成值)。
Map对象的键是不能改的,但是值能改,Set对象只能通过迭代器来更改值。
60. 谈一体你对promise的理解?
1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作 promise,帮助我们处理队列
resolve 作用是,将 Promise 对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject 作用是,将 Promise 对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。