9.8解惑

173 阅读19分钟
首先的话明文是未被加密过的数据
密文时明文被某种加密算法加密之后,会变成密文
密钥是转换输入的参数 分为对称密钥和非对称密钥
对称密钥只有一个私钥 即双方使用同一个密钥去加密和解密数据 优点算法公开 加密解密速度快 适合对大数据量进行加密 但是容易被破解 安全管理困难
非对称加密:公钥加密 安全性好 私钥自己保存,
被公钥加密过的密文只能被私钥解密,过程如下:\
**明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文**\
被私钥加密过的密文只能被公钥解密,过程如下:\
**明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文**
非对称加密 加密和解密花费时间长,速度慢 只适合对少量数据进行加密 常见算法rsa

https通信过程:
https协议=http协议+ssl/tls协议 需要ssl/tls对数据进行加密和解密 需要用http对加密后的数据进行传输 
ssl即为安全套接层协议是为了网络通信提供安全及数据完整性的一种安全协议 
tls是安全传输层协议,是建立在ssl3.0协议规范之上的,因为他和ssl支持的加密算法不同所以不能同时出现 只能出现一个
而且https为了兼顾效率和速度同时使用了对称加密以及非对称加密
哦 是对数据进行对称加密 对该加密过程需要的私钥密钥(为了确保该密钥安全传输到服务器端)采用非对称加密对该密钥进行传输
也就是 对数据进行对称加密,对称加密所需要使用的密钥通过非对称加密传输

服务器端的公钥和私钥,用来进行非对称加密
客户端生成的随机密钥,用来进行对称加密

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。\
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

3.服务器将自己的公钥发送给客户端。

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

https不是应用层协议
https不是一种协议,而是一种实现方法 ssl和http才是协议
ssl是综合了会话层和表示层的一种协议
http属于应用层
http的数据载体数据时tcp协议属于传输层
ospf属于网络层的一种路由层 动态路由协议

osi七层架构:
物理层 比特流传输
数据链路层 封装成帧
网络层 路径选择 数据转发 ip arp rarp(地址解析协议)
传输层 传输端口到端口的报文 tcp udp 
会话层 两个节点建立维护释放面向用户的连接
表示层 数据格式的转换 压缩 解压缩 加密解密
应用层 面向用户 为用户提供常用的应用程序 (dns ftp http)没有https哦

tcp/ip五层架构
物理层 数据链路层 网络层 传输层 应用层
  • 所谓镜像站点,就是把一个互联网上的网站数据镜像在本地服务器,并保持本地服务器数据的同步更新,用户访问本地服务器即可获得远程服务器上同样的数据。
  • 在CAD里有镜像这个名词,意思是把图形参照着基本轴180度复制过去,网站的中国镜像说的是有中文网址.
  • 简单来说就是和照镜子似的,能看,但不是原版的。在网上内容完全相同而且同步更新的两个或多个服务器,除主服务器外,其余的都被称为镜像服务器。
  • 还有一种镜像就是把您经常需要用的光盘通过镜像软件或是虚拟光区软件制作成.iso文件储存在硬盘上,这.iso文件就是镜像文件.
  • 另:可能是系统的镜像,是用克隆软件Ghost将装有系统的分区克隆到另一分区作为备份文件,当系统盘有问题的时候,又用克隆软件将备份文件复到系统盘的过程。这样就可以省去了重装系统和各种驱动及常用软件的大量工作。
cdn加速原理
cdn就是内容分发网络
cdn=一个更智能的镜像+缓存+流量导流
提高用户访问网站的响应速度
因为cdn可以明显提高网络中信息流动的小笼包,从技术上全面解决由于网络带宽小 用户访问量大 网点分布不均 等问题,提高用户访问网站的响应速度

cdn具体流程就是用户通过输入的域名
先去找自己浏览器缓存看是否存在
然后去找系统缓存 也就是hosts'文件中
如果还是没有就去找本地dns解析缓存 如果还是没有就让本地dns服务器去找根dns服务器 根dns根据其域名去找对应dns服务器解析 然后返回给本地dns服务器目标域名 本地dns服务器再根据cdn算法和目标ip去寻找距离用户较近的ip并进行返回 这里面也用了重定向的技术使得ip换掉成为了cdn对应的ip
(最接近用户的最佳cdn节点)

