- 博客(50)
- 收藏
- 关注

原创 小白从零开始学习Java(后端开发路线)
SSM框架我是学习的黑马的,也就是第一个链接,黑马讲解的SSM整体上还是比较容易理解的,当然刚开始不懂很正常多看两遍就懂了 ,黑马的SSM课程单独讲了Spring、SpringMvc以及Mybatis-Plus(没学过mybatis的可以去学一下尚硅谷10小时的mybatis课程),然后又进行了整合讲解,顺带讲了一下SpringBoot(只要学会SSM,很简单)。黑马的SSM还是很推荐的,其次就是尚硅谷的,虽然没学过,但以尚硅谷的口碑,特别适合时间充足的人学习,也比较细致。
2025-04-09 11:49:13
955
原创 SQL语句在MySQL的执行过程
先对MySQL的一些基础组件进行简单的介绍1.连接器:身份认证和权限相关。2.查询缓存:执行查询语句时,会先查询缓存(MySQL8.0版本后移除)。3.分析器:词法分析和语法分析,词法分析即对一条SQL语句中的关键字进行提取,如select、insert、update、表名、字段名等等,语法分析即查看SQL语句是否有语法错误。4.优化器:根据MySQL内部的优化算法按照最优方案执行SQL。5.执行器:执行语句,然后从存储引擎返回数据。MySQL主要分为server层和存储引擎层。
2025-05-23 10:47:44
1121
原创 idea中Lombok失效的解决方案
Lombok是一个用于简化Java代码编写的库,通过注解自动生成常见代码如getter、setter和构造函数,从而提高开发效率。当Lombok失效时,可以按照以下四步进行排查:首先,确保在IntelliJ IDEA中安装了Lombok插件;其次,检查项目的pom文件是否引入了Lombok依赖;第三,确认在IDEA中启用了注解处理器;最后,如果以上步骤均无误,可能是版本兼容性问题,需确保Lombok插件与依赖版本匹配,必要时尝试更换版本。
2025-05-16 17:51:52
773
原创 【LeetCode Hot100 | 每日刷题】合并区间
区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。
2025-05-14 12:02:53
795
原创 分享一个实用的突击面试手撕题的网站-CodeTop
网站首页是这样的,可以在上面选择你要去面试的公司和部门,面试前有针对的去刷一些出现概率高的题目,比如字节跳动、腾讯、美团等等,它是根据题目出现的频率由高到低排序的,当你想要做某一道题目时,直接点击该题目就可以跳转到leetcode相应的题目。同时你也可以通过爆料来为他人贡献自己的一份力量。该网站适合面试前突击一下,命中题目的概率提高。
2025-05-13 15:52:11
628
原创 【LeetCode Hot100 | 每日刷题】排序数组
平均时间复杂度:O(nlogn),最差时间复杂度为O(n^2),即每次取到的X都是当前区间的最大值或最小值,相当于冒泡排序了。的情况下解决问题,时间复杂度为。,并且空间复杂度尽可能小。,请你将该数组升序排列。
2025-05-11 17:23:17
308
原创 【LeetCode Hot100 | 每日刷题】LRU缓存
上述各项操作中,访问哈希表的时间复杂度为 O(1),在双向链表的头部添加节点、在双向链表的尾部删除节点的复杂度也为 O(1)。而将一个节点移到双向链表的头部,可以分成「删除该节点」和「在双向链表的头部添加节点」两步操作,都可以在 O(1) 时间内完成。然后判断双向链表的节点是否超出了容量,如果超出容量,删除双向链表的尾部节点,并删除哈希表中对应的项。如果存在,则key对应的节点是最近被使用的节点,通过哈希表的映射找到在双向链表的存储位置,并将其移动到双向链表的头部,然后返回该节点的值。
2025-05-10 21:21:02
1013
原创 非阻塞式IO-Java NIO
Java NIO是Java1.4引入的一种新的IO API,它提供了非阻塞式IO,选择器、通道、缓冲区等新的概念和机制。相比传统的IO,多出的N不单纯是新的,更表现在Non-blocking非阻塞,NIO具有更高的并发性、可扩展性以及消耗资源少的优点。
2025-05-10 17:40:09
1010
原创 【LeetCode Hot100 | 每日刷题】最大子数组和
请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。是数组中的一个连续部分。
2025-05-10 15:34:18
396
原创 【LeetCode Hot100 | 每日刷题】无重复字符的最长字串
题目要求是子串即连续的一串字符,通常的思路就是。,请你找出其中不含有重复字符的。请注意,你的答案必须是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。,所以其长度为 3。,所以其长度为 1。,所以其长度为 3。
2025-05-08 20:26:37
459
原创 Maven安装配置以及Idea中的配置教程
我使用的是3.9.9的版本:下载地址:Download Apache Maven – Maven将下载好的Maven压缩包解压到一个路径不包含中文的文件夹:以win11系统为例:1.鼠标右键此电脑->属性->高级系统设置点击环境变量找到系统变量一栏,点新建 2.新建系统变量MAVEN_HOME 变量值就是刚才解压缩后的地址3.编辑系统变量Path,添加变量值%MAVEN_HOME%\bin4.验证安装是否成功,win+R运行cmd,输入mvn -v,如图所示则配置成功 配置settings文件主要有两点:1
2025-05-03 22:07:05
943
原创 为什么你的大模型总‘胡言乱语’?RAG技术让它学会‘查资料’!
就是通过多次训练提问增加AI的专业知识储备,AI在回答问题时,通过训练所得的知识储备进行回答,缺点是对于 一些实时性较强的信息AI无法给出准确的答案,维护成本高需要经常训练。
2025-05-02 21:24:09
926
原创 快速上手非关系型数据库-MongoDB
MongoDB 是一个基于文档的数据库,由 MongoDB Inc. 开发。NoSQL,指的是非关系型的数据库。NoSQL有时也称作的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求。MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。:存储数据的容器,类似于关系型数据库中的数据库。:数据库中的一个集合,类似于关系型数据库中的表。
2025-05-01 18:27:47
1827
原创 Spring MVC异常处理利器:深入理解HandlerExceptionResolver
在 Web 开发中,异常处理是保障系统健壮性和用户体验的关键环节。Spring MVC 提供了多种异常处理机制,其中是一个强大且灵活的底层工具。本文将深入探讨它的工作原理、使用场景、实战技巧,并通过具体代码示例展示如何全局统一处理异常。是 Spring MVC 中用于的接口。它允许开发者将异常转换为特定的 HTTP 响应,例如:跳转到自定义错误页面(HTML)返回结构化的错误 JSON(API 接口)设置 HTTP 状态码(如 404、500)
2025-04-28 18:11:22
923
原创 【LeetCode Hot100 | 每日刷题】盛最多水的容器
时间复杂度:O(n),双指针最多遍历整个数组一次。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2025-04-25 14:50:30
320
原创 【LeetCode Hot100 | 每日刷题】三数之和
不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。答案中不可以包含重复的三元组。唯一可能的三元组和不为 0。本题的难点在于怎么去除重复解。唯一可能的三元组和为 0。,判断是否存在三元组。时间复杂度:O(n^2)
2025-04-25 11:44:36
553
原创 【MySQL面渣逆袭 | 第一篇】MySQL的存储引擎和日志
错误⽇志(error log):错误⽇志⽂件对 MySQL 的启动、运⾏、关闭过程进⾏了记录,能帮助 定位 MySQL 问题。慢查询⽇志(slow query log):慢查询⽇志是⽤来记录执⾏时间超过 long_query_time 这个变 量定义的时长的查询语句。通过慢查询⽇志,可以查找出哪些查询语句的执⾏效率很低,以便进⾏ 优化。⼀般查询⽇志(general log):⼀般查询⽇志记录了所有对 MySQL 数据库请求的信息,⽆论请 求是否正确执⾏。⼆进制⽇志(bin log)
2025-04-22 15:23:54
1349
原创 MYDB仿MySQL手写数据库项目总结
因为有两阶段锁协议(2PL),当一个事务对一个资源上锁之后,其他事务只能阻塞等待,而这样有死锁的可能,在项目中,我们把事务Ti等待事务Tj解锁抽象为一条有向边,即Ti->Tj,这样多条有向边就组成图,我们通过检查这个图是否是循环的,就可以来检查是否有死锁。SQL解析是通过里面一个分割相关的类把SQL语句分割成不同的部分,比如关键字、字母下划线、字符串等等,然后通过praser解析类先来判断第一个部分的关键字,比如select、insert等等,然后把同一类的SQL交给不同的方法解析。对每个持有资源的事务(
2025-04-21 18:06:09
1064
原创 【计算机网络 | 第三篇】常见的网络协议(二)
IP 地址过滤(IP Address Filtering)简单来说就是限制或阻止特定 IP 地址或 IP 地址范围的访问。例如,你有一个图片服务突然被某一个 IP 地址攻击,那我们就可以禁止这个 IP 地址访问图片服务。IP 地址过滤是一种简单的网络安全措施,实际应用中一般会结合其他网络安全措施,如认证、授权、加密等一起使用。单独使用 IP 地址过滤并不能完全保证网络的安全。MAC 地址的全称是媒体访问控制地址(Media Access Control Address)。
2025-04-20 11:33:50
921
原创 【计算机网络 | 第二篇】常见的通信协议(一)
HTTP默认是80端口,HTTPS默认是443。:HTTPHTTP 的 URL 前缀是http://,HTTPS 的 URL 前缀是https://。:HTTP协议运行在TCP上,都是明文传输,客户端和服务端都无法验证对方的身份。HTTPS协议是运行在SSL/TLS上的HTTP协议,SSL/TLS运行在TCP上,所有传输内容都经过加密,加密采用对称加密,但是对称加密的密钥用服务器方的证书采用非对称加密。所以HTTP协议没有HTTPS协议安全,但是HTTPS协议比HTTP协议耗费更多资源。
2025-04-19 12:09:19
1168
原创 【计算机网络 | 第一篇】计算机网络基础知识
URL(Uniform Resource Locators),即统一资源定位器。网络上的所有资源都靠 URL 来定位,每一个文件就对应着一个 URL,就像是路径地址。理论上,文件资源和 URL 一一对应。实际上也有例外,比如某些 URL 指向的文件已经被重定位到另一个位置,这样就有多个 URL 指向同一个文件。
2025-04-18 11:15:45
1502
原创 【从零开始学习JVM | 第五篇】认识常见的垃圾收集器
Serial(串行)收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。它的的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程(),直到它收集结束。虚拟机的设计者们当然知道 Stop The World 带来的不良用户体验,所以在后续的垃圾收集器设计中停顿时间在不断缩短(仍然还有停顿,寻找最优秀的垃圾收集器的过程仍然在继续)。但是 Serial 收集器有没有优于其他垃圾收集器的地方呢?
2025-04-18 09:41:09
923
原创 【从零开始学习JVM | 第三篇】虚拟机的垃圾回收学习(一)
无论是通过引用计数法判断对象引用数量,还是通过可达性分析法判断对象的引用链是否可达,判定对象的存活都与“引用”有关。JDK1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱),强引用就是 Java 中普通的对象,而软引用、弱引用、虚引用在 JDK 中定义的类分别是。
2025-04-12 16:00:58
837
原创 数据库守护神-WAL机制
WAL(Write-Ahead Logging,预写日志)是一种保证数据库操作和的核心机制。:日志的写入必须早于数据修改的完成。:所有修改操作都能通过日志完整重建。:系统崩溃后,通过日志可恢复到一致状态。
2025-04-11 17:55:23
621
原创 【从零开始学习JVM | 第二篇】HotSpot虚拟机对象探秘
虚拟机遇到一条new的指令,首先去检查这个指令的参数能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行类的加载过程。在通过后,接下来虚拟机将为新生对象,对象所需内存在类加载之后便可确定,为对象分配空间的任务等于说从把一块确定大小的内存从Java堆中划分出来。分配方式有和两种方式,适用场景:堆内存规整的情况下(没有内存碎片)。
2025-04-11 11:09:20
952
原创 【从零开始学习JVM | 第一篇】快速认识JVM
JVM--Java虚拟机,它是Java实现平台无关性的基石。Java程序运行的时候,编译器将Java代码编译为平台无关的Java字节码文件(.class),接下来对应平台的JVM对字节码进行运行解释,翻译成对应平台匹配的机器指令进行运行。同时JVM也是一个跨语言的平台,和语言无关,只和class的文件格式关联,任何语言,只要能翻译成符合规范的字节码文件,都可以被JVM运行。
2025-04-09 10:42:55
908
原创 【并发编程 | 第七篇】深入学习线程池(一)
线程池是用来管理和复用线程的⼯具,它可以减少线程的创建和销毁开销。在 Java 中,ThreadPoolExecutor 是线程池的核⼼实现,它通过核⼼线程数、最⼤线程数、任务队列和拒绝策略来 控制线程的创建和执⾏。举个栗子:就像你开了⼀家餐厅,线程池就相当于固定数量的服务员,顾客(任务)来了就安排空闲的服务员(线 程)处理,避免了频繁招⼈和解雇的成本。
2025-04-06 23:06:45
915
原创 【并发编程 | 第六篇】深入学习synchronized关键字
是 Java 中的一个关键字,翻译成中文是同步的意思,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。在 Java 早期版本中,属于,效率低下。这是因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高。
2025-04-05 17:09:14
1136
原创 【并发编程 | 第五篇】探索ThreadLocal的原理
是 Java 提供的一个线程本地变量工具类,用于在多线程环境下为每个线程提供独立的变量副本。简单来说,它能让每个线程拥有自己的“储物柜”,存储仅对自己可见的数据,,同时减少同步锁的开销。当你创建一个变量时,每个访问该变量的线程都会拥有一个独立的副本。这也是名称的由来。线程可以通过get()方法获取自己线程的本地副本,或通过set()方法修改该副本的值,从而避免了线程安全问题。
2025-04-04 16:19:09
1568
原创 【并发编程 | 第四篇】悲观锁与乐观锁的学习
包含悲观锁与乐观锁的定义,像synchronized、ReentrantLock等都是常见的悲观锁,而乐观锁其实并没有锁,是通过版本号机制和CAS技术等方法实现的,同时还介绍了CAS的原理、如何实现的原子操作以及CAS存在的问题。
2025-04-03 12:27:37
1445
原创 【并发编程 | 第三篇】Java内存模型JMM的详解
CPU缓存是位于CPU和主内存(RAM)之间的高速存储器,用于减少CPU访问数据的延迟。由于CPU速度远快于内存,缓存通过存储频繁访问的数据副本,避免CPU因等待内存响应而闲置。为什么要弄一个 CPU 高速缓存呢?类比我们开发网站后台系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。我们甚至可以把内存看作外存的高速缓存。
2025-03-31 14:02:30
734
原创 【并发编程 | 第二篇】如何理解多线程以及死锁
线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。下面通过一个例子来说明线程死锁,代码模拟了上图的死锁的情况 (代码来源于《并发编程之美》)://资源 1//资源 2try {}, "线程 1").start();try {
2025-03-28 17:52:34
717
原创 【并发编程 | 第一篇】线程相关基础知识
并发是指多核CPU上的多任务处理,多个任务在同一时刻真正同时执行。并行是指单核CPU上的多任务处理,多个任务在同一时间段内交替执行,通过时间片轮转实现交替执行,用于解决IO密集型瓶颈。如何理解线程安全呢?如果一段代码块或者一个方法被多个线程同时并发执行,其中的共享内容还能够有序正确的执行,就说明是线程安全的。一个操作如果执行要么成功,要么失败,不会只执行一部分。可以通过同步关键字 synchronized 或原⼦操作,如 AtomicInteger 来保证原子性。
2025-03-27 18:41:57
1503
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人