MY学习我的达瓦达瓦

旧的方案是调用虚拟机的脚本;
使用双子快传收到文件后,提出的方案是触发通知,由应用去把文件写入数据库
但今天讨论说docker能存储的空间有限,如果使用流在线读数据有可能超时,所以要使用虚拟机。
因此,方案变成了:双子快传收到文件触发通知->通知启动应用去调用虚拟机的脚本->虚拟机的脚本下载文件并写入数据库;
但还不确定这样行不行

IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。

selelct
select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点。
1.select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,
在Linux上一般为1024,可以通过修改宏定义甚至重新编译内核的方式提升这一限制,但是这样也会造成效率的降低。
2.select是水平触发
应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作。那么之后select调用还是会将这些文件描述符返回,通知进程。
3.轮回时间效率低
select返回的是整个数组的句柄。应用程序需要遍历整个数组才知道谁发生了变化。轮询代价大。

poll
pollfd结构包含了要监视的event和发生的event,不再使用select“参数-值”传递的方式。
同时,pollfd并没有最大数量限制(但是数量过大后性能也是会下降)。 和select函数一样,poll返回后,需要轮询pollfd来获取就绪的描述符。

epoll

  1. 监视的描述符数量不受限制,它所支持的FD上限是最大可以打开文件的数目,
  2. epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,
    当进程调用epoll_wait() 时便得到通知。

epoll对文件描述符的操作有两种模式:LT(level trigger)和ET(edge trigger)
LT模式:当epoll_wait检测到描述符事件发生并将此事件通知应用程序,应用程序可以不立即处理该事件。
下次调用epoll_wait时,会再次响应应用程序并通知此事件。

ET模式:当epoll_wait检测到描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件。
如果不处理,下次调用epoll_wait时,不会再次响应应用程序并通知此事件。

https://blog.csdn.net/chenchunlin526/article/details/69939337
POJO是一个简单的、普通Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色,
不继承或不实现任何其它Java框架的类或接口。

JavaBean是一个遵循特定写法的Java类,是一种Java语言编写的可重用组件,它的方法命名,构造及行为必须符合特定的约定:
1、这个类必须具有一个公共的(public)无参构造函数;
2、所有属性私有化(private);
3、私有化的属性必须通过public类型的方法(getter和setter)暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。
4、这个类应是可序列化的。(比如可以实现Serializable 接口,用于实现bean的持久性)

Bean的含义是可重复使用的Java组件。
所谓组件就是一个由可以自行进行内部管理的一个或几个类所组成、外界不了解其内部信息和运行方式的群体。使用它的对象只能通过接口来操作。

DTO (TO) :Data Transfer Object 数据传输对象。
主要用于远程调用等需要大量传输对象的地方。

Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象

数据湖
平台 定位 存储 选型
核心仓库 结构化数据存储中心和批处理加工中心 业务价值较高的结构化数据 Teradata GaussDB
仓外集市 受外部约束的结构化数据存储中心和批处理加工中心 特定主题、业务领域的结构化数据 DB2、Oracle、GBase
离线分析平台 非结构化数据存储中心和批处理加工中心 参与加工解析的非结构化数据 Hive、Hadoop(huawei fusioninsight)
历史存储 远期历史结构化数据 远期历史结构化数据 Impala、Hadoop
对象存储 远期历史非结构化数据 远期历史非结构化数据 Elastic Clould Storage
准实时处理平台 流式数据的加工引擎 加工窗口内的流式数据 SparkStream、Hadoop(huawei fusioninsight)

ACS Azure container service 是一个完整的云平台,提供的最重要资源是基础设施,提供了多种不同的编排工具,
集成了开发、测试、部署以及管理应用程序的所需的云服务
支持kubernates、DC/OS、Swarm等多种容器编排工具
DC Docker-compose 管理当前主机的Docker;根据配置文件启动容器;
Docker Swarm 管理多主机上的Docke容器
kubernates 一个开源的,管理被容器化的应用,提供应用部署,规划,更新,维护的一种机制。

金融交易云平台
ZZ1框架 :使用JDK底层基础的socket,JDBC,Servlet等,通过开发管理平台进行编译构建
Summer框架: 基于SpringBoot框架开发,通过标准的流水线进行编译构建
调度中心: 负责应用的编排和调度,实例虚拟机与容器的混合编排部署
服务中心: 各个应用实例之间的桥梁,提供服务注册及发现功能

数据库架构:
切片分库:
1.对数据库水平切分,将业务数据切分成若干切片
2.每份数据只存储在一个数据库分库中
3.数据访问需要有数据切片路由
4.可以提高吞吐量
5.没有提高单个分库的可用性。降低了宕机带来的影响范围
随即多活:
1.业务数据写入时随机分发到任一个数据库
2.数据访问需要遍历所有的数据库
3.通常用于无状态数据,只新增不更新,如日志流水等记录。
4.一个数据库故障无需等待,请求分到到其他数据库就好。
读写分离:
1.读请求发送到读库,写请求发送到写库
2.数据单点写入,一致性高
3.写库出现故障不影响,读库
4.一个读库出现故障,可以将请求分发给别的读库,可用性高
5.当涉及多个地域访问时,在每个地域搭建一个读库,提高访问速度
灰度数据库:
1.用于灰度发布
2.切片分库策略一般会设有灰度库,灰度名单一般为可控范围名单,如行员
3.灰度数据库是生产环境,数据也是真实生产数据