想cdn实现需要依赖多种技术比如负载均衡(将网络的流量尽可能均匀分配到几个能完成相同任务的服务器或者网络节点上 提高性能) 缓存技术(代理缓存服务,使用重定向服务的透明代理缓存服务) 动态分发与复制技术(将占网站主体的大部分静态网页,图像等数据分发复制到各地的加速节点上)

注意是这几个技术的结合起来就是cdn 所以cdn依赖这几个技术的实现

cdn网络技术就是用户和服务器之间增加cache层 主要是通过接管dns来实现 将用户的请求引导到cache上并获得源服务器的数据 从而降低网络访问时间
dns主要是域名解析并且有缓存存着 dns有重定向 自动重定向哦 所以可能也会有dns劫持问题
始终都是域名去找ip 和用户自己ip无关 自己ip等到tcp连接才会用到 现在首要目的是找到服务端目标ip 而不是别的
传统的网络访问流程:
1.用户输入访问的域名,操作系统向本地dns查询域名的ip地址
2.本地dns向根dns查询域名的授权服务器 如果本地dns缓存过期的话
3.根dns将域名解析dns记录回应给本地dns
4.本地dns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址 这里并不是只能一层一层通信而是我知道了你的ip就可以和你对话 所以我去哪一层都可以 不要想树形结构通信 是一对一的这里 而且根dns给我的并不是具体我要的ip 而是他大范围发现第一个有缓存我目标域名的dns服务器的ip 让我自己去喝dns服务器通信得到我想要的ip
5.域名授权dns查询域名记录后,回应给本地dns
6.本地dns拿到域名ip地址回应给用户端
7.用户拿到域名ip地址 访问站点服务器
8.站点服务器应答请求 tcp http 将数据返回给客户端
{
    查询dns有迭代和递归两种方法我们一般结合去查询
    也许本地dns拿到的域范围的ip是可以自动找到目标ip的再请求的时候
    或者就是根dns会把目标ip直接返回掉 反正都是直接可以请求到的 将记录返回给本地dns就可 除非不存在那就是所有dns服务器里都没有存着缓存 dns服务器里面存ip和域名 一堆的
    应该是dns服务器把ip返回了我预测!!!!
    明明就是根dns顺手的事 所以当然返回了 而且我都查询了你还想让我在查询一次吗
    https://www.cnblogs.com/vickey-wu/p/6557439.html
    
}
用cdn缓存后的网站访问过程
1.用户输入访问的域名 操作系统向本地dns查询域名的ip地址
2.本地dns向root dns查询域名的授权服务器(如果本地缓存过期)
3.根dns得到域名解析dns记录回应给本地dns
4.本地dns得到域名授权的dns记录后继续向域名解析dns查询域名的ip地址
5.域名解析dns查询域名记录后 回应给本地dns
6.本地dns得到域名记录后,把目标ip传给只能调度dns查询
7.智能的查ip的dns系统根据算法和策略比如静态拓扑 将最适合的cdn节点ip地址回应给本地dns 期间还进行了数据传送什么的吧 具体很复杂
8.本地dns得到此近的ip之后 会给用户端
9访问

