自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 音视频流协议

基于HTTP的自适应比特率流媒体传输协议,主要用于直播与点播Web Real-Time Communication,网页实时通信协议,主打低延迟点对点音视频传输,多用于实时互动场景。Real-Time Messaging Protocol,实时消息传输协议,由Adobe推出,主打直播推流,是传统直播的核心协议。Real-Time Streaming Protocol,实时流传输协议,多用于安防监控、摄像头实时预览。

2026-04-15 10:29:46 333

原创 RTSP流协议

RTSP流媒体协议采用控制与传输分离架构,通过TCP建立可靠控制通道(554端口)实现播放/暂停等指令传输,同时使用UDP进行RTP媒体数据传输以降低延迟。协议流程包括:OPTIONS功能查询、DESCRIBE获取SDP参数、SETUP建立数据通道(生成SessionID)、PLAY启动传输,最终通过TEARDOWN终止会话。RTCP实时监测网络质量,SDP文本协议协商媒体参数。典型应用场景如IP摄像头(rtsp://IP/live/ch2_1),实现局域网200ms-1s的低延迟直播,完整流程涵盖会话控制

2026-04-14 10:50:56 293

原创 QQ音乐GUI自动化测试

基于Python的QQ音乐自动化测试框架的实现方案。该框架采用pytest测试框架,结合pywinauto进行Windows桌面应用UI自动化操作,使用YAML管理测试数据,并通过Allure生成可视化测试报告。项目采用分层设计,包含工具封装层(Utils)、日志层(Logs)、报告层(Report)和测试用例层(Tests)。测试覆盖了QQ音乐的核心功能模块,包括搜索、换肤、窗口控制、音乐导入、播放模式等基础功能,以及推荐页面、本地音乐、歌词展示等特色功能。文章还总结了常见问题及解决方案

2026-03-24 11:44:08 401

原创 个人博客系统构建及测试全流程

一个前后端分离的个人博客系统,采用云服务器部署,包含登录、列表、详情和编辑四个主要页面。系统实现了基础功能如登录验证、博客发布、删除和用户注销。文章重点描述了自动化测试方案:使用Selenium4+JUnit5框架,通过分页测试类、参数化用例、隐式等待等技术实现功能验证,并采用Allure生成可视化报告。测试过程强调执行顺序控制、异常场景覆盖和性能优化,同时指出了系统在高并发下的稳定性问题。项目源码和测试报告已开源,展示了从功能实现到自动化测试的完整开发流程

2026-03-22 09:15:28 379

原创 个人抽奖系统构建及测试

基于个人编写的抽奖系统进行的各方面的测试,web自动化测试,接口自动化测试以及压力测试

2026-03-19 13:07:19 411

原创 Spring原理

本文主要介绍了Spring框架中Bean的作用域、生命周期及自动装配流程。Bean的作用域分为六种:单例、多例、请求、会话、应用和WebSocket作用域,通过不同注解控制Bean的创建方式。Bean生命周期包括实例化、属性赋值、初始化和销毁四个阶段。Spring Boot通过@EnableAutoConfiguration实现自动配置,核心是利用META-INF/spring.factories文件和@Conditional注解按需加载配置类。与普通Java对象不同,Spring Bean是由容器管理的对

2026-03-07 10:49:02 345

原创 Linux常见命令(Ubuntu)

本文汇总了Linux服务器常用操作命令,涵盖远程连接、文件管理、文本编辑、进程控制、网络管理、软件安装、文件传输等核心功能。重点包括:SSH远程登录、vim编辑器使用、grep文本搜索、进程查询与终止、apt软件管理、MySQL环境配置及SpringBoot项目部署命令(如nohup后台运行jar包)。特别标注了危险操作警示(如rm -rf),并提供了Java/MySQL环境搭建的专用指令集。适用于开发人员快速掌握Linux服务器运维基础。

2026-03-06 14:43:02 356

原创 博客系统(全栈)

本文介绍基于SpringBoot+MybatisPlus的博客系统开发,含登录、博客发表、编辑、列表、详情五个页面。后端采用分层架构,集成JWT认证、MD5加盐加密、统一异常处理与响应封装;前端通过AJAX交互,localStorage存储凭证。系统实现博客CRUD操作,支持权限控制,仅作者可修改内容,搭配拦截器保障接口安全。数据库设计用户表与博客表,敏感信息加密存储提升安全性,最终完成完整的用户登录注销、博客管理与信息展示功能。

2026-03-05 19:17:19 395

原创 Spring事务

Spring事务用于确保一组操作要么全部成功,要么全部失败。实现方式包括编程式事务(手动管理)和声明式事务(通过@Transactional注解自动管理)。声明式事务更常用,支持配置隔离级别(如SERIALIZABLE)和传播机制(如REQUIRED、REQUIRES_NEW)。事务隔离级别解决脏读、幻读等问题,传播机制定义多事务方法调用的行为规则。默认情况下,@Transactional对RuntimeException回滚,可通过rollbackFor指定其他异常。声明式事务简化了开发,但需注意

2026-01-24 16:37:16 598 1

原创 SpringAOP原理

Spring AOP中的代理模式实现,包括静态代理和动态代理两种方式。静态代理需预先编写代理类,灵活性较差;动态代理分为JDK动态代理(基于接口)和CGLIB动态代理(基于继承)。文章详细解析了两种动态代理的实现原理、核心API及使用场景,并比较了它们的优缺点。最后说明了Spring AOP如何根据目标对象特征(是否有接口)和配置(proxyTargetClass属性)自动选择代理方式认

2026-01-13 11:20:37 693

原创 SpringAOP

AOP(面向切面编程)是一种编程思想,用于对特定类型问题(如日志记录、权限校验)进行统一处理。与IOC控制反转类似,AOP通过切面(切点+通知)实现代码增强,具有非侵入性、减少重复代码等优势。Spring AOP提供@Aspect注解实现,包含五种通知类型(@Around、@Before等)和切点表达式。可通过execution规则或自定义@annotation方式实现,支持多切面优先级控制(@Order)。相比在每个方法中硬编码,AOP能显著提升开发效率和可维护性。

2026-01-12 11:00:51 974

原创 拦截器(详解)

首先需要实现HandlerInterceptor接口,然后重写里面的方法拦截器的存在,是为了保护我们后端的安全,同时也是把我们每个部分都需要写的重复验证代码给提取出来,封装,让我们可以直接使用实现我们自己需要拦截的逻辑首先需要一个类去继承HandlerInterceptor接⼝,并重写其所有⽅法,这里的方法分为三个,一个是pre(执行代码前),一个是post(执行代码后),一个是after(渲染结束后),只有当pre里面我们写的代码执行成功之后,返回一个true,才会执行其他的下一步操作。

2026-01-08 20:26:00 536

原创 Mybatis-Plus

MyBatis-Plus是基于MyBatis的增强框架,保留了MyBatis的所有优点并新增了便捷功能。它提供BaseMapper接口实现基础CRUD操作,支持自动驼峰命名转换映射数据库表。框架包含强大的条件构造器(Wrapper)用于复杂查询,以及LambdaQueryWrapper/LambdaUpdateWrapper避免字段硬编码问题。通过@TableName、@TableId等注解可解决命名不规范问题。3.0.7及以上版本支持自定义SQL功能,使用${ew.customSqlSegment}动态拼

2026-01-08 12:34:36 771

原创 MyBatis Generator

本文介绍了Mybatis Generator插件的基本使用方法。该插件能根据数据库表结构自动生成SQL查询语句、实体类、XML映射文件和DAO层代码。使用步骤包括:1.在pom文件中正确配置依赖路径;2.设置generator配置文件,包括数据库连接信息、生成文件位置等;3.配置需要操作的表及其主键;4.双击运行插件,控制台显示build success即表示生成成功。注意事项包括:context配置需与数据库对应、生成类型选择(如simple类型)、文件路径设置等。

2026-01-07 13:04:53 315

原创 图书管理系统(超详细版)

本文介绍了一个基于SpringBoot和Bootstrap的前后端分离图书管理系统。系统采用MVC三层架构,前端使用Bootstrap框架和jQuery分页插件,后端使用SpringBoot+MyBatis实现。主要功能包括用户登录认证、图书分页展示、新增/修改/删除图书及批量删除等操作。关键技术点包括:1)使用Session实现HTTP状态保持;2)分页查询通过offset和pageSize参数实现;3)采用枚举类转换数据库状态码;4)使用动态SQL实现条件更新;5)通过jQuery序列化表单数据简化前后

