作者:snailslowdx_619 | 来源:互联网 | 2023-09-15 11:01
开源pig学习-以下仅供个人学习记录使用,有问题请见谅javahost将主机域名解析到相应的ip地址上。比如在host中配置了www.youtube.comip是百度的ip
以下仅供个人学习记录使用,有问题请见谅
java
-
host 将主机域名解析到相应的ip地址上。 比如在host中配置了 www.youtube.com ip是百度的ip,然后去ping youtube,返回的ip是百度的ip。
好处:1.这样以后在项目中只需要使用域名去访问就可以,host统一管理ip,做环境切换。
- 方便一键部署。
-
npm cnpm(淘宝的) npm install -g cnpm --registry=https://registry.npm.taobao.org
安装详情 参考连接 https://www.jianshu.com/p/fbd87ad45631
-
java流 https://www.yuque.com/pig4cloud/pig/yewg8z
流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合。 众所周知,集合操作非常麻烦,若要对集合进行筛选、投影,需要写大量的代码,而流是以声明的形式操作集合,它就像 SQL语句,我们只需告诉流需要对集合进行什么操作,它就会自动进行操作,并将执行结果交给你,无需我们自己手写代码。 因此,流的集合操作对我们来说是透明的,我们只需向流下达命令,它就会自动把我们想要的结果给我们。 由于操作过程完全由Java处理,因此它可以根据当前硬件环境选择最优的方法处理,我们也无需编写复杂又容易 出错的多线程代码了。
操作:
创建流 集合,数组,值,文件 list.stream();
常见方法:
/**
Consumer :消费型接口
void accept(T t); 给一个值不返回参数
BiConsumer 消费两个参数 不返回值
R apply(T t, U u);
Supplier :供给型接口
T get(); 不给值返回参数
Function :函数型接口
R apply(T t); 给一个值返回一个参数
BiFunction 传入两个参数的函数
R apply(T t, U u);
Predicate : 断言型接口
boolean test(T t); 判断类型
BiPredicate 两个参数的断言
boolean test(T t, U u);
*/
stream.filter((参数)->{判断条件返回true、flase}); //对每个 参数进行过滤
stream.distinct() ; //对结果去重
stream.limit(); //返回前几个元素
stream.map(函数(参数)); //将元素重新组成一个新的流返回。函数是给一个值然后返回一个值
allMatch--检查匹配所有元素
anyMatch--检查是否至少匹配一个元素
noneMatch--检查是否没有匹配所有元素
findAny--返回当前流中的任意元素
count--返回流中的元素的总个数
max--返回流中的最大值
min--返回流中的最小值
//将字符串集合 转成逗号拼接的一个字符串
String[] a = new String[]{"aa","bb","cc","dd"};
List list = Arrays.asList(a);
String.join("," , a); 或者 String.join(",", list)
//流中的groupby。在终端操作的Collectors中,返回的是map,key是分组的参数,值是分组后的数据
Map> collect = employees.stream()
.collect(Collectors.groupingBy(Employee::getAge));
session token jwt oauth2
认证:
就是用户登录系统,如何判断你就是你,比如输入用户名密码正确,那么就知道你是你了。还有手机号,如果输入的手机号能收到验证码,也能判断为你是你。
授权:
不同用户权限不同,常用授权方式,COOKIE,session,token,oauth
凭证 :
用来标识访问者身份,就像每个人都有一个身份证,乘车凭身份证进站一样。
COOKIE:
为何产生?http是无状态协议,每次请求都是一次全新的请求,用户在登录系统之后,不可能每次发请求都要走登录验证流程,就需要有个东西存储一下用户状态,服务器也需要知道是谁在访问自己,进行会话跟踪。这样每次发送请求时,不必从登录开始发送那么多一长串的请求,每次请求携带一个登陆后的参数即可。COOKIE应运而生。COOKIE存储在客户端浏览器,不能跨域,只能在单一域名使用。
COOKIE存储信息:1.sessionId 2.此sessionId属于哪个域名,只能在该域名下使用
session:
基于COOKIE实现的,存储在服务器。浏览器在第一次访问时,服务器会创建session,并返回给客户端一个sessionId,以后浏览器每次发送请求COOKIE都要携带sessionId,服务器判断sessionId属于哪个用户,然后去执行后序操作。浏览器在之后访问这个域名时,会自动判断该域名下是否有COOKIE,如果有浏览器会自动将COOKIE发送给服务器。
COOKIE和session区别:
1.COOKIE只能存储字符串,并且大小不能超过4k
session可以存储任意类型,并且大小无限制。如果服务器访问人数过多,session将过多的消耗服务器资源。---->token应运而生。
token:
服务启端无状态化,并且不用存储token信息(客户端存储),只负责解析token,用解析时间换取session的存储空间,减轻服务器压力和频繁查库。
refresh_token:
另外一种token,当token过期时,不让用户退出重新输入用户名密码,让用户无感知。
存储在数据库中,只有当token过期是,refresh_token才会起作用。

