学习相关组件,加一些大佬的学习笔记

第四阶段的知识梳理

1、SSM项目

第一:Spring:

1.什么是Spring? Spring是一款轻量级的IoC和AOC容器框架
2.Spring的核心:控制反转loc和AOP容器框架
3.为什么使用Spring:

1.方便解耦,便于开发(Spring就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给spring管理)

2.Spring支持aop面向切面编程(spring提供面向切面编程,可以很方便的实现对程序进行权限拦截和运行监控等功能)

3.声明式事务的的支持(通过配置就完成对事务的支持,不需要手动编程)

4.方便集成各种优秀的框架

4.Spring的特点:

1.非侵入式:(Spring框架不会在业务逻辑层出现,即业务逻辑层是POJO。业务逻辑层能够快速的从Spring移植到其他的框架)

2.容器:(可以管理对象的生命周期,对象与对象之间的依赖关系)

3.IOC控制反转(一个对象的依赖会通过Spring容器把对象所需要的依赖会自动的导入进来,而不是对象自己导入或者自己创建依赖)

4.AOP面向切面编程(是一种编程的思想,是面向对象OOP的补充。)

5.什么是IOC? 控制反转,指得是将对象的创建权反转给Spring,实现了程序的解耦合
6.什么是AOP?是一种编程思想,是对面向编程OOP的补充。

解释: 用于将哪些与业务无关,但却对多个对象产生联系的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被称为切面,减少系统的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。一般做用于权限认证,日志,事务处理

7.Spring AOP的实现原理:
8.什么是DI?

DI依赖注入,需要有IOC环境,在Spring创建Bean对象时,动态的将依赖对象注入到 Bean对象中去。依赖注入最大的好处就是解耦合。

DI有三种注入方式:1.构造函数;2.属性;3.注解

Spring框架中用到了设计模式:
  1. 代理模式:在 AOP 和 Remoting 中被用的比较多。
  2. 单例模式:在 Spring 配置文件中定义的 Bean 默认为单例模式。
  3. 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
  4. 前端控制器:Spring 提供了 DispatcherServlet 来对请求进行分发。
  5. 视图帮助(View Helper ):Spring 提供了一系列的 JSP 标签,高效宏来辅助将分散的代码整合在视图里。
  6. 依赖注入:贯穿于 BeanFactory / ApplicationContext 接口的核心理念。
  7. 工厂模式:BeanFactory 用来创建对象的实例。

第二:SpringMVC:

什么是三层架构:View(视图层)、Service(服务层)、Dao(持久层)

1.View 层:用于接收用户提交请求的代码

2.Service 层:系统的业务逻辑主要在这里完成

3.DAO 层:直接操作数据库的代码

什么是MVC模式:Model(模型)、View(视图)、Controller(控制器)

1.Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类,一类称为数据承载 Bean,一类称为业务处理 Bean。所谓数据承载 Bean 是指实体类,专门用户承载业务数据的,如 Student、User 等。而业务处理 Bean 则是指 Service 或 Dao 对象, 专门用于处理用户提交请求的。

2.View:视图,为用户提供使用界面,与用户直接进行交互。

3.Controller:控制器,用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。

SpringMVC运行流程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tYXaZCpm-1665647130781)(总结.assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0NTE4NDg3,size_16,color_FFFFFF,t_70#pic_center.png)]

  1. 用户发送请求给前端控制器(DispatchServlet)
  2. 前端处理器收到用户请求以后调用处理器映射器(HandlerMapping)
  3. 处理器映射器根据请求的URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成,没有就不生成)一并返回给前端控制器
  4. 前端控制器通过处理器适配器HandlerAdapter调用处理器Handler
  5. 执行处理器(Controller,后端控制器);
  6. 处理器执行完成返回ModelAndView;
  7. 处理器适配器处理器的执行结果ModelAndView返回给前端处理器
  8. 前端控制器将ModelAndView传给视图解析器
  9. 视图解析器解析后返回具体View
  10. 前端控制器对View进行渲染视图(其实就是将模型数据填充到视图中);
  11. 前端控制响应用户。
Json的优势:
  1. 数据量少
  2. 直接对应到实体类
  3. 可读性比较高

第三:mybatis:

1.什么是Mybatis?

==ORM:==为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中

一款优秀的持久层框架,也是一个半自动ORM(对象关系映射),其主要点在POJO类和SQL语句之间的映射关系,不会自动生成sql语句,需要自己书写sql语句。