2026-01-07 11:38:55 1219 1

原创 Mybatis动态SQL

介绍了MyBatis动态SQL中的常用标签及其应用场景。<if>标签用于条件拼接SQL片段,通过1=1保底解决空条件问题;<trim>标签可自动处理多余的逗号和括号;<where>和<set>标签分别优化WHERE子句和UPDATE语句的拼接;<foreach>标签支持集合遍历操作;<sql>和<include>标签实现SQL片段复用。文章还对比了XML和注解两种方式实现动态SQL的优劣,指出XML方式更为直观方便

2026-01-04 15:07:26 472

原创 Mybatis基础(详解)

本文摘要: MyBatis是一个持久层框架,封装JDBC提升开发效率。介绍了MyBatis项目创建、基础操作(注解/XMl版)、参数绑定(#{}与${}区别)、SQL注入防范、数据库连接池等内容。重点包括:1)参数绑定时#{}预编译防注入,${}用于排序等特殊场景;2)字段映射通过重命名、ResultMap或驼峰转换解决;3)XML配置需注意路径匹配;4)增删改查操作要点及自增ID获取;5)推荐使用#{}并谨慎处理模糊查询。最后提及连接池选择及MySQL开发规范。

2026-01-03 11:54:23 765

原创 Spring日志

本文介绍了日志的基本概念、作用及实现方式。日志是程序运行过程中打印的信息,用于快速定位问题和数据采集。Spring Boot内置SLF4J日志框架,采用门面模式整合不同日志实现,提供统一接口。文章详细说明了日志级别设置、持久化存储(包括路径和命名规则)、日志分割方法,以及如何通过注解简化日志输出。最后还介绍了控制台日志颜色设置方法,帮助开发者更高效地使用日志功能进行程序调试和监控。

2025-12-31 13:32:01 687

原创 使用HuTool实现验证码

本文介绍了使用HuTool工具实现验证码认证的全过程。首先导入HuTool依赖时需注意版本号问题,然后通过yml配置文件解耦验证码参数。核心实现包括:1)使用HuTool生成随机验证码;2)通过HttpServletResponse返回图片数据;3)利用Session解决多请求验证码混乱问题;4)设置1分钟时效性;5)禁止缓存确保每次请求新验证码。测试环节验证了功能正常,前端实现采用时间戳防止缓存,点击图片时重新请求验证码。最终实现了验证码生成、校验的完整流程,包括成功跳转和失败提示功能。

