- 博客(53)
- 收藏
- 关注
原创 [算法手记] 动态规划,二叉树计数问题
本文将继续分享博主的做题记录题目链接 : https://leetcode.cn/problems/unique-binary-search-trees/description/
2026-05-09 16:43:03
65
原创 [Mybatis] #{ } 与 ${ } 的底层博弈与工程实践
mybatis中 进行参数匹配 时, #{ } 和 ${ } 的使用差异以及区别
2026-04-22 10:42:04
618
原创 [SpringMVC] 加法计算器
本文通过构建一个双十一订单聚合器的微服务案例,演示了Spring MVC的核心开发流程。首先介绍了使用@RestController和@RequestMapping建立路由映射的方法,然后展示了前后端数据交互的实现细节。重点分析了使用Integer包装类型而非int基本类型的企业级开发优势,能够有效规避空指针异常导致的500错误。最后提出了用户输入非法字符时的400错误问题及解决方案,为高并发场景下的健壮性设计提供了实践参考。整个案例完整呈现了Spring MVC处理请求-响应全流程的技术要点。
2026-04-10 18:46:24
412
原创 [SpringMVC] SpringWebMVC常见注解介绍
本文介绍了SpringMVC中常用的注解及其应用场景。主要包括:1)路由映射注解@RequestMapping,用于URL与方法映射;2)参数传递注解@RequestParam(参数重命名)、@RequestBody(接收JSON数据)和@PathVariable(获取URL路径变量);3)
2026-04-10 00:23:47
399
原创 [数据结构]栈和队列的互相模拟实现
本文介绍了如何使用栈模拟队列和用队列模拟栈的方法。对于栈模拟队列,采用双栈法(输入栈和输出栈),通过转移元素实现先进先出;对于队列模拟栈,在每次入队时将前n-1个元素重新入队,使新元素保持在队首。文章提供了Java代码实现,并分析了两种方法的时间复杂度特点。栈和队列的相互模拟展示了数据结构之间的灵活转换。
2026-03-25 10:39:36
317
原创 [网络原理] HTTPS 加密演进与中间人攻击
HTTPS加密流程与中间人攻击防御 摘要:本文介绍了HTTPS协议的加密流程及其安全机制。HTTPS通过混合加密方式(非对称加密+对称加密)解决HTTP明文传输的安全问题。其中,非对称加密用于安全交换对称密钥(握手阶段),对称加密用于高效传输业务数据(通信阶段)。针对中间人攻击风险,HTTPS引入数字证书机制,由可信第三方CA机构验证服务器身份,确保证书真实性。常见的中间人攻击手段包括ARP欺骗、DNS欺骗等,而数字证书能有效防止公钥被篡改,保障通信安全。
2026-03-17 19:06:57
638
1
原创 [网络原理]http协议理论基础以及wireshark抓包分析(二)
本文通过Wireshark抓包工具分析了HTTP协议的数据包结构。HTTP报文分为请求包和响应包,均包含起始行、头部、空行和正文四部分。请求包起始行包含方法、URL和版本号,响应包则包含状态码和描述。头部以键值对形式提供元数据,空行分隔头部与正文。HTTP采用明文传输,存在安全风险,由此发展出HTTPS协议。文章通过实际抓包案例详细解析了各组成部分及其功能,并对比了请求包与响应包的结构差异。
2026-03-14 16:16:33
456
原创 [网络原理]http协议理论基础以及wireshark抓包分析(一)
本文介绍了HTTP协议的基本概念和工作原理。HTTP作为应用层协议,基于TCP/IP模型,采用客户端-服务器模式,通过请求-响应机制实现数据传输。文章重点分析了HTTP的核心特点:无连接(早期版本处理完请求即断开)、无状态(服务器不记录请求间关联)、基于文本(报文可读性强)和默认明文传输(存在安全隐患)。同时指出HTTP/1.1引入长连接优化性能,并提到HTTPS解决了明文传输的安全问题。通过Wireshark抓包展示了HTTP报文结构,帮助理解协议运行机制。
2026-03-14 14:22:23
380
原创 【Vue3】初学Vue3:从‘’手动操作DOM‘’到‘’数据驱动视图‘’
Vue3通过setup()函数和响应式系统简化了前端开发流程。相比传统JS需要手动操作DOM,Vue3采用Proxy实现数据拦截,自动追踪数据变化并更新视图。setup()作为逻辑入口,配合reactive等响应式函数,只需关注数据本身,无需繁琐的DOM操作。这种数据驱动视图的方式大幅提升了开发效率,使代码更简洁可维护。文章通过对比JS和Vue3的实现方式,展示了Vue3响应式编程的优势。
2026-03-08 21:38:54
389
原创 【javaEE】 Semaphore信号量
本文介绍了Semaphore(信号量)的基本概念及其在资源限流中的应用。Semaphore通过acquire()获取资源、release()释放资源来管理公共资源的使用,类似于停车场车位的分配机制。文章对比了Semaphore与普通锁的区别,并详细说明了常用方法,包括构造方法、获取/释放许可等。最后通过Java代码示例演示了如何使用Semaphore限制最多3个线程同时处理请求的场景,强调释放许可应放在finally块中确保资源正确释放。Semaphore是多线程编程中实现资源控制的重要工具。
2026-03-04 20:11:46
301
原创 【ProtoBuf】使用序列化
message类似于C语言中的结构体(struct)或者java中的类,是定位一个结构化的数据的基本单位message用于声明一个逻辑对象。在.proto文件中定义一个message后,编译器会根据目标语言(如 Java)生成对应的实体类和构建者(Builder)。下面来创建一个message消息//语法指定行//为每个 message 生成独立的 .java 文件//指定生成的 Java 类所属的包路径//指定外部主类的名称//定义联系人message。
2026-03-03 18:57:25
481
原创 【算法练习】动态规划:哈希表保存状态(一)
本文将简单介绍一下力扣中的几道动态规划习题,这些题目可以引入哈希表来保存先前的状态,也是一个较好的解题思路解决动态规划类型题目的核心思想就是把先前的重复的子问题的结果存储,在后续的的推导中可以直接获取,无需重复计算。保存结果可以使用一个数组dp[ ]也可以使用hash表下面就通过几道力扣中的题来初步认识一下该解题思路。
2026-03-03 18:23:00
351
1
原创 【网络原理】数据链路层:可靠链路的保证
数据链路层是TCP/IP五层模型中的关键层级,负责将不可靠的物理线路转变为逻辑可靠的传输链路。它通过三大机制保障传输可靠性:封装成帧(添加帧定界符确定数据边界)、透明传输(采用字节填充或比特填充避免数据冲突)和差错检测(使用CRC校验发现并丢弃错误帧)。在广播信道中,通过MAC地址标识设备,结合CSMA/CD或CSMA/CA协议解决多设备访问冲突问题。MAC地址作为硬件唯一标识,与IP地址协同工作,通过ARP协议实现地址解析。数据链路层向上为网络层提供可靠服务,向下屏蔽物理层细节,是网络通信的重要保障。
2026-02-25 13:53:48
565
原创 【网络原理】网络编程基础:TCP Echo Server 的底层逻辑与实现
本文介绍了TCP回显服务器的基本原理与实现方法。回显服务器作为网络编程的入门实践,能够帮助理解TCP通信流程。文章首先解释了回显服务器的概念,即原样返回客户端请求的功能。然后详细阐述了TCP Socket通信的核心原理,包括服务端和客户端的处理流程。最后通过Java代码实现了单线程版本的TCP回显服务器和客户端,展示了Socket编程的基本使用方法。服务器通过创建ServerSocket监听端口,接收连接后原样返回客户端数据;客户端则通过Socket连接服务器并发送/接收数据。该实现可作为网络编程的基础模板
2026-02-23 15:45:08
779
1
原创 【网络原理】IP协议:地址分配
特性DHCPNATIPv6解决的问题自动化配置,防止冲突缓解 IPv4 地址枯竭彻底解决地址空间不足主要角色终端设备与路由器交互路由器作为内外网转换器全新的一套网络协议关键点租约与续期端口号映射128 位极长地址以上就是相关IP地址如何分配的知识点,如有纰漏,还请指出~~
2026-02-17 22:52:26
1004
原创 【javaEE】TCP协议总结
TCP协议是一种可靠的传输层协议,在不可靠的IP层基础上建立可靠通信。其核心特征包括:有连接(通过三次握手建立连接)、可靠传输(通过序列号、确认应答、校验和、流量控制与拥塞控制实现)、面向字节流(数据无严格边界)和全双工(双向通信)。TCP通过确认应答、超时重传等机制确保数据传输的可靠性,并采用滑动窗口进行流量控制。连接管理分为三次握手建立连接和四次挥手释放连接,确保通信双方状态同步。这些机制共同保障了TCP在复杂网络环境下的高效可靠传输。
2026-02-13 13:10:02
987
1
原创 【javaEE】全方位拆解 UDP 协议
本文介绍了UDP协议的特点及应用场景。UDP作为传输层协议,具有无连接、不可靠传输和面向数据报三大特性,虽然不保证数据可靠性,但凭借低延迟、高吞吐的优势,在流媒体、在线游戏、IoT等领域广泛应用。文章详细解析了UDP报文结构,并针对开发中可能遇到的MTU分片、丢包处理和缓冲区溢出等问题提出了解决方案。同时指出UDP存在安全隐患,可能被用于反射攻击。通过对比TCP,阐明了UDP在特定场景下的不可替代性。
2026-02-07 23:32:53
797
原创 【MySQL】SQL调优:数据库性能优化(一)
执行计划是MySQL 优化器在分析完你的 SQL 语句后,决定“如何去执行”的一份蓝图。可以理解为一个预测,对sql语句实机运行后的结果的预测。但是实际上并未在服务器上运行其sql代码也很简单,只需要在sql前添加EXPLAIN即可,下面是一个使用了主键索引的执行计划结果出现了很多字段,接下来简单介绍一下这些字段分别代表什么含义。
2026-02-02 21:44:15
1001
原创 【javaEE】文件IO
硬盘是计算机中数据存储的物理载体。操作系统的核心功能是屏蔽计算机硬件的复杂性,为用户统一接口。而文件系统则是操作系统的核心子模块之一,其主要功能就是屏蔽(硬盘/U盘等)存储硬件的复杂性,提供了操作文件的接口和apiIO从字面上理解就是input 和 onwrite,即是输入和输出。从计算机这个参考系来看,用户点击鼠标,按下键盘即是输入,电脑返回一个画面,做出响应就是输出。简单来看,IO操作就是系统与外界数据交换的过程计算机IO操作的核心是为了完成数据的转移。
2026-01-24 22:30:44
689
原创 [Java EE]多线程模式下容器的选择
本文将来简单讲解一下多线程模式下对于不同容器的选择,以及和传统hash使用上的差异以及优化。理解浅薄,如有纰漏,还请大佬指出qaq~~
2026-01-20 14:50:29
614
原创 二叉树深搜算法练习(一)
本文介绍了使用递归深度优先搜索(DFS)解决二叉树问题的思路和方法。首先解释了深搜概念,包括前序、中序和后序遍历的区别。文章通过4道LeetCode题目(2331布尔二叉树、129节点数字求和、814剪枝、98验证二叉搜索树)详细讲解了递归解题步骤:1)设计函数头确定参数和返回值;2)函数体实现重复逻辑;3)设置递归终止条件。特别强调了剪枝优化和全局变量的使用技巧,指出二叉树递归代码简洁但细节复杂,需要多画图练习。作者建议备考期间通过做题巩固递归思想。
2025-12-24 13:40:05
793
原创 [JavaEE] CAS 介绍
CAS(比较和交换)是CPU提供的原子指令,通过比较内存值与预期值实现无锁线程安全。其核心功能包括:1)保证多线程下单一变量的原子修改;2)通过版本号解决ABA问题;3)使用LongAdder解决高并发场景下的自旋开销。但CAS仅适用于单一变量操作,复杂场景仍需加锁。Java通过Atomic类封装CAS指令,如AtomicInteger可实现线程安全的原子操作。CAS虽高效但存在局限性,需根据场景合理选择同步方案。
2025-12-18 11:01:44
728
原创 锁策略的介绍
本文介绍了常见的锁策略及synchronized原理。锁的核心机制是保证CPU指令原子性,通过CPU、OS、JVM和应用层四层实现。主要对比了synchronized和ReentrantLock的特性差异,后者功能更灵活但使用更复杂。锁策略分类包括:乐观锁/悲观锁、轻量级锁/重量级锁、自旋锁/挂起等待锁、公平锁/非公平锁、可重入锁/不可重入锁、读写锁/互斥锁。synchronized具有乐观锁、轻量级锁、互斥锁、可重入锁和非公平锁特性。JVM通过锁升级(无锁→偏向锁→轻量级锁→重量级锁)、锁消除和锁粗化等机
2025-12-16 20:25:28
928
原创 String, StringBuilder,StringBuffer的区别和功能
本文将来简单讲解一下String ,StringBuffer和StringBuffer这三者之间的区别,功能以及联系
2025-12-11 13:46:22
580
原创 线程池介绍
在了解线程池之前我们得先搞明白什么是池,或许我们之前听过String对象的不可变性是由于String引用所指对象存储在字符串常量池中,但不明白什么是池。假如把线程池仅仅理解为多条线程的集合对象,那么这个描述其实并不准确。池可以看作是一个复杂的管理系统,内部包含着对象集合,操作逻辑以及控制对象生命周期等一系列功能。形象描述,假如把线程池类比于一个餐馆,餐馆的员工集合(线程集合),餐厅订单(任务队列),餐厅经理 (分配任务调度),招聘/解雇员工(创建/销毁线程)这复杂的一系列的组件共同构成了线程池这个。
2025-12-07 10:26:57
1067
原创 阻塞队列介绍
阻塞队列是一种特殊的队列,和数据结构中的队列Queue功能基本类似,不过区别在于阻塞二字上。阻塞队列和普通队列的区别在于,当队列满时,向队列添加元素会导致线程阻塞;当队列为空时,从队列中拿取元素也会导致阻塞。
2025-11-30 22:04:38
544
原创 wait()和notify()
wait和notify是Object类提供的一个方法,这代表着所有类型的对象都可以调用这两个方法,但是这两个方法的具体使用场景还是在多线程模式下,为什么呢?
2025-11-25 22:34:07
953
原创 死锁产生的原因
多线程模式下为线程分配锁,当其他线程尝试获取锁时就会触发锁竞争引发阻塞等待。死锁就是因为为多线程不合理分配多把锁的情况下,使得线程无限陷入阻塞等待的状态。
2025-11-23 23:10:55
941
原创 分治思想算法练习题
分治顾名思义就是分而治之,把复杂的大问题划分成小问题,对每一个小问题解决后再对其合并,这样就得到了我们想要的答案。接下来是一些使用分治思想的算法练习题。
2025-11-23 15:24:43
628
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