学习任务1:
- 完成postman,nginx代理的学习
- 完成ECMAScript/typescript的入门学习
学习任务2:
- 熟悉es6的基本数据类型和常见语法
- 熟悉ts的类型系统和常见语法
Nginx
定义
是一个十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个支持IMAP/POP/SMTP的代理服务器。
具有的优点
1.具有很好的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗。
2.它响应静态页面的速度非常快,对于proxy和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts,适合用来做mongrel clusters的前端。
3.当然最主要的有点是性能优化方面,实现上非常注重效率,有报告标明能支持高达50000个并发连接数。
4.Nginx采用的master-salve模型,能够充分利用SMP的优势,且能够减少工作进程在磁盘IO上的阻塞延迟,当采用select()/poll()调用时,还可以限制每个进程的连接数
为什么能够处理较多的并发连接?
Nginx采取分段资源分配技术,使得它的CPU与内存占用率非常低,这样子即使同时接受到很多的恶意请求DOS攻击都可以有效的处理。
Nginx的配置文件包括
全局块:配置影响nginx全局的指令,一般有运行nginx服务器的用户组,进程ID存放路径等
event块:配置影响nginx服务器或与用户的网络连接。如每个进程的最大连接数,选取那种事件驱动模型处理连接请求等
http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,日志自定义等,是否使用snedfile,传输文件,连接超时时间,单连接请求数
upstream块:负载均衡配置模块
server块:配置虚拟主机的相关参数
location块:配置请求的路由,以及各种页面的处理情况
nginx -t | 查看配置文件是否有错误 |
nginx -s -reload | 重启nginx,重新加载nginx |
nginx -s quit | 关闭nginx |
利用Nginx搭建静态服务器:
1.下载安装nginx,这里选择安装的是nginx1.17.6版本,下载完成之后解解压安装在H盘下。
2.启动方式:
①直接点击nginx.exe文件,之后在浏览器访问默认的
http://localhost/
②打开cmd控制台,使用指令进入到文件夹目录下,然后代用exe文件
4
运行结果展示,证明nginx能够正常运行
修改与nginx.exe同目录下的nginx.conf配置文件,进行处理器数量,日志路径,Pid文件路径等的修改
重启nginx.exe之后,在地址兰输入http://127.0.0.1:8008/work/
结果如下,可以看到和work目录下的内容一致
nginx虚拟机
1.添加两个基于不同域名的虚拟主机,域名分别为www.test1.com和www.test2.com,
2.相应的再html文件下编写两个虚拟主机的index.html页面文件
3.修改自己电脑的本地DNS文件目录,C:\Windows\System32\drivers\etc\hosts文件打开修改其中的localhost域名
在浏览器中分别打开www.test1.com:8088 和www.test2.com:8088地址可以分别对两个虚拟主机进行访问。
nginx反向代理
正向代理:是一个位于客户端和原始服务器之间的服务器,为了从原始服务器区的内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理。
反向代理:是指以代理服务器来接受Internet上的连接请求,探后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给客户端,此时代理服务器对外就表象为一个反向代理服务器。
负载均衡:在服务器集群中,nginx起到了一个代理服务器的角色,为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器,目前nginx服务器的upstream支持6中方式的分配
轮询 | 默认方式 |
weight | 权重方式 |
ip_hash | 根据IP分配方式 |
least_conn | 最少连接方式 |
fair(第三方) | 响应事件方式 |
url_hash | 根据URL分配方式 |
POSTMAN:
介绍:postman是一款强大的http调试软件
可以进行请求测试,输入网址后向目的服务器发送请求并可以检测保存返回的结果。
还能进行文件上传测试、压力测试。
ES6常见数据类型
基本数据类型
ES6的基本数据类型有7种:
Number:数值类型
String:字符串类型
Boolean:布尔类型
null:空值
undefined:未定义,表示变量未定义
symbol:符号类型
bigint:大整数类型
引用数据类型:
object:对象
function :函数
object有包括有:普通对象,数组对象(array),正则对象(regexp),日期对象(date),Math数学函数对象
其中symbol作为ES6新增的一种数据类型,本质上是表示一个唯一标识,每次创建一个symbol,它所代表的值都不可能重复。理论上symbol的存在只有一个意义:用于必须使用唯一值的场景。
1.number
// number数据类型,采用的IEE 754格式表示整数和浮点值
// 不同的数值类型有不同的数值字面量格式
// 最基本的数值字面量格式是十进制,也可以是八进制(0o开头),十六进制(0x开头)
console.log("常见的整数")
let intNum = 55; //十进制整数55
console.log("十进制整数:"+intNum);
let octalNum = 0o70; //八进制整数56
console.log("八进制整数:"+octalNum);
let hexNum = 0x39; //十六进制整数57
console.log("十六进制整数:"+hexNum);
// 浮点值数值中必须包含小数点,且小数点后必须至少有一个数字
// 对于非常大的或非常小的数值,浮点值可以科学计数法表示
// 浮点值的精确度虽然很高但是在算数计算中远不如整数准确
console.log("浮点数")
let floatNum1 = 1.1;
let floatNum2 = 0.1;
let floatNum3 = .1; // 有效,但不推荐
let floatNum4 = 3.125e7; // 等于 31250000
let a = 0.1, b = 0.2;
console.log(a + b); //0.30000000000000004 !== 0.3
// 有一个特殊的数值NaN,意思是"不是数值",用来表示本来要返回数值的操作失败了
// NaN具有几个特殊的属性:
// 1.任何设计NaN的操作始终返回NaN
// 2.NaN不等于包含NaN在内的任何值
// 3.NaN通过isNaN来判断收到的参数是否"不是数值"
console.log("NaN 相关的操作")
console.log(0/0); //NaN
console.log(5/0); //Infinity
console.log(5/-0); //-Infinity
console.log(NaN == NaN); //false
console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false,10是数值
console.log(isNaN("10")); //false,"10"可以转换为数值10
console.log(isNaN("ES")); //true,"ES"无法转换为数值
console.log(isNaN(true)); //false,true可以转换为数值1,false可以转换为数值0
// 数值转换
// Number()
// 布尔值,true转换为1 ,false转换为0
// null返回0
// undefined 返回NaN
// 字符串:
// 包含有数值字符,包括数值字符前面带有-,+的情况,转换成十进制数值
// 包含有效的浮点值格式"1.1",转换成相应的浮点值
// 包含有有效的十六进制格式如"0xf",则会转换为与该十六进制值对应的十进制整数值
// 如果是空字符串(不包含字符),则返回0。
// 其他情况返回NaN
console.log("number数值转换")
let num1 = Number("Hello world!"); // NaN
console.log(num1);
let num2 = Number(""); // 0
consolee.log(num2);
let num3 = Number("000011"); // 11
console.log(num3)
let num4 = Number(true); // 1
console.log(num4)
// // parseInt()
// parseFloat()
2.string
string 字符类型表示0或多个16位Unicode字符序列,字符串可以使用单双引号来表示
let name1 = "Jack";
console.log(name1);
let name2 = 'Mary';
// 字符串一旦创建,其值就不可以改变,若要修改必须先销毁原始的字符串
// 然后将包含新值的另一个字符串保存到该变量
// let name1 = "jack2" // 报错,无法重新声明
name1 = name1 +"javascipt"
console.log(name1)
// String()转型函数
// 转换时遵循的原则是:
// 1.如果值有toString()方法,则调用该方法(不传参数)并返回结果。
// 2.如果值是null,返回"null"
// 3.如果值是undefined,返回"undefined"
let value1 = 10;
let value2 = true;
let value3 = null;
let value4;
console.log(String(value1)); // "10"
console.log(String(value2)); // "true"
console.log(String(value3)); // "null"
console.log(String(value4)); // "undefined"
3.Boolean类型值
Boolean(布尔值)类型有两个字面值:true 和false。这两个布尔值不同于数值,因此true 不等于1,false 不等于0。下面是其他类型的值与boolean类型值的等价关系
数据类型 | 为true | 为false |
Boolean | true | false |
string | 非空 | 空字符串 |
number | 非0 | 0、NaN |
object | 任意对象 | null |
undefined | 无true情况 | undefined |
let found = true;
let lost =false;
// Boolean()可以将其他类型的值转换等价的布尔值形式
let message = "Hello ECMAScript!";
console.log(typeof message); //string
let messageAsBoolean = Boolean(message);
console.log(typeof messageAsBoolean); //boolean
4.undefined
使用 var 或 let 声明了变量但没有初始化时,就相当于给变量赋予了undefined 值
let message1;
console.log(message1,typeof message1); // undefined 'undefined'
// 包含undefined值的变量和未定义变量是有区别的
// 已声明但是未初始化的变量,在执行的consol.log()的时候会指出“undefined”
// 未声明的变量只能执行typeof,执行完的结果就是字符“undefined”
let message;
console.log(message); //undefined
console.log(age); //报错
console.log(typeof message); //undefined
console.log(typeof age); //undefined
5.null
NULl类型同样只有一个值,特殊值null。
1.typeof传入null会返回““object”
2.undefined值是有null值派生而成的,因此它们被定义为表面上相等,但是在全等比较的时候,它们是不同的。
let name1 = null;
console.log("typeof name1:",typeof name1);
// object
console.log("null == undefined",null == undefined);
// true
console.log("null === undefined",null === undefined);
// false
6.symbol数据类型
symbo(符号)是ES6中新增的数据类型。symbol是原始值,且symbol实例是唯一不可变的
。用途主要是确保对象属性使用唯一标识符,不会发生属性冲突的危险
符号需要使用Symbol()函数初始化,因为符号本事是原始类型,所以typeof操作符对符号返回symbol。调用Symbol()函数时,也可以传入一个字符串数作为对符号的藐视,将来可以通过这个字符串来调试代码,但是,这个字符串参数与符号定义或标识完全无关
let sym1 = Symbol();
let sym2 = Symbol();
console.log(sym1,sym2); //Symbol() Symbol()
console.log(sym1 == sym2); //false
let sym3 = Symbol('foo');
let sym4 = Symbol('foo');
console.log(sym3 == sym4); //false
// 可以看出,symbol与引用一般,变量相当于指针,指向的地址是不相同的
// 注意:Symbol()函数不能与new关键字一起作为构造函数使用
7.BigInt
BigInt是一种数字类型的数据,它可以标识大于2^53-1的整数,使用BigInt可以安全地存储和操作大整数,即使这个数已经超出了Number能够表示的安全整数范围。
定义方式:
1.直接BigInt(数值)
2.在整数字面量的后面加n来定义一个BigInt
特点:
1.不能想Number一样使用Math对象中的方法
2.不能和任何Number实例混合运算,需要转换成一种类型后运算
3.BigInt转换成number时候可能会出现精度丢失现象
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991); // 9007199254740991n
const hugeString = BigInt("9007199254740991"); // 9007199254740991n
const hugeHex = BigInt("0x1fffffffffffff"); // 9007199254740991n
const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111");
// 9007199254740991n
8.object
对象被定义为一组属性的无序结合,对于每个属性或方法都由一个名称来标识,