nginx------------缓存功能 ip透传 负载均衡 (六)

一、http 协议反向代理

(一)反向代理示例:缓存功能

缓存功能可以加速访问,如果没有缓存关闭后端服务器后,图片将无法访问,缓存功能默认关闭,需要开启。

​
proxy_cache zone_name | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http   必须放在http语句中#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m;   #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
#示例:在http配置定义缓存信息proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(如:使用次数),一般1M可存放8000个左右的keyinactive=120s  #缓存有效时间  max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值
proxy_cache zone_name | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中示例:proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http   必须放在http语句中
proxy_cache_path path [levels=levels] [use_temp_path=on|off] 
keys_zone=zone_name:size [inactive=time] [max_size=size] [manager_files=number] 
[manager_sleep=time] [manager_threshold=time] [loader_files=number] 
[loader_sleep=time] [loader_threshold=time] [purger=on|off] 
[purger_files=number] [purger_sleep=time] [purger_threshold=time];#示例:在http配置定义缓存信息proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(如:使用次数),一般1M可存放8000个左右的keyinactive=120s  #缓存有效时间  max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m;   #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端#示例
proxy_cache_use_stale error http_502 http_503;proxy_cache_methods GET | HEAD | POST ...;
#对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存

实验:

① 主配置文件的http模块中添加配置 
proxy_cache_path /data/nginx/proyxcache   levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;

 7-1代理服务器

[root@localhost ~]# vim /apps/nginx/conf/nginx.conf
proxy_cache_path /data/nginx/proyxcache   levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
#开启缓存         缓存路径              生成文件夹比例是3级  从内存中借调20M专门存放缓存  有效期120秒    最大存储空间为1g
[root@localhost ~]# mkdir /data/nginx/
[root@localhost ~]# nginx -t

② 子配置文件添加配置

proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;

去7-3配置拖入图片:

③ 去浏览器访问代理端:

去7-1代理服务器查看缓存

如果把真实服务器关掉

再去浏览器访问,还是可以访问到的,这就是缓存用处哦

(1)如何清理nginx代理服务器缓存

方法1: rm -rf 缓存目录
方法2: 第三方扩展模块ngx_cache_purge

(2)自定义添加响应报文头部信息

Syntax: add_header name value [always];
Default;
Context: http,server,location,if in location#添加响应报文的自定义首部:
add_header name value [always];#示例:
add_header X-Via  $server_addr; #当前nginx主机的IP
add_header X-Cache $upstream_cache_status; #是否缓存命中
add_header X-Accel $server_name;  #客户访问的FQDNadd_header X-Via   
add_header X-Cache 
add_header X-Accel

小插曲:虚拟机要在主配置文件夹写子配置,子配置才可用

实验1:自定义添加响应报文头部信息

add_header X-Via     $server_addr;             #当前nginx主机ip

add_header X-Cache $upstream_cache_status;   #是否缓存命中,hit命中,miss未命中add_header X-Accel   $server_name;             #客户端访问的FQDN

