- 博客(135)
- 收藏
- 关注
原创 Spring-静态代理,动态代理(jdk,CGLIB)
原始的类是MyService ,这里要实现代理,就让代理类MyServiceProxy 和原始的类MyService 都实现一个接口BusinessService。MyService (原始业务类,待增强)开始实现手动代理,增强业务类:(1)接口(便于实现代理)(3)手动编写代理类MyServiceProxy(4)调用:需要先创建原始类,再将原始类交给代理类实现。
2025-11-11 13:59:09
301
原创 SpringCloud微服务-Day4 网关
本文摘要:文章介绍了微服务架构中网关的核心作用及实现方案。网关作为统一入口,负责请求路由、负载均衡和身份校验,通过与Nacos注册中心集成实现服务发现。重点讲解了基于JWT的登录校验机制在网关层的实现,包括路由过滤规则配置、自定义全局过滤器开发,以及用户信息传递方案。针对微服务场景,提出了通过请求头传递用户信息、线程本地存储(ThreadLocal)和OpenFeign拦截器三种方式解决服务间用户信息共享问题,确保系统安全性和代码复用性。文章包含完整的配置示例和代码实现,覆盖了从网关路由到服务间调用的完整鉴
2025-10-23 15:48:36
982
原创 SSM-SpringBoot开发(yaml配置文件,多环境开发)
SpringBoot开发实践摘要本文介绍了SpringBoot开发中的关键技术和配置方法,主要包括:YAML配置文件语法及数据读取的三种方式(@Value注解、Environment对象、实体类绑定)多环境开发配置(yaml和properties格式),以及通过命令行切换环境Maven与SpringBoot多环境配置的兼容问题及解决方案SpringBoot整合JUnit测试和MyBatis-Plus的实践MyBatis-Plus分页查询实现和拦截器配置重点讲解了配置文件层级关系、数据绑定、
2025-10-12 00:37:41
858
原创 苍穹外卖-Day7(缓存菜品/套餐,清除缓存)
在大量用户访问的高并发场景下(如外卖平台),系统面临每秒数万甚至数十万次请求时,传统数据库(如 MySQL)难以承受直接压力,可能导致响应延迟、服务崩溃。Redis是通过键值对实现的,对于高并发读 / 写,他的操作复杂度为O(1)。能够有效应对高并发问题。上图中体现了缓存菜品的实现流程:当前端请求菜品数据时,首先检查缓存(Redis)中是否存在目标数据,存在则直接使用缓存中数据进行返回,不查询数据库;不存在则查询数据库返回数据,并将数据保存在缓存中。
2025-10-12 00:37:05
1077
原创 Redis实战-商户查询缓存(Redis缓存及更新策略,缓存穿透,雪崩,击穿,缓存工具封装(函数式编程))
本文主要介绍了缓存相关概念及问题解决方案。首先解释了缓存作为数据交换缓冲区的概念,并展示了Java中使用Redis缓存的实现代码。重点分析了三种缓存问题:1)缓存穿透及其解决方案(缓存空值和布隆过滤器);2)缓存雪崩的预防措施(随机TTL、集群等);3)缓存击穿的两种解决方案(互斥锁和逻辑过期)。最后介绍了缓存工具类的封装实现,通过泛型和函数式编程提高代码复用性。
2025-10-12 00:36:11
699
原创 Redis实战-优惠券秒杀(超卖问题,一人一单,分布式锁,Redis优化秒杀,消息队列实现异步秒杀)
本文介绍了分布式系统中实现秒杀功能的完整技术方案,主要包括以下内容: 全局唯一ID生成器设计 基于Redis的自增功能实现分布式ID生成 采用时间戳+序列号的结构保证唯一性和递增性 秒杀基础功能实现 使用乐观锁解决库存超卖问题 通过分布式锁保证一人一单限制 Redis分布式锁优化 基于Redisson实现可重入锁 利用WatchDog机制实现锁自动续期 通过主从集群提高可用性 秒杀性能优化方案 将库存校验前置到Redis中 使用Lua脚本保证原子性操作 采用消息队列实现异步下单 高级消息队列实现 基于Str
2025-10-12 00:35:28
938
原创 SpringCloud微服务-Day2 Docker
官网文档:(1)基于Ubuntu基础镜像,利用Dockerfile描述镜像结构:(2)也可以直接基于JDK为基础镜像,省略前面的步骤:镜像的结构是怎样的?l镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件,这些文件分层打包而成。Dockerfile是做什么的?lDockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像构建镜像的命令是什么?镜像名Dockerfile目录。
2025-10-12 00:34:15
571
原创 SpringCloud微服务-Day1 MybatisPlus
需求:查询出所有收货地址在北京的并且用户id在指定范围的用户(例如124)的用户(1)在test中@Autowired@TestString address="北京";(2) Mapper中//"ew" 是 MyBatis-Plus 框架中约定的特殊参数名,代表 "Entity Wrapper"
2025-09-27 14:00:46
1183
原创 SpringCloud微服务-Day4注册中心
当一个cart购物车模块需要调用item商品模块的数据时,可以通过RestTemplate实现远程请求调用,但是这种方式直接将端口写死,若是采用商品模块采用多个服务器,则不知道该访问谁解决:使用注册中心解决多实例部署访问问题cart-service得到item-service的多个服务器信息后,使用负载均衡(随机,轮询,加权轮询,哈希)选择使用哪个服务,使用心跳续约让服务提供者定期向注册中心报告,说明当前服务仍然存在。
2025-09-27 02:00:00
1608
原创 Java_SSM_Bean的配置及实例化(Day1)
本文介绍了Spring框架中Bean的配置与实例化方法。首先,Bean可以通过id和name配置别名,并通过scope属性指定单例(singleton)或非单例(prototype)模式。其次,Bean的实例化可以通过构造方法、静态工厂、实例工厂以及FactoryBean实现。构造方法实例化默认调用无参构造,静态工厂通过factory-method指定方法,实例工厂则需先创建工厂对象再调用方法,而FactoryBean则简化了实例工厂的配置。最后,通过IOC容器获取Bean对象,并区分了实例化与依赖注入的概
2025-05-28 06:00:00
336
原创 SSM-IOC入门案例/DI入门案例
分层架构通常包括表现层、业务逻辑层和数据访问层。表现层负责用户界面和HTTP处理,业务逻辑层专注于业务规则,而数据访问层则处理与数据库的交互。在Java中,这种架构可以通过接口和实现类来实现,例如BookService和BookDao。为了进一步解耦和简化对象管理,可以使用IOC(控制反转)和DI(依赖注入)技术。通过Spring框架的IOC容器,可以将对象的创建和管理交给容器,而DI则允许在配置文件中定义对象之间的依赖关系,从而实现更灵活的代码结构。例如,通过配置文件applicationContext.
2025-05-28 00:00:00
468
原创 Java入门-Map双列集合
案例:假如需要定义一个方法求和,该方法可以灵活的完成如下需求:l计算1个数据的和。l计算2个数据的和。l计算3个数据的和。l计算n个数据的和,甚至可以支持不接收参数进行调用。注意:(1)一个形参列表中,只能有一个可变参数(2)可变参数必须放在形参列表的最后面(3)可变参数在方法内部就是一个数组。
2025-04-18 17:48:12
978
原创 JAVA入门-Collection单列集合体系
(1)修改学生对象,让他继承Comparable<Student> 并重写compareTo(Student o)方法@Override(2)此时将Student对象添加到TreeSet数组时会自动 调用compareTo()进行比较排序//Type2 对于自定义的对象,有两种自定义排序规则可以使用//方法1:让自定义的(学生)类实现Comparable接口,重写里面的compareTo方法来指定规则//创建一个HashSet数组,用于装学生对象。
2025-04-11 17:46:12
726
原创 Java学习-异常抛出及自定义
(1)定义一个异常类继承RuntimeException(2)重写构造器//自定义异常//必须让这个类继承RuntimeException,才能成为一个运行时异常类//设置有参构造器和无参构造器// 当你调用 super(message) 时,实际上是在调用父类(在自定义运行时异常的场景下,// 父类通常是 RuntimeException)的带参构造方法,// 把错误信息传递给父类。父类会将这个错误信息存储在异常对象里,方便后续在捕获异常时获取并处理。
2025-04-07 16:57:21
1015
原创 双工通信:WebSocket服务
(一)WebSocket概述WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。
2025-03-26 16:23:37
1713
原创 定时任务(Spring Task)实现@Scheduled(cron =“ 0/5 * * * * ?“)
EnableTransactionManagement //开启注解方式的事务管理。@EnableCaching //开始缓存注解功能。@EnableScheduling//开始定时任务。(2)再启动类上开始定时任务。(3)进行定时任务开发。(1)添加pom文件。
2025-03-26 11:19:19
1073
原创 JavaWeb(Day8)-登录校验(JWT令牌,Filter过滤器,Interceptor拦截器)
自定义拦截器 :实现接口,并重写其所有方法方法作用在请求处理前执行,返回true表示继续执行,false表示中断请求。在请求处理完成后(但尚未返回View)执行,可修改。在整个请求完成后(View渲染完毕)执行,通常用于清理资源、记录日志等。@Component//目标资源方法执行前执行。返回true:放行 返回false:不放行@Override//true表示放行//目标资源方法执行后执行@Override//视图渲染完毕后执行,最后执行@Override。
2025-03-03 10:24:04
1216
原创 JavaWeb学习-Mybatis(增删改查)
1.创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包。(项目工程创建完成后,自动在pom.xml文件中,导入Mybatis依赖和MySQL驱动依赖)-- mybatis起步依赖 -->-- mysql驱动包依赖 -->-- spring单元测试 (集成了junit) -->2. 准备数据(Mysql):创建用户表user,并创建对应的实体类User。-- 用户表name varchar(100) comment '姓名',
2025-02-12 22:20:20
1253
原创 Mysql学习-事务与索引
(1)事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么同时成功,要么同时失败。//l默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。eg:若有两个相关联的事务:如果删除部门成功了,而删除该部门的员工时失败了,此时就造成了数据的不一致。要解决上述的问题,就需要通过数据库中的事务来解决。-- 删除学工部-- 删除成功-- 删除学工部的员工。
2025-02-11 13:38:38
852
原创 Mysql-增删改查(知识点总结)
(1)创建表age INT,-- 创建students表,包含自增ID、姓名、年龄、成绩字段(2)-- 创建名为school的数据库-- 切换到school数据库(3)在表中增加一条/多条数据指定字段添加数据:表名字段名1,字段名2)values值1,值2);全部字段添加数据:表名values值1,值2, ...);批量添加数据(指定字段):表名字段名1,字段名2)values值1,值2), (值1,值2);
2025-02-05 17:01:42
1995
原创 Javaweb学习之Mysql(Day5)
(1)MYSQL通用语法SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用来增强语句的可读性(即,空格和缩进不影响代码的执行)。MySQL数据库的SQL语句不区分大小写。注释:1.单行注释:--注释内容 或注释内容(MySQL特有2.多行注释:/*注释内容*/(2)SQL分类。
2025-02-04 22:07:52
910
原创 JavaWeb入门-请求响应(Day3)
请求(HttpServletRequest):获取请求数据响应(HttpServletResponse):设置响应数据BS架构:Browser/Server,浏览器/服务器架构模式。,应用程序的逻辑和数据都存储在服务端(维护方便,响应速度一般)CS架构:Client/server,客户端/服务器架构模式(开发,维护麻烦,体验不错,响应速度快)
2025-02-02 14:05:46
875
原创 JavaWeb学习-SpringBotWeb开发入门(HTTP协议)
创建请求页面/*请求处理类,加上注解标识为请求处理类*//*指定浏览器处理的请求路径*///当浏览器请求/hello时会调用hello()方法启动类:/*启动类----启动springBot工程*/运行之后在浏览器中输入localhost:8080/hello:在浏览器界面按Fn+F12打开开发者界面,查看请求格式HTTP协议特点 :(1)基于TCP协议:面向连接,完全(2)基于请求-响应模型的:一次请求对应一次响应。
2025-01-25 15:29:44
1188
原创 Javaweb入门-Maven项目学习(Day2)
maven中的坐标是资源的唯一标识,可以通过坐标唯一定义资源位置* 使用坐标来定义项目或引入项目中需要的依赖* Maven坐标主要组成* groupld:定义当前Maven项目隶属组织名称(通常是域名的反写,eg:com.Ap)* artifactld:定义当前Maven项目的名称* version:定义当前项目版本号。
2025-01-23 16:29:54
893
原创 JavaWeb学习-Day1HTML学习
* 在style中h1为选择器:表示该样式针对所有的h1标签进行设置 */">聚焦访谈-今日技术(样式1)</h1>(3) CSS方法3:外联样式:外部定义一个CSS文件,使用link标签引用CSS文件。3.height:图像的高度(单位可以是像素/相对于父元素的百分比)2.width:图像的宽度(单位可以是像素/相对于父元素的百分比)<h1>样式2设置查看</h1><h1>到<h6>种字体型号从大到小。(2) Css方法2: 内嵌样式。(3)在<body>中填写内容。(1)CSS方法1:行内样式。
2025-01-22 16:51:46
428
原创 力扣(动态规划)-343整数拆分;96不同的二叉搜索树
所以这里遗漏了一种情况:若是i-j不进行划分时得到dp[i]的最大值,那么dp[i]=j*(i-j)从递推公式dp[i]=j*dp[i-j]可以看出后面的结果是由前面i-j推导出来的,所以i⼀定是从小到大遍历,先有dp[i - j]再有dp[i]此时由于j不会再被划分,所以要使dp[i]最大,则 就要对(i-j)进行拆分使得拆分后的几个整数的乘积最大,即dp[i-j]。综上所诉,我们的递推公式应该是dp[i]=max( j * dp[i-j], j*(i-j) )返回你可以获得的最⼤乘积。
2024-08-24 21:20:38
376
原创 力扣Hot100-208实现Trie(前缀树)-华为/腾讯面试题(重难点)
是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。// 返回 False。// 返回 True。// 返回 True。// 返回 True。1.不理解创建的对象,函数之间的调用关系。(发音类似 "try")或者说。
2024-08-19 15:25:52
422
原创 力扣Hot100-final关键字,常量,抽象类(模板方法设计模式),接口
使用关键字abstract修饰的类,方法叫抽象类,抽象方法注意:抽象方法必须在抽象类中实现//抽象方法:必须abstract 修饰,只有方法签名,不能有方法体//这里不能加{。。。}等方法体(四)抽象类的常见应用场景:模板方法设计模式 (面试,笔试,源码中会出现)(1)场景:学生,老师都要写一篇作文:神经网络 第一段,最后一段相同 正文不同未使用abstract时的学生类和老师类:System.out.println("\t\t《神经网络》");
2024-08-16 15:42:59
556
原创 Java基础入门-多态
/2. 运行时,如果发现对象的真实类型和 强制转换后的类型不同,就会报类型转换异常 的错误 eg:将s1强制转换为Teacher类型时编译不会报错,但是运行时发现不是一个类型就会报错。//因此java建议:使用 instanceof 关键字判断当前对象的真实类型,再进行强转。//多态存在问题:不能直接调用子类独有方法,可以使用多态下的类型转换实现。//1.存在 继承/实现关系 就可以在编译阶段强制类型转换,编译不会报错。//强制类型转换:子类 变量名 =(子类) 父类变量。
2024-08-14 16:14:35
531
原创 力扣Hot100-207课程表(vector初始化问题,拓扑排序)
你这个学期必须选修numCourses门课程,记为0到。在选修某些课程之前需要一些先修课程。先修课程按数组给出,其中,表示如果要学习课程ai则先学习课程bi。[0, 1]01请你判断是否可能完成所有课程的学习?如果可以,返回true;否则,返回false。true总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。这是可能的。false总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。
2024-08-11 15:20:23
299
原创 力扣Hot100-994腐烂的橘子
由于在找到腐烂水果后直接将它周围的水果置为腐烂水果,但是可能当前轮次腐烂的水果,又在当前轮次中影响周围水果,导致错误,所以可以标记:在不同轮次中被传染腐烂的水果标记为不同的数字,由于一开始time=0时,腐烂水果标记为2,所以在time=0到1这段时间被传染的水果标记为2+time+1,这样就可以使得本轮time=0时不会让标记为3的水果传染它周围的水果。左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0。
2024-08-10 22:52:22
517
原创 力扣Hot100-200岛屿数量(图论 * DFS遍历)
网格问题是由 m×n 个小方格组成一个网格,每个小方格与其上下左右四个方格认为是相邻的,要在这样的网格上进行某种搜索。岛屿问题是一类典型的网格问题。每个格子中的数字可能是 0 或者 1。我们把数字为 0 的格子看成海洋格子,数字为 1 的格子看成陆地格子,这样相邻的陆地格子就连接成一个岛屿。在这样一个设定下,就出现了各种岛屿问题的变种,包括岛屿的数量、面积、周长等。不过这些问题,基本都可以用 DFS 遍历来解决。
2024-08-10 11:53:52
1237
原创 力扣Hot-124二叉树中的最大路径和(p523二叉树直径的变形)
/2该路径不一定是从一个叶节点到另一个叶节点,所以,当左子树/右子树均为负数时,返回的最大值为当前节点值node(不需要再判断node的正负,当它作为子节点扔为负数时,会被舍弃)被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。//易错:1,可能出现左右子树为负数,此时以node为根的最大值应该为node自己。最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。节点,且不一定经过根节点。
2024-08-10 11:00:14
413
原创 力扣Hot100-236二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(两个节点中最高的那个节点p,因此将高度较矮的节点q沿着他的父节点向上爬,直到与另一个节点p在同一高度,否则,p,q两个节点都沿着父节点向上走,直到p,q指向同一个节点。再判断当前p,q是否为同一个节点,是则说明找到公共祖先。因为根据定义最近公共祖先节点可以为节点本身。两个节点的最近公共祖先所在的。的最近公共祖先是节点。的最近公共祖先是节点。
2024-08-09 11:49:50
496
3
原创 力扣Hot100-路径总和iii
例如:在下面图中,遍历左子树:10->5->3(1)->3(2)之后开始从3(2)回溯到节点3(1),此时需要减掉3(2),再开始遍历右子树,将3(1)的右孩子-2的值加入求和。将树中的节点分别视为根节点,从根节点开始使用前序遍历求和,当左子树节点遍历完后开始回溯,回溯时将加入计算的左子树值剪掉,继续计算右子树值。不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。//2:路径往下值得是各个节点不在同一层,但可以是根,左,右,不一定全是在左边。
2024-08-09 10:36:27
416
四川大学计算机考研经验总结
2024-08-09
四川大学软件工程考研复试资料
2024-08-09
四川大学C语言2001-2007
2024-08-09
计算机考研/工作必会100题
2024-08-09
帆软FR技术支持考核练习题
2024-05-08
一款航空订票系统,采用Java Swing框架进行界面开发,并通过JDBC连接MySQL数据库实现数据的存储和检索
2024-01-11
专家系统原理及实现,利用人工智能的产生式系统、图搜索算法以及专家系统的框架,建造一个小型医疗诊断或水果识别专家系统,具有知识库、
2024-01-11
java,航空订票系统,Java Swing、MySQL、Dijkstra算法
2024-01-11
(1)学习 Linux 内核的系统调用方法 理解并掌握 Limux 系统调用的实现框架、用户界面、参数传递、进入返回过程
2024-01-11
深度学习设计(VGG19)智能计算系统
2024-01-11
基于XML/注解的AOP模拟银行账户
2024-01-11
八数码问题求解,要求:设计估价函数,给出算法伪代码,并采用c或python编程实现,演示A算法的搜索过程,代码要适当加注释,实验
2024-01-11
八数码问题求解:设计估价函数,给出算法伪代码,并采用c或python编程实现
2024-01-11
成电(电子科技大学)820操作系统填空题汇总
2023-11-28
SQL+邮局订报子系统+Qt
2023-07-07
基于卷积神经网络(CNN)的超分辨率图像
2023-07-07
多媒体技术+pr,Dw,flash,ps
2023-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