- 博客(44)
- 收藏
- 关注
原创 Java反射简单理解
通过反射,开发者可以在运行时检查类、接口、字段和方法,并且可以调用这些方法和访问这些字段,而无需在编译时知道它们的名称。:代表类的本身,提供了获取类信息的方法,如getMethods()、getDeclaredMethods()、getFields()、getDeclaredFields()等。:代表类的字段,用于获取和设置对象的字段值,如get(Object obj)、set(Object obj, Object value)。:代表类的构造器,用于创建类的实例,如newInstance(Object…
2025-03-09 18:12:48
173
原创 Java线程(详解)
并发指在同一时间段内,有多个任务在逻辑上是同时执行的,但实际上在单处理器系统中,这些任务是通过快速切换轮流使用 CPU 资源来实现 “同时” 执行的,并不是真正意义上的同时进行。比如在一个图形界面程序中,使用一个线程来处理用户界面的交互,另一个线程来进行数据的加载和处理,这样用户在操作界面时不会因为数据加载等耗时操作而出现界面卡顿的情况,提高了用户体验。但每个线程都有自己独立的栈空间,用于存储线程执行过程中的局部变量、函数调用信息等,以及独立的程序计数器,用于记录线程当前执行的指令地址。
2025-03-09 16:59:25
1270
原创 Java运算符
这些运算符用于执行基本的数学运算,如加法、减法、乘法、除法和取余等。用于比较两个值之间的关系,返回布尔值(true 或 false)。是 Java 中唯一的三目运算符,根据条件的真假返回不同的值。instanceof:用于检查对象是否是特定类的实例。位运算符用于对整数的二进制表示进行位级别的操作。用于对布尔值进行逻辑运算,返回布尔值。new:用于创建对象的实例。cast:用于强制类型转换。赋值运算符用于为变量赋值。
2025-03-08 22:53:40
228
原创 Java的数据类型
其包装类是Double。但需要注意的是,浮点数不能用来表示精确的值,如货币。char:占16位(2字节),使用Unicode字符集,可以表示Unicode字符集中的所有字符,包括字母、数字、符号和中文字符等。接口是一种抽象类型,它只包含方法的签名(方法名、参数列表和返回类型),不包含方法的实现。类是 Java 中最常见的引用数据类型,它是对象的模板,定义了对象的属性和行为。弱引用:弱引用通过WeakReference类实现,无论内存空间是否足够,只要发生垃圾回收,弱引用指向的对象都会被回收。
2025-03-08 22:33:53
1895
原创 WebService的理解和简单使用
CXF 负责将 Java 方法转换为 SOAP WebService:CXF 使用 JAX-WS 标准,将 Java 代码映射为 WSDL,并提供基于 HTTP/SOAP 协议的通信方式。客户端使用 CXF 生成代码进行调用:通过maven插件生成客户端代理代码,或者直接使用 Service 代理调用远程 WebService。SOAP 就是一种基于 XML 的通信协议,是 WebService 的核心传输协议,设计目标是确保不同平台、不同语言的系统之间能可靠通信。
2025-03-07 23:28:45
1587
原创 mongodb安装教程以及mongodb的使用
与传统的关系型数据库(如 MySQL 或 PostgreSQL)不同,MongoDB 存储数据的方式是以 BSON(类似于 JSON 的二进制格式)格式来存储文档,而不是使用表格和行。但MongoDB中的集合不受严格模式的管制,其中的文档可根据需要采用稍微不同的结构。:MongoDB中的数据基本单位是文档,类似于JSON对象,可以包含各种数据类型,如数字、日期、字符串、数组和嵌入式文档等。强大的查询功能:MongoDB 提供了丰富的查询语法和聚合功能,支持复杂的数据检索和操作。
2025-03-05 17:40:10
667
原创 Tcp粘包和拆包
拆包是指发送的数据包太大,接收方不能一次性读取一个完整的数据包,导致接收方只能接收到部分数据,而剩余的部分需要继续接收。导致的数据边界不明确。例如,发送端发送了一个大的数据包“HelloWorld123456”,而接收端的缓存限制只能一次读取到“HelloWorld”部分,剩下的“123456”需要再次读取。如果客户端发送的数据比较大,接收端的缓冲区有限制,接收端可能只能接收一部分数据,剩余的部分会等待下一次读取,这就是拆包问题。固定长度的消息:每个消息固定长度,这样接收端可以按照固定的长度来读取数据。
2025-03-04 11:45:52
822
原创 Buffer和ByteBuffer和ByteBuf有什么区别?
它是所有缓冲区类的父类,子类包括 ByteBuffer、CharBuffer、IntBuffer 等,分别处理不同类型的数据,提供了对字节数据的读写操作。ByteBuf:使用两个独立的指针,readerIndex和writerIndex,分别跟踪读和写的位置。当数据超出当前容量时,ByteBuf会自动分配一个新的、更大的字节数组,并将旧数组的内容复制到新数组中。Buffer、ByteBuffer 和 ByteBuf 都是处理数据缓冲的核心类,但它们来自不同的库,设计目标和功能特性有明显差异。
2025-03-03 15:16:13
2144
原创 BIO、NIO、AIO、Netty从简单理解到使用
BIO是Java最传统的I/O模型,基于流的同步阻塞I/O操作。每个连接都会占用一个线程,当进行I/O操作时,线程会被阻塞,直到操作完成。AIO提供了真正的异步I/O操作方式,进一步提高了系统的并发性能和吞吐量。:NIO是Java 1.4引入的新I/O API,基于通道(Channel)和缓冲区(Buffer)的非阻塞I/O操作。Java编程中BIO、NIO、AIO是三种不同的I/O(输入/输出)模型,它们代表了不同的I/O处理方式。异步非阻塞:I/O操作是异步的,通过回调处理结果,不阻塞线程。
2025-02-28 21:31:53
825
原创 docker的安装和使用
Docker 是利用 Linux 内核的容器技术(如命名空间、控制组),将应用和依赖(代码、库、配置文件等)封装在一个隔离的“容器”中。首先需要修改yum镜像仓库。
2025-02-12 18:07:14
572
原创 下载安装Linux-CentOS7
记录一下下载安装Linux-CentOS7的全过程它有两个版本:(现在官方Pro版不收费了也不需要破解了,直接下载Pro的)VMware Workstation Pro:需付费购买,提供简体中文版,功能全面,适合专业用户。VMware Workstation Player:免费供个人非商业使用,提供简体中文版,功能相对简化。官网下载地址:https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion。
2025-02-10 17:41:15
2266
原创 Mybatis-plus的入门使用
LambdaQueryWrapper 通过 Lambda 表达式来构建查询条件,不需要手动写字段名的字符串,从而避免了因字段名修改而导致的错误。QueryWrapper 在使用时需要传递字段名的字符串,通常容易出错,尤其是在字段名发生变化时需要修改代码中的字符串。在启动类上添加注解@MapperScan(“com.mc.menu.mapper”)上面是简单的查询,如果有条件或者复杂了怎么办?这些注解如果符合驼峰规范可以省略。
2025-02-08 10:54:51
465
原创 @RestController和@Controller的区别
RestController 是一个方便的注解,它是 @Controller 和 @ResponseBody 的组合,意味着所有方法默认都会将返回值作为 HTTP 响应体返回。我们在构建传统的 MVC Web 应用时通常会返回返回视图名(字符串)或 ModelAndView 对象,视图解析器会根据这些返回值解析并渲染视图(通常是 JSP、Thymeleaf 等模板)。:通常与 @ResponseBody 一起使用,以便直接返回数据而非视图。,它专门用于构建 RESTful Web 服务,
2025-02-07 09:55:33
355
原创 mybatis-plus的分页查询简单使用
它的作用是拦截分页相关的 SQL 请求,并自动将分页参数(如 LIMIT、OFFSET)注入到 SQL 查询中。----------------------------------------开启日志----------------------------PaginationInnerInterceptor:指定了 DbType.MYSQL,表示使用 MySQL 数据库的分页策略。mapper文件传入一个page<?>对象,封装了分页查询所需的各种信息,比如当前页码、每页显示的记录数、排序规则等。
2025-02-06 16:01:47
454
原创 springboot3整合Generator代码生成器+swagger-ui
【代码】springboot3整合Generator代码生成器+swagger-ui。
2025-02-06 08:15:30
707
原创 Lambda 表达式是什么?怎么用?
Lambda 表达式的目标类型必须是一个函数式接口,即只包含一个抽象方法的接口。Java 8在java.util.function包中提供了一些常用的函数式接口,如Function、Predicate、Consumer等。->:Lambda 运算符,表示传入参数和方法体的分隔符。(参数列表):可以有 0 个、1 个或多个参数。{ 方法体 }:Lambda 表达式执行的逻辑。
2025-02-05 08:17:15
217
原创 mybatis中<select>标签resultType跟resultMap 属性的作用和区别
当查询结果是一个简单的数据类型(如 int, String)、一个 JavaBean(POJO)或者是一个 Map 时,你可以使用 resultType。该元素提供了从数据库列到 Java 对象属性之间的详细映射信息。例如:返回值映射到map类型。
2025-01-26 22:28:13
305
原创 sql中INNER JOIN、LEFT JOIN、RIGHT JOIN
INNER JOIN 只会将相关联表匹配到的数据进行展示 假设我们有两个表:sys_user和 sys_user_role。以左表sys_user 为主,匹配之后左表数据全部展示,右表sys_user_role。以右表sys_user_role 为主,匹配之后右表数据全部展示,左表sys_user。返回左表中的所有记录,如果右表中没有匹配,则结果中右表的列会显示为 NULL。只展示与左表匹配到的数据,没有匹配到的展示为null。只展示与右表匹配到的数据,没有匹配到的展示为null。
2025-01-26 21:11:38
697
原创 vue3入门基础学习之搭建登录验证功能
(如果安装失败切换镜像:npm install --registry=https://registry.npmmirror.com)官网地址:https://element-plus.org/zh-CN/guide/installation.html。引入路由https://router.vuejs.org/zh/installation.html。将router引入到main.js文件中,并在app.vue中展示。新建一个axios.js文件,并引入axios。在项目的main.js中引入。
2025-01-26 20:17:46
591
原创 mybatis是什么?有什么作用?mybatis的简单使用
3.编写mapper接口实现类,其实就是xml文件。xml中的sql语句需要映射到方法上,那么就需要配置一下,告诉mybatis从哪里找到xml文件映射给方法。MyBatis 通过提供 SQL 映射、动态 SQL、结果映射、事务管理等功能,我们直接去用就可以了。2.编写接口,这个接口需要被扫描管理。MyBatis 是一个持久层框架。简化了对数据库数据的操作。
2025-01-25 18:23:04
553
原创 @RequestParam、@PathVariable、@PathParam有什么区别?
@RequestParam、@PathParam、@PathVariable都是用于从HTTP请求中提取参数的注解,但它们有不同的使用场景和语法。
2025-01-22 23:37:04
687
原创 SpringCloud微服务Gateway网关简单集成Sentinel
官方文档:https://sentinelguard.io/zh-cn/docs/introduction.html。
2025-01-22 14:44:54
913
原创 Spring Security框架简单搭建
4.在service层调用authenticate方法传入一个authentication对象,DaoAuthenticationProvider会调用UserDetailsService接口的loadUserByUsername方法,所以们还需要一个实现了UserDetailsService接口的类重写loadUserByUsername方法(第5步)它包含一个名为loadUserByUsername()的方法,我们在这个方法自定义认证逻辑,最后返回一个UserDetails对象。
2025-01-21 16:32:10
832
原创 Java中常见的实体类标识和包结构
含义:JavaBean通常用于表示符合JavaBean规范的对象,具有属性、getter和setter方法,以及可能的业务逻辑。特点:通常用于封装跨层传输的数据,不包含业务逻辑,只包含数据属性及相应的getter和setter方法。含义:Entity或Model通常用于表示领域模型中的实体对象,与数据库中的表或视图相对应。特点:与DTO类似,但更侧重于表示视图层所需的数据,可能包含一些特定的格式化或展示逻辑。含义:领域对象用于表示业务领域中的实体和概念,通常包含复杂的业务逻辑和关联关系。
2025-01-21 12:38:55
355
原创 Lombok的使用
Lombok是一个Java库,它通过注解的方式自动为Java类生成诸如getter、setter、equals、hashCode、toString等方法的代码,旨在简化Java代码的编写,特别是那些重复且繁琐的代码。增强代码可维护性:Lombok生成的代码与开发者手动编写的代码在功能上是一致的,但Lombok的代码更加规范、统一,有助于提升代码的可维护性。使用Lombok注解:在Java类中使用Lombok提供的注解,Lombok会在编译时自动生成相应的代码。@Getter:生成类的getter方法。
2025-01-19 10:39:09
649
原创 springmvc的简单搭建
mvc其实是一种架构思想,它将最初的servlet分为了三种结构,使我们的代码更加清晰明了。分为模型(Model)、视图(View)、控制器(Controller)。6.将类加入到tomcat中,然后启动访问就可以了。1.创建一个maven项目并导入webmvc依赖。4.views文件夹下创建一个jsp的文件。搭建一个简单的springmvc项目。3.创建springmvc配置文件。5.创建controller类。2.配置web.xml文件。
2025-01-16 19:09:12
216
原创 spring声明事务和编程式事务
通过在方法或类上添加@Transactional注解,开发人员可以轻松地指定哪些方法需要事务支持,并配置相关的事务属性(如传播行为、隔离级别、超时时间等)。声明式事务允许开发人员通过注解或XML配置的方式来控制事务的提交和回滚,而无需编写繁琐的事务管理代码。springboot中声明式事务只需要加一个注解就可以完成这些一些重复性操作:(这里最好不要写在测试类中,可能会出问题,测试框架(如 JUnit)通常有自己的事务管理机制)我们只需要关心sql的执行,不需要去管数据库的连接,事务的提交和回滚问题。
2025-01-16 15:08:02
385
原创 动态代理和静态代理
jdk动态代理的实现方式主要是依赖于Java的反射机制,通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口实现。代理模式(Proxy Pattern)是一种常用的设计模式,代理对象可以在不修改被代理对象的前提下,为被代理对象附加额外的功能或控制。我们可以看出来弊端,对于每个需要代理的类,都需要手动编写一个对应的代理类。3.写一个代理类实现接口并依赖注入car类,实现代理,这样我们就可以在不改变car的基础方法上做到增强。
2025-01-15 23:35:05
441
原创 spring框架中的aop详解
如果需要执行通知逻辑,AOP框架会在目标方法执行前、执行后或抛出异常时等时机插入相应的通知代码。然后在切面类中创建方法加入需要增强的代码块,在这个方法上添加合适的通知方法,并确定切点表达式,明确指出要将代码增强到哪些方法中。aop的实现首先是需要一个类上加上@Aspect注解,并将这个类注入到spring容器中管理,而这个类就叫切面类(这个类确定了要在程序哪个面进行切入)。添加一个log方法,在这个方法上加上@Before前置通知注解,并给这个方法设置切入点,告诉这个切面类在哪个切入点执行。
2025-01-15 21:34:12
737
原创 spring中bean的生命周期
初始化完成后,会将这些对象放入到map中,spring容器通过getbean方法获取到响应的bean开始使用,最后spring容器关闭,调用销毁方法销毁bean。在销毁bean时也会有一些方法供我们去操作,方便我们拓展一些功能。spring容器开始实例化bean(在内存中分配空间,生成一个原始的未配置的对象),生成之后开始解析bean之间的依赖注入,对Bean的属性进行赋值,包括通过构造器注入、setter方法注入等方式。解析完之后开始初始化,初始化时会调用一些方法,我们可以在这些方法中写一些处理逻辑。
2025-01-14 23:17:45
345
原创 @Value注解的使用
Value注解是加在基本数据类型的属性和引用数据类型属性上的,也可以用在参数上。主要是作用就是获取参数值。@Value注解中的SpEL表达式也是主要用于简单的值注入和字符串操作。比如我们获取yml文件中的配置值。
2025-01-14 21:03:53
223
原创 @Autowired注解使用
Autowired注解是Spring框架提供的注解,专门用于Spring容器中的依赖注入,@Autowired注解作用就是将bean注入到另一个bean中去,除了这个注解可以实现注入,还有多种方法可以实现注入,比如@Bean标记的类也可以使用参数传递的方式注入。除了@Autowired还有一种时@Resource注解,区别就是@Resource注解会先去spring容器找名称,再去找类型,哪个都可以。参数上加上@Autowired注解:(当这个需要注入的bean是可选状态时,我们加入注解)
2025-01-14 19:36:06
502
原创 @Import注解简单使用
举个例子:A类是个bean,在A类上使用@Import标签注入B类,然后使用@Autowired引用。@Import注解只能写在类上,而且被标记的类也必须是个bean。@Import的作用也是注入一个Bran。
2025-01-14 18:00:40
215
原创 什么是bean?
我们必须将@Bean标注的的方法放在@Configuration类中才能发挥最大作用,这里我们@Bean标注的方法会返回一个接口对象。这个对象会被注入到spring容器中交给spring管理,当我们使用时从spring容器中获取,我们可以在这里对这个对象进行实例化干预,比如给B类设置一些初始化值。在@Configuration标注的类中被@Bean标签标注的方法都返回一个对象,这个对象被注入spring容器中进行管理(这个对象不用再加@Component注解)。我们可以对这个对象进行实例化干预。
2025-01-14 17:42:55
236
原创 JWT的简单使用
JWT的核心思想是将信息编码为一个JSON对象,然后对这个对象进行Base64编码和签名,以确保其完整性和来源的真实性。JWT通常包含三个主要部分:头部(Header)、载荷(Payload)和签名(Signature)。JWT(JSON Web Token)定义了一种用于在各方之间安全地传输JSON对象作为令牌,用这些令牌作为身份验证和信息交换。1.头部信息(调用JWT.create()方法时,库内部会创建一个默认的头部,所以不用自己创建)
2025-01-04 00:06:35
501
原创 openFeign的基本使用
openFeign是一个声明式的web客户端,它简化的服务之间的调用通信。它通过定义接口配合注解来调用远程服务,让服务之间调用跟本地方法一样。大白话就是openFeign可以跨服务调用各自的方法,就像打了jar包放你本地一样用。用一个小例子来演示一下:(我演示的没有集成nacos)2.创建两个springboot项目A和项目B。1.使用openFeign需要导入依赖。在A类中写一个接口指向B类接口类。在浏览器访问A类地址就可以了。先在B项目写一个b类方法。
2025-01-03 11:34:24
378
原创 git的简单使用流程
5.现在本地仓库已经有了,我们是首次提交到gitee所以用idea集成的gitee插件操作,操作完成后查看gitee就可以看到提交的项目了。3.打开idea添加项目,并添加git仓库管理,这里有多种方法,可以用idea设置,也可以在项目的文件夹下执行git init命令。git其实就是一个分布式的版本管理工具,没有中央服务器,每个人的电脑上都有完整的版本库。4.这时你的项目已经使用git仓库管理记录了,接下来先把项目使用命令提交到本地仓库试试。2.idea集成git和gitee(需要你自己登录一下)
2025-01-02 16:26:49
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