- 博客(51)
- 收藏
- 关注
原创 线程池的执行流程总结
线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。
2024-09-19 12:04:03
2472
2
原创 静态代理和动态代理
代理模式是一种结构型设计模式,它为目标对象提供一种代理,用来控制对目标对象的访问。代理对象在客户端和目标对象之间起到中介的作用。客户端通过代理对象间接地访问目标对象,而不需要直接与目标对象进行交互。可以在不改变目标对象内容的前提下,通过代理对象扩展目标对象的行为逻辑;根据代理创建的时期静态代理:以硬编码的方式,手动定义创建的代理类;动态代理:代理类是在运行时动态创建的,在DK的核心类库中,可以使用 Java.lang.reflect.Proxy 类和接来生成动态代理;代理模式的应用场景。
2024-09-11 09:21:36
1623
原创 java反射(reflection)的基本理解和使用
反射(Reflection)是一种 Java 程序运行期间的动态技术,可以在运行时(runtime )检查、修改其自身结构或行为。通过反射,程序可以访问、检测和修改它自己的类、对象、方法、属性等成员。
2024-09-10 18:12:34
1296
原创 RocketMQ的基本概念和使用
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消者)例如:寄快递。例如:寄快递。
2024-09-05 14:56:31
1019
原创 微服务事务管理
这个问题主要出现在了,事务1把money改成了90,这是提交了事务,但是没有完全提交,保存的快照用于恢复如果其他服务没成功的话。但是当我们把三件事情看做一个"业务",要满足保证"业务"的原子性,要么所有操作全部成功,要么全部失败,不允许出现部分成功部分失败的现象,这就是。相当于就是在事务1开始的时候进行了引入全局锁,这个锁可以把当前事务封锁,也就是事务1在操作的时候一直等到阶段二判断完回滚或者提交完,事务2才能进行操作,这样就避免了脏写。但它只能应用于同一个事务,而不能应用于全局事务,多服务事务。
2024-08-25 18:00:00
1472
原创 微服务通信
Feign是Spring Cloud提供的一个声明式的伪Http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。Nacos很好的兼容了Feign, Feign默认集了Ribbon,所以在Nacos下使用Fegin默认就实现了负载均衡的效果官方地址:https://github.com/OpenFeign/feign。Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
2024-08-22 20:12:07
905
原创 微服务网关
网关搭建步骤创建项目,引入nacos服务发现和gateway依赖。配置application.yml,包括服务基本信息、nacos地址、路由。路由配置包括路由id:路由的唯一标示。路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡。路由断言(predicates):判断路由的规则,执行相关的uri。路由过滤器(filters):对请求或响应做处理。
2024-08-21 18:47:36
1690
原创 微服务注册中心
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。nacos的作用就是一个注册中心,用来管理注册上来的各个微服务。是 Netfixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中Nacos一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Nacos中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。
2024-08-21 09:15:00
1133
原创 微服务的基本理解和使用
服务注册:服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机IP和提供服务的Port,以及暴露服务自身状态以及访问协议等信息。服务发现:服务实例请求注册中心获取所依赖服务信息。服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控。
2024-08-20 13:34:00
1068
原创 Spring Bean的生命周期
BeanDefinition存储到一个名为beanDefinitionMap对象存储在一个名为singletonObjects的MapSpring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。Spring Bean的生命周期大体上分为三个阶段:Bean的实例化阶段。
2024-08-18 12:12:53
1198
原创 springboot的自动配置和怎么做自动配置
①定义条件类:自定义类实现Condition接口,重写 matches 方法,在 matches 方法中进行逻辑判 断,返回boolean值。matches 方法两个参数:context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等。metadata:元数据对象,用于获取注解属性。②判断条件: 在初始化Bean时,使用 @Conditional(条件类.class)注解。通过刚才的自动配置我们可以发现我们可以自己配置一个spring.factories来完成自定义的启动器。
2024-08-18 09:30:00
1645
原创 SpringBoot和Redis的交互数据操作以及Redis的持久化/删除策略和缓存问题
当我们客户端访问不存在的数据时,先请求redis,但是此时redis中没有数据, 此时会访问到数据库,但是数据库中也没有数据,这个数据穿透了缓存,直击数据库,我们都知道数据 库能够承载的并发不如redis这么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会 访问到数据库,简单的解决方案就是哪怕这个数据在数据库中也不存在,我们也把这个数据存入到redis 中去,这样,下次用户过来访问这个不存在的数据,那么在redis中也能找到这个数据就不会进入到缓存了。是用于指定该实体类对应的数据库表名。
2024-08-17 17:52:41
1430
3
原创 Redis的基本概念和使用
首先是一个之前的一个新闻,很多平台接连二三的连续崩溃,原因是为什么呢?总的来说两点:海量用户、高并发。主要是因为关系型数据库,虽然能实现联查等关系查询,但是性能瓶颈,磁盘IO性能低下。扩展瓶颈,数据关系复杂,扩展性差,不便于大规模集群。呢怎么解决这种问题呢?降低磁盘IO次数,越低越好,使用内存存储。去除数据间关系,越简单越好,不存储关系,仅存储数据。呢就用Nosql解决。概念。
2024-08-15 11:04:49
1080
1
原创 SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结
如果 Bean在Spring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法。Step7。
2024-08-15 09:15:00
925
原创 基于MyBatis-plus的SpringBoot开发
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的开发过程,提供了很多开箱即用的功能,使得开发者可以更加高效地进行持久层开发。MyBatis-Plus 不改变 MyBatis 原有的 API 和功能,而是在其基础上提供了更丰富的功能和自动化工具。MyBatis-Plus 提供了一套通用的CRUD 接口,只需要简单地继承这些接口就可以获得常用的 CRUD 操作方法,如insert、delete、update 和 select,减少了大量重复的代码。
2024-08-14 16:40:41
1345
原创 SpringBoot的Web开发
创建一个 Emp 对象,模拟从数据库中查询到的一条记录。这段代码主要是通过@ResponseBody告诉 Spring MVC 这个方法的返回值应直接作为 HTTP 响应体,而不是作为视图名称,并且返回的数据(在这里是一个 List)会被序列化为 JSON(或 XML,取决于配置),并作为响应体发送给客户端。在原有的基础上加params属性,params = "",限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数。
2024-08-13 10:48:29
1675
原创 SpringBoot的搭建和使用
随着动态语言的流行(Ruby、Scala、Node.js), Java的开发显得格外的笨重;繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术整合难度大。在上述环境下,Spring Boot由此诞生,它的设计是为了使您能够尽可能快地启动和运行。它使用 “习惯优于配置” (项目中存在大量的配置,而 Spring Boot 内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。使用 Spring Boot 很容易创建一个独立运行(运jar,内嵌Servlet 容器。
2024-08-11 14:36:34
774
原创 SpringAOP面向切面编程的概念和使用
面向切面编程):将那些与业务无关, 却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码降低模块间的耦合度,并有利于未来的可拓展性和可维护性;
2024-08-09 10:39:09
1348
原创 Spring的代理模式
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介。公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择。自己喜欢的车,然后付钱就可以了。
2024-08-08 17:43:11
1131
原创 Spring中dbUtil的概念和搭建使用
dbUtil是阿帕奇提供操作数据库的插件,它主要用于减少样板代码,并简化Java程序与数据库的交互。简化ResultSet处理:DBUtils 提供了 ResultSetHandler 接口和一些常用的实现类,用于将 ResultSet 转换为Java对象或集合。简化SQL执行:DBUtils 提供了 QueryRunner 类,用于执行SQL查询和更新操作。它提供了简洁的方法来处理参数和处理结果集。处理资源的关闭。
2024-08-08 09:00:00
1140
原创 Spring的配置和JavaConfig配置类
指定Spring扫描com.apesource包及其子包中的组件(比如使用了@Component、@Service、@Repository、@Controller注解的类),并将这些组件注册为Spring应用上下文中的Bean。就是将本来在xml中的bean引用一个类的实例换成在类上面的注解来完成一些配置文件的功能来减少配置文件的使用。,base-package用于指定要扫描的基础包,扫描这个包及其所有子包,寻找带有特定注解的类。:专门用于服务层的注解,实际上是@Component的一个特殊化形式。
2024-08-07 16:30:00
2391
2
原创 SpringDI依赖注入和SpringIOC容器对Bean的管理
bean>标签是Spring XML配置文件中最基本的构建块,用于定义Spring容器中的Bean。简单来说,Bean代表被IOC容器管理的对象,我们通过配置文件或注解,告诉IOC容器帮助我们管理哪些对象。
2024-08-07 10:48:12
855
1
原创 Spring的基本概念和结构
Spring框架是一款轻量级的开发框架,核心思想是IOC控制反转和AOP面向切面编程,为Java应用程序开发提供组件管理服务,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用JMS、任务调度、缓存、ORM框架),是一个基础架构型的开发框架;
2024-08-06 09:22:34
1217
1
原创 Servlet概念理解和具体实现
目录说明Web应用的根目录,该目录下所有文件 在客户端都可以访问(JSP、HTML等)/WEB-INF存放应用使用的各种资源,该目录及其 子目录对客户端都是不可以访问存放Web项目的所有的class文件存放Web应用使用的JAR文件创建、部署和发布项目:通过配置文件web.xml修改访问起始页。
2024-08-05 19:19:25
980
1
原创 MyBatis映射器注解
在上面的示例中,items属性性的加载策略被设置为FetchType.LAZY,即只有在访问items属性时,才会去加载关联的items数据。:每个注解都有一个宿主,自己的注解关系不要声明,直接调用即可。:新增时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。:删除时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。:更新时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。:查询时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。
2024-08-03 20:38:57
1242
原创 MyBatis动态SQL
MyBatis动态SQL,关于if、choose、when 、otherwise、trim 、where 、set、foreach、bind元素的理解和使用。
2024-08-03 17:30:00
1155
1
原创 MyBatis动态代理和映射器
mybatis的映射器概念和用法,select、insert、delete、update、resultMap元素、多表联查等...
2024-08-02 09:32:15
1164
1
原创 MyBatis的基础配置
功能: 标识配置文件的起始,所有配置信息都存放在这里。 功能:配置数据库环境信息,注册数据源, 配置数据库事务。 JDBC:使用 JDBC 的事务管理机制,就是利用 java.sql.Connection 对象完成对事务的提交; MANAGED:使用 MANAGED 的事务管理机制,这种机制 MyBatis 自身不会去实现事务管理,而是让程序的容器(JBOSS,WebLogic)来实现对事务的管理; 自定义:由使用者自定义数据库事务的管理方式,适用于
2024-08-01 16:46:40
1007
1
原创 MyBatis的概念和搭建
ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。Java对象:POJO对象(Plain Ordinary Java Object):简单的Java对象,实际就是普通 JavaBeans。映射配置:配置分为类与数据库中表的映射;对象与表中记录的映射;类的属性与数据库中 表的字段的映射。数据库。
2024-08-01 10:00:00
1177
原创 什么是SQL注入,如何防止SQL注入?
SQL注入(SQL Injection)是一种网络安全漏洞,允许攻击者在应用程序的SQL查询中插入恶意代码。这种攻击通常发生在应用程序没有正确验证或清理用户输入数据的情况下,导致攻击者能够操纵数据库查询,获取、修改或删除敏感信息。SQL注入就好比说是我在java中的Dao层通过用户提交的账户密码来连接数据库提取信息,但是用户层在传入数据时可以传入一些特定的恶意代码来让原本的查询sql语句失效甚至入侵。就以一个简单的用户登录的案例来说:表结构如下:} else {
2024-07-30 13:21:27
529
原创 JDBC相关概念和操作
所以每一层实现代码中都有其对应的相关接口来规范实现类的代码,同时可以让别的层的代码不受影响的调用,完成自己的逻辑。DaoUtil是用来对连接加载的封装,如果每一次写方法都要单独加载连接的话,会造成代码冗余,所以将连接加载的代码和释放资源的代码整合在一个加载类中去。每一次我们都只用调用get和set方法来获取数据就不用每一次都让用户一个一个的去写字段,调用也十分的高效率,比如我通过数据库中的Student表封装的一个实体类。而view层主要是和用户进行交互的一层,比如将拿到的数据通过逻辑层的处理最终。
2024-07-30 09:26:34
1094
原创 聚簇和非聚簇索引/Btree和B+tree
回表以某列大小排序的B+树只能确定我们要查找记录的主键值,所以如果我们想根某列的值查找到完整的用户记录的话,仍然需要到聚簇索引中再查一遍,这个过程称为回表。B+树的设计特别适合磁盘存储, 其节点可以容纳更多的键值对,减少了磁盘I/O次数。,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接,所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字。B+树将所有数据记录存储在叶子节点上,而叶子节点只包含键值和指向其他节点的指针。B+树的空间利用率更高。
2024-07-28 19:30:00
710
原创 MySQL索引
就好比你想查一个字,然后你通过新华字典的目录信息快速的找到了这个字,呢新华字典就相当于是索引。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
2024-07-28 13:12:13
992
原创 MySQL事务
就好比说是我向你转账了200元,但是密码输错了,我的钱发生了回滚,还是在我的余额里,这就是事务。事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离, 事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行。
2024-07-26 00:09:54
991
原创 java中压缩文件的解析方式
日常生活中我们最常用的就是压缩软件来压缩文件或解压,在java中也可以通过IO流操作来将文件进行压缩解压操作。(1)解压zip文件。(2)解压rar文件。
2024-07-11 19:24:43
659
原创 String字符串的常见方法总结
返回一个新的字符串,它是原字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。:返回一个新的字符串,它是原字符串从beginIndex开始截取到原字符串结尾的一个子字符串。:返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。:返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。:返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。:测试此字符串是否从指定索引开始的子字符串是否以制定前缀开始。
2024-03-06 01:03:28
449
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人