自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 【测试】概念篇

你以为的模型:实际的模型:随着软件工程学科的发展,人们对计算机软件的认识逐渐深入。软件工作的范围不仅仅局限在程序编写,而是扩展到了整个软件生命周期,如软件基本概念的形成、需求分析、设计、实现、测试、安装部署、运行维护,直到软件被更新和替换新的版本。软件工程还包括很多技术性的管理工作,例如过程管理、产品管理、资源管理和质量管理,在这些方面也逐步地建立起了标准或规范。

2025-11-26 22:37:19 882

原创 【MyBatis-Plus】 从 CRUD 到复杂查询:MyBatis-Plus 助你快速搞定数据库操作

MyBatis-Plus(简称 MP) 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发. 提高效率而生特性:官方地址创建用户表,并创建对应的实体类User2.2 项目准备SpringBoot3yml 配置文件2.3 编码创建实体类 UserInfo编写Mapper接口类在创建出来的SpringBoot工程中,在src下的test目录下,已经自动帮我们创建好了测试类,我们可以直接使用这个测试类来进行测试.编写几个单元测试,测试基本的CRU

2025-11-25 22:09:21 608

原创 【无标题】四级翻译

【代码】【无标题】四级翻译。

2025-11-22 00:00:50 198

原创 【实战】博客系统:实现博客详情 + 实现登陆(JWT令牌)

我们开发的项目,在企业中很少会部署在一台机器上,容易发生单点故障.(单点故障:一旦这台服务器挂了,整个应用都没法访问了).所以通常情况下,一个Web应用会部署在多个服务器上,通过Nginx等进行负载均衡.此时,来自一个用户的请求就会被分发到不同的服务器上.目前点击博客列表页的"查看全文",能进入博客详情页,但是这个博客详情页是写死的内容.我们期望能够根据当前的博客id从服务器动态获取博客内容.比如我们出行在外,会带着自己的身份证,需要验证身份时,就掏出身份证,身份证不能伪造,可以辨别真假.

2025-11-21 22:32:12 831

原创 【实战】博客系统:项目公共模块 + 博客列表的实现

本文介绍了基于SpringBoot和MyBatis的博客系统开发过程。首先进行数据库准备,创建用户表和博客表,并插入测试数据。然后建立SpringBoot项目,配置MyBatis-Plus和数据源。项目采用分层架构,包含控制层、服务层和持久层。实现了统一返回结果处理,包括成功和失败的响应封装;设计了全局异常处理机制,自定义业务异常类。通过ResponseBodyAdvice实现响应数据的统一包装,确保接口返回格式一致。整个系统搭建了基本的框架结构,为后续业务功能开发奠定了基础。

2025-11-19 22:51:02 1005

原创 Spring事务和事务传播机制

事务是一组操作的集合,是一个不可分割的操作.事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求.所以这组操作要么同时成功,要么同时失败.事务传播机制就是: 多个事务方法存在调用关系时,事务是如何在这些方法间进行传播的.比如有两个方法A,B都被修饰, A方法调用B方法A方法运行时,会开启一个事务.当A调用B时, B方法本身也有事务,此时B方法运行时,是加入A的事务,还是创建一个新的事务呢?这个就涉及到了事务的传播机制.比如公司流程管理。

2025-11-17 23:43:48 1061

原创 【统一功能处理】SpringBoot 统一功能专题:拦截器、数据封装、异常处理及 DispatcherServlet 源码初探

主要介绍了SpringBoot对一些统一功能的处理支持.拦截器的实现主要分两部分: 1. 定义拦截器(实现HandlerInterceptor接口) 2. 配置拦截器统一数据返回格式通过来实现统一异常处理使用来实现,并且可以分异常来处理了解了DispatcherServlet的一些源码.

2025-11-13 22:53:38 763 1

原创 【统一功能处理】从入门到源码:拦截器学习指南(含适配器模式深度解读)

