- 博客(132)
- 收藏
- 关注
原创 强引用、弱引用、软引用、虚引用
引用类型核心特点选择依据典型场景强引用不回收,OOM 风险对象必须存在(核心业务数据)订单、服务实例、集合元素软引用内存不足时回收有用但非必需(缓存)图片缓存、临时数据缓存弱引用GC 时立即回收临时数据、避免内存泄漏WeakHashMap、监听器虚引用仅跟踪回收,无实际引用释放非堆资源、GC 日志DirectByteBuffer 清理。
2025-08-20 08:56:21
1020
原创 抽象类和接口的区别
通过implements实现类实例化PayService pay = new AliPayService();默认方法全是public abstract(Java8 起支持default/static方法)通过工厂方法返回子类实例(SpringAbstractApplicationContext)通过 extends 子类实例化 Animal dog = new Dog();接口:靠“实现类” + “匿名类” + “Lambda” + “动态代理”。抽象类:靠“子类” + “匿名类” + “工厂模式”。
2025-08-18 21:00:46
802
原创 OOP三大特性
BaseEntity、BaseController、模板方法模式。接口编程、Spring IOC、策略模式。DTO/VO、安全控制、统一 API。同一接口不同实现,运行时表现不同。方法重写、父类引用指向子类对象。隐藏内部细节,仅对外暴露接口。子类复用父类的属性和方法。
2025-08-18 20:00:15
929
原创 128陷阱
包装类采用了缓存机制来优化内存使用和性能。这一机制可能会导致一些看似矛盾的行为,通常被称为“128陷阱”。对于数值型包装类,如果数值一样但是不在-128~127之间,则不是同一个对象。对于Char、Boolean、Byte,需要 ≤ 127这个范围的使用频率比较高,同一个变量指向同一个对象,会节省内存。
2025-08-18 17:54:43
245
原创 五种Excel表格导出方案
大数据量导入导出(>10 万行)、Spring Boot 快速集成。需要精细控制 Excel 样式、公式或旧版 .xls 兼容的场景。内存消耗较大(XSSF 全内存加载,SXSSF 流式写入可缓解)导出含子表格的报表(如订单+商品明细)、需要表头校验的场景。遗留系统维护、无需新 Excel 格式的简单导出。Spring Boot 大数据量导入导出。代码量较多,需要手动处理行列与类型转换。精细控制 Excel 样式/公式。中(SXSSF 优化)⭐⭐⭐⭐⭐(百万级)旧系统维护/简单导出。
2025-08-10 21:39:24
748
原创 ECharts 的理解和简单应用笔记
ECharts 是一款由百度团队开发的开源可视化图表库,它基于 JavaScript,能够为用户提供丰富多样的图表展示功能,帮助用户将复杂的数据以直观、清晰的图表形式呈现出来。丰富的图表类型:支持折线图、柱状图、饼图、散点图、雷达图、地图等多种常见图表类型,同时还提供了一些特色图表,如漏斗图、仪表盘等,满足不同场景下的数据可视化需求。高度的可定制性:允许用户对图表的样式、颜色、字体、坐标轴、图例等各个部分进行自定义设置,使图表能够更好地融入到不同的页面设计和品牌风格中。
2025-08-10 21:33:20
418
原创 SpringBoot实现文件上传
前端访问http://localhost:8080/community/upload/face/123.jpg时,Springboot会映射到file:D:/community/upload/face/123.jpg,协议的切换和localhost:8080的变动是如何实现的。这意味着浏览器访问http://localhost:8080/community/upload/face/xxx.jpg 时,Spring 会从 D:/community/upload/face/xxx.jpg 读文件并返回。
2025-08-10 21:29:30
949
原创 Mybatis Plus 多数据源
MyBatis Plus 的 多数据源支持是通过 DataSource 来实现的,它允许在同一个应用中同时连接多个数据库,适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等模拟一个纯粹多库的一个场景,其他场景类似。
2025-07-27 17:48:24
1806
原创 MyBatis Plus 代码生成器
MyBatis Plus 代码生成器 是 MyBatis Plus 提供的一个工具,用于自动生成 Java 代码,包括:实体类(Entity)、Mapper 接口、Mapper XML 文件、Service 和 ServiceImpl、Controller支持模板引擎(默认是 Velocity,也支持 Freemarker、Beetl)可配置性强(包名、表名、字段策略、命名规则等)支持多种数据库(MySQL、PostgreSQL、Oracle、SQL Server 等)自动识别主键、字段类型。
2025-07-27 17:44:13
380
原创 MyBatis Plus 乐观锁与悲观锁
小王将商品减了30元,并将100-30=70元存入了数据库。是的,如果没有锁,小李的操作就完全被小王的覆盖了。正好一个小时后,老板觉得商品价格增加到150元,价格太高,可能会影响销量。又通知小王,你把商品价格降低30元。如果被修改过了,则重新取出的被修改后的价格,150元,这样他会将120元存入数据库。如果是悲观锁,小李取出数据后,小王只能等小李操作完之后,才能对价格进行操作,也会保证最终的价格是120元。⚠️ 此时数据库 version 已是 2,**不再匹配** → **更新失败** → 返回 0。
2025-07-27 16:28:37
706
原创 MyBatis Plus 分页
*** 自定义分页* @param page:传入分页对象进行分页,SQL中不需要对该参数进行处理* @param name:条件查询参数* @return*/
2025-07-27 15:14:04
150
原创 MyBatis Plus 中的条件构造器
在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若没有选择则一定不能组装,以免影响SQL执行的结果。相比于 QueryWrapper ,UpdateWrapper 使用时,既可以使用条件判断,也可以直接设置值。类似于 a AND ( b OR c)时,需要使用 and 方法进行区别。模糊查询 name 字段,区间查询 age 字段,email 字段非空。使用链式拼接 Condition。
2025-07-27 15:10:23
416
原创 MyBatis Plus 对数据表常用注解
TableName 注解用于 指定实体类对应的数据库表名,当实体类的名称与数据库表名不一致时,可以用此注解进行映射。此外,@TableName 还支持设置一些其他的配置选项,比如全局表名前缀、后缀的处理。如果不使用 @TableName,MyBatis-Plus 默认认为表名与类名一致,即表名为 user。此时需要用 @TableName("user_info") 来指定正确的表名。
2025-07-26 20:50:26
823
原创 SpringBoot 集成Mybatis Plus
MyBatis-Plus 是在 MyBatis 基础上进行增强的一个持久层框架,旨在简化 MyBatis 的开发过程,提高效率,降低重复代码。它并不改变 MyBatis 的核心理念,而是在其上层进行了封装,使开发者可以更方便地进行 CRUD 操作和复杂查询。MyBatis 本身需要手动编写 SQL 和 Mapper 接口,而 MyBatis-Plus 提供了丰富的自动化功能,如内置通用 Mapper、Service、分页插件、条件构造器等,从而大大减少了模板代码的数量。
2025-07-25 21:40:00
1359
原创 SpringBoot配置外部Servlet
创建 JavaMavenWeb 项目会更简单,不需要设置打包方式和创建 WEB-INF 目录。File —》Project Structure —》Modules 中检查打包位置。(4)指定嵌入式 Tomcat 作用域指定为 provided。(1)创建 WEB-INF 和pages 目录。(3)导入 SpringBoot 相关依赖。(2)创建 web.xml 配置文件。(3)创建 hello.jsp 界面。(2)设置打包方式为 war 包。Controller 类。
2025-07-25 20:54:11
318
原创 SpringBoot配置文件
SpringBoot 使用一个全局的配置文件,配置文件名称固定:且 .properties 的优先级高于 .yml,当没有 .properties 时会使用 .yml 中的配置使用配置文件可以修改 SpringBoot 自动配置的默认值,SpringBoot 在底层会给我们配置好。
2025-07-25 20:50:47
903
1
原创 如何理解SpringBoot starters的自动装配
Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的 META-INF/spring.factories 文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。
2025-07-25 20:39:46
1665
原创 SpringBoot创建项目的方式
Spring 官网目前只支持3.0+的版本了,JDK只支持17、21和 24的版本。创建一个JavaMaven项目,项目中引入 SpringBoot 父工程依赖。引入后添加springboot的相关依赖,这里展示核心依赖。properties配置文件的优先级yml配置文件高。Spring版本选择2.7.6,选择合适的依赖添加。所有的类应该写在启动类所在包的同包或其子包下。mappers用于存放持久层的映射xml文件。阿里云可以支持JDK8的版本。进入后,就可以信息的配置。进入官网,选择合适的版本。
2025-07-25 20:36:57
421
原创 访问 gitlab 跳转 0.0.0.0
3、检查服务器是否对外开放80端口(gitlab 默认使用80端口)如果没有SSH 、HTTP、HTTPS 开放,需要增加规则进行添加。2、检查服务器端口是否被占用。1、检查防火墙是否关闭。
2025-07-19 17:23:18
353
原创 gitlab修改DNS解析配置文件
在Linux (CentOS 7.9) 云服务器上解压 gitlab 时提示需要 Python 的环境。需要检查并修复 /etc/resolv.conf 文件,添加可用的 DNS 服务器。ping mirrors.aliyun.com 测试一下,出现域名无法解析的错误。yum 下载Python环境时,又提示镜像错误。清空或修改内容为如下内容,使用阿里DNS。
2025-07-19 17:14:40
279
原创 Git仓库使用
Gitlab的rpm包集成了它需要的软件,简化了安装步骤,所以直接安装rpm包即可,rpm包的获取从官方网站或者国内镜像源(如:清华https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/)获取,gitlab又分为社区版和企业版(收费),这里部署的是社区版本10.8.4。第⼀次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master 分支关联起来。
2025-07-19 17:12:30
1573
1
原创 Git基础
除了可以在项目中定义.gitignore文件外,还可以设置全局的.gitignore文件来管理所有Git项目的行为。这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。可以在任意目录下创建相应的.gitignore文件,然后再使用以下命令配置Git。
2025-07-19 16:56:15
784
原创 Spring实现AOP
AOP(面向切面向切面编程,Aspect-Oriented Programming)是一种编程范式,它关注于将横切关注点(cross-cutting concerns)与业务逻辑分离。横切关注点通常是一些与业务逻辑无关,但又需要应用到多个模块的功能,如日志记录、安全控制、事务管理等。在传统的 OOP(面向对象编程)中,代码通常通过继承、接口和多态来组织和复用。AOP 通过“切面”(Aspect)来实现功能的模块化,使得这些横切关注点能够单独提取出来,并可以在不修改现有代码的情况下,插入到程序的执行流程中。
2025-05-15 15:42:34
1127
原创 数据库事务以及JDBC实现事务
数据库事务(Database Transaction)是数据库管理系统中的一个核心概念,它代表一组操作的集合,这些操作要么全部执行成功,要么全部不执行,即操作数据的最小执行单元,保证数据库的数据一致性、完整性和可靠性。但如果在第一个操作完成后,第二个操作失败了(比如系统崩溃),那么账户A的100元已经被扣除了,但是账户B并没有收到这100元。一致性:如果转账开始前的数据库状态是合法的(如余额不为负),那么转账完成后,数据库状态依然是合法的(A账户不会有负数,B账户的余额增加了100元)。
2025-05-11 11:39:01
1032
原创 JDBC链接数据库
JDBC连接数据库的七步走:jdbc链接数据库* 1.加载驱动* 2.获取链接(url 用户名 密码)* 3.编写sql* 4.获取执行sql的statement对象* 两个 stmt(sql注入(字符串拼接)) pstmt(预编译 防止sql注入 占位符)* 5.执行 stmt并获取结果* 6.遍历结果集* 7.关闭资源(先开启的后关闭)
2025-05-10 19:27:51
1259
原创 SpringMVC框架(一)
SpringMVC是⼀种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow⾥⾯。Spring 框架提供了构建 Web 应⽤程序的全功能 MVC 模块。使⽤ Spring 可插⼊的 MVC 架构,从⽽在使⽤Spring进⾏WEB开发时,可以选择使⽤Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在⼀般不⽤),Struts2等。
2025-04-30 10:54:48
624
原创 Maven私服搭建
正式开发,不同的项目组开发不同的工程。maven-dao 工程开发完毕,发布到私服maven-service 从私服下载 dao。公司在自己的局域网内搭建自己的远程仓库服务器,称为私服。简单说,Maven私服就是自己搭建的一个Maven仓库服务器,用来存放Java项目用到的各种依赖包(JAR、POM等文件)。
2025-04-26 21:10:21
2018
原创 Maven进阶
比如我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的公共模块,比如说每个模块都需要javaseo-utils,在编译的时候,maven-compiler-plugin插件也要被引入,maven仓库地址以及发布目录都是相同的配置。我们可以使用Maven的继承功能,把公共的配置信息写到父模块中,子模块只要继承了该父模块,也会继承父模块的配置信息。Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,生命周期只是定义了一系列的阶段,并确定这些阶段的执行顺序。
2025-04-26 18:49:53
1134
原创 Spring MVC拦截器
拦截器是 SpringMVC 提供的一种可以在请求处理过程中对请求进行预处理或后处理的机制。简单来说,拦截器就像是一位“守门员”,它拦住所有进来的请求,根据设定的规则决定是否放行或者进行某些操作。在请求进入 Controller 之前做一些操作(如权限检查、日志记录、性能监控等)。在请求返回前做一些操作(如对返回数据进行修改、记录日志等)。
2025-03-26 15:26:04
1124
原创 Spring MVC的请求和响应
在Web应用中,请求与响应是前端与后端之间的主要交互方式。具体到Spring MVC框架,请求通常指客户端发送到服务器的HTTP请求,而响应指服务器对请求的反馈。RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系。RequestMapping注解可以作用在方法和类上。3. 细节:路径可以不编写 / 表示应用的根目录开始。指定请求方法类型(GET, POST等)2. 作用在方法上:第二级的访问目录。1. 作用在类上:第一级的访问目录。指定返回的内容类型(MIME类型)
2025-03-24 16:28:01
1262
原创 Spring MVC配置
Spring MVC(Model-View-Controller)是 Spring 框架中专门处理 Web 层的模块。作为一款功能强大的 Web 框架,它遵循 MVC 模式,将应用的各个部分分离开来。具体来说,Spring MVC 是一个前端控制器(DispatcherServlet),用于接收用户请求,并根据不同的请求,分发到具体的 Controller。然 Controller 处理请求逻辑并返回数据,最后将结果交给 ViewResolver 解析为具体的视图。
2025-03-24 16:23:56
1476
原创 Spring 的AOP
AOP(Aspect-Oriented Programming,面向切面编程)是面向对象编程(OOP)的一种补充。AOP通过横切关注点(cross-cutting concerns)来增强应用程序功能。与OOP将代码分为类和对象不同,AOP将应用分为“切面(Aspect)”和“通知(Advice)”。通过在运行时动态地插入逻辑,AOP帮助我们集中处理某些跨越多个模块的功能,如日志记录、事务管理和安全控制等。
2025-03-22 21:24:25
924
原创 Spring的IOC
IOC,全称为 Inversion of Control(控制反转),顾名思义,它是将原本由程序员控制的对象创建、对象依赖关系的管理等责任反转给框架来做,程序员只需要编写业务逻辑,框架会处理对象的创建和管理。在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况:比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题。
2025-03-22 20:55:29
1284
原创 Linux内核源码介绍
Linux的内核源代码可以从网上下载,解压缩后文件一般也都位于linux目录下。内核源代码有很多版本,可以从 Linux0.01 内核入手,总共的代码1w行左右,最新版本 5.9.8 总共代码超过700w行,非常庞大.
2025-03-22 08:52:13
383
原创 Linux日志管理
日志文件是重要的系统信息文件,其中记录了许多重要的系统事件包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因或者受到攻击时攻击者留下的痕迹。可以这样理解 日志是用来记录重大事件的工具在文件 /etc/rsyslog.conf 中自定义日志格式*.* /指定文件目录根据实际情况来设定日志类型和日志级别。
2025-03-20 22:52:01
812
原创 理解数据库事务
事务(Transaction)是指对数据库进行的一系列操作,它们必须作为一个整体被执行。事务的基本要求是要么全部成功,要么全部失败。无论在执行过程中遇到什么问题,事务都应该保证原子性、一致性、隔离性和持久性。在数据库系统中,事务通常由若干个SQL语句组成,这些SQL语句在某个时刻必须被看作一个“整体”来执行。
2025-03-20 10:41:03
881
原创 Linux的Shell编程
Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。对于JavaEE和Python程序员来说,工作的需要。Boss会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。对于大数据程序员来说,需要编写Shell程序来管理集群。Linux Shell中的变量分为:系统变量和用户自定义变量。系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME显示当前shell中所有变量:set定义变量 : 变量=值。
2025-03-18 23:22:30
3273
原创 Linux中Tomcat、idea和MySQL的安装
centos7自带的类mysql数据库mariadb会跟mysql冲突,要先删除。运行 rpm -e --nodeps mariadb-libs,卸载。运行 rpm -qa | grep mari。修改密码设置策略,此值默认为1,2表示强密码。查看初始密码:j>44rvBpJtr#输入初始密码进入MySQL。
2025-03-17 16:27:28
612
原创 RPM 与 YUM
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。Linux的分发版本都有采用(suse,redhat,centos 等等),可以算是公认的行业标准了Yum 是一个sheli前端软件包管理器。
2025-03-17 10:58:25
685
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