- 博客(38)
- 收藏
- 关注
原创 【Spring】循环依赖
循环依赖(Circular Dependency)是指两个或多个模块、对象之间相互依赖,形成一个封闭的依赖环。简而言之,模块A依赖于模块B,而模块B又依赖于模块A,这会导致依赖链的循环,无法确定加载或初始化的顺序。@Service@Autowired@Service@Autowired//或者自己依赖自己@Service@Autowired。
2025-03-18 21:48:45
921
原创 线程池原理
线程池是一种池化技术,用于预先创建并管理一组线程,避免频繁创建和销毁线程的开销,提高性能和响应速度。核心线程数最大线程数空闲存活时间单位时间任务队列线程工厂和拒绝策略。corePoolSize:核心线程数,即线程池中始终保持的线程数量。maximumPoolSize:最大线程数,即线程池中允许的最大线程数量。keepAliveTime:线程空闲时间,超过这个时间的非核心线程会被销毁。workQueue:任务队列,存放待执行的任务。hreadFactory:线程工厂,用于创建新线程。
2025-03-15 16:39:01
1038
原创 【Redis】 分布式锁
分布式锁是控制分布式系统间同步访问共享资源的一种方式,其可以保证共享资源在并发场景下的数据一致性。为了达到同步访问,让这些线程在访问共享资源之前先要获取到一个令牌 token,只有具有令牌的线程才可以访问共享资源。这个令牌就是通过各种技术实现的分布 式锁。而这个分布锁是一种“互斥资源”,即只有一个。只要有线程抢到了锁,那么其它线 程只能等待,直到锁被释放或等待超时。
2024-05-20 16:16:03
1432
原创 【Redis】 Redis 缓存
1)在配置文件中注册Redis连接信息与缓存信息2)需要缓存到Redis中的实体类必须要序列化3)Spring Boot 启动类中要添加@EnableCaching注解4)查询方法上要添加@Cacheable注解5)对数据进行写操作的方法上添加@CacheEvict注解6)对于需要手工操作Redis的方法,需通过RedisTemplate来获取操作对象。
2024-05-20 16:15:31
895
原创 【Redis】Redis 分布式系统
分布式数据库系统会根据不同的数据分区算法,将数据分散存储到不同的数据库服务器 节点上,每个节点管理着整个数据集合中的一个子集。与。
2024-05-16 10:04:56
673
原创 【Redis】Redis 主从集群(二)
Sentinel 维护着三个定时任务以监测 Redis 节点及其它 Sentinel 节点的状态1)info 任务:每个 Sentinel 节点每 10 秒就会向 Redis 集群中的每个节点发送 info 命令,以获得最新的 Redis 拓扑结构2)心跳任务:每个Sentinel节点每1秒就会向所有Redis节点及其它Sentinel节点发送一条ping命令, 以检测这些节点的存活状态。该任务是判断节点在线状态的重要依据。
2024-05-15 09:57:42
1307
原创 【Redis】Redis 主从集群(一)
为了避免 Redis 的单点故障问题,可以搭建一个 Redis 集群,将数据备份到集群中的其它节点上。若一个 Redis 节点宕机,则由集群中的其它节点顶上。
2024-05-14 12:23:33
1169
原创 【Redis】Redis持久化
Redis 是一个内存数据库,所以其运行效率非常高。但内存中的数据是不持久的,若主机宕机或 Redis 关机重启,则内存中的数据全部丢失。这是不允许的。Redis 具有持久化功能,其会按照设置以快照或操作日志的形式将数据持久化到磁盘。根据持久化使用技术的不同,Redis 的持久化分为两种:RDB 与 AOF。
2024-05-13 19:41:51
1221
原创 【Redis】Redis 事务
Redis 的事务的本质是。这组命令在执行过程中会被顺序地、一次性 全部执行完毕,只要没有出现语法错误,这组命令在执行期间不会被中断。
2024-05-11 19:14:41
599
原创 【Redis】集合的底层实现原理
zipList称为压缩列表,是一个经过特殊编码的用于存储字符串或整数的双向链表。其底层数据结构由 head、entries 与 end 三部分构成。这三部分在内存上是连续存放的listPack 也是一个经过特殊编码的用于存储字符串或整数的双向链表。其底层数据结构也由head、entries 与 end 三部分构成,且这三部分在内存上也是连续存放的跳跃列表是一种随机化的数据结构,基于并联的链表,实现简单, 查找效率较高。在链表的基础上增加了跳跃功能,使得在查找元素时,能够提供较高的效率。
2024-05-10 09:16:21
1575
原创 【Redis】简单动态字符串 SDS
虽然 Redis 是使用标准 C 语言开发的,但并没有直接使用 C 语言中传统的字符串表示,而是自定义了一 种字符串。这种字符串本身的结构比较简单,但功能却非常强大,称为简单动态字符串,简称 SDSRedis 中的所有字符串并不都是 SDS,也会出现 C 字符串。C 字符串只会出现在字符串“字面常量”中,并且该字符串不可能发生变更。
2024-05-09 09:13:28
1191
原创 【Redis】Redis命令(四)
一种由三部分构成的集合,这种数据结构称为空间元素。经度(longitude):有效经度为[-180,180]。正的表示东经,负的表示西经;纬度(latitude):有效纬度为[-85.05112878,85.05112878]。正的表示北纬,负的表示南纬;位置名称:为该经纬度所标注的位置所命名的名称,也称为该 Geospatial 集合的空间元素名称。
2024-05-08 08:56:49
939
原创 【Redis】Redis命令(三)
有序 Set 中的每一个元素都有一个分值 score,Redis 会根据 score 的值对集合进行由小到大的排序。元素不能重复,但元素的 score 可以重复。由于该类型的所有命令均是字母 z 开头,所以该 Set 也称为 ZSet。
2024-05-07 09:38:03
1487
原创 【Redis】Redis命令(二)
Hash 表就是一个映射表 Map,由键值对构成,为和DB的 key 进行区分,Hash的键称为 field,值称为 value。field-value 对均为 String 类型。
2024-05-06 09:17:01
818
原创 【SSM整合】全注解开发
Servlet3.0新特性:服务器在启动的时候会自动从容器中找。之后,web服务器在启动的时候会根据它来初始化Servlet上下文。spring3.1版本后,类继承。方法来完成Servlet上下文的初始化。接口的实现类,自动调用它的。
2024-04-30 10:00:09
521
原创 【springMVC】拦截器
实现接口,实现方法:只有该方法有返回true放行,false拦截2)postHandle:处理器方法调用之后执行3)afterCompletion:渲染完成后执行。
2024-04-29 09:27:29
661
原创 【springMVC】转发与重定向
1)转发是一次请求。因此浏览器地址栏上的地址不会发生变化,地址仍为第一次请求地址;重定向是两次请求。因此浏览器地址栏上的地址会发生变化,地址为第二次请求地址2)转发的代码实现:request.getRequestDispatcher("/index").forward(request, response);重定向的代码实现:response.sendRedirect("/webapproot/index")3)转发是服务器内部资源跳转,由服务器来控制。不可实现跨域访问;
2024-04-27 08:45:23
397
原创 【springMVC】三个域对象
接口名:HttpServletRequest,equest对象代表了一次请求,一次请求一个request。应用场景:A转发到B,两者可通过request共享资源。
2024-04-27 08:44:05
639
原创 【springMVC】@RequestMapping的作用
将指定 URL 的请求绑定到一个特定的方法或类上,从而实现对请求的处理和响应。RequestMapping注解只能出现在类上或者方法上。
2024-04-26 09:08:33
1433
原创 【springMVC】了解springMVC
如下是Spring架构图,其中Web中的servlet指的就是Spring MVC:与纯粹的Servlet开发区别:1)入口控制:SpringMVC框架通过DispatcherServlet作为入口控制器,负责接收请求和分发请求。Servlet开发中,需要自己编写Servlet程序,在web.xml中进行配置,才能接受和处理请求。
2024-04-26 09:07:03
586
1
原创 【spring6】Spring中的八大模式
BeanFactory的getBean()方法,通过唯一标识来获取Bean对象。是典型的简单工厂模式(静态工厂模式)
2024-04-25 10:08:08
303
1
原创 【spring6】事务
什么是事务:在一个业务流程当中,通常需要多条DML(insert delete update)语句共同联合才能完成,这多条DML语句必须同时成功,或者同时失败,这样才能保证数据的安全。多条DML要么同时成功,要么同时失败,这叫做事务事务的四个处理过程:开启事务;执行业务代码;提交事务;回滚事务事务的四个特性:1):事务是最小的工作单元,不可再分2):事务要求要么同时成功,要么同时失败。事务前和事务后的总量不变3):事务和事务之间因为有隔离性,才可以保证互不干扰4):持久性是事务结束的标志。
2024-04-25 10:06:31
1484
1
原创 【spring6】面向切面编程AOP
AOP是对OOP(面向对象编程)的补充延伸,底层使用的就是动态代理(JDK动态代理 + CGLIB动态代理技术)来实现的。应用:一个系统会有,例如:日志、事务管理、安全等。交叉业务代码在多个业务流程中反复出现,这个交叉业务代码没有得到复用,并且修改这些交叉业务代码的话,需要修改多处。程序员无法专注核心业务代码的编写,在编写核心业务代码的同时还需要处理这些交叉业务。使用AOP可以解决这些问题。优点:1)代码复用性增强;2)易于维护;3)使开发者更关注业务逻辑。
2024-04-24 09:14:38
1705
原创 【spring6】代理
23种设计模式之一。作用:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不应该看到的内容和服务或者添加客户需要的额外服务。通过引入一个新的对象来实现对真实对象的操作或者将新的对象作为真实对象的一个替身,这种实现机制即为代理模式,通过引入代理对象来间接访问一个对象,这就是代理模式的模式动机。角色:代理类(代理主题);
2024-04-24 09:13:00
736
原创 【spring6】Spring IoC注解式开发
负责声明Bean的注解,常见的包括四个:3)@Service;:可以看出@Controller、@Service、@Repository这三个注解都是@Component注解的别名。这四个注解的功能相同,只为了增强程序的可读性,建议:控制器类上使用Controller,service类上使用Service,dao类上使用Repository。
2024-04-23 15:17:46
572
原创 【spring6】解决循环依赖的机理
ClassA依赖ClassB,ClassB又依赖ClassA,形成依赖闭环。在解析ClassA的属性时,又发现依赖于ClassB,再次去获取ClassB,当解析ClassB的属性时,又发现需要ClassA的属性,但此时的ClassA已经被提前曝光加入了正在创建的bean的缓存中,则无需创建新的的ClassA的实例,直接从缓存中获取即可。我们可以先把所有的单例Bean实例化出来,放到一个集合当中(我们可以称之为缓存),所有的单例Bean全部实例化完成之后,以后我们再慢慢的调用setter方法给属性赋值。
2024-04-23 10:37:42
436
原创 【spring6】Bean的生命周期
Bean生命周期可以粗略的划分为五大步:1)实例化Bean2)Bean属性赋值3)初始化Bean4)使用Bean5)销毁Bean。
2024-04-22 15:50:07
528
原创 【spring6】BeanFactory和FactoryBean的区别
BeanFactory是工厂。Spring IoC容器的顶级对象,BeanFactory被翻译为“Bean工厂”,在Spring的IoC容器中,“Bean工厂”负责创建Bean对象。
2024-04-22 09:25:05
200
原创 【spring6】工厂模式的三种形态
不属于23种设计模式之一。简单工厂模式又叫静态工厂方法模式,是工厂方法模式特殊实现。简单工厂模式的角色包括三个:1)抽象产品角色;2)具体产品角色;3)工厂类角色简单工厂模式的优点:客户端程序不需要关心对象的创建细节,需要哪个对象时,只需要调用工厂类,初步实现了责任的分离。客户端只负责“消费”,工厂负责“生产”。生产和消费分离。简单工厂模式的缺点:工厂类集中了所有产品的创造逻辑,一旦出问题,整个系统瘫痪;不符合OCP开闭原则,在进行系统扩展时,需要修改工厂类。
2024-04-21 21:25:06
663
1
原创 【spring6】Bean的作用域
默认情况下,Spring的IoC容器创建的Bean对象是单例的。Bean对象的创建是在初始化Spring上下文的时候就完成的。
2024-04-21 18:05:20
483
1
原创 【spring6】Spring的八大模块
这是Spring框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。核心容器的主要组件是 BeanFactory,BeanFactory是工厂模式的一个实现,是任何Spring应用的核心。它使用IoC将应用配置和依赖从实际的应用代码中分离出来。
2024-04-18 11:15:00
587
原创 【spring6】OCP,DIP,IoC
从以上流程可以发现,当原本使用MySQL数据库的业务发生改变,需要Oracle数据库时,我们需要引入新的dao层,同时service层的代码也要跟着改变,这就需要修改之前运行正常的程序,显然这违背了OCP原则。
2024-04-18 09:15:00
531
原创 【mybatis】缓存
缓存的作用:通过减少IO的方式,来提高程序的执行效率。mybatis的缓存:将select语句执行结果存到缓存(内存),当下次执行这条select语句时,直接从缓存中取,不在查询数据库,既减少IO,又不用执行繁琐的查询算法,提高效率。缓存机制只针对select语句。mybatis缓存包括:一级缓存:将查询到的数据存到SqlSession中二级缓存:将查询到的数据存到SqlSessionFactory中集成其他缓存:如EhCache。
2024-04-17 10:04:22
958
原创 【MyBatis】resultMap结果映射
属性名遵循Java的命名规范(驼峰命名),数据库表的列名遵循SQL的命名规范(全部小写,单词用下划线分隔)。id:这个结果映射的标识,作为select标签的resultMap属性的值。--javaType用来指定属性类型。jdbcType用来指定列类型。--resultMap属性的值必须和resultMap标签中id属性值一致。--当属性名和数据库列名一致时,可以省略。type:结果集要映射的类。:是否开启驼峰命名自动映射(配置settings):使用resultMap进行结果映射。
2024-04-15 20:05:41
353
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人