2.MyBatis的特点:

  1. 在 XML 文件中配置 SQL 语句,实现了 SQL 语句与代码的分离,给程序的维护带来了很大便利。
  2. 因为需要程序员自己去编写 SQL 语句,程序员可以结合数据库自身的特点灵活控制 SQL 语句,因此能够实现比 Hibernate 等全自动 ORM 框架更高的查询效率,能够完成复杂查询。
  3. 简单,易于学习,易于使用,上手快。

3.MyBatis 动态 SQL

常用的动态 SQL 标签有 if、where、choose、foreach 等;

4.MyBatis中井号与美元符号的区别

  • #{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型
  • ${变量名}不进行数据类型匹配,直接替换
  • #方式能够很大程度防止sql注入。
  • $方式无法防止sql注入。
  • $方式一般用于传入数据库对象,例如传入表名。
  • 尽量多用#方式,少用$方式

2、SpringBoot

1.目的:

为了简化基于Spring的开发,能够提供自动装配起步依赖,减少了很多繁琐的xml配置文件。

2.什么是SpringBoot?

SpringBoot是一个脚手架。能过快速的搭建一个Spring项目,解决添加依赖关系,配置应用服务器,添加Spring配置的繁琐。

3、Docker

1.作用:

可以更快的打包,测试以及部署应用程序,并且可以缩短从编写到部署运行代码的周期。

2.docker包括三大命令:

1.docker build:加载Dockerfile创建镜像

2.docker pull: 拉镜像文件至images

3.docker run:运行containers中的进程

3.为什么要用docker

1.软件更新部署比较低效,需要人工成本大
2.环境一致性难以保证
3.不同环境之间迁移成本太高

4、nginx

1.什么是Nginx?

nginx是一个轻量级/高性能的方向代理的Web服务器,实现非常高效的反向代理,负载均衡;可以处理2-3万的并发连接数,官方监测能支持5万的并发。

2.为什么要用Nginx?
  1. 可以跨平台使用,配置简单,方向代理,高并发连接数:处理2~3万的连接数,内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件好,耗费内存少。

  2. 有内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。

  3. 使用Nginx的话还能:

节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
稳定性高:宕机的概率非常小
接收用户请求是异步的

3.为什么nginx的性能这么高?

因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决

4.什么是正向代理和反向代理?

1.正向代理:一个人发送一个请求直接到达目标的服务器。(例如VPN代理用户)

2.反向代理:请求统一被Nginx接收,在按照一定的规则分发给后端的业务服务器进行处理。(例如nginx代理服务器来隐藏服务器)

优点:反向代理服务器可以隐藏源服务器的存在和特征。

5.Nginx的优缺点?

优点:

  • 占内存小,可实现高并发连接,处理响应快
  • 可实现http服务器、虚拟主机、方向代理、负载均衡
  • Nginx配置简单
  • 可以不暴露正式的服务器IP地址

缺点:

动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,

现在一般前端用nginx作为反向代理抗住压力,

6.应用场景

1.http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

2.虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。

3.反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。

4.nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

7.Nginx负载均衡的算法怎么实现的?策略有哪些?

为了避免服务器崩溃,会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

策略:

1 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。

upstream backserver { 
server 192.168.0.12; 
server 192.168.0.13; 
} 
2.权重 weight

weight的值越大分配

到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

权重越高,在被访问的概率越大,如上例,分别是20%,80%。

upstream backserver { 
server 192.168.0.12 weight=2; 
server 192.168.0.13 weight=8; 
}

3.ip_hash(IP绑定)
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

upstream backserver { 
ip_hash; 
server 192.168.0.12:88; 
server 192.168.0.13:80; 
} 

4.Vip

8.介绍LVS做nginx集群分配

tomcat:动态web服务器 ,处理servlet请求,处理图片请求
nginx:静态 web服务器,不能处理servlet请求,处理图片请求

8.1 Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。

8.2 但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。

Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器,然后通过Nginx配置权重来进行挑选Tomcat服务器去进行处理,负载均衡的一种策略。

Nginx服务器

1、首页使用精准匹配
2、静态页面使用正则匹配自己处理
3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器

8.3 Nginx动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由 Nginx 提供服务,动态资源由 Nginx 转发至后端。

点这里进入部署静态分离[Nginx负载均衡及动静分离_Jahony的博客-CSDN博客_nginx动静分离工作原理]

5、Zookeeper(ZooKeeper学习笔记_巨輪的博客-CSDN博客)