从session中获取用户信息,如果session中不存在,则返回false,并设置http状态码为401,否则返回true.@Slf4j@Component@Overrideif(session!= null){http状态码401: Unauthorized中文解释:未经过认证.指示身份验证是必需的,没有提供身份验证或身份验证失败.如果请求已经包含授权凭据,那么401状态码表示不接受这些凭据。

2025-11-12 23:33:54 960

原创 【实战】动态 SQL + 统一 Result + 登录校验:图书管理系统(下)

问题:如果修改常量session的key,就需要修改所有使用到这个key的地方,出于高内聚低耦合的思想,我们把常量集中在一个类里。用户登录时,我们已经把登录用户的信息存储在了Session中.那就可以通过Session中的信息来判断用户是否登录.后端数据所有的接口都要跟着修改,这样修改代码效率低,不放对所有后端返回的数据进行一个封装。我们修改图书信息,是根据图书ID来修改的,所以需要前端传递的参数中,包含图书ID.虽然我们做了用户登录,但是我们发现,用户不登录,依然可以操作图书.

2025-11-12 16:35:10 589

原创 【实战】数据库表设计 + 前后端交互 + 功能实现:手把手教你搭建图书管理系统(上)

提交的内容格式:bookName=图书1&author=作者1&count=23&price=36&publish=出版社1&status=1。这样的 HTTP 请求,通过currentPage 参数告诉服务器,当前请求为第几页的数据,后端根据请求参数,返回对应页的数据。数据库表是应用程序开发中的一个重要环节,数据库表的设计往往会决定我们的应用需求是否能顺利实现,甚至决定我们的实现方式.可以看到,添加图书之后,跳转到图书列表页面,并没有显示刚才添加的图书信息,接下来我们来实现图书列表。

2025-11-12 13:55:54 736

原创 【MyBatis】留言板数据不丢失的秘密:Spring Boot 整合 MyBatis 实现数据库持久化存储

now()可以替换成其他获取时间的标识符,比如:CURRENT_TIMESTAMP(),LOCALTIME()等。ON UPDATE now():当数据发生更新操作时,自动把该列的值设置为now(),

2025-11-10 22:25:21 379

原创 【MyBatis】搞定动态 SQL 拼接!MyBatis 6 大标签详解 + 注解 / XML 双实现

需求:传入的用户对象,根据属性做where条件查询,用户对象中属性不为 null 的,都为查询条件.如username 为"a",则查询条件为 where username=“a”之前的插入用户功能,只是有一个 gender 字段可能是选填项,如果有多个字段,一般考虑使用标签结合标签,对多个字段都采取动态生成的方式。只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR。:动态的在SQL语句中插入set关键字,并会删掉额外的逗号.(用于update语句中)

2025-11-08 23:49:52 838

原创 【MyBatis】 吃透 MyBatis:多表查询、SQL 注入防护(#{} vs ${})与连接池优化

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个.没有使用数据库连接池的情况: 每次执行SQL语句,要先创建一个新的连接对象,然后执行SQL语句,SQL语句执行完,再关闭连接对象释放资源.这种重复的创建连接,销毁连接比较消耗资源使用数据库连接池的情况。

2025-11-08 21:54:21 613 1

原创 【MyBatis】MyBatis XML 开发模式:配置、映射、CRUD 实战与结果映射全攻略

使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能.如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中.这篇文章主要来讲XML是如何使用的,本来也是先有的XML才有的后来的注解的方式,所以了解完注解的方式,再来看XML会特别简单,几乎没什么太大差别。关于开发中使用哪种模式这个问题,没有明确答案. 仁者见仁智者见智,并没有统一的标准,更多是取决于你的团队或者项目经理,项目负责人.同样的,使用XML 的方式进行查询,也存在数据封装的问题。

2025-11-07 10:00:24 1012

原创 【MyBatis】MyBatis 入门实战注解开发:配置、CRUD 与结果映射深度解析

在应用分层学习时,已经了解到web应用程序一般分为三层,即:Controller、Service、Dao.之前的案例中,请求流程如下: 浏览器发起请求,先请求Controller, Controller接收到请求之后, 调用Service进行业务逻辑处理, Service再调用Dao, 但是Dao层的数据是Mock的, 真实的数据应该从数据库中读取.我们学习MySQL数据库时,已经学习了JDBC来操作数据库, 但是JDBC操作太复杂了.

2025-11-07 00:01:08 617

原创 【SpringBoot】玩转 Spring Boot 日志:级别划分、持久化、格式配置及 Lombok 简化使用

日志对我们来说并不陌生,从JavaSE部分,我们就在使用来打印日志了。通过打印日志来发现和定位问题,或者根据日志来分析程序的运行过程。在Spring的学习中,也经常根据控制台的日志来分析和定位问题。随着项目的复杂度提升,我们对日志的打印也有了更高的需求,而不仅仅是定位排查问题。比如需要记录一些用户的操作记录(一些审计公司会要求),也可能需要使用日志来记录用户的一些喜好,把日志持久化,后续进行数据分析等。但是不能很好的满足我们的需求,我们就需要使用一些专门日志框架(专业的事情交给专业的人去做)。

2025-11-04 23:14:10 903 1

原创 【SpringBoot】基于 Hutool 的 SpringBoot 小案例:前后端分离验证码

1.生成验证码请求:请求URL:/captcha/getCaptcha响应:验证码图片内容浏览器给服务器发送一个这样的请求,服务器返回一个图片,浏览器显示在页面上2.校验验证码是否正确请求:请求URL:/captcha/check请求参数:captcha=xn8d请求参数:captcha=xn8d响应:true根据用户输入的验证码,校验验证码是否正确. true: 验证成功. false: 验证失败.我们的个人验证码案例,使用Hutool小工具来实现。

2025-11-04 14:55:36 713

原创 【SpringMVC】新手友好型小案例:一步步搭建功能完整的留言板(含问题排查+学习错误日志)

获取全部留言全部留言信息,我们用List来表示,可以用JSON来描述这个List数据.请求:响应: JSON格式"from": "黑猫","to": "白猫","message": "喵"},{"from": "黑狗","to": "白狗","message": "汪"},//...浏览器给服务器发送一个这样的请求,就能返回当前一共有哪些留言记录.结果以 json 的格式返回过来.发表新留言请求: body 也为 JSON 格式."from": "黑猫",

2025-11-03 23:57:04 950

原创 【SpringBoot】配置文件

为了更方便简单的访问数据库,出现了一些持久层框架,其实就是对JDBC进行了更深层次的封装.让用户通过简单几行代码就可完成数据库的访问.但是不同的应用程序访问的数据库不同,这些持久层框架就需要支持用户可以自定义配置数据库的连接信息.配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行.但是不同的用户有不同的偏好,我们可以把手机字体的大小放在配置文件中,当程序启动时,读取配置,以用户设置的字体大小来显示.

2025-11-02 22:53:01 907 3

原创 【SpringMVC】详解用户登录前后端交互流程:AJAX 异步通信与 Session 机制实战

1. 校验接口请求路径: /user/login请求方式: POST接口描述: 校验账号密码是否正确参数名类型是否必须备注userNameString是校验的账号passwordString是校验的密码响应内容:true //账号密码验证成功false//账号密码验证失败2. 查询登录用户接口请求路径: /user/getLoginUser请求方式: GET接口描述: 查询当前登录的用户请求参数:无响应内容:zhangsan返回当前登录的用户。

2025-10-31 18:05:24 668

原创 【SpringMVC】SpringMVC 小案例:加法计算器初步理解前后端接口交互与数据处理

基于以上分析,我们来定义接口接口定义请求路径: calc/sum请求方式: GET/POST接口描述: 计算两个整数相加。

2025-10-30 22:40:21 396

原创 【SpringMVC】SpringMVC 请求与响应全解析:从 Cookie/Session 到状态码、Header 配置

在我们前面的代码例子中,都已经设置了响应数据, Http响应结果可以是数据, 也可以是静态页面,也可以针对响应设置状态码, Header信息等..HTTP响应的信息都在这个对象中,比如向客户端发送的数据,响应头,状态码等.通过这个对象提供的方法,可以获得服务器响应的所有内容。通过这个例子,可以看出Cookie是可以伪造的,也就是不安全的,所以受用Cookie的时候,后端需要进行Cookie校验。MVC的概念也逐渐发生了变化,View不再返回视图,而是返回显示视图时需要的数据.

2025-10-29 22:15:55 904

原创 【SpringMVC】Spring MVC 核心全解析:从 MVC 思想到 Web 交互(请求、响应、参数传递全实践)

SpringMVC的 请求和参数传递

2025-10-28 22:53:08 982

原创 【SpringBoot】详解Maven的操作与配置

Maven的创建 & HELP插件 & 依赖管理 & 仓库 & 国内源

2025-10-26 20:57:30 924 1

原创 【EE初阶】JVM

JVM内存区域划分 & 类加载机制 & 垃圾回收机制

2025-10-23 21:45:07 723 1

原创 【EE初阶 - 网络原理】网络层 + 数据链路层 + DNS

(IP 协议中, 如果是 主机号 全1 是广播地址. mac 地址中, 整体全 1 FF:FF:FF:FF:FF:FF 也是广播地址)全世界上网的设备那么多,如果每次发起网络请求,都需要先访问DNS服务器的话,DNS服务器就要承担海量的并发量,挂了吗?用户的电脑访问某个网站的时候,就会先查询 DNS 服务器,把域名对应的 ip 拿到,再真正访问服务器。路由选择也是一样,网络环境非常复杂,任何一个路由器,无法存储所有的网络信息,但凡你的电脑是通过 网线 这种方式上网的,走的协议,就是以太网。

2025-10-21 23:29:29 790

原创 【EE初阶 - 网络原理】传输层协议

UDP协议 & TCP协议 & 十个核心机制

2025-10-20 22:34:20 1191 2

原创 【EE初阶 - 网络原理】应用层协议(下)

HTTP协议 & HTTPS协议 & 中间人工具 & CA机构证书

2025-10-18 18:59:30 841

原创 【EE初阶 - 网络原理】应用层协议(上)

自定义协议 & HTTP协议

2025-10-16 22:46:18 842

原创 【优选算法】第一弹——双指针(上)

快乐数 & 盛水最多的容器 & 和为S的两个数 & 有效的三角形个数

2025-10-14 21:58:04 1238 1

原创 【EE初阶 - 网络原理】UDP

摘要 本文介绍了UDP数据报套接字编程的核心API及其实现方法,重点讲解了DatagramSocket和DatagramPacket类的使用,并基于UDP协议实现了一个简易的回显服务器-客户端模型。 核心API: DatagramSocket类:用于创建UDP Socket对象,提供send()、receive()和close()方法 DatagramPacket类:表示UDP数据报,是数据传输的基本单位 InetSocketAddress类:用于创建SocketAddress对象 UDP回显服务器实现:

2025-10-03 01:48:42 856

原创 【EE初阶 - 网络原理】网络编程+初识Socket

对于字节流来说,可以简单理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次接收。传输数据是一块一块的,发送一块数据加入是100字节,必须一次发送,接收也必须一次接收100字节,而不能分成100次,每次接收一个字节。当然啦,程序员可以在写代码是加变量来保存对方信息,但是这不是UDP自己的行为,UDP是无连接的。如果一个进程A已经绑定了一个端口,再启动一个进程B绑定给端口,就会报错,这种情况就是端口被占用。

2025-10-02 16:00:09 852

原创 【EE初阶 - 网络原理】网络通信

于是就有了 协议拆分 ,把协议拆分成多个协议 ,但是在后续的发展中发现拆分出来的协议解决的问题都差不多,因此就再把协议分成很多类,就是协议分层 (每一层都有很多协议,这些协议做的工作都差不多)网络通信,是个非常复杂的过程,有很多的问题,很多细节要处理,如果只用一个协议就把所有的问题解决,就会造成这个协议复杂无比。有了IP地址和端口号,可以定位网络中唯一的一个进程,但是,网络通信是给予二进制的0/1数据来传输,"点分十进制"表示 如:a.b.c.d (其中a,b,c,d都是0 - 255之间的十进制整数)

2025-10-01 21:09:09 834

原创 【EE初阶 - 网络原理】Socket 套接字

计算机中的文件,通常是一个广义的概念,文件IO特指的是硬盘上的文件,是狭义的文件,除此之外,文件还可以代指一些硬件设备Socket在计算机编程汇总,也可以认为是一种特殊的文件,打开socket文件,也会在文件描述表中分配一个表项,来表示这个文件这样的文件特指网卡这样的硬件设备对于网卡这样的硬件设备,在操作系统终究被抽象成socket文件,这样的设定,主要是为了方便操作网卡直接操作网卡,需要往网卡的寄存器上写一些特定的数据,不好操作;操作系统管理一些硬件设备,是抽象成文件统一管理的;

2025-09-25 21:25:21 1165

原创 【EE初阶 - 网络原理】网络基本原理

主机的数据发送到交换机,交换机收到之后,物理层解析,数据链路层解析,重新构造出新的以太网数据帧,发送给下一个设备数据链路层中,得到以太网数据帧的帧头,信息就足以支持交换机进行下一步工作。有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题**,网络通信是基于二进制 0/1 数据来传输,如何告诉对方发送的数据是什么样的呢?为什么需要网络协议分层?在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务) ,一方为接口的使用类(使用方,使用服务)