cdn分为推拉两种方式,推是服务器将内容推到cdn节点上,拉是cdn在第一次接受请求的时候从服务器拉取资源进行响应并保存,当资源在cdn缓存之后,如果服务器上的资源发生变化,cdn节点是不会知道的,(所以进行了一些措施吧 不知道的细节就别说出来 而且也别说但是我不知道他怎么去那啥的 直接带过去就好 除非hr问 )除非缓存时间到期重新拉取或者修改新资源的访问
{
    https://blog.csdn.net/xiangzhihong8/article/details/83147542

    dns主要使用udp协议 
    本地dns里面有缓存这根dns服务器的ip所以可以去找
    根dns可以递归往下找 而且递归的话每一层都有缓存 找到了就返回 由根dns去告诉本地dns 我来啦
    每一个dns服务器都存了13个根dns服务器的域名和ip
    当然本地dns服务器也存了
    根dns--顶级域dns--权威dns
    返回信息就是soa记录和ns记录结合返回 soa记录是相应域的dns服务器的域名 ns记录是其dns服务器对应的ip
    目标ip其实也要给别人发送数据所以也需要获取别人ip所以自己也有本地dns以及缓存等 本地dns会存着很多自己的ip 所以也是能通过大范围的域名找到其ip
    况且我返回了ip 我把小区都告诉你了
    也可能这个返回的是本域名 因为ip对应一个域名
    只不过我找的时候没必要找自己 而是去小区找 dns是寻找所以初始点一定是比自己大的 没必要先找自己 而且浏览器缓存中有自己  所以最后返回的soa记录应该是自己的域名 自己的 之前没出现过的概念也就是自己的缓存 (因为要验证 不然只返回目标ip 我特么怎么知道有没有错 老子要安全谨慎)
    
    cdn是一种优化措施所以可能根dns那边并没扩展这方面业务
}
你别忘了cdn还要发数据到临近服务器所以不只是重定向一个功能 

  • 指纹可以理解为证书身份的唯一代表,是用来保证证书的完整性的,确保证书没有被修改过。证书在发布之前,CA机构对证书的内容用指纹算法(一般是sha1或sha256)计算得到一个hash值,这个hash值就是指纹。为什么用hash值作为证书的身份代表呢?首先,hash值具有不可逆性,也就是说无法通过hash值得出原来的信息内容;其次,hash值具有唯一性,即hash计算可以保证不同的内容一定得到不同的hash值。
  • 签名是在信息后面加上的一段数字串,可以证明该信息有没有被修改过。数字证书在发布的时候,CA机构将证书的指纹和指纹算法通过自己的私钥加密得到的就是证书的签名了
  • 数字证书是Https实现安全传输的基础,它是由权威的CA机构颁发的,证书的主要内容有:公钥(Public Key)、ISSUER(证书的发布机构)、Subject(证书持有者)、证书有效期、签名算法、指纹及指纹算法。要实现自己的数据安全传输必须向权威机构申请数字证书 相当于有一把安全密钥
  • blog.csdn.net/liuxingrong…
常见排序算法:
冒泡 时间复杂度o(n2) 空间O(1) 找最大的先
选择排序 找最小的先 时间n2 空间o(1) 因为分配的空间只有传入的数组和两个固定i j变量 所以是1呀 
传入的数组不论n是多少但他是常量 我们看的是分配空间会不会随着n变
传参的数空间不管 只看会不会根据传入的参数的不同 函数体内分配的临时空间改变 这么看是不会的

快排 找一个数 前面比她小 后面比她大 然后再分割排序
归并排序 时间复杂度是nlogn 空间是n 先递归成1 1然后两两合并 如此最后就有序了
堆排序 空间是o1 时间时nlogn 完全二叉树 最大值或者最小值就是堆顶 然后一个一个pop就可以得到序列 以此去推的话也可以建造一颗二叉搜索树然后中序遍历 当然堆排序是他的倒过来的版本 他是先建一颗树然后随便拿到顶 pop 他会重新找顶然后pop

快排??又忘了
快排 时间nlogn 空间logn

既然时间复杂度不是用来计算程序具体耗时的,那么我也应该明白,空间复杂度也不是用来计算程序实际占用的空间的。

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。
空间复杂度比较常用的有:O(1)、O(n)、O(n²)
看外界的变量会不会对占用空间进行影响 像根据n来new数组那就是o(n)因为会根据外界n来分配变量空间
如果不被影响就是o(1) 看会因为外界变量n而分配根据n来分配变化的多少变量空间
传入的数组不是on 是o1 因为他已经传入了 最后操作临时分配空间不会因为n而变化 
https://blog.csdn.net/m0_37962600/article/details/81475585?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-3.no_search_link

随机数的那个 01两个数组值得话就不可以了??
没有二分排序 只有二分查找

js数组方法:
改变原数组的:
pop
push
shift
reverse
sort
unshift
splice
不改变原数组的
concat
join
slice