同步调用:
tcp调用: 使用tcp协议通讯,不依赖web容器,自定义报文格式,传输效率高
http调用:使用http协议通讯,需要web容器解析http报文,一般使用json报文格式,易于理解。
同步调用的优缺点:
等待返回结果,实时性好;
业务架构简单;
缺点:耦合度高,事务回滚麻烦
异步调用优缺点:
解耦好;
业务架构复杂;

发布策略:
灰度发布:首先安装灰度库所在的的部署单元;用灰度名单做业务验证,通过验证之后开始安装其他正常的分库;
滚动发布: 分库部署单元之间串行安装;发布过程中对业务影响面小;发布时间长
并行发布:多个分库部署单元同时进行安装部署;安装过程影响所有业务;发布时间短;
蓝绿发布:两个版本同时在线,一般运行2~3天;新版本没有问题下线旧版本,有问题,下线全部新版本;小号机器资源多;

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
1.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
2.GET参数通过URL传递,POST放在Request body中。
3…业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。
4.GET产生一个TCP数据包;POST产生两个TCP数据包。
GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

http header
http header 消息通常被分为4个部分:general header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确。根据维基百科对http header内容的组织形式,大体分为Request和Response两部分。
header主要来存放cookie,token等信息的 body主要用来存放post的一些数据。
HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取客户端请求的所有信息。http请求包含请求行/状态行、请求头、请求体

jar包和war包的介绍和区别
链接:https://www.jianshu.com/p/3b5c45e8e5bd
WAR文件代表了一个Web应用程序,JAR是类的归档文件。
jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性。
war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。
war是一个可以直接运行的web模块,通常用于网站,打成包部署到Tomcat容器中。然后启动Tomcat,这个包就会自动解压,就相当于发布了。

Spring和SpringBoot区别
https://blog.csdn.net/qq_32595453/article/details/81141643
https://blog.csdn.net/beishanyingluo/article/details/100181185

Spring是组件代码是轻量级的,但是它的配置却是重量级的。
基于约定优于配置的思想,可以让开发人员不必在配置和逻辑业务之间进行思维的切换,全身心投入到逻辑业务的代码编写中

SpringBoot的特点
1)为给予Spring的开发提供更快的入门体验。
2)开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求。
3)提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康监测等。
4)SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

简化依赖
起步依赖的本质是一个Maven项目对象模型,定义了对其他库的传递依赖,这些东西加在一起支持某项功能。起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

简化部署
在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat里。因为Spring Boot 内置http服务器,比如jetty,tomcat,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。

简化监控
我们可以直接使用 REST 方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便。

SpringBoot缺点:
没有提供相应的服务发现和注册的配套功能,自身的acturator所提供的监控功能,也需要与现有的监控对接。

两种比较器的对比:
内部比较器:
需要比较的对象必须实现Comparable接口,并重写compareTo(T o)方法,表明该对象可以用来排序,否则不能直接使用Arrays.sort()方法。

public class Employee implements Comparable {

private int id;// 员工编号  
private double salary;// 员工薪资  
  
public int getId() {  
    return id;  
}  

public void setId(int id) {  
    this.id = id;  
}  

public double getSalary() {  
    return salary;  
}  

public void setSalary(double salary) {  
    this.salary = salary;  
}  
  
public Employee(int id, double salary) {  
    super();  
    this.id = id;  
    this.salary = salary;  
}  
  
// 为了输出方便,重写toString方法  
@Override  
public String toString() {  
    // 简单输出信息  
    return "id:"+ id + ",salary=" + salary;  
}  

// 比较此对象与指定对象的顺序  
@Override  
public int compareTo(Employee o) {  
    // 比较员工编号,如果此对象的编号大于、等于、小于指定对象,则返回1、0、-1  
    int result = this.id > o.id ? 1 : (this.id == o.id ? 0 : -1);  
    // 如果编号相等,则比较薪资  
    if (result == 0) {  
        // 比较员工薪资,如果此对象的薪资大于、等于、小于指定对象,则返回1、0、-1  
        result = this.salary > o.salary ? 1 : (this.salary == o.salary ? 0 : -1);  
    }  
    return result;  
}  

}
外部比较器:
需要自己写一个比较器实现Comparator接口,并实现compare(T o1, T o2)方法,根据自己的需求定义比较规则。
lamdba表达式的参数是引用类型,不可以是基本类型。

猜你喜欢

转载自blog.csdn.net/weixin_43260719/article/details/121698709