2025-09-20 18:54:26 1076

原创 【数据结构】第七弹——Priority Queue

优先级队列是一种特殊的队列结构,元素出队顺序由优先级决定。本文介绍了优先级队列的概念、堆的存储方式(完全二叉树的顺序存储)及基本性质,重点讲解了堆的创建、插入和删除操作的核心算法——向上调整和向下调整,分析了建堆的时间复杂度为O(N)。文章还通过代码示例展示了如何使用堆模拟实现优先级队列,并总结了Java中PriorityQueue的特性:线程不安全、元素需可比较、自动扩容、操作时间复杂度为O(logN)等注意事项。

2025-07-07 21:57:34 1296

原创 【多线程初阶】详解线程池(上)

场景:学校新开了一家快递店,老板灵机一动,想了个与众不同的办法来经营店面,店里没有雇人,而是每次有业务,就现场找一名同学把快递送了,然后解雇同学这就像我们平时处理一个任务,创建一个线程进行处理的模式很快就发现了问题,每次招聘+解雇同学的成本还是很高的,所以老板指定了一个指标,业务人员扩张到3人,但是还会随着业务的扩大逐步招人,于是再有业务,如果公司没有3个人,就雇1个人去送快递,否则,只是吧业务放到一个本本上,等着3个员工空闲的时候去处理,这个就是我们的线程池模式。

2025-06-14 20:23:49 1024

原创 【多线程初阶】详解线程池(下)

扩展知识FixedThreadPool 适合任务数量相对固定,且需要限制线程数的场景,避免线程过多占用系统资源。CachedThreadPool 更适合大量短期任务或任务数量不确定的场景,能够根据任务量动态调整线程数。SingleThreadExecutor 保证任务按顺序执行,适合要求严格顺序执行的场景。ScheduledThreadPool 是定时任务的最佳选择,能够轻松实现周期性任务调度。WorkStealingPool 适合处理大量的小任务,能更好地利用 CPU 资源。

2025-06-11 23:57:37 604

原创 【浅尝算法】双指针专题(上)

以第一个测试用例来讲解。

2025-06-11 00:20:14 411

原创 【多线程初阶】详解线程池(上)

线程池 & ThreadPoolExecution & 七个参数含义 & 初识工厂模式 & 拒绝策略

2025-06-07 22:43:27 201

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除