js的各种遍历方法:
foreach
filter 
map
includes
find
some
every
不要给人死记硬背的感觉
reduce

上面所有需要的参数 使用方法?

和http1.1比起来http2.0的优点
http/2采用二进制格式而非文本格式
是完全多路复用的 而不是有序并阻塞的 只需一个连接即可实现并行
采用报头压缩 降低了开销
他让服务器可以将响应主动推送到客户端缓存中
多路复用对前端优化是有很大的帮助的

在http1.0协议中我们建立一次http连接必须要经过三次握手四次挥手 这个过程在一次请求过程中占用了相当多的时间,而逻辑上是非必须的 因为不间断的请求数据,第一次建立连接是正常的以后就占用这个通道 下载其他文件这样效率高
为了解决这个问题http1.1加上了keep-alive的话 他允许我们建立一次http连接来返回多次请求数据
http1.1是基于串行文件传输数据因此这些请求必须是有序的 一个接收到了才可以下一个 一条马路只能允许一个人 有点不道德 完全让他分块有序号然后并行的
这样的话keep-alive只是减少了连接的时间,而获取数据的时间并没有减少
由于浏览器本身的限制,最大请求数是6 那么服务器可以承载的最高并发数是50
而http2引入了二进制数据帧和流的概念 其中帧对数据进行顺序标识 这样浏览器收到数据之后可以按照序列对数据进行合并不会出现数据错乱的问题 那么这些数据发送顺序无所谓可以并发可以随便发 
之前我怕来的数据没有顺序所以不敢并发 只能单个发很影响效率
其实仔细想想 我向服务器发送请求的话 当然可以并发 因为没有前置性 有前置性没有带用户数据的话前端我就拦截了
所以多个请求时可以并发的 服务器没有难度可以返回需要的数据
所以之间思想很局限 为什么不可以并行呢
并发 数据块的话 那等到那一端最后合并起来就行了

可以http请求html也可以请求数据 网页也是要请求的呀 还有数据
而且http2对同一域名下所有请求都是基于流的,也就是说同一域名不管访问多少文件也只是建立一路连接 一个道路 因此最大并发就有提升了??

https://www.jianshu.com/p/ff8f0bd78942
https:443
http:40HTTP1.1中新增了24个错误状态响应码,如409Conflict)表示请求的资源与资源的当前状态发生冲突;410Gone)表示服务器上的某个资源被永久性的删除。

??具体区别

http1.1新增了五中请求方法
options put patch delete trace connect
js中sort的话 是返回值小于0就不换 大于0就换
所以打乱数据可以:
function f(arr){
  arr.sort((a,b)=>Math.random()-0.5)
  return arr
 }
获得下标的话是Math.floor(Math.random()*len)
这个随机数可能等于0 但一定小于1!!!草
服了

floor是返回小于参数值得最大整数 别忘了负数

js是脚本语言
也是一门编译语言

1.临界资源
  临界资源是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。
2.临界区:
  每个进程中访问临界资源的那段代码称为临界区(criticalsection),每次只允许一个进程进入临界区,进入后,不允许其他进程进入。
 
浏览器模式有标准模式和混杂模式
https://blog.csdn.net/M_Estelle/article/details/117004609?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.no_search_link&spm=1001.2101.3001.4242
?

html全局属性:
class
id
lang
style
data-
accesskey
都是

// console.log('1'-'1') 报错
console.log(null=={}) //false
// null只和undefined相同
let t=0.1,t1=0.1
console.log([t==t1])//[ true ]

*信号量*(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个*信号量*;一旦该关键代码段完成了,那么该线程必须释放*信号量*。signal释放 wait等待资源

255.255.254.0掩码为23位,主机位一共是9位,所以有128个子网。 每个子网能允许的主机数为510个。 所以可用的主机数量为128x510=65280个

rack是一种新的基于时间的丢包检测算法
重传也就是  是tcp的一个算法

微信小程序?
uniapp?原生?
背景为自己头像的模糊表示?

https://blog.csdn.net/cuiji4724/article/details/81737396

mvc mvvm'
https://blog.csdn.net/cuiji4724/article/details/81737396