- 博客(25)
- 收藏
- 关注
原创 简易Tomcat编写总结
摘要: 本文介绍了一个简易版Tomcat服务器"ShaunSheep"的实现方案,基于Servlet 6规范,支持Servlet、Filter、Listener和HttpSession等核心功能。服务器采用分层架构设计,通过HttpConnector处理网络连接,使用JDK内置HttpServer组件接收请求,并通过适配器模式将HttpExchange转换为Servlet规范的Request/Response对象。ServletContext作为核心容器,管理Servlet、Filter
2026-05-04 17:30:44
357
原创 从零打通微服务可观测性
微服务可观测性体系摘要 现代微服务架构下,传统日志排查方式已无法满足需求。可观测性体系通过Trace(全链路)、Span(最小单元)、Metrics(量化指标)实现系统透明化。OpenTelemetry成为统一采集标准,通过无侵入的探针技术自动埋点,支持手动业务埋点扩展。架构分为四层:采集层(Agent探针)、汇聚层(Collector数据加工)、存储层(如Zipkin/Prometheus)和展示层(Grafana统一可视化)。典型实现方案中,OTel Collector作为枢纽,接收探针数据后分发给Zi
2026-04-29 18:38:07
369
原创 用人际关系讲述四种引用
众所周知,JVM常用的垃圾回收算法是可达性分析算法,就是看这个对象有没有引用、引用是哪一种类型的来判断这个对象的生死,即使有了引用也不代表这个对象能够在本次垃圾回收存活下来。一共四种引用,强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference),我将从人际关系角度来解释这四种引用。
2026-03-26 19:15:26
46
原创 Java内存区域
Java堆又称GC堆(垃圾回收堆,也可以叫垃圾堆哈哈哈),只有一个作用,那就是存放对象实例,几乎所有对象实例和数组都会放在堆内存,又因为Java堆是垃圾回收的主战场(垃圾回收模块详细讲解),所以Java堆又称GC堆(垃圾回收堆,也可以叫垃圾堆哈哈哈),Java堆同时也是线程共享的,当我们父线程创建的对象也可以在子线程中使用,我们可以通过-Xmx(启动时分配)和-Xms(超了才会oom)设定Java堆的大小。栈是一个先进后出的数据结构,因为先进后出这个特性,所以特别适合来作为一个描述调用方法的容器。
2026-03-24 23:26:06
355
原创 LeetCode39.组合总和
给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。仅有这两种组合。
2026-03-18 17:10:12
46
原创 LeetCode17.电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
2026-03-17 11:47:10
206
原创 LeetCode216.组合总和III
只需要遍历startIndex到 9-(k-path.size())(剪枝处理),并且每次递归都要remove掉最后一个元素,保证正常回溯。kn肯定是需要传的,还需要传的是startIndex用来记录开始取值的索引,还有就是sum,用来判断是否已经达到目的。一是当我们发现sum已经超过n时,二是list的size已经和k相等并且sum也和n相等时。正整数,且每种组合中不存在重复的数字。:找出所有相加之和为。
2026-03-16 09:10:50
44
原创 LeetCode538.把二叉树转换为累加树
给出二叉树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点node的新值等于原树中大于或等于node.val的值之和。本题和 1038:相同[1,null,1][3,3,2][7,9,4,10]0104-104104。
2026-03-14 10:30:07
168
原创 黑马点评项目总结
本文记录了一名大一学生从“苍穹外卖”入门到“黑马点评”进阶的后端成长历程。重点复盘了 Redis 在高并发场景下的实战应用:从缓存穿透、击穿、雪崩的解决方案,到利用分布式锁、Lua 脚本及 Redis Stream 实现高性能秒杀系统。文中深入探讨了一人一单、异步下单优化及 Feed 流滚动分页等核心逻辑,旨在通过项目实战构建系统的后端技术体系。
2026-03-13 23:31:13
926
原创 LeetCode108.将有序数组转换为二叉搜索树
给你一个整数数组nums,其中元素已经按排列,请你将其转换为一棵 平衡 二叉搜索树。[0,-10,5,null,-3,null,9] 也将被视为正确答案:[3,1][1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。在这题中,我们可以使用二分法来构造二叉搜索树,因为二叉搜索树的顺序是定的,但是遇到偶数个怎么办?遇到偶数个其实取左边和右边的都无所谓,只不过树有所变化,但都是正确答案。
2026-03-12 12:32:06
44
原创 Redis实现消息队列
Stream是redis5.0引入的一种新的数据类型,可以实现一个功能非常完善的消息队列。消息队列:存储和管理消息,也被称为消息代理(Message Broker)2.消息队列还要保证数据安全,服务宕机和重启数据不会消失,确保消息被消费。1.消息队列是独立于JVM的,不受JVM内存限制。生产者->Message Queue->消费者。消费者:从消息队列获取消息并处理消息。2.一个消息可以被多个消费者读取。生产者:发送消息到消息队列。4.有消息漏读的风险。
2026-03-11 16:07:06
51
原创 LeetCode669. 修剪二叉搜索树
本题核心在于利用二叉搜索树的有序性进行剪枝。如果,直接返回如果,递归右子树如果,递归左子树如果在区间内,递归处理左右子树返回当前节点BST + 递归 + 剪枝这是二叉搜索树问题中非常经典的一类题型。
2026-03-11 11:57:47
207
原创 LeetCode450.删除二叉搜索树种的节点
如果遇到既有左子节点又有右子节点,首先呢我们可以确定右子树的所有节点都是比左子树的所有节点要大的,利用这个特点,我们可以将左子节点放在右子树的最小节点的左子树位置。在这题中,最难搞的是被删的节点既有左子节点又有右子节点的情况,解决这种情况,那么这题就毫无难度。对应的节点,并保证二叉搜索树的性质不变。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。另一个正确答案是 [5,2,6,null,4,null,7]。
2026-03-10 15:38:14
42
原创 LeetCode701.二叉搜索树的插入操作
给定二叉搜索树(BST)的根节点root和要插入树中的值value,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据,新值和原始二叉搜索树中的任意节点值都不同。,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。你可以返回。
2026-03-09 08:30:24
34
原创 Leetcode235.二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]关于最近公共祖先这类题目,我们经常会想到回溯,但是这道题目是二叉搜索树,我们要利用二叉搜索树的特性来降低时间复杂度。
2026-03-08 11:00:44
257
原创 从0到1学习数据结构——中序二叉线索树
像此类二叉树,如果共有n个节点,所有节点的指针域加起来共2n个,,其中根节点没有前驱节点,所以只有n-1个指针域被利用,有2n-(n-1)=n+1个指针域是空指针域,造成了大量的空间浪费。当我们进行中序遍历的时候,遍历结果是DBEAC,可知A的前驱节点是E后继节点是C。如果我们能够利用空指针域来构建出像DBEAC这样的关系,那么遍历二叉树时,寻找前驱和后继节点的效率将大大提高。
2025-11-13 09:16:08
179
原创 从0到1学习数据结构——用Java实现二叉树
一层一层遍历,用队列存储,将节点存入队列,在从队列中取出节点,并打印节点数据,让此节点的子节点存入队列,一边offer,一边poll,直到队列为空。如果使用孩子表示法,恰好和双亲表示法相反,找孩子容易,找双亲需要遍历整个树。这样会发现查找父节点向当容易,但如果想找到子节点就需遍历整个树。这里只展示前序遍历,中序和后序遍历只不过是打印位置换一下。诸如此类,用顺序存储既麻烦又浪费性能,所以我们用链式存储。利用递归的性质,从上到下,从左到右遍历。二叉树为1:2的逻辑结构。
2025-11-11 09:11:11
294
原创 从0到1学习Java—用Socket实现简单通信
套接字是网络上运行的两个程序之间的双向通讯链接的一个端点。套接字类用于表示客户端程序和服务器程序之间的连接。java.net包提供了两个类-Socket和ServerSocket-分别实现连接的客户端和连接的服务器。
2025-11-09 11:40:53
306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