- 博客(107)
- 收藏
- 关注
原创 登录 双层拦截器+redis
无论用户访问什么页面(主要是非拦截页面,都尝试刷新token)排除公开接口(/shop/**, /blog/hot等)自动续期:用户活跃时自动续期,不活跃时自然过期。延长有效期:从访问时间开始,再延长30min。用户访问公开接口但携带有效token时。滑动过期:每次访问都重新计算过期时间。始终放行(return true)主要作用是刷新token有效期。依赖第一层拦截器设置的用户信息。:只对需要登录的接口进行验证。用户每次访问需要登录的接口时。拦截所有请求(/**)只拦截需要登录的接口。
2025-09-19 23:20:05
297
原创 JDK 动态代理从原理到实战案例
JDK 动态代理是 Java 语言自带的代理机制,它基于反射实现,允许在运行时动态生成代理类。必须基于接口实现(这是与 CGLIB 代理的主要区别)通过类动态生成代理对象通过接口定义方法增强逻辑代理类在程序运行时动态生成,无需手动编写动态代理的典型应用场景有:日志记录、性能监控、事务管理、权限控制等,它能有效降低代码耦合度,符合开闭原则。JDK 动态代理必须基于接口,我们首先定义明星的行为接口Star// 唱歌方法// 跳舞方法必须定义接口,目标类实现该接口通过生成代理对象通过。
2025-08-21 15:28:40
1029
原创 强、软、弱、虚引用详解
在Java中,引用类型决定了对象的生命周期以及垃圾回收器对对象的处理策略。jdk1.2后引入了强引用、软引用、弱引用和虚引用四种类型、它们的强度依次减弱。
2025-08-21 10:19:57
1104
原创 抽象类与接口的区别
(1)抽象类:用abstract class定义,子类通过extends继承,且Java中类只能单继承(一个子类最多继承一个抽象类)。abstract class Animal { // 抽象类// 抽象方法(无实现)public void breathe() { // 具体方法(有实现)System.out.println("呼吸");class Dog extends Animal { // 单继承@OverrideSystem.out.println("狗吃骨头");
2025-08-18 22:12:03
473
原创 封装、继承、多态的含义及其项目应用
具体来说,封装就是将属性和操作方法捆绑在一起,形成一个独立的"类",并通过访问控制(如private、public 等修饰符)限制外部对内部的直接操作,只允许通过预先定义来访问或修改数据其核心思想是:"
2025-08-18 21:47:08
985
原创 Nginx学习与安装
nginx是高性能的开源HTTP服务器。反向代理服务器、负载均衡器和HTTP缓存典型的应用场景为:(1)作为静态资源服务器(部署HTML、CSS、JS、图片等)(2)作为 反向代理服务器,转发请求到后端应用服务器(如Tomcat、node.js)(3) 实现负载均衡,分发请求到多个后端节点(4) 作为API网关,处理请求过滤、认证、限流等功能。(5)部署SSL/TLS证书,实现HTTPS加密传输当我们部署项目的时候,突然就接触到了nginx,然后又提到了反向代理,所以反向代理到底是什么。
2025-08-13 16:04:32
1068
原创 Linux常用指令
1.ip地址查看命令:ip addr·用法:ip addr2.Linux的IP地址不可用时处理第一步:关闭网络管理服务第二步:永久关闭Manager网卡第三步:重启network网卡若报错用这个指令。
2025-08-12 22:40:27
278
原创 Linux安装部署mysql
编辑my.cnf文件,将【lower-case-table-names=1】参数加入【mysqld】下边。若为空信息,说明当前环境没有安装mysql,若有,则先删除相关配置。2、通过再别的地方下载后复制到/usr/local路径下。QAZ1qaz】是新的密码,自己根据自己情况进行设置。我当前使用的是MySql 5.7版本。直接下载到/usr/local路径下。并且在my.cnf文件中没有添加。初始化命令执行后,在最后会显示。如果不小心忘记密码了,请参考。,第一次登录需要使用。在初始化数据库的参数有。
2025-08-12 10:39:34
871
原创 Spring MVC 注解参数接收详解:@RequestBody、@PathVariable 等区别与使用场景
处理请求体 JSON,处理 URL 路径参数,处理 query 或表单数据。在参数名匹配且为简单类型 / JavaBean 时,可省略注解实现隐式绑定,但显式使用注解能让代码更清晰。掌握这些注解的区别和使用场景,能帮助开发者更灵活地处理各种参数传递需求,写出更规范、易维护的接口代码。
2025-08-11 20:57:53
1183
原创 Spring Boot 菜单删除功能的实现与事务管理
在后台管理系统开发中,菜单管理是一个核心功能,而删除菜单作为其中的重要操作,需要考虑数据完整性、关联关系处理和操作安全性。本文将详细介绍 Spring Boot 环境下菜单删除功能的实现逻辑,包括关联数据处理、事务控制和异常处理等关键环节。
2025-08-11 20:54:36
730
原创 Springboot-vue 地图展现
页面加载时,百度地图组件初始化完成并触发initMap方法initMap方法中调用发起 API 请求请求通过封装的 API 函数发送到后端的接口后端接口查询所有小区数据并封装成统一格式返回前端接收数据并赋值给mapData通过v-for遍历mapData,在地图上渲染每个小区的标注和名称这个流程清晰地展示了前后端如何协同工作来实现地图展示功能,从前端的用户交互到后端的数据处理,再到最终的可视化呈现,每个环节都紧密相连,共同构成了完整的功能链路。
2025-08-11 20:48:57
857
2
原创 基于 Spring Boot 的登录功能实现详解
本登录功能实现了从验证码生成、用户身份验证到 Token 发放的完整流程,结合了 Redis 和 JWT 技术,既保证了系统安全性,又提升了用户体验。在实际应用中,还可以根据需求进一步增强,如添加登录次数限制、异常登录检测等功能。通过分层验证(验证码 -> 用户名 -> 密码)的方式,逐步过滤无效请求,既提高了安全性,也能给用户提供更明确的错误提示。
2025-08-11 20:37:57
474
原创 在 Spring 事务管理中,throw new RuntimeException(...) 能触发事务回滚,而普通异常(如受检异常)不能,核心原因与 Spring 事务的默认回滚规则和异常类型的特性
时,满足 Spring 事务的默认回滚条件,因此会触发事务回滚,撤销所有已执行的数据库操作(如删除摄像头、人员信息等)。,因为这类异常通常被认为是 “可预期的业务异常”(如文件不存在、网络超时等),开发者可能希望自行处理而不是回滚事务。及其子类)回滚”,这是框架设计时对 “异常是否属于意外错误” 的一种区分。总结:Spring 事务的默认回滚策略是 “只对未受检异常(此时事务不会回滚,已执行的数据库操作会被提交。如果需要让受检异常触发事务回滚,可以通过。及其子类属于未受检异常。手动指定回滚的异常类型。
2025-08-11 20:33:09
192
原创 三种常见的菜单路由封装方式详解
利用 HashMap 的 O (1) 查找特性,先构建映射关系再组装菜单树,提高效率。对于大多数后台管理系统,HashMap 映射方式是一个兼顾性能和灵活性的不错选择。在实际开发中,应根据项目的菜单层级需求、数据量大小和性能要求选择合适的实现方式。这种方式通过两层 for 循环分别处理父菜单和子菜单,实现相对直观简单。通过递归调用的方式,可以灵活构建任意层级的菜单结构。
2025-08-11 20:29:15
373
原创 Spring Boot 中 @Transactional 解析
在 Spring Boot 开发中,@Transactional 注解是实现数据库事务管理的关键工具,它能有效确保数据操作的原子性、一致性、隔离性和持久性(ACID)。本文将详细介绍 @Transactional 的使用方法、核心属性、原理以及常见的坑和解决方案。
2025-08-11 20:23:09
796
原创 SpringBoot 实现 Excel 导入导出功能的三种实现方式
当需要更精细的控制 Excel 格式时,可以直接使用 Apache POI 进行自定义开发,封装成工具类使用。// 数据起始行(跳过前2行表头)try {// 1. 复制模板文件// 源模板文件路径= -1){// 2. 打开新创建的文件并写入数据// 3. 创建单元格样式// 4. 写入数据i < size;i++){// 其他列...// 5. 保存并关闭优点完全自定义,灵活性高。
2025-08-11 18:57:06
931
原创 内置注解、元注解和自定义注解
注解是一种特殊的标记,可以嵌入到 Java 代码中,用于对代码进行说明、配置或标记。它不会直接影响代码的执行逻辑,但可以被编译器或运行时工具读取并处理,从而实现特定功能。@注解名称(属性名=属性值, ...),可以应用在类、方法、字段、参数等元素上。除了使用内置注解,开发者还可以根据需求定义自己的注解。自定义注解需要使用@interface关键字。// 元注解// 注解属性(类似接口中的方法,但实际是属性)// 默认值为空// 布尔类型属性,默认值为true。
2025-08-11 13:18:15
1043
原创 动态sql与sql注入
在 Java 开发中,动态 SQL 和 SQL 注入如同孪生兄弟,常常同时出现在数据库操作的场景中。很多开发者对两者的关系存在误解,认为动态 SQL 就是为了解决 SQL 注入,或者使用动态 SQL 必然导致安全风险。本文将从 Java 开发视角,深入解析动态 SQL 的本质、SQL 注入的成因,以及如何在保证灵活性的同时构建安全的数据库访问层。
2025-08-11 13:11:52
913
原创 解析Java1.8 新语法核心用法
Java 1.8(又称 Java 8)是 Java 语言发展史上的一个重要里程碑,引入了诸多革命性的新特性,让代码更简洁、更易读,同时提升了开发效率。本文将详细讲解 Java 8 最常用的新语法及写法格式,适合新手快速入门。
2025-08-11 12:02:19
528
原创 基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
人脸识别出入管理:通过摄像头采集人脸图像,自动识别人员身份并记录出入时间出入记录查询:支持按时间范围、人员姓名等条件查询出入记录,方便管理人员统计分析。
2025-08-05 22:54:30
671
原创 使用 ECharts 实现小区住户数量统计柱状图
通过本文的实现,我们完成了从后端接口获取小区住户数据,到使用 ECharts 绘制柱状图的全过程。设计数据库表结构并编写 MyBatis 映射实现后端接口,返回所需的统计数据前端引入 ECharts 库,编写 HTML 结构通过 JavaScript 请求后端接口,获取数据并配置 ECharts 图表渲染图表并处理窗口大小变化这种实现方式不仅可以用于小区住户统计,还可以根据实际需求修改后端接口和前端配置,应用于各种数据统计场景。
2025-08-05 22:37:38
420
原创 基于 Spring Boot + Vue 实现人脸采集功能全流程
无需额外依赖,利用原生 HTML5 API 和 Element UI 组件。前端页面是如何展示出图片的,请参考。
2025-08-03 21:00:46
1941
2
原创 http://localhost:8080/photos/xxx.png的本地图片访问方案
在 Web 开发中,让图片能够通过特定 URL 直接访问是非常基础且重要的功能。例如通过这样的地址直接加载图片,在用户头像展示、资料图片预览等场景中高频出现。本文将结合实际项目代码,详细讲解如何在 Spring Boot 环境中搭建这样的图片访问机制,从配置到代码实现全程干货。
2025-08-03 17:04:05
1192
原创 java 面试题(中等)
栈是 Java 内存模型中用于存储方法调用信息(如局部变量、方法参数、返回地址等)的区域,栈溢出指栈空间被耗尽而无法继续分配内存的异常(
2025-08-03 12:00:02
566
原创 Mybatis-plus多数据源
适用于多种场景:纯粹多库、 读写分离、 一主多从、混合模式等目前我们就来模拟一个纯粹多库的一个场景,其他场景类似场景说明:我们创建两个库,分别为:(以前的库不动)与(新建),将库的product表移动到库,这样每个库一张表,通过一个测试用例分别获取用户数据与商品数据,如果获取到说明多库模拟成功。
2025-07-27 17:19:40
394
原创 Mybatis-plus中的乐观锁与悲观锁
一件商品,成本价是80元,售价是100元。老板先是通知小李,说你去把商品价格增加50元。小李正在玩游戏,耽搁了一个小时。正好一个小时后,老板觉得商品价格增加到150元,价格太高,可能会影响销量。又通知小王,你把商品价格降低30元。此时,小李和小王同时操作商品后台系统。小李操作的时候,系统先取出商品价格100元;小王也在操作,取出的商品价格也是100元。小李将价格加了50元,并将100+50=150元存入了数据库;小王将商品减了30元,并将。
2025-07-27 16:59:31
718
原创 Mybatis-plus插件
(1)UserMapper中定义接口方法(2)UserMapper.xml中编写SQL</select>(3)测试@Test//获取分页数据System.out.println("当前页:"+page.getCurrent());System.out.println("每页显示的条数:"+page.getSize());System.out.println("总记录数:"+page.getTotal());
2025-07-27 16:25:58
325
原创 Mybatis-plus
若实体类类型的类名和要操作的表的表名不一致,会出现什么问题?我们将表user更名为t_user ,测试查询功能程序抛出异常, Table 'mybatis_plus.user'doesn't exist,因为现在的表名为t_user ,而默认操作 的表名和实体类型的类名一致,即user表在实体类类型上添加@TableName("t_user"),标识实体类对应的表,即可成功执行SQL语句在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t_或tbl_此时,可以使用MyBatis
2025-07-26 23:22:38
911
原创 MyBatis-Plus 通用 Service
MyBatis-Plus 的通用 Service CRUD 封装了IService接口,通过采用get查询单行、remove删除、list查询集合、page分页等前缀命名方式,进一步封装了 CRUD 操作,避免了 Mapper 层的混淆。同时,泛型T可以是任意实体对象,使得该接口具有很高的通用性。如果我们在项目中可能存在自定义通用 Service 方法的需求,建议创建自己的继承 MyBatis-Plus 提供的基类。官方文档地址为:[接口](A3)首先,我们需要定义一个实体类User。
2025-07-26 23:10:25
479
原创 探索 MyBatis-Plus
创建一个User实体类,使用 Lombok 注解简化代码@Data定义一个UserMapper接口,继承@Mapper// 插入一条记录// 删除(根据 ID 批量删除)> idList);// 根据 ID 修改// 查询(根据 ID 批量查询)// 查询(根据 columnMap 条件)// 根据 entity 条件,查询一条记录if (ts!= null &&!= 1) {// 根据 Wrapper 条件,查询总记录数。
2025-07-25 22:12:10
350
原创 字符串 “asdasjkfkasgfgshaahsfaf” 经过哈夫曼编码之后存储比特数是多少?
构建哈夫曼树时,每次合并频率最小的两个节点,最终每个字符的编码长度等于其在树中的深度(根节点深度为 0)。(注:字符串总长度为 6+6+1+1+2+3+2+2 =总和 = 12+12+9+8+8+8+5+5 =
2025-07-25 21:14:11
261
原创 Java经典笔试题
一级缓存:默认开启,作用于SqlSession级别,缓存当前会话中查询的结果,会话关闭后失效。二级缓存:作用于namespace(Mapper 接口)级别,多个SqlSession共享,需在 Mapper.xml 中配置<cache/>开启。查询时先查二级缓存,再查一级缓存,最后查数据库。接口绑定:将 Mapper 接口与 Mapper.xml 文件绑定,通过接口方法名匹配 XML 中的id,无需实现类即可调用 SQL。好处:简化代码(无需手动实现接口),类型安全(编译期校验方法名),便于维护。
2025-07-25 21:11:54
536
原创 使用外置的Servlet容器
、启动服务器就可以使用;包:启动服务器,服务器启动。容器:应用打成可执行的。、优化定制比较复杂.;)配置项目的目录结构。
2025-07-24 16:20:26
197
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