2025-12-30 20:42:13 904

原创 Spring配置文件

配置文件用于解决程序硬编码问题,支持灵活修改参数而不改动代码。主要格式包括Properties和YML/YAML,其中Properties以"="分隔键值,YML用":"加空格分隔且对格式要求严格。当多个配置文件共存时,Properties优先级更高。配置读取需注意类型匹配和语法正确性(@Value("${key}"))。YML支持对象和集合配置,通过@ConfigurationProperties指定前缀自动注入。配置时需注意字符编码(UTF-8

2025-12-30 13:16:45 459

原创 Spring,SpringBoot,SpringMVC

本文介绍了Spring框架及其衍生技术。Spring是一个轻量级、模块化的应用开发框架,主要功能是管理对象及其依赖关系。SpringBoot是Spring的封装,简化了开发流程;SpringMVC是基于Spring的MVC框架。文章还阐述了三层架构模型(Controller、Service、Dao层)的作用,强调分层管理对代码维护的重要性。总结指出SpringMVC和SpringBoot都是基于Spring框架的扩展技术,前者是MVC框架,后者是开发整合包。

2025-12-29 19:40:31 178 2

原创 SpringDI

SpringDI,翻译过来叫做依赖注入,之前我们使用springIoc去把累交给spring管理,现在我们要把他取出来,就是通过DI(依赖注入的方式),也就是说SpringDI是SpringIOC思想的具体实现。

2025-12-29 19:29:13 690

原创 SpringIoc

Spring IOC(控制反转)是Spring框架的核心思想之一,通过将对象创建的控制权交给容器,实现解耦和依赖注入(DI)。开发者不再需要手动new对象,而是通过注解(@Controller、@Service等类注解或@Bean方法注解)将对象交给Spring管理。IOC容器会自动管理对象生命周期,通过ApplicationContext获取Bean实例。使用IOC能降低代码耦合度,提高可维护性,使各组件更加独立。注意Bean的命名规则和扫描路径问题,确保启动类位于合适位置以便正确扫描所有组件。

2025-12-28 20:53:02 495

原创 计算器和登录界面和留言板(实现前后端互通)

本文介绍了基于Spring框架实现的个简单Web应用案例:计算器和登录系统。计算器案例展示了前后端数据交互,通过表单提交参数,后端处理加法运算并返回结果。登录系统案例重点演示了会话管理,使用HttpSession存储用户信息,并通过AJAX实现异步验证。两个案例都强调了前后端参数名称必须一致的关键点,同时说明了静态资源存放位置的要求。案例代码简洁明了,涉及了Spring MVC的核心注解、会话管理和AJAX异步编程等关键技术点,适合初学者理解前后端交互的基本原理。

2025-12-25 19:28:31 994

原创 Spring Boot请求基础

本文介绍了Spring Boot中常用的注解及其功能。核心注解包括:@SpringBootApplication(启动类)、@RequestMapping(路径映射,支持所有HTTP方法)、@GetMapping/@PostMapping(限定请求方法)。参数处理方面,@RequestParam用于接收表单数据,@RequestBody处理JSON格式,MultipartFile简化文件上传。还介绍了HttpServletRequest获取请求信息,以及@CookieValue、@SessionAttrib

2025-12-25 12:00:07 902

原创 JVM八股文

JVM内存划分为程序计数器、元数据区、栈和堆四个核心区域,模拟操作系统内存管理。类加载采用双亲委派模型,经历加载、验证、准备、解析和初始化五个阶段。垃圾回收(GC)通过可达性分析识别垃圾对象,采用分代回收策略:新生代使用复制算法,老年代减少扫描频率。GC会引发STW暂停,但JDK17后可将影响控制在1ms内。分代回收根据对象存活时间采用不同策略,提高内存管理效率。

2025-12-21 12:19:18 1377

原创 数据链路层与物理层

本文介绍了以太网协议在数据链路层和物理层的作用,重点分析了MAC地址与IP地址的区别:MAC地址是设备的唯一物理标识,用于相邻设备间的转发;IP地址则用于网络层的整体传输路径。文章还阐述了ARP协议获取MAC地址的过程,以及DNS系统将域名解析为IP地址的机制,包括DNS缓存和服务器架构。最后指出我国正发展IPv6和DNSv6以减少对国外根服务器的依赖。

2025-12-20 12:23:58 449

原创 基础IP协议知识

网络层最主要的协议就是IP协议,IP协议最主要的工作有两个一个地址管理,使用IP地址这个概念,标识网络上某个设备的位置二是路由选择,在两个通信节点之间选一个合适的路径。

2025-12-19 21:02:58 609

原创 UDP和TCP的核心

本文详细解析了TCP与UDP协议的核心特性与差异。UDP协议采用无连接、不可靠传输模式,面向数据报,最大传输64KB数据;TCP协议则通过确认应答、超时重传等十大机制确保可靠传输,包括三次握手建立连接、滑动窗口提升效率、流量控制调节速度等。重点阐述了TCP的可靠性保障机制,如序号确认解决乱序问题、超时重传应对丢包、拥塞控制动态调节传输速率等。同时分析了TCP粘包问题及解决方案,以及异常情况处理机制。最后对比了两种协议的应用场景,并指出可通过在UDP上实现TCP机制来兼顾可靠性与效率。

2025-12-19 16:02:45 1220

原创 HTTP的加密过程

HTTP协议中状态码分为2xx(成功)、3xx(重定向)、4xx(客户端错误)和5xx(服务器错误)。HTTPS通过SSL/TLS加密机制解决HTTP明文传输的安全问题,采用非对称加密传输对称密钥,再用对称加密传输数据。为防止中间人攻击,引入证书机制:由可信第三方机构颁发包含服务器公钥、域名等信息的数字证书,客户端通过操作系统内置的公钥验证证书有效性。这种机制确保即使网络被劫持,攻击者也无法伪造证书,保障了通信安全。

2025-12-17 20:29:07 716

原创 HTTP的数据报格式

根据需求确定需要传输什么信息约定好信息组织的格式行文本,冗余度高,可读性高,消耗带宽最多Xml:可读性也高,冗余度也高,消耗带宽多Json:可读性高,冗余度适中,消耗带宽中(最主流的写法)Protobuf:可读性低,冗余度低,消耗带宽低浏览器允许网页在本地硬盘存储数据的一种机制,不让网页代码直接访问文件,而是浏览器的cookie提供了键值对的存储机制。

2025-12-16 21:02:54 1115

原创 TCP和UDP的区别

UDP是无连接的意思是他不会记录是谁和他连接,这个连接是抽象虚拟的,传输是不可靠传输,意思是UDP只管传不管怎么样,传了,到不到就不管我事了,传输效率肯定高的很,毕竟不管送没送到,只管送没送,全双工的意思是可以进行读写,半双工就是只能选择一个。TCP有连接的意思是他会记录下来这个时候对方是谁,在和谁进行通讯,可靠传输就是指,他会尽量的把数据完好无损的送到目的地,全双工,可以进行读写,传输效率肯定是要低一些的,毕竟都送完好无损的还要求速度,说不过去了。

2025-12-15 17:02:42 762

原创 传输层TCP协议

本文介绍了基于TCP协议的服务器和客户端实现。TCP协议特点是面向字节流、有连接、可靠传输。服务器端使用ServerSocket建立连接,Socket处理数据,通过InputStream和OutputStream进行字节流读写,并采用Scanner和PrintWriter简化操作。客户端同样使用Socket连接服务器,通过字节流进行通信。针对多客户端并发访问问题,提出了多线程解决方案,并建议使用线程池优化性能。文中详细展示了TCP回显服务器的实现思路和代码结构,包括连接建立、请求处理、响应返回等核心流程,以

2025-12-15 16:15:09 835

原创 网络编程UDP

前面的是格式,后面的是一一对应的东西,分别打印请求的ip和端口号,还有请求是啥,回应是啥。

2025-12-14 19:55:02 1395

原创 网络基础知识

在这个过程中就相当于一步步封装,把内容一步步通过各项协议封装好,就好像女朋友出门之前,要美美的化妆,好好的搭配,最后才会出门(女朋友素颜也好看💗)。

2025-12-13 16:48:57 627

原创 基于IO流的三个小程序

首先,需要判断先判断用户输入的目录是否村咋,不存在就直接返回并提示用户该目录不存在,如果存在就先下一步,看这个文件是否是目录,如果不是目录也直接返回,如果前两步都满足了,那就可以让用户输入查询的关键字,关键字不能为空,然后接着遍历目录下的每个文件,先创建一个文件数组,用来存在每个目录下的文件,如果是空的就直接返回,如果不是空的就使用foreach去取出里面的每个元素一一进行判断是文件还是目录,是目录就递归,文件就判断是否包含,发现包含就开始询问用户是否删除。然后判断文件要复制的路径的父目录是否存在。

2025-12-13 12:01:53 382

原创 JAVA中如何操作文件

本文介绍了Java文件系统的基本操作,包括文件创建、删除、重命名、目录操作等。重点讲解了File类的使用方法,包括路径获取、文件检测、创建删除等。详细分析了字节流(InputStream/OutputStream)和字符流(Reader/Writer)的工作原理,强调流操作必须遵循"打开-读写-关闭"的原则。特别指出要注意资源管理问题,推荐使用try-with-resources语法避免资源泄漏。文章还对比了绝对路径和相对路径的区别,解释了文件描述符的概念,并提供了实际代码示例说明如何正

2025-12-12 14:01:01 986

原创 文件IO的常识

在Windows中默认的是\(反斜杠),因为Windows的前身的Dos系统,Dos系统就是通过\(反斜杠)来操作命令符的,但是也支持/(斜杠)基准路径是自己设定的,比如我可以设置C:/zhan为基准路径,这个时候我就可以使用./video来表示相对路径, .表示的是video的上一层。在编写代码的过程中,推荐使用的是/(斜杠),因为\(反斜杠)在编译器中可能会被当做转义语言,会导致很多麻烦。容量更小,读取速度是最快的,缺点也是数据的存储无法实现持久化,断电也gg。举例:E:\JAVAEE Reward。

2025-12-12 13:55:41 304

原创 JUC八股文

假设现在多个线程在进行读取的时候,有一个线程在进行修改,那么他就会拷贝一份新的去修改,其他线程在读取的时候,读取的就是旧的线程,等到新的线程改好之后,就会把引用指向新的修改好的线程,因为这个过程没有加锁,就不会产生阻塞,效率就自然而然高了。假设在某个操作中触发了hash扩容,那么他的扩容机制是这样的,会生成一个新的数组链表,新插入的插入在新的数组链表中,然后每次都在旧的数组链表中复制一部分过来新的这边,直到旧的全部复制完,此时就会销毁旧的数组链表。只要就是要使用try,finally去确保锁最后的释放。

2025-12-09 19:50:17 1067

原创 多线程CAS八股文

我们规定版本号从1开始,没进行一次修改那版本号就要加1,还是取钱的例子,首先,我们去取出500块,虽然我们多按了几次产生了多个线程,因为版本号的问题,我们一开始取出了500块这个时候版本号是1,而碰巧这个时候老妈给我转了500块,版本号是2,这个时候虽然账户变成了1000块,但是因为之前的线程针对的是版本号,所以他们会去比较版本号为1的时候的余额,发现这个时候确实是500,不是1000,所以就退出,也就可以规避CAS的ABA问题。点开具体的实现就会发现,这个就是调用了JVM封装好了的CAS。

2025-12-08 20:23:41 828

空空如也

空空如也

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

TA关注的人

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