jwt:不使用COOKIE,所以不存在跨域问题。自包含会话信息,不用查库。
把它放在 COOKIE 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求头信息的 Authorization 字段里,使用 Bearer 模式添加 JWT.
那这个Authorization 字段中的信息,从哪里获取?
jwt和token区别:
相同点:都是令牌,无状态化,记录用户信息的。
不同点:jwt自包含用户信息和加密数据,token还要查询数据库获取用户详细信息。
nacos
注册中心 服务注册和发现
- 正向代理 (服务端暴露,客户端隐藏)将客户端请求代理掉
在代理过程中,隐藏了真实的客户端信息,服务端不知道真实的客户端是谁,客户端的请求会被代理服务器代理请求。
举个例子:小王找马云借钱,小王借不到。然后小王通过老王找马云借钱,马云把钱借给了老王,老王把钱给了小王,马云并不知道钱真正给了谁。
- 反向代理(代理服务端,服务端被隐藏了)
举个例子:打电话给10086,你不需要知道对面客服在东北还是在广东,是男的还是女的,肯定有人会接通你的电话。在这个过程中,服务端真正的提供服务者 客户端是不知道的,也不用知道,客户端关心的是服务本身。
提到反向代理,nginx必提。当有很多服务需要被代理时,配置nginx是十分繁琐的,要将每个节点的信息实时维护进config文件中,nacos注册中心应运而生。
通过服务名字去注册中心注册,负载均衡根据既定规则 选择一个服务将http服务的ip 和 port返回给调用方。
配置中心
产生原因:静态化配置(直接在项目的application.yml配置)参数过多。时效性,改了配置,要重启所有服务。微服务中无法集中管理。不能区分环境,每次切换要设置不同参数。无法回滚配置,和追溯问题,
使用
以源码方式启动,方便在项目中以main方式运行,还可以保证server和client版本一致(不知道如何保证)。
- 下载源码,保留conslole目录,
loadBalancer负载均衡器,提供客户端负载均衡算法
sentinel
熔断作用
当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终防止产生雪崩的效果,熔断器应运而生。
机制:1.通过并发线程数进行限制,当线程数堆积到一定的数量之后,对该资源的请求就都会被拒绝。
2.通过响应时间对资源进行降级。
流量控制
系统处理能力有限,但流量不稳定,我们需要根据系统的处理能力进行流量控制,流量控制调配器应运而生。
流量控制有以下几个角度:
- 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
- 运行指标,例如 QPS、线程池、系统负载等;
Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。
gateway网关
业务网关:路由转发 + 过滤器。
- 请求接入: 作为所有 API 接口服务请求的接入点,管理所有的接入请求;
- 业务聚合: 作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用;
- 中介策略: 实现安全、验证、路由、过滤、流控,缓存等策略,进行一些必要的中介处理;
- 统一管理: 提供配置管理工具,对所有 API 服务的调用生命周期和相应的中介策略进行统一管理。