add_header X-Via   $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;
server {listen 80;server_name www.lucky.com;root /data/;proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;add_header X-Via     $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel   $server_name;add_header  cxk  hero;location ~* /api {proxy_pass http://192.168.246.8;}location ~* \.(jpg|jpeg|png|gif|bmp)$ {proxy_pass http://192.168.246.9;}
}
① 添加子配置文件

 查看新增头部字段信息

(二)实现反向代理客户端 IP 透传

IP透传的定义:Client客户端通过http服务访问192.168.246.7的代理服务器,代理服务器通过proxy跳转至192.168.246.8后端真实服务器,最后在Web后端真实服务器应该可以看到真实客户端的访问IP和代理服务器的IP。

实验1:IP透传-------单向透传     7-1用nginx    7-2用apache

①在代理服务器7-1写配置文件:
server{ listen 80;       root /data/;server_name www.lucky.com;add_header X-Via   $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location  / {proxy_pass http://192.168.246.8;}
}

当前访问192.168.246.7代理服务器跳转的是192.168.246.8后端真实服务器

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部
②在后端服务器(真实服务器)配置:开启httpd服务,关闭防火墙,并实时查看访问日志

解释:

③ 客户端7-3访问代理服务器

我们使用第三台机器作为客户端,通过代理服务器去访问后端真实服务器 

再去查看日志:

显示了真实的访问主机的ip地址,开启ip透传后可以查看到客户端ip

实验2:IP透传----------多级代理     三台主机均为nginx服务

①去7-1代理服务器配置:
server{listen 80;root /data/;server_name www.lucky.com;add_header X-Via   $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location  / {proxy_pass http://192.168.246.8;}
}

②去7-2代理服务器配置:
[root@zzzcentos2 ~]#systemctl stop httpd
[root@zzzcentos2 ~]#yum install  epel-release -y
[root@zzzcentos2 ~]#yum install nginx -y
[root@zzzcentos2 ~]#systemctl restart nginx
[root@zzzcentos2 ~]#systemctl stop firewalld
[root@zzzcentos2 ~]#setenforce 0
[root@zzzcentos2 ~]#systemctl stop httpd
[root@zzzcentos2 ~]#systemctl restart nginx
[root@zzzcentos2 ~]#vim /etc/nginx/nginx.conf
[root@zzzcentos2 ~]#nginx -s reload
[root@zzzcentos2 ~]#systemctl restart nginx
[root@zzzcentos2 ~]#

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

#添加客户端IP和反向代理服务器IP到请求报文头部

③ 后端服务器7-3新建web文件
[root@zzzcentos3 html]#cd /usr/share/nginx/html
[root@zzzcentos3 html]#echo welcome 7-3 > index.html
[root@zzzcentos3 html]#cat index.html
welcome 7-3

④检测:

⑤查看日志

(三)http反向代理负载均衡

在上一个节中Nginx可以将客户端的请求转发至单台后端服务器但是无法转发至特定的一组的服务器,而且不能对后端服务器提供相应的服务器状态监测

Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能

配置格式:

#自定义一组服务器,配置在http块内
upstream   web { server 192.168.91.100    调度算法server 192.168.91.101
}location  / {
pass_proxy  http://web/
}
官方文档: https://nginx.org/en/docs/http/ngx_http_up
server address [parameters];
#配置一个后端web服务器,配置在upstream内,至少要有一个server服务器配置。
#server支持的parameters如下:
weight=number #设置权重,默认为1,实现类似于LVS中的WRR,WLC等
max_conns=number  #给当前后端server设置最大活动链接数,默认为0表示没有限制
max_fails=number  #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
fail_timeout=time #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒
backup  #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器 sorry server   自己不能转自己
down    #标记为down状态
resolve #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启Nginxhash KEY [consistent];
#基于指定请求报文中首部字段或者URI等key做hash计算,使consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用,consistent定义使用一致性hash运算,一
致性hash基于取模运算
hash $request_uri consistent; #基于用户请求的uri做hash
hash $cookie_sessionid  #基于cookie中的sessionid这个key进行hash调度,实现会话绑定ip_hash;
#源地址hash调度方法,基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计算,以实现会话保持least_conn;
#最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC

实验拓朴草图

我们做实验,为了看到效果,所以内容不一样

真实环境中,内容是一样的

负载均衡  实验拓朴图:

apache后端服务器开启httpd服务,关闭防火墙,分别建立web文件

[root@zzzcentos3 ~]#systemctl stop nginx
[root@zzzcentos3 ~]#systemctl start httpd
[root@zzzcentos3 ~]#cd /var/www/html/
[root@zzzcentos3 html]#echo welcome to 7-3 > index.html
[root@zzzcentos3 html]#cat index.html
welcome to 7-3

调度算法 :

①实验:轮询算法 (一人一次)   

默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流提供响应 

(1)7-1代理服务器编辑主配置文件

(2)apache后端服务器开启httpd服务,关闭防火墙,分别建立web文件

检测:

如果有一天服务器宕机

那么只会跳转好的那一台服务器

当其中一台宕机,就不去访问他了,直接跳过

那是因为 nginx 有 健康性检测 机制 就不去坏的服务器了

nginx服务较为只能,通过tcp三次握手可以检查服务器健康性,当无法完成连通性,默认将不会访问从而提示报错。当故障服务器恢复正常后,再次轮巡调度。

② 加权轮询算法

在默认轮询的基础上增加权重,weight=number。如果后端有2个服务器其中一个配置权重为weight=5另外一个不配置默认是1,则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为5:1

修改7-1代理服务器配置

检测:客户端7-1访问代理服务器

 ③最大链接数、连续检测和延迟上线

max_fails=3 ###连你3次,没反应就认为你宕机了

fail_timeout=30 ###上线后,给一个延迟时间30s,然后再连你

max_conns=10 ###最大连接数,只给你连10个

backup  #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器 sorry server   自己不能转自己 

 20     upstream web {21     server 192.168.246.8;22     server 192.168.246.9 max_conns=10 max_fails=3 fail_timeout=30s;23     }
#max_conns=number  #给当前后端server设置最大活动链接数,默认为0表示没有限制
#max_fails=number   后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
#fail_timeout=time 后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒。这样避免服务器刚上线不稳定再次导致业务失败
④备份服务器

当所有后端服务器不可用时,才会启用此备用服务器sorry server,自己不能转自己。

​
upstream web {hash $remote_addr;server 192.168.246.8;server 192.168.246.9 backup;}​

检测:客户端7-3访问代理服务器7-2    (7-2或7-1做客户机都可以)

如果服务器宕机,就会启用备用服务器

如果需要维护,具体看看在哪台写,可以写入写内容

⑤hash调度操作
(1)ip hash根据客户端ip:

ip hash  $remote_addr  客户端真实ip

基于客户端IP地址的负载均衡算法。它会根据客户端的IP地址,将该客户端的所有请求都发送到同一个后端服务器上。这样可以保证同一个客户端的所有请求都被发送到同一个后端服务器,从而保证了会话的一致性。

upstream web {hash $remote_addr;server 192.168.246.8;server 192.168.246.9;}

① 修改代理服务器配置

② 客户端访问

hash算法会将Web页面访问的缓存定在某一个代理服务器;但是hash算法有一个缺点就是hash还要除以权重,下次重载配置会更换Web服务的代理服务器

(2) url hash
 20     upstream web { 21     hash $request_uri;         #发送请求的地址,一旦确定不会轻易改变22     server 192.168.246.8;23     server 192.168.246.9;24     }

① 修改代理服务器配置

② 客户端访问

(3)cookie  
upstream web {hash $cookie_hello;server 192.168.246.8;server 192.168.246.9;}

① 修改代理服务器配置

② 客户端模拟加上cookie访问

也是固定会话

(4) fair

基于后端服务器的负载均衡算法。它会根据后端服务器的响应时间,将请求发送到响应时间最短的服务器上。这样可以保证请求被发送到处理能力最强的服务器上,从而提高系统的性能

二、总结

1、负载均衡

http {upstream web {server 192.168.246.8;server 192.168.246.9;}server {location / {proxy_pass http://web/;}
}
}

2、调度算法    

3、ip透传

4、httpd服务和nginx服务开启问题

三、stream 服务模块

官网

stream  实现反向代理功能, 是四层模块,只能控制tcp、udp

(实现反向代理功能,包括TCP协议代理)

 stream和http模块是同级

四层代理和七层代理的区别:
4层是指传输层的 TCP/UDP 协议

7层是指应用层的 HTTP 协议

代理原理:

     4层代理:使用 NAT(Network Address Translation)技术,即网络地址转换。即请求进来的时候,nginx 只修改数据包里面的目标IP、源IP、端口,然后就直接把数据包发给目标服务器(即nginx不知道请求的具体内容),目标服务器处理完成后,发给 nginx,nginx 数据包再做一次类似的修改,就返回给请求的客户端了。
     7层代理:nginx 读取并解析 Http 请求内容,然后将具体内容(请求行、请求头、空行、请求数据)转发到相应的服务器,转发的过程是:建立和目标机器的连接,然后转发请求,收到响应数据再转发给请求客户端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023 版王道单科书勘误汇总(3.30)

注:因2023版对题目编号做了优化“历年真题全部放最后、且按年份排序”,以方便大家根据需要保留某些年份的真题作为最后的模拟。所以造成了一些题目和解析的编号错误。 数据结构: P11 P20 P56 P278 P326 “2.”中第 3 行”题 5改成”9”,第6行”题 8”改成…

css3详解

一.什么是CSS3 CSS3是Cascading Style Sheets的第三个版本,是一种用于描述文档样式的语言(CSS3是CSS(层叠样式表)技术的升级版本)。它是前端开发中用于控制网页布局和样式的技术之一。CSS3引入了许多新的特性和功能&a…

hexo图片显示不出且图片路径错误/.com//

参考博客: hexo 图片显示问题及使用typora设置图片路径-CSDN博客 javascript - hexo 图片路径错误/.com// - SegmentFault 思否 先说如何让hexo图片成功地显示出来 Step1: 修改config设置 将 _config.yml 设置文件中的 post_asset_folder 修改为 true 这一步的作…

windows下安装cnpm

cnpm是淘宝团队开发的一个针对中国用户的npm镜像源,它是npm的一个定制版本。由于国外的npm源在国内访问速度较慢,所以cnpm镜像源可以提供更快的下载速度。cnpm的使用方式与npm基本相同,只需将npm替换为cnpm即可。 要想使用cnpm等先安装node.…

反序列化逃逸 [安洵杯 2019]easy_serialize_php1

打开题目 题目源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&qu…

sizeof 和 strlen的区别

sizeof sizeof是单目操作符,sizeof计算变量所栈内存空间大小,单位是字节,如果操作数是类型的话,会计算类型所占大小,sizeof指在乎占用内存空间大小不在乎内容是什么. int main() {int a 0;printf("%zd\n", sizeof(a));printf("%zd\n", sizeof a );printf…

巧【二叉搜索树的最近公共祖先】【二叉搜索树的性质】Leetcode 235. 二叉搜索树的最近公共祖先

【二叉搜索树的最近公共祖先】【二叉搜索树性质】Leetcode 235. 二叉搜索树的最近公共祖先 【巧】解法1 利用二叉搜索树有序的性质解法2 采用二叉树求最近公共祖先的方法——后序遍历 ---------------&#x1f388;&#x1f388;235. 二叉搜索树的最近公共祖先 题目链接&#x…

Springboot+vue的制造装备物联及生产管理ERP系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的制造装备物联及生产管理ERP系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的制造装备物联及生产管理ERP系统&#xff0c;采用M&#xff…

AI学习集合-前瞻

AI学习前瞻 工作岗位 算法工程师机器学习工程师图像算法工程师ai工程师NLP高级算法工程师 学习路线 应用场景 计算机视觉技术应用场景 自然语言应用 AI流程 AI拟人流程 机器人历史数据经验模型规律依据模型预测未来依据规律做出判断 AI基本流程 术语所用到的技术手段数据数…

javascript中对包含关系判断介绍

本文将为您详细讲解 JavaScript 中对包含关系的判断&#xff0c;包括数组、字符串等&#xff0c;并提供相应的代码例子。 1. 数组包含关系判断 在 JavaScript 中&#xff0c;数组包含关系判断通常使用 Array.prototype.includes() 方法。这个方法返回一个布尔值&#xff0c;表示…

mac 本地使用dockerfile启动 springboot项目

1.创建Dockerfile放在项目的根目录下 2.编写Dockerfile FROM openjdk:11 MAINTAINER ChengLinADD target/JiaLi-0.0.1-SNAPSHOT.jar /app.jar# 暴露 Spring Boot 应用的端口号 EXPOSE 8088 # 启动 Spring Boot 应用 CMD ["java", "-jar", "app.jar&q…

前端学习第四天-css提升

达标要求 掌握css复合选择器 块级元素和行内元素及行内块的区别? 哪些元素是块元素,行内元素及行内块元素? 熟练掌握display的用法 能够说出css三大特性 熟练运用背景样式 1. CSS复合选择器 复合选择器是由两个或多个基础选择器&#xff0c;通过不同的方式组合而成的…

vue2结合electron开发跨平台应用(桌面端应用)

1.确定nodejs和electron的版本号 确定nodejs和electron的版本号及其重要&#xff0c;因为electron的开发版本需要指定的nodejs版本支持。 本文安装测试使用的是: 1.node18.19.0 2.npm10.2.3 3.vue-cli5.0.8 4.electron29.0.0 2.创建vue2项目 vue create elctron29.0.0_no…

zotero | 多平台同步 | 坚果云

zotero注册登陆 打开zotero软件&#xff0c;mac电脑打开首选项&#xff0c;如下图所示&#xff1a; 然后点击同步选项&#xff0c;如下图所示&#xff0c;如果已经有账号&#xff0c;请登陆账号&#xff0c;无则注册账号之后再登陆&#xff1b; 注册坚果云账号 注册完坚果…

求最短路径之BF算法

介绍 全称Bellman-Ford算法&#xff0c;目的是求解有负权边的最短路径问题。 考虑环&#xff0c;根据环中边的边权之和的正负&#xff0c;将环分为零环、正环、负环。其中零环、正环不会影响最短路径的求解&#xff0c;而负环会影响最短路径的求解。 可用BF算法返回一个bool值…

暗黑大气MT苹果CMS MT主题源码-PC版适用于苹果CMS V10

苹果CMS MT主题是一款多功能的主题&#xff0c;适用于苹果CMS V10的暗黑大气风格。 地 址 &#xff1a; runruncode.com/houtai/19704.html 初次使用说明&#xff1a; 在后台设置中&#xff0c;选择MT主题&#xff0c;并在模板目录中填写HTML。 后台地址为&#xff1a;MT主题…

*JAVAWEB--maven*

一:介绍: maven是一种专门管理以及构建JAVA项目的一个工具,maven屹立这么久也是因为其有三个非常好用的功能: 1.提供标准化的项目结构 比方说平时我们编写JAVA项目的时候,如果想把原本在eclipse当中编写的项目导入到IDEA当中进行使用,就会导致报错,因为这两个的项目结构并不一样…

图神经网络实战——基于DeepWalk创建节点表示

图神经网络实战——基于DeepWalk创建节点表示 0. 前言1. Word2Vec1.1 CBOW 与 skip-gram1.2 构建 skip-gram 模型1.3 skip-gram 模型1.4 实现 Word2Vec 模型 2. DeepWalk 和随机行走3. 实现 DeepWalk小结系列链接 0. 前言 DeepWalk 是机器学习 (machine learning, ML) 技术在图…

[Angular 基础] - routing 路由(上)

[Angular 基础] - routing 路由(上) 之前部分 Angular 笔记&#xff1a; [Angular 基础] - 生命周期函数 [Angular 基础] - 自定义指令&#xff0c;深入学习 directive [Angular 基础] - service 服务 终于到 routing 了……这部分的内容比我想象的要复杂很多&#xff0c;果…

力扣每日一题 用队列实现栈 模拟

Problem: 225. 用队列实现栈 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 力扣官解 辅助队列存栈顶元素主队列存逆序序列 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( …