1.什么是Zookeeper?

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。

目标:封装好复杂易出错的关键服务,将简单易用的接口和性能,功能稳定的系统提供给用户。

2.工作机制:

Zookeeper=文件系统+通知机制

3.特点:

1.一个领导者,和多个跟随者组成的集群。

2.集群中只要有半数以上的节点存活,Zookeeper集群就能正常的服务

3.全局数据一致:每一个Server保存一份相同的数据副本;

4.更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。

5.数据更新原子性,一次数据更新要么成功要么失败;

6.实时性,在一定时间范围内,Client(客户端)能读取到最新的数据。

4.数据结构

Zookeeper和windows的文件夹命名规矩一样,类似树状结构,不能重复。每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据, 每个ZNode都可以通过其路径唯一标识。

5.应用的场景

提供的服务包括:

一、统一命名服务(在分布式环境下,经常需要对应用/服务进行统一命名,便于识别)

二、统一配置管理:

1.分布式环境下,配置文件同步非常常见

1. 一般要求一个集群中,所有节点的配置信息是一致的,比如Kafka集群
2. 对配置文件修改后,希望能够快速同步到各个节点上

2.配置管理可交由ZooKeeper实现

1. 可将配置信息写入ZooKeeper上的一个Znode
2. 各个客户端服务器监听这个Znode
3. 一旦Znode中的数据被修改, ZooKeeper将通知各个客户端服务器

三、统一集群管理

  1. 分布式环境中,实时掌握每个节点的状态是必要的
可根据节点实时状态做出一些调整
  1. ZooKeeper可以实现实时监控节点状态变化
1.可将节点信息写入ZooKeeper上的一个ZNode

2.监听这个ZNode可获取它的实时状态变化

四、服务器节点动态上下线(客户端能实时洞察到服务器上下线的变化)

五、软负载均衡

6、Dubbo(Dubbo入门介绍及学习笔记总结_情話微甜的博客-CSDN博客)

1.概率:

一款容错和负载均衡,高性能,轻量级的开源的java RPC框架,它提供了三大核心能力:面向接口的远程方法的调用,智能容错和负载均衡,服务自动注册和发现。

2.设计框架:
3.Dubbo的特性:

1.服务注册中心(一般是有zookeeper担任注册中心)

2.负载均衡(同一个服务有多个提供者在提供服务时,如何负载均衡?)

  • 客户端随机跳选提供者,并可以给提供者设置权重
  • roundrobin 轮询选择提供者
  • leastactive 最少活跃调用数,相同活跃数的随机,活跃数:指调用前后计数差。
  • consistenthash 一致性hash,相同参数的请求发到同一台机器上。

3.简化测试,允许直连提供者

4.服务版本,服务分组

7、Redis

redis是一个使用C语言开发的开源的高性能非关系型(Nosql)的键值对数据库。

redis可以存储键和五种不同类型的值之间的映射。键的映射的类型只能为字符串,值能支持五种数据类型:String(字符串),List(集合),Set,hash,Zset等五种数据类型。

1.Redis的优缺点

1.读写性能优异,读11万次,写8万次。

2.支持事务,Redis的所有操作都是原子性的。

3.支持数据持久化,支持AOF和ROB两种持久化方式

4.数据结构丰富,有String,hash,set,zset,list的value类型的值

5.支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

2.Redis为何这么快

1)基于内存;

2)单线程减少上下文切换,同时保证原子性;

3)IO多路复用;

4)高级数据结构(如 SDS、Hash以及跳表等)。

3.缓存三大问题以及解决方案?
缓存穿透:查询数据不存在
  1. 缓存空值

2)key 值校验,如布隆筛选器 ref 分布式布隆过滤器(Bloom Filter)详解(初版)

缓存击穿:缓存过期,伴随大量对该 key 的请求

1)互斥锁

2)热点数据永不过期

3)熔断降级

缓存雪崩:同一时间大批量的 key 过期

1)热点数据不过期

2)随机分散过期时间

4.在哪些应用场景?

1)String:缓存、限流、分布式锁、计数器、分布式 Session 等。

2)Hash:用户信息、用户主页访问量、组合查询等。

3)List:简单队列、关注列表时间轴。

4)Set:赞、踩、标签等。

5)ZSet:排行榜、好友关系链表。

5.过期的淘汰策略

1.定时删除

·在设置 key 的过期时间的同时,为该 key 创建一个定时器,让定时器在 key 的过期时间来临时,对 key 进行删除。

