- 博客(48)
- 收藏
- 关注
原创 【Redis 系列第 2 篇】Redis 五大核心数据类型与底层应用场景详解
String:适合缓存单值、数字计数和简单状态。Hash:适合保存对象的多个字段,支持字段级读取和修改。List:适合有序序列、栈和简单队列。Set:适合去重、成员判断和集合运算。ZSet:适合排行榜、分数排序和范围查询。Bitmap、HyperLogLog、GEO、Streams 等能力适合更专门的业务场景。在 Java 后端开发中,Redis 数据类型不是孤立的知识点。为什么选择这种数据结构?它能提供什么操作?它有什么代价?有没有更合适的方案?
2026-11-03 17:57:34
298
3
原创 【Redis 系列第 1 篇】Redis 为什么这么快?深入理解 Redis 核心架构与事件驱动模型
I/O 多路复用(I/O Multiplexing)是一种让一个线程监控多个 I/O 对象是否就绪的机制。当前可以尝试读取数据;当前可以尝试写入数据。接口常见平台简要说明select多种 Unix-like 系统经典 I/O 多路复用接口,有描述符数量等方面的限制poll多种 Unix-like 系统使用 pollfd 数组描述需要监控的文件描述符epollLinuxLinux 提供的 I/O 事件通知机制kqueueBSD、macOSBSD 系统常见的事件通知机制。
2026-11-03 17:50:04
381
1
原创 【计算机网络】第 15 篇:Java BIO、NIO 与高并发网络通信——从 Socket 理解 I/O 模型
本篇是整个计算机网络系列的最后一篇。和Socket是传统 TCP 阻塞式网络编程的常见入口。BIO 的典型实现是一个连接交给一个工作线程处理,读取数据时线程可能阻塞。NIO 通过 Channel、Buffer 和 Selector 提供非阻塞 I/O 与多路复用能力。ByteBuffer的flip()用于从写入模式切换到读取模式,clear()用于重置状态以准备下一次写入。Selector 负责报告就绪事件,应用程序仍然需要调用 Channel 完成实际读写。
2026-10-31 22:46:41
321
6
原创 【计算机网络】第 14 篇:WebSocket 和 SSE 有什么区别?Java 后端如何实现实时消息推送?
短轮询通过重复请求获取更新;长轮询通过延迟响应减少无效请求。SSE 基于 HTTP 事件流,适合服务端向浏览器持续推送文本事件。WebSocket 建立持久双向通信通道,适合聊天、协作和实时交互。Spring MVC 可通过SseEmitter实现 SSE;Spring WebSocket 可通过处理文本消息。实时通信不是“建立连接就结束了”,还要设计超时、断线重连、消息补偿、资源清理和安全控制。不要盲目追求 WebSocket:只需要服务端推送时,SSE 往往更简单;
2026-10-29 15:41:23
774
5
原创 【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
私有 IPv4 地址可在内部网络重复使用,但不能直接作为全球公网路由地址。NAT / NAPT 让内网设备能够共享公网 IPv4 地址访问外部网络。端口映射为符合条件的外部入站流量指定内网目标,但它不能代替防火墙和应用安全配置。如果家用路由器处于 CGNAT 或其他上游 NAT 后面,仅修改本地路由器规则通常无法实现公网入站访问。Java 服务外网访问失败时,应从服务监听、局域网可达、路由器 WAN 地址、端口转发和防火墙逐层确认。NAT 解决地址转换,端口映射指定内网目标;
2026-10-29 15:38:37
313
2
原创 【计算机网络】第 12 篇:IPv6 详解——地址格式、地址类型与双栈网络
双栈(Dual Stack)通常指设备或网络同时支持 IPv4 和 IPv6 协议。设备可能拥有 IPv4 地址,也拥有一个或多个 IPv6 地址,并根据目标地址、路由和应用连接策略进行通信。它不意味着 IPv4 地址会自动转换成 IPv6 地址,也不意味着每一个服务都同时支持两种协议。在迁移期间,双栈是一种常见部署方式:旧系统仍可使用 IPv4,新系统或具备条件的链路可以使用 IPv6。IPv6 地址长度为 128 位,通常写成 8 组十六进制字段。可以压缩连续零字段,但同一个地址中只能出现一次;
2026-10-28 11:34:52
359
1
原创 【计算机网络】第 11 篇:TCP 流量控制与拥塞控制,滑动窗口到底怎么工作?
流量控制看rwnd接收方告诉发送方自己还能接收多少数据。拥塞控制看cwnd发送方根据网络反馈调整注入网络的数据量。简化理解下,有效窗口约为,还要扣除已经在途的数据。当累计 ACK和窗口状态允许时,发送方可以继续发送新的字节。流量控制防止接收方忙不过来,拥塞控制防止网络承受不住。我是程序员大海,我们下期不见不散。
2026-10-28 10:40:13
210
原创 【计算机网络】第 10 篇:网络排查常用命令:ping、tracert、nslookup、curl 怎么用?
ping:观察 ICMP 回显和往返时间,但不能独立判断 Web 服务是否可用。tracerttraceroute:尝试观察到目标的逐跳路径;中间节点不回应并不必然代表路径中断。nslookupdig:检查 DNS 查询结果。nc:检查 TCP 端口连接。curl:检查 HTTP(S) 响应、TLS 细节和阶段耗时。Java 后端排障要在实际运行环境中验证,并结合日志、配置和异常堆栈,不要只依赖开发机上的单次命令。我是程序员大海,我们下期不见不散.
2026-10-27 12:13:19
756
4
原创 【计算机网络】第 9 篇:从输入网址到网页显示,中间到底发生了什么?
一次典型的网页访问可能涉及 URL 解析、缓存检查、DNS 解析、连接建立或复用、HTTP 请求与响应,以及浏览器的资源加载和渲染。DNS解决名称解析问题。TCP / QUIC负责传输层连接与数据传输能力。TLS为通信提供保护(HTTP/3 将 TLS 1.3 安全机制集成于 QUIC)。HTTP定义客户端和服务端交换消息的语义。浏览器渲染将 HTML、CSS、JavaScript 等资源处理成可见页面。Java 后端通常在 HTTP 请求到达后执行路由、业务逻辑,并返回响应。
2026-10-27 12:10:12
303
2
原创 【计算机网络】第 7 篇:HTTP 和 HTTPS 有什么区别?从一次请求看懂 Web 通信
HTTP定义客户端与服务端交换请求、响应的规则。请求方法、请求头、请求体共同描述客户端要做什么、带什么信息。状态码用于概括服务端处理结果,401 和 403 的含义不同。,通过 TLS 提供机密性、完整性保护和服务端身份验证。Java 11 及以上版本可以使用HttpClient发起 HTTP/HTTPS 请求;生产代码还需要处理超时、异常、认证和日志安全。《【计算机网络】第 8 篇:DNS 域名解析全过程:输入域名后,浏览器如何找到服务器?我是程序员大海,我们下期不见不散.
2026-10-26 16:33:48
371
2
原创 【计算机网络】第 8 篇:DNS 域名解析全过程:输入域名后,浏览器如何找到服务器?
DNS是分布式命名系统,用于查询域名相关记录。递归解析器通常代表客户端完成查询,并利用根、顶级域和权威 DNS 服务器逐步找到答案。等记录分别承担不同用途。TTL控制 DNS 记录缓存时间,不是网站的访问时限,也不是 HTTP 缓存。DNS 既可使用 UDP,也可使用 TCP;DoT、DoH 则提供不同的加密传输方式。Java 的可以用于名称解析,但不能代替完整的 DNS 抓包与网络排障。《【计算机网络】第 9 篇:从输入网址到网页显示,中间到底发生了什么?
2026-10-26 16:28:36
244
2
原创 【计算机网络】第 6 篇:TCP 三次握手和四次挥手,为什么不能少?
完成双方初始序列号同步和连接建立所需的确认。典型情况下,双方分别关闭自己的发送方向。为最终 ACK 的重传和旧报文消失提供保护,不应直接视为泄漏。本端已收到对端 FIN,但本地应用还未完成关闭,排查时要关注资源释放。合理管理 Socket、使用连接池、设置超时,并结合系统状态和应用日志排查连接问题。《【计算机网络】第 7 篇:HTTP 和 HTTPS 有什么区别?从一次请求看懂 Web 通信》。我们将从请求行、请求头、状态码讲起,再解释 HTTPS 如何借助 TLS 保护通信。
2026-10-25 15:34:42
311
2
原创 【计算机网络】第 5 篇:TCP 和 UDP 有什么区别?从 Java 后端场景理解两种传输协议
面向连接,提供可靠、有序的字节流;不保留应用写入的消息边界。无连接,提供数据报服务;本身不保证送达、顺序和重传。看业务对完整性、顺序、及时性和拥塞处理的要求,而不是简单地认为 TCP 慢、UDP 快。TCP 常用Socket,UDP 常用。TCP 的可靠传输不等于业务一定成功;UDP 的基础协议语义也不妨碍上层协议自行实现可靠机制。《【计算机网络】第 6 篇:TCP 三次握手和四次挥手,为什么不能少?
2026-10-24 19:51:57
459
4
原创 【计算机网络】第 4 篇:ARP、DHCP、子网掩码和路由到底在做什么?
帮助设备获得 IP 地址、子网掩码、默认网关等网络配置。帮助主机判断 IPv4 地址的网络前缀,从而判断目标是否属于本地子网。根据路由表决定 IP 包下一步往哪里转发;默认网关通常是访问其他网络时的下一站。在 IPv4 本地链路上解析下一跳对应的 MAC 地址,不负责查找远端服务器的 MAC。当你理解这四者的分工,就能解释为什么电脑连上 Wi-Fi 后可以访问远程服务器,以及为什么访问远程服务器时第一跳的目的 MAC 通常是网关。《【计算机网络】第 5 篇:TCP 和 UDP 有什么区别?
2026-10-24 19:42:45
340
9
原创 【计算机网络】第 3 篇:MAC 地址、IP 地址和端口有什么区别?一次讲清楚
解决当前链路上的帧交付问题。解决网络层寻址和跨网络转发问题。帮助传输层区分通信端点和服务。访问远程 Java 服务时,这三者不是互相替代,而是共同完成通信。IP 地址告诉网络层数据要去哪里,端口让传输层知道要交给哪个通信端点,而链路层 MAC 地址负责当前这一跳的帧交付。《【计算机网络】第 4 篇:ARP、DHCP、子网掩码和路由到底在做什么?我们会继续沿着“客户端如何找到并访问服务器”的路径,解释 IP 地址如何配置、网关如何选择,以及设备如何知道下一跳的 MAC 地址。
2026-10-23 20:07:27
672
5
原创 【计算机网络】第 2 篇:一条数据如何穿过网络?彻底理解数据封装与解封装
在 Java 后端开发中,我们可能只写了几行代码,就向服务器发送了一次 HTTP 请求。但这段请求真正离开电脑时,并不是简单地原样塞进网线。网络协议栈会按照各层协议的规则处理数据:传输层可能添加 TCP 首部,网络层添加 IP 首部,链路层再把 IP 包放进当前链路使用的帧中。接收端收到数据后,会由相应协议逐层处理,最后把应用需要的数据交给应用程序。这个过程叫作封装(Encapsulation)与解封装(Decapsulation)。本文以HTTP/1.1 over TCP、IPv4、以太网。
2026-10-19 19:49:31
196
4
原创 【计算机网络】第 1 篇:从 0 开始认识计算机网络——网络分层模型到底是什么?
本文从浏览器请求出发,讲解计算机网络分层思想。通过对比OSI七层、TCP/IP四层与五层教学模型,阐明分层如何降低复杂度、明确职责、提升可维护性。结合Java后端场景,解析HTTP请求在各层的封装与传输过程,帮助开发者理解网络通信本质。强调协议是通信规则,分层是设计哲学,而非僵化结构。初学者应避免将模型等同于实际实现,重在掌握职责逻辑与问题排查思路。
2026-10-18 13:48:49
288
3
原创 Kafka 消息为什么会丢失?
此时,如果 Leader 确认消息后立即发生故障,而消息尚未同步到其他副本,就存在消息丢失的风险。生产者发送失败、Broker 副本配置不合理、消费者提前提交 offset,甚至数据库事务与消息发送之间的时序问题,都可能导致业务层面出现消息丢失。Kafka 中,每个分区的消息都有自己的 offset,可以将它理解为消息在该分区中的位置标识。例如,一个分区有三个副本,其中一个副本暂时落后,不在 ISR 中,那么 acks=all 等待的是当前 ISR 中的副本,而不是无条件等待三个副本全部确认。
2026-10-17 21:33:25
443
3
原创 C语言从入门到精通【超详细】:基础语法、数组、指针、内存、结构体、文件与项目实战
二十四、数据结构入门:手写单链表数组的容量和内存布局比较固定,而链表通过节点和指针把数据连接起来。节点定义int value;} Node;创建节点头插法return 0;return 1;为什么是?因为函数需要修改调用者保存的“头指针”本身。遍历p!= NULL;释放整个链表= NULL) {
2026-08-22 15:59:28
1042
7
原创 Kafka 消费速度为什么比生产速度慢?性能瓶颈怎么找?
在实际项目中,我们经常会遇到一种情况:Producer 发送消息很快,但 Consumer 就是消费不过来,Kafka 中的消息越积越多,Lag 也越来越高。很多人的第一反应是:是不是 Kafka 消费性能不行?是不是把调大就好了?实际上,大多数“Kafka 消费慢”问题并不是 Kafka 读取消息本身慢,而是整个消费链路中存在瓶颈。这个瓶颈可能出现在 Consumer 数量、Partition 数量、业务处理逻辑、数据库、远程接口、JVM、网络,甚至频繁 Rebalance 上。
2026-08-20 17:00:19
948
7
原创 Kafka 消息为什么不会丢?ACK、ISR 和副本机制详解
在学习 Kafka 时,经常会看到一句话:Kafka 可以保证消息不丢失。但严格来说,这句话并不完整。Kafka 并不是“无论怎么配置、无论发生什么故障都绝对不会丢消息”,而是通过 副本机制、ISR、ACK 确认机制、、生产者重试和幂等性 等多层机制,把消息丢失的风险尽可能降低。这篇文章就从一条消息发送到 Kafka 的完整过程出发,把acks、Leader/Follower、副本、ISR、HW/LEO 以及生产环境常见配置一次讲清楚。一、先看结论:Kafka 靠什么降低消息丢失风险?
2026-08-19 22:19:45
725
8
原创 Kafka 为什么吞吐量这么高?底层原理一次讲清楚
Kafka 经常被用在日志采集、用户行为埋点、实时数据管道、消息解耦等场景中。很多人第一次接触 Kafka 时都会有一个疑问:Kafka 明明会把消息写入磁盘,为什么吞吐量还能这么高?如果只用一句话回答:Kafka 并不是靠“完全不写磁盘”来获得高性能,而是尽可能把磁盘、内存、网络和并发模型都设计成适合批量、顺序和流式处理的方式。Kafka 的高吞吐并不是某一个黑科技带来的,而是多个设计共同作用的结果:Partition 日志采用追加写,尽量形成顺序 I/O。
2026-08-18 22:58:17
527
3
原创 不同的消息队列有什么区别?Kafka、RabbitMQ、RocketMQ、Pulsar、ActiveMQ 选型对比
对比项KafkaRabbitMQRocketMQPulsarActiveMQ核心定位事件流平台消息代理分布式业务消息 / 流云原生消息与流传统企业消息中间件典型模型吞吐倾向很高中高高很高中等路由灵活度相对简单很强较强较强较强顺序处理Partition 内有序Queue 场景下可维持顺序,但需考虑并发等因素支持顺序消息支持 Key_Shared 等模式处理有序需求支持传统队列顺序语义延迟消息通常需要业务设计或相关机制实现。
2026-08-17 16:55:59
1082
3
原创 Git 如何一次 cherry-pick 多个提交?多个 commit 批量合并完整教程
可以。通常会生成三个对应的新提交。如果你希望只应用这些提交的改动,而暂时不自动 commit,可以使用-n或执行完成后,这些改动会留在工作区和暂存区中。git commit -m "feat: 合并订单相关功能"最终原本多个 commit 的改动,就可以整理成当前分支上的一个新 commit。一次 cherry-pick 多个提交其实并不复杂,最常用的就是下面三种写法。
2026-08-16 16:00:32
775
3
原创 如何把某一个 commit 合并到当前分支?Git cherry-pick 完整教程
只把另一个分支中的某一个 commit 合并到当前分支。先切到接收提交的目标分支。找到需要的 commit ID。执行。使用git log和git status检查结果。cherry-pick 操作的是 commit,不是整个分支。只要把这一点理解清楚,什么时候应该用merge,什么时候应该用,基本就不会搞混了。
2026-08-15 19:13:41
630
3
原创 GitHub Fork 和 Clone 有什么区别?一篇搞懂两者的关系和使用场景
Fork 是 GitHub 平台提供的功能。执行 Fork 后,GitHub 会在你的账号或你有权限的组织下创建一个新的仓库。这个仓库与原仓库保持 Fork 关系,你可以在自己的副本中修改代码,而不会直接影响原仓库。参与自己没有写权限的开源项目。Clone 是 Git 本身提供的操作。它的作用是把一个远程 Git 仓库完整复制到本地电脑,并建立本地 Git 仓库。克隆之后,你就可以在本地使用 IDEA、VS Code 等开发工具查看代码、修改代码、创建分支和提交 commit。
2026-08-14 14:43:58
740
3
原创 Git remote 怎么用?远程仓库管理完整教程
日常开发最常使用的命令是 git remote -v、git remote add、git remote set-url、git fetch 和 git push -u。Git remote 用于管理本地仓库所关联的远程仓库。本文从远程仓库的基本概念开始,系统讲解查看、添加、修改、重命名、删除远程仓库,以及多远程协作、上游同步、远程分支清理和常见报错处理。git remote 的主要作用是管理当前本地仓库记录的远程仓库,包括查看远程名称与地址、添加远程、修改 URL、重命名、删除和清理失效的远程跟踪分支。
2026-08-11 23:46:29
3226
6
原创 Git worktree 怎么用?同时开发多个分支完整教程
主工作区和所有链接工作区共享同一套仓库对象、提交历史、分支引用和远程仓库配置,但每个工作区都拥有独立的 HEAD、索引和工作文件。这样,在功能开发尚未完成时遇到紧急 Bug,不必先提交半成品、执行 stash 或反复切换分支,而是可以在另一个目录中直接开始修复。worktree 提供了第四种方式:保留当前目录和所有未提交修改,在旁边创建另一个与同一仓库关联的目录,并在新目录中检出 hotfix 分支。因此,在一个工作区提交后,其他工作区立即能够看到该提交,但其他工作区的工作文件不会自动切换或改写。
2026-07-30 20:53:05
879
2
原创 Git log 怎么用?查看提交历史完整教程
日常开发中最需要掌握的是 git stash push、git stash list、git stash show、git stash apply、git stash pop 和 git stash drop。git stash branch 会从创建 stash 时所在的提交创建新分支,再把 stash 应用到新分支。需要注意的是,stash 主要用于短期保存。旧写法 git stash save 目前仍可能可用,但官方文档已经将其标记为不推荐,新的教程和项目应优先使用 git stash push。
2026-07-29 12:32:53
501
4
原创 Git clone 怎么用?克隆项目及常见问题完整教程
本文从基本用法开始,系统讲解 HTTPS 与 SSH 克隆、指定目录、指定分支、浅克隆、子模块克隆以及克隆完成后的常用检查方法,同时整理新手经常遇到的报错和对应解决思路。与直接下载 ZIP 压缩包不同,克隆得到的不只是当前文件,还包含仓库的版本历史和分支信息,因此可以继续执行提交、拉取、推送和分支操作。遇到克隆失败时,建议依次检查仓库地址、访问权限、身份验证、网络连接和本地目录。主仓库克隆成功,但子模块失败时,应检查 .gitmodules 中记录的地址,以及自己是否拥有子模块仓库的权限。
2026-07-28 15:30:23
747
4
原创 Git 提交错了怎么办?常见撤销与版本回退方法总结
本文按照“尚未暂存、已经暂存、已经提交、已经推送”四个阶段,系统讲解 git restore、git commit --amend、git reset、git revert 和 git reflog 的区别与使用方法。在使用 Git 的过程中,提交说明写错、漏加文件、把代码提交到了错误分支,甚至错误执行 git reset --hard,都是很常见的问题。真正安全的 Git 操作习惯,是在执行前先看 git status 和 git log,在危险操作前创建备份分支,并避免在共享分支上随意改写历史。
2026-07-27 18:54:43
917
3
原创 Git 分支怎么用?创建、切换、合并和删除分支完整教程
如果创建功能分支后,main 没有产生新的提交,那么 Git 只需要把 main 指针直接移动到功能分支最新提交的位置。Git 分支的核心思路并不复杂:从稳定分支创建一条独立开发路线,在新分支中完成并提交修改,然后切回目标分支进行合并,最后删除已经完成的临时分支。如果 main 和功能分支都产生了新提交,Git 会根据两个分支的共同祖先进行三方合并,并通常生成一个新的 merge commit。从 Git 的实现来看,分支本质上并不是一份完整的项目副本,而是一个指向某次提交的可移动指针。
2026-07-26 23:05:19
702
5
原创 从入门到日常开发,一篇文章掌握 Git 核心操作
很多初学者第一次接触 Git 时,会被 git add、git commit、git pull、git push 等命令弄得很混乱。最基础的一套操作是:使用 git status 查看状态,使用 git add . 添加修改,使用 git commit 保存版本,再使用 git pull 和 git push 与远程仓库同步。分支可以理解为一条独立的开发线路。因此,最基本的 Git 操作顺序可以记为:先在工作区修改文件,再使用 git add 放入暂存区,最后使用 git commit 保存到本地仓库。
2026-07-24 16:37:08
706
5
原创 IDEA 如何配置 JDK?项目 SDK 报错解决方法
IDEA 配置 JDK 的核心思路其实很简单:先保证电脑里有完整 JDK,再让 IDEA 的 Project SDK 指向这个 JDK,接着检查 Module SDK 是否继承项目 SDK,最后再检查 Maven 或 Gradle 使用的 JDK 是否一致。Maven 项目可以检查:Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Importing -> JDK for importer。
2026-06-15 13:01:49
743
8
原创 Spring Boot 项目如何连接 Redis?新手入门配置和常见错误总结
很多初学者第一次连接 Redis 时,会遇到 Redis 服务没有启动、端口写错、密码配置错误、依赖缺失、RedisTemplate 注入失败、序列化后数据看起来乱码等问题。如果 Redis 部署在服务器上,而 Spring Boot 项目在本地运行,除了 host 和 port,还要考虑服务器防火墙、Redis 绑定地址、密码、云服务器安全组等问题。有些同学从网上复制配置时,会发现同样是 Redis,有的文章写 spring.redis,有的写 spring.data.redis。
2026-06-14 22:50:38
357
3
原创 Spring Boot 连接 MySQL 失败怎么办?常见报错原因和解决方法总结
如果不确定 yml 是否写对,可以临时改用 application.properties,因为 properties 对缩进不敏感,例如 spring.datasource.url、spring.datasource.username、spring.datasource.password 分别写在三行即可。对于初学者来说,可以先记住一个简单顺序:先检查 MySQL 服务,再检查 url、端口、库名,然后检查账号密码,接着看驱动依赖和 yml 缩进,最后再考虑远程权限和 URL 参数。
2026-06-14 00:25:50
702
11
原创 IDEA 中 Java 项目代码爆红怎么办?常见原因和解决方法总结
对于初学者来说,这些红色提示看起来很吓人,但实际上很多时候并不是代码本身写错了,而是 JDK、Maven、项目目录、源码目录或 IDEA 缓存没有配置好。常见的大面积爆红包括:import 全部爆红、Spring 注解爆红、String 和 System 等基础类异常、Maven 依赖爆红、项目没有运行按钮、Problems 面板出现大量 Cannot resolve symbol。然后等待依赖下载完成。现在很多新项目会使用 JDK 17,如果老师给的项目是 JDK 8,也要按照项目要求选择对应版本。
2026-06-12 20:01:37
1249
7
原创 Maven 依赖爆红怎么办?IDEA 中 Maven 项目常见问题和解决方法总结
有时候项目中明明有 pom.xml,但是 IDEA 没有自动识别 Maven 项目,这时候依赖就不会自动下载。其中 pom.xml 是 Maven 项目的核心配置文件,里面通常包括项目基本信息、JDK 版本、项目依赖、Maven 插件和 Spring Boot 版本等。最常见的原因包括:项目没有被识别为 Maven 项目、Maven 依赖没有下载完成、网络问题导致下载失败、本地仓库依赖损坏、pom.xml 文件写错、JDK 版本不匹配、Maven 配置路径错误以及 IDEA 缓存问题。
2026-06-11 16:11:10
710
5
原创 Spring Boot项目启动失败怎么办?常见原因和解决方法总结
常见项目中,pom.xml 负责管理依赖,src/main/java 存放 Java 代码,src/main/resources 存放配置文件,启动类通常位于最外层包路径下。最常见的原因主要包括:启动类写错、端口号被占用、Maven 依赖没有下载成功、JDK 版本不匹配、application.yml 配置错误、数据库连接失败、Controller 路径写错以及 Bean 注入失败。如果电脑上已经有一个项目占用了 8080 端口,再启动新的 Spring Boot 项目时,就会启动失败。
2026-06-11 15:53:20
692
4
原创 IDEA 导入 Java 项目后无法运行怎么办?常见原因和解决方法总结
摘要很多初学 Java 的同学在使用 IntelliJ IDEA 导入老师发的项目、GitHub 下载的源码、压缩包里的课程资料,或者同学发来的 Java 代码后,经常会遇到项目无法运行的问题。常见现象包括:没有运行按钮、代码全部爆红、提示找不到主类、JDK 没配置、Maven 依赖下载失败、Spring Boot 启动类无法识别等。这类问题看起来像“代码坏了”,但大多数其实是项目打开方式、JDK、源码目录、依赖和运行配置没有设置好。本文按照新手最容易出错的顺序,整理一套可以照着操作的排查流程。关
2026-06-10 19:43:24
934
8
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