- 博客(98)
- 收藏
- 关注
原创 Spring原理
本文主要介绍了Spring框架中Bean的作用域、生命周期及自动装配流程。Bean的作用域分为六种:单例、多例、请求、会话、应用和WebSocket作用域,通过不同注解控制Bean的创建方式。Bean生命周期包括实例化、属性赋值、初始化和销毁四个阶段。Spring Boot通过@EnableAutoConfiguration实现自动配置,核心是利用META-INF/spring.factories文件和@Conditional注解按需加载配置类。与普通Java对象不同,Spring Bean是由容器管理的对
2026-03-07 10:49:02
334
原创 Linux常见命令(Ubuntu)
本文汇总了Linux服务器常用操作命令,涵盖远程连接、文件管理、文本编辑、进程控制、网络管理、软件安装、文件传输等核心功能。重点包括:SSH远程登录、vim编辑器使用、grep文本搜索、进程查询与终止、apt软件管理、MySQL环境配置及SpringBoot项目部署命令(如nohup后台运行jar包)。特别标注了危险操作警示(如rm -rf),并提供了Java/MySQL环境搭建的专用指令集。适用于开发人员快速掌握Linux服务器运维基础。
2026-03-06 14:43:02
336
原创 博客系统(全栈)
本文介绍基于SpringBoot+MybatisPlus的博客系统开发,含登录、博客发表、编辑、列表、详情五个页面。后端采用分层架构,集成JWT认证、MD5加盐加密、统一异常处理与响应封装;前端通过AJAX交互,localStorage存储凭证。系统实现博客CRUD操作,支持权限控制,仅作者可修改内容,搭配拦截器保障接口安全。数据库设计用户表与博客表,敏感信息加密存储提升安全性,最终完成完整的用户登录注销、博客管理与信息展示功能。
2026-03-05 19:17:19
389
原创 Spring事务
Spring事务用于确保一组操作要么全部成功,要么全部失败。实现方式包括编程式事务(手动管理)和声明式事务(通过@Transactional注解自动管理)。声明式事务更常用,支持配置隔离级别(如SERIALIZABLE)和传播机制(如REQUIRED、REQUIRES_NEW)。事务隔离级别解决脏读、幻读等问题,传播机制定义多事务方法调用的行为规则。默认情况下,@Transactional对RuntimeException回滚,可通过rollbackFor指定其他异常。声明式事务简化了开发,但需注意
2026-01-24 16:37:16
596
1
原创 SpringAOP原理
Spring AOP中的代理模式实现,包括静态代理和动态代理两种方式。静态代理需预先编写代理类,灵活性较差;动态代理分为JDK动态代理(基于接口)和CGLIB动态代理(基于继承)。文章详细解析了两种动态代理的实现原理、核心API及使用场景,并比较了它们的优缺点。最后说明了Spring AOP如何根据目标对象特征(是否有接口)和配置(proxyTargetClass属性)自动选择代理方式认
2026-01-13 11:20:37
692
原创 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
514
原创 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
768
原创 MyBatis Generator
本文介绍了Mybatis Generator插件的基本使用方法。该插件能根据数据库表结构自动生成SQL查询语句、实体类、XML映射文件和DAO层代码。使用步骤包括:1.在pom文件中正确配置依赖路径;2.设置generator配置文件,包括数据库连接信息、生成文件位置等;3.配置需要操作的表及其主键;4.双击运行插件,控制台显示build success即表示生成成功。注意事项包括:context配置需与数据库对应、生成类型选择(如simple类型)、文件路径设置等。
2026-01-07 13:04:53
313
原创 图书管理系统(超详细版)
本文介绍了一个基于SpringBoot和Bootstrap的前后端分离图书管理系统。系统采用MVC三层架构,前端使用Bootstrap框架和jQuery分页插件,后端使用SpringBoot+MyBatis实现。主要功能包括用户登录认证、图书分页展示、新增/修改/删除图书及批量删除等操作。关键技术点包括:1)使用Session实现HTTP状态保持;2)分页查询通过offset和pageSize参数实现;3)采用枚举类转换数据库状态码;4)使用动态SQL实现条件更新;5)通过jQuery序列化表单数据简化前后
2026-01-07 11:38:55
1169
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
470
原创 Mybatis基础(详解)
本文摘要: MyBatis是一个持久层框架,封装JDBC提升开发效率。介绍了MyBatis项目创建、基础操作(注解/XMl版)、参数绑定(#{}与${}区别)、SQL注入防范、数据库连接池等内容。重点包括:1)参数绑定时#{}预编译防注入,${}用于排序等特殊场景;2)字段映射通过重命名、ResultMap或驼峰转换解决;3)XML配置需注意路径匹配;4)增删改查操作要点及自增ID获取;5)推荐使用#{}并谨慎处理模糊查询。最后提及连接池选择及MySQL开发规范。
2026-01-03 11:54:23
761
原创 Spring日志
本文介绍了日志的基本概念、作用及实现方式。日志是程序运行过程中打印的信息,用于快速定位问题和数据采集。Spring Boot内置SLF4J日志框架,采用门面模式整合不同日志实现,提供统一接口。文章详细说明了日志级别设置、持久化存储(包括路径和命名规则)、日志分割方法,以及如何通过注解简化日志输出。最后还介绍了控制台日志颜色设置方法,帮助开发者更高效地使用日志功能进行程序调试和监控。
2025-12-31 13:32:01
686
原创 使用HuTool实现验证码
本文介绍了使用HuTool工具实现验证码认证的全过程。首先导入HuTool依赖时需注意版本号问题,然后通过yml配置文件解耦验证码参数。核心实现包括:1)使用HuTool生成随机验证码;2)通过HttpServletResponse返回图片数据;3)利用Session解决多请求验证码混乱问题;4)设置1分钟时效性;5)禁止缓存确保每次请求新验证码。测试环节验证了功能正常,前端实现采用时间戳防止缓存,点击图片时重新请求验证码。最终实现了验证码生成、校验的完整流程,包括成功跳转和失败提示功能。
2025-12-30 20:42:13
895
原创 Spring配置文件
配置文件用于解决程序硬编码问题,支持灵活修改参数而不改动代码。主要格式包括Properties和YML/YAML,其中Properties以"="分隔键值,YML用":"加空格分隔且对格式要求严格。当多个配置文件共存时,Properties优先级更高。配置读取需注意类型匹配和语法正确性(@Value("${key}"))。YML支持对象和集合配置,通过@ConfigurationProperties指定前缀自动注入。配置时需注意字符编码(UTF-8
2025-12-30 13:16:45
450
原创 Spring,SpringBoot,SpringMVC
本文介绍了Spring框架及其衍生技术。Spring是一个轻量级、模块化的应用开发框架,主要功能是管理对象及其依赖关系。SpringBoot是Spring的封装,简化了开发流程;SpringMVC是基于Spring的MVC框架。文章还阐述了三层架构模型(Controller、Service、Dao层)的作用,强调分层管理对代码维护的重要性。总结指出SpringMVC和SpringBoot都是基于Spring框架的扩展技术,前者是MVC框架,后者是开发整合包。
2025-12-29 19:40:31
176
2
原创 SpringDI
SpringDI,翻译过来叫做依赖注入,之前我们使用springIoc去把累交给spring管理,现在我们要把他取出来,就是通过DI(依赖注入的方式),也就是说SpringDI是SpringIOC思想的具体实现。
2025-12-29 19:29:13
688
原创 SpringIoc
Spring IOC(控制反转)是Spring框架的核心思想之一,通过将对象创建的控制权交给容器,实现解耦和依赖注入(DI)。开发者不再需要手动new对象,而是通过注解(@Controller、@Service等类注解或@Bean方法注解)将对象交给Spring管理。IOC容器会自动管理对象生命周期,通过ApplicationContext获取Bean实例。使用IOC能降低代码耦合度,提高可维护性,使各组件更加独立。注意Bean的命名规则和扫描路径问题,确保启动类位于合适位置以便正确扫描所有组件。
2025-12-28 20:53:02
493
原创 计算器和登录界面和留言板(实现前后端互通)
本文介绍了基于Spring框架实现的个简单Web应用案例:计算器和登录系统。计算器案例展示了前后端数据交互,通过表单提交参数,后端处理加法运算并返回结果。登录系统案例重点演示了会话管理,使用HttpSession存储用户信息,并通过AJAX实现异步验证。两个案例都强调了前后端参数名称必须一致的关键点,同时说明了静态资源存放位置的要求。案例代码简洁明了,涉及了Spring MVC的核心注解、会话管理和AJAX异步编程等关键技术点,适合初学者理解前后端交互的基本原理。
2025-12-25 19:28:31
987
原创 Spring Boot请求基础
本文介绍了Spring Boot中常用的注解及其功能。核心注解包括:@SpringBootApplication(启动类)、@RequestMapping(路径映射,支持所有HTTP方法)、@GetMapping/@PostMapping(限定请求方法)。参数处理方面,@RequestParam用于接收表单数据,@RequestBody处理JSON格式,MultipartFile简化文件上传。还介绍了HttpServletRequest获取请求信息,以及@CookieValue、@SessionAttrib
2025-12-25 12:00:07
900
原创 JVM八股文
JVM内存划分为程序计数器、元数据区、栈和堆四个核心区域,模拟操作系统内存管理。类加载采用双亲委派模型,经历加载、验证、准备、解析和初始化五个阶段。垃圾回收(GC)通过可达性分析识别垃圾对象,采用分代回收策略:新生代使用复制算法,老年代减少扫描频率。GC会引发STW暂停,但JDK17后可将影响控制在1ms内。分代回收根据对象存活时间采用不同策略,提高内存管理效率。
2025-12-21 12:19:18
1370
原创 数据链路层与物理层
本文介绍了以太网协议在数据链路层和物理层的作用,重点分析了MAC地址与IP地址的区别:MAC地址是设备的唯一物理标识,用于相邻设备间的转发;IP地址则用于网络层的整体传输路径。文章还阐述了ARP协议获取MAC地址的过程,以及DNS系统将域名解析为IP地址的机制,包括DNS缓存和服务器架构。最后指出我国正发展IPv6和DNSv6以减少对国外根服务器的依赖。
2025-12-20 12:23:58
442
原创 基础IP协议知识
网络层最主要的协议就是IP协议,IP协议最主要的工作有两个一个地址管理,使用IP地址这个概念,标识网络上某个设备的位置二是路由选择,在两个通信节点之间选一个合适的路径。
2025-12-19 21:02:58
605
原创 UDP和TCP的核心
本文详细解析了TCP与UDP协议的核心特性与差异。UDP协议采用无连接、不可靠传输模式,面向数据报,最大传输64KB数据;TCP协议则通过确认应答、超时重传等十大机制确保可靠传输,包括三次握手建立连接、滑动窗口提升效率、流量控制调节速度等。重点阐述了TCP的可靠性保障机制,如序号确认解决乱序问题、超时重传应对丢包、拥塞控制动态调节传输速率等。同时分析了TCP粘包问题及解决方案,以及异常情况处理机制。最后对比了两种协议的应用场景,并指出可通过在UDP上实现TCP机制来兼顾可靠性与效率。
2025-12-19 16:02:45
1209
原创 HTTP的加密过程
HTTP协议中状态码分为2xx(成功)、3xx(重定向)、4xx(客户端错误)和5xx(服务器错误)。HTTPS通过SSL/TLS加密机制解决HTTP明文传输的安全问题,采用非对称加密传输对称密钥,再用对称加密传输数据。为防止中间人攻击,引入证书机制:由可信第三方机构颁发包含服务器公钥、域名等信息的数字证书,客户端通过操作系统内置的公钥验证证书有效性。这种机制确保即使网络被劫持,攻击者也无法伪造证书,保障了通信安全。
2025-12-17 20:29:07
704
原创 HTTP的数据报格式
根据需求确定需要传输什么信息约定好信息组织的格式行文本,冗余度高,可读性高,消耗带宽最多Xml:可读性也高,冗余度也高,消耗带宽多Json:可读性高,冗余度适中,消耗带宽中(最主流的写法)Protobuf:可读性低,冗余度低,消耗带宽低浏览器允许网页在本地硬盘存储数据的一种机制,不让网页代码直接访问文件,而是浏览器的cookie提供了键值对的存储机制。
2025-12-16 21:02:54
1096
原创 TCP和UDP的区别
UDP是无连接的意思是他不会记录是谁和他连接,这个连接是抽象虚拟的,传输是不可靠传输,意思是UDP只管传不管怎么样,传了,到不到就不管我事了,传输效率肯定高的很,毕竟不管送没送到,只管送没送,全双工的意思是可以进行读写,半双工就是只能选择一个。TCP有连接的意思是他会记录下来这个时候对方是谁,在和谁进行通讯,可靠传输就是指,他会尽量的把数据完好无损的送到目的地,全双工,可以进行读写,传输效率肯定是要低一些的,毕竟都送完好无损的还要求速度,说不过去了。
2025-12-15 17:02:42
757
原创 网络协议TCP
本文介绍了基于TCP协议的服务器和客户端实现。TCP协议特点是面向字节流、有连接、可靠传输。服务器端使用ServerSocket建立连接,Socket处理数据,通过InputStream和OutputStream进行字节流读写,并采用Scanner和PrintWriter简化操作。客户端同样使用Socket连接服务器,通过字节流进行通信。针对多客户端并发访问问题,提出了多线程解决方案,并建议使用线程池优化性能。文中详细展示了TCP回显服务器的实现思路和代码结构,包括连接建立、请求处理、响应返回等核心流程,以
2025-12-15 16:15:09
824
原创 网络基础知识
在这个过程中就相当于一步步封装,把内容一步步通过各项协议封装好,就好像女朋友出门之前,要美美的化妆,好好的搭配,最后才会出门(女朋友素颜也好看💗)。
2025-12-13 16:48:57
616
原创 基于IO流的三个小程序
首先,需要判断先判断用户输入的目录是否村咋,不存在就直接返回并提示用户该目录不存在,如果存在就先下一步,看这个文件是否是目录,如果不是目录也直接返回,如果前两步都满足了,那就可以让用户输入查询的关键字,关键字不能为空,然后接着遍历目录下的每个文件,先创建一个文件数组,用来存在每个目录下的文件,如果是空的就直接返回,如果不是空的就使用foreach去取出里面的每个元素一一进行判断是文件还是目录,是目录就递归,文件就判断是否包含,发现包含就开始询问用户是否删除。然后判断文件要复制的路径的父目录是否存在。
2025-12-13 12:01:53
381
原创 JAVA中如何操作文件
本文介绍了Java文件系统的基本操作,包括文件创建、删除、重命名、目录操作等。重点讲解了File类的使用方法,包括路径获取、文件检测、创建删除等。详细分析了字节流(InputStream/OutputStream)和字符流(Reader/Writer)的工作原理,强调流操作必须遵循"打开-读写-关闭"的原则。特别指出要注意资源管理问题,推荐使用try-with-resources语法避免资源泄漏。文章还对比了绝对路径和相对路径的区别,解释了文件描述符的概念,并提供了实际代码示例说明如何正
2025-12-12 14:01:01
979
原创 文件IO的常识
在Windows中默认的是\(反斜杠),因为Windows的前身的Dos系统,Dos系统就是通过\(反斜杠)来操作命令符的,但是也支持/(斜杠)基准路径是自己设定的,比如我可以设置C:/zhan为基准路径,这个时候我就可以使用./video来表示相对路径, .表示的是video的上一层。在编写代码的过程中,推荐使用的是/(斜杠),因为\(反斜杠)在编译器中可能会被当做转义语言,会导致很多麻烦。容量更小,读取速度是最快的,缺点也是数据的存储无法实现持久化,断电也gg。举例:E:\JAVAEE Reward。
2025-12-12 13:55:41
302
原创 JUC八股文
假设现在多个线程在进行读取的时候,有一个线程在进行修改,那么他就会拷贝一份新的去修改,其他线程在读取的时候,读取的就是旧的线程,等到新的线程改好之后,就会把引用指向新的修改好的线程,因为这个过程没有加锁,就不会产生阻塞,效率就自然而然高了。假设在某个操作中触发了hash扩容,那么他的扩容机制是这样的,会生成一个新的数组链表,新插入的插入在新的数组链表中,然后每次都在旧的数组链表中复制一部分过来新的这边,直到旧的全部复制完,此时就会销毁旧的数组链表。只要就是要使用try,finally去确保锁最后的释放。
2025-12-09 19:50:17
1064
原创 多线程CAS八股文
我们规定版本号从1开始,没进行一次修改那版本号就要加1,还是取钱的例子,首先,我们去取出500块,虽然我们多按了几次产生了多个线程,因为版本号的问题,我们一开始取出了500块这个时候版本号是1,而碰巧这个时候老妈给我转了500块,版本号是2,这个时候虽然账户变成了1000块,但是因为之前的线程针对的是版本号,所以他们会去比较版本号为1的时候的余额,发现这个时候确实是500,不是1000,所以就退出,也就可以规避CAS的ABA问题。点开具体的实现就会发现,这个就是调用了JVM封装好了的CAS。
2025-12-08 20:23:41
821
原创 多线程锁的八股文
首先,synchronize是自适应锁,在JVM中会自动统计竞争的激烈情况,所以不是乐观或者悲观锁的,其次,synchronize是互斥锁,不是读写锁,只要你对某个线程进行了加锁,不管另外一个线程的操作是不是原子性的都不允许进行,只能阻塞等待,再者,synchronize是可重入,在针对同一个线程加多次锁的情况下,会自动识别,最后,synchronize不是公平锁,看程序员怎么写就怎么调用。乐观锁:有两个线程,一把🔒,每个线程加锁的频率都很低,一个线程在加锁的时候,另外一个线程大概率不会和他竞争。
2025-12-07 19:22:38
1176
原创 JAVA定时器
这个任务类就非常简单,首先的核心的runnable任务的内容task,其次是任务等待的时间time,接着提供一个构造方法,初始化的时候传入任务的名字以及具体实现的内容run方法,接着给一个gettime的方法,获取到等待的时间,接着一个run方法,之所以在里面写一个run是为了在外部能够使用,接着实现一个comparable接口重写compareto方法进行比较。这里的逻辑很简答,先创建你一个任务类,先把那些传入的任务类写入到优先级队列就行,写入就可以唤醒等待的线程去做事情了。/*如何模拟实现一个定时器。
2025-12-06 13:25:14
1420
原创 JAVA线程池
举个例子:A是一个海王,A在谈恋爱的同时,和多个女生同时搞暧昧,只要他分手了,马上就可以找另外一个人谈恋爱,省去要从0开始的时间,因为A换女朋友的速度很多,所以同时聊了很多个备胎,这些备胎就构成了备胎池。一开始我之前说过,引入线程是因为进程的创建和销毁太慢了,占的资源又多,所以我们才引入了线程,因为要提升性能,所以我现在也觉得进程太慢了,所以就有了线程池。在公司中,当任务多的时候就找几个实习生,帮忙解决任务,当任务少了的时候也不会马上裁员,等几天,说不定会有新的任务,等确实没了就裁掉实习生。
2025-12-05 13:03:31
995
原创 生产消费模型
很简单,整个代码都犯一个致命错误,因为当你使用if的时候,判断只有一次,也就是当size==0的时候,判断完开始wait之后就开始出问题了,继续往下走,完蛋,这个size==0会导致后续程序的执行修改掉一些数据,这个可是一个大问题哦。阻塞队列就好像是一个水库,在流量大的时候,会拦截下来大部分流量,让B按照自己的顺序去处理请求,这样就不会让B的压力爆骚缸,给B足够的时间去处理。一般来说A属于上游服务器,干的活就比较简单,消耗的资源少,但是B不一样,B需要做的事情比较麻烦,所以多个请求的时候,会压力爆骚缸。
2025-12-05 11:22:36
328
原创 JAVA单例模式
假如现在有两个线程同时调度,因为调度是随机的,可能一个线程刚开始创建instance,另外一个已经创建完了,这里就会出现不必要的创建,浪费资源,最后会被GC给回收掉,但确实是浪费了当时的资源,假如很大的情况下就会爆了。假设现在有两个线程,一个读取,一个修改,t1还在创建的时候,t2已经读取完了,这就导致之后的t2读取到的是还没初始化的对象,如何解决呢?将构造方法私有化,然后在一开始就把这个对象创建出来,因为是static修饰的,所以在程序一启动就被创建出来了,在外部无法创建新的对象。
2025-12-04 13:32:09
399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