2.惰性删除

·进行get或者set等操作时,先检查key是否过期;

·若过期,则删除key,然后执行相应的操作;

·若没过期,直接执行相应的操作;

3.定期删除

·每隔一段时间执行一次删除(在 redis.conf 配置文件设置,1s 刷新的频率)过期 key 操作。

6.Redis的RDB持久化策略

RDB 持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式。也就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为 dump.rdb。

优点:

·RDB结构紧凑,全量备份,非常适合进行备份和灾难恢复

·生成 RDB 文件时支持异步处理,主进程不需要进行任何磁盘IO操作

·RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快

缺点:

·在最后一次备份中出现系统崩溃,最后一次的数据丢失的可能性为99%

7.说说 Redis 的 AOF?

·工作机制更加简单:会将每一个收到的写命令追加到文件中。

·随着时间推移,AOF 持久化文件也会变的越来越大。

优点:

·AOF 可以更好的保护数据不丢失,一般 AOF 隔 1 秒通过一个后台线程执行一次 fsync 操作

·AOF 日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损

·AOF 日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复

· AOF 日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写

缺点:

·对于同一份数据来说,AOF 日志文件通常比 RDB 数据快照文件更大

·AOF开启后,支持的写 QPS 会比RDB支持的写 QPS 低

集群模式
1.Redis 集群搭建有几种模式?

·主从模式

·哨兵模式

·Cluster 集群模式

SpringSecurity

SpringSecurity的作用:
1.核心功能为:实现对web应用的访问进行认证和授权;

·认证:验证当前的访问系统的用户是不是合法的用户,并且确认具体的身份。

·授权:在经过认证以后,判断当前用户是否具有权限进行某个操作。

使用SpringSecurity实现认证和授权原理:

  1. 用户提交用户名、密码被SecurityFilterChain中的 UsernamePasswordAuthenticationFilter 过滤器获取到,封装为请求Authentication,通常情况下是UsernamePasswordAuthenticationToken这个实现类。
  2. 然后过滤器将Authentication提交至认证管理器(AuthenticationManager)进行认证
  3. 认证成功后, AuthenticationManager 身份管理器返回一个被填充满了信息的(包括上面提到的权限信息,身份信息,细节信息,但密码通常会被移除) Authentication 实例。
  4. SecurityContextHolder 安全上下文容器将第3步填充了信息的 Authentication ,通过SecurityContextHolder.getContext().setAuthentication(…)方法,设置到其中。可以看出AuthenticationManager接口(认证管理器)是认证相关的核心接口,也是发起认证的出发点,它的实现类为ProviderManager。而Spring Security支持多种认证方式,因此ProviderManager维护着一个List 列表,存放多种认证方式,最终实际的认证工作是由AuthenticationProvider完成的。咱们知道web表单的对应的AuthenticationProvider实现类为DaoAuthenticationProvider,它的内部又维护着一个UserDetailsService负责UserDetails的获取。最终AuthenticationProvider将UserDetails填充至Authentication
2.什么是会话:

用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于session方式、基于token方式等。

3.什么是授权:

·根据用户的权限来控制用户使用资源的过程就是授权。鉴权(判断用户是否有这个权限)

·java应用中什么叫资源 url就是资源 (API接口就是资源)

4.为什么要授权?

认证是为了保证用户身份的合法性,授权则是为了更细粒度的对隐私数据进行划分,*授权是在认证通过后发生的,控制不同的用户能够访问不同的资源。

授权: 授权是用户认证通过根据用户的权限来控制用户访问资源的过程**,拥有资源的访问权限则正常访问,没有权限则拒绝访问。

们知道web表单的对应的AuthenticationProvider实现类为DaoAuthenticationProvider,它的内部又维护着一个UserDetailsService负责UserDetails的获取。最终AuthenticationProvider将UserDetails填充至Authentication

2.什么是会话:

用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于session方式、基于token方式等。

3.什么是授权:

·根据用户的权限来控制用户使用资源的过程就是授权。鉴权(判断用户是否有这个权限)

·java应用中什么叫资源 url就是资源 (API接口就是资源)

4.为什么要授权?

认证是为了保证用户身份的合法性,授权则是为了更细粒度的对隐私数据进行划分,*授权是在认证通过后发生的,控制不同的用户能够访问不同的资源。

授权: 授权是用户认证通过根据用户的权限来控制用户访问资源的过程**,拥有资源的访问权限则正常访问,没有权限则拒绝访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值