- 博客(79)
- 问答 (3)
- 收藏
- 关注
原创 mmyolo报错:ValueError: Key img_path is not in available keys
降级 albumentations 版本。这个错误大概率是 albumentations 库的版本过高导致。可以通过降级到 1.3.1 版本来解决。
2025-10-27 22:20:57
166
原创 低版本的JVM遇到高版本的class字节码是否会报错
答案是:会报错。低版本的 JVM 无法运行由高版本 JDK 编译出来的 class 文件。 运行时会抛出错误:1. 原理解释每个 文件的开头都有一个版本号(由编译器写入),包括4 个关键字段:所以文件头结构如下(十六进制表示):其中 是 是 (对应 JDK 8)major 与 minor 的区别示例:如果用 JDK 17 编译:然后用 JRE 8 来运行:就会报错:2. 解决办法使用兼容编译选项在高版本 JDK 下编译时加上 或 参数:或者:表示编译生成能在 JDK
2025-10-10 00:39:41
398
原创 MCP— Model Context Protocol(模型上下文协议)
MCP 不仅只是 “调用功能”,还涉及在多步任务中保持上下文,知道哪些能力被调用过、输出是什么、下一步可能需要什么。MCP 的核心目标之一是建立一个标准协议,让服务提供者可以按标准暴露“能力”(capabilities),让 AI 客户端/Host/Agent 能够知道这些能力、理解如何调用这些能力,并能在对话或任务中持续保持上下文。MCP Server 会向 Client 描述它能做什么(哪些工具/服务/能力),这些能力需要什么输入参数(schema),能力的输出是什么样子的。
2025-09-22 23:01:10
1036
原创 Java中的equals()与hashCode()
hashCode() 给对象生成一个整数,用来加速哈希容器(比如 HashMap)的存取。Java 规定:如果两个对象通过 .equals() 相等,它们的 hashCode() 必须一样,否则哈希结构会出错;但反过来,hashCode() 一样,不代表 .equals() 就相等。
2025-09-20 23:46:15
452
原创 ThreadLocal 内存泄露风险解析
最近在b站看到一个博主分享的ThreadLocal内存泄露的观点,和之前学习到的有一些差别,因此作一个记录。原视频在。面试题:ThreadLocal 会导致内存泄露吗?ThreadLocal 使用不当会导致内存泄露。这里 key 是对 ThreadLocal 的弱引用,value 是强引用。
2025-09-07 01:01:26
831
原创 Redis集群模式详解
但也引入了另一个问题:哈希槽信息是维护在Redis里的,客户端没有这个信息,读写数据时怎么知道这些Key 对应哪个哈希槽和Redis节点?如果只用单机Redis,内存上限很快被打满,哪怕你增加再多的从节点,的多主多从架构,每个主节点负责一部分数据,每个主节点可以挂载若干从节点用于高可用。:如果后续增加或删除Redis节点,节点总数改变,所有Key的取模结果都会变,如果客户端没有及时更新哈希槽信息,把数据发错了节点,Redis会返回。当数据量增加时,只需要新加节点D,重新分配部分哈希槽,集群即可扩容。
2025-09-02 21:19:56
1069
原创 Raft 协议在 Nacos 中的实现
在 Nacos 中,服务注册表和配置中心的数据必须在多节点集群中保持一致。如果数据不一致,就可能导致某些消费者拿到过期实例,部分服务调用失败,甚至配置错乱。为了解决这一问题,Nacos 在中引入了,用于集群内的数据一致性维护。相比 ZooKeeper 的,Raft 更易理解、实现更简单。
2025-09-01 17:04:00
1043
原创 Nacos服务治理
在微服务架构中,随着服务数量的不断增长,系统需要一种机制来高效管理服务之间的调用关系、动态发现实例、实现配置的集中化管理以及保证系统的高可用性。在阿里内部最初应用于电商双11高并发场景,经过多年生产验证,已经演变为一套支持的综合治理平台。
2025-09-01 16:53:38
961
原创 WebSocket——Java后端实时通信的关键技术
传统Web应用中使用HTTP 请求-响应模型:客户端通过一次请求向服务器索要数据,服务器处理后返回结果,连接随后立即关闭。这种数据数据交互方式在需要实时更新的场景中有些力不从心。在线聊天系统需要即时同步消息;在线教育平台需要实时显示答题状态;协作文档要求毫秒级更新;直播弹幕需要低延迟推送;这些需求都远远超出了 HTTP 请求-响应模式的能力边界。
2025-08-31 00:40:18
1080
原创 Kafka 消费模型
在同一个消费者组内,Kafka 会自动将 每个分区分配给 唯一一个消费者,确保一个分区只会被一个消费者读取。由于同一个 Topic 的不同分区中存储的是 不同的消息序列,因此两个消费者之间 不会读取到相同的消息,从而避免了重复消费。有 4 个分区,如果消费者组中有 4 个消费者,那么每个消费者会各自消费一个分区中的消息,达到。:Kafka 如何保证在同一个消费者组内,一条消息不会被多个消费者重复消费?消费同一个 Topic 中的所有消息,不会互相影响。中,并让该消费者组订阅同一个 Topic。
2025-08-30 23:46:04
1228
原创 优快云博客语法(不常用但有用)
在编辑框插入一张图片后会自动生成一个图片的url,我们在这个url的后面添加格式控制的代码。可以使用渲染LaTeX数学表达式。语法插入流程图、甘特图、UML图。设定内容居中、居左、居右。
2025-08-30 23:01:09
258
原创 系统设计的核心原则:CAP、BASE、SOLID 和 KISS
网络分区只在分布式集群中,节点之间由于网络不通,导致集群中节点形成不同的子集,子集中节点之间网络互通,而子集与子集之间网络不通。
2025-08-27 14:57:42
655
原创 什么是跨域资源共享(CORS)?
为了解决这种安全漏洞,浏览器引入了同源策略(Same-Origin Policy,简称SOP如果一个网页想请求 不同源的资源,浏览器会直接 拦截。“同源”怎么定义?协议 + 域名 + 端口,三者都一样才算同源。SOP 完全是浏览器层面的安全策略。catpay.com 服务器本身其实没法判断这个请求是不是伪造的,防御 CSRF 这样的攻击,靠的就是浏览器在第一道关口拦住不该发的请求。在同源策略的基础上,给服务器提供一套更灵活的授权机制,让服务器来决定哪些跨域请求是安全的。SOP。
2025-08-27 10:01:53
997
原创 Kafka复制机制
当某个 broker 出现故障时,Kafka 会在其他副本中选举出一个新的 leader,继续对外提供服务,从而实现零停机且不丢失数据。当一个 broker 出现故障时,Kafka会自动从 ISR 列表中挑选一个最新的 follower 副本升级为新的 leader。,Kafka 只会从 ISR 中挑选,因为只有 ISR 中的副本数据和 leader 完全一致。,Kafka 会把每个分区的副本分布到不同的 broker 上。如果一个 topic 的副本因子是 3,那它的每个分区都会在。
2025-08-27 00:05:20
1529
原创 系统设计中的幂等性
幂等性关注的是操作的副作用或系统状态的最终结果,而不是方法的返回值。注意需要处理并发问题(有两个不同的订单处理服务实例处理同一条消息,并且它们同时执行SELECT),处理消息两次不是一个合理的做法,更好的方案是将此逻辑包装到事务中。在分布式系统中,网络是不可靠的,服务会失败,消息可能重复投递,所以幂等性是保证数据一致性和系统健壮性的关键。但这并不成问题,如果 Service B 的处理逻辑是幂等的,那么即使消息被重复消费,最终结果也是一致的。很多初学者会误解幂等性,认为“多次调用返回值相同”才叫幂等。
2025-08-26 23:01:58
908
原创 RPS和QPS
这是系统设计中两个最核心且容易混淆的性能指标。简单来说:• RPS 是 “每秒请求数”,是从客户端或负载均衡器的视角看,服务器每秒接收到的请求数量。• QPS 是 “每秒查询数”,通常是从数据库或特定服务的视角看,其每秒执行的查询操作数量。可以把二者看作一种 “因果关系”:1个来自外部的 RPS,通常会在系统内部产生 N次 QPS(以及其他操作)。# 用一个简单的公式来理解 总 QPS ≈ RPS ×(每个请求平均产生的查询次数)
2025-08-26 15:35:26
1140
原创 从一条update语句出发解析 binlog 和 redo log
MySQL通过redo log和binlog两大日志模块协作完成数据更新操作。redo log是InnoDB引擎的物理日志,采用循环写入方式实现高性能的WAL机制;binlog是Server层的逻辑日志,用于主从复制和数据恢复。update语句执行采用两阶段提交(prepare和commit)确保两个日志的一致性,防止数据丢失或不一致。生产环境建议配置"双1模式"(innodb_flush_log_at_trx_commit=1和sync_binlog=1)来保证数据安全。这种设计既保证
2025-08-26 10:55:37
1284
原创 Spring Boot 3.5 新特性
Spring Boot 3.4 引入了结构化日志(Structured Logging),而在 3.5 中,这一功能进一步增强:你可以完全控制堆栈追踪(Stack Trace)在结构化日志中的展示方式。这种结构化日志的定制使我们能够对日志输出进行精细控制,从而更容易根据我们的操作和分析需求优化日志。新配置项通过logging:json:root: first # 打印顶部带有根本原因的堆栈跟踪(root: first)max-length: 1024 # 将堆栈跟踪字符串限制为1024个字符。
2025-08-25 17:01:46
1675
原创 Java 并发编程总结
本文系统梳理了Java并发编程的核心知识点:1)Java内存模型(JMM)与Happens-Before规则,解决可见性与有序性问题;2)volatile与synchronized的区别,前者保证可见性,后者保证互斥访问;3)CAS原理及ABA问题的解决方案;4)synchronized与ReentrantLock的适用场景;5)AQS框架的核心设计思想;6)Condition与wait/notify的对比;7)读写锁的选择策略;8)线程池参数配置实践。文章通过代码示例和延伸思考,深入浅出地讲解了并发编程的
2025-08-25 16:30:40
741
原创 Java多线程常见误区与最佳实践总结
本文总结了Java多线程编程中的8个常见误区及解决方案: 线程管理不当:直接创建Thread对象会导致资源浪费,应使用线程池(如ThreadPoolExecutor)并设置合理参数。 忽视Java内存模型:共享变量可见性问题可通过volatile解决,保证修改对其他线程立即可见。 混淆并发与并行:需区分I/O密集型(适合并发)和CPU密集型(需要并行)任务,选择合适实现方式。 滥用synchronized:过度同步会导致性能下降,建议使用并发集合、读写锁或原子类替代。 缺乏多线程思维:设计时要考虑共享状态、
2025-08-25 15:13:51
851
原创 rebase和merge的区别
本文通过作者亲身经历,对比了git rebase和merge的区别,并给出了安全使用建议。事故起因是作者在feature分支执行rebase时,因未拉取组员最新提交或解决冲突失误,导致组员代码被覆盖消失。文章分析了rebase会重写提交历史的特点,而merge则保留完整历史但会产生分叉。最后提出安全使用建议:公共分支用merge,本地分支用rebase,并给出5条防止代码丢失的具体措施,强调团队协作中应保持公共分支历史稳定。
2025-08-25 12:16:48
1224
原创 localhost和127.0.0.1的区别
摘要:localhost是专用于本地调试的域名,指向本机IP 127.0.0.1,无需DNS解析。与常规域名不同,localhost作为保留顶级域名可直接使用。访问流程包括:域名解析为IP、请求路由到目标端口。本地开发时,程序绑定127.0.0.1的特定端口,通过localhost访问即可调试。这种设计简化了网络应用的开发测试过程,确保请求仅在本机循环而无需外部网络。(149字)
2025-08-24 23:54:23
587
原创 Java内存泄漏详解:检测、分析与预防策略
Java内存泄漏问题及应对策略 Java虽然具备自动垃圾回收机制,但内存泄漏问题仍不容忽视。内存泄漏指无用对象因被引用而无法回收,导致内存逐渐耗尽,最终引发OutOfMemoryError。常见原因包括:静态引用持有大量对象、未及时注销监听器、缓存未合理清理、集合使用不当、资源未关闭以及非静态内部类问题。检测工具如VisualVM、MAT等可帮助定位问题。预防策略包括:谨慎使用静态变量、及时关闭资源、实现缓存淘汰机制、将内部类声明为static、定期代码审查和性能监控。通过合理的内存管理和工具辅助,可有效降
2025-08-24 23:13:06
750
原创 IDEA报错: Git User Name ls Not Defined. Error Could not set user.name and user.email OK
【Git配置错误解决方案】IDEA提交代码时若提示用户信息未配置,需检查:1) IDEA中Git路径设置(File→Settings→Version Control→Git);2) 终端执行全局配置命令(git config --global设置name/email);3) 验证配置结果(git config查看信息)。注意邮箱需使用GitHub已验证的主邮箱,用户名可自定义。配置成功后即可正常提交代码。
2025-08-20 10:59:53
679
原创 设计模式(四)——责任链模式
摘要:责任链模式是一种行为型设计模式,允许请求在处理器链中传递,每个处理器可自行决定处理或传递请求。本文以在线订购系统为例,展示如何通过责任链模式实现身份验证、权限校验、数据清理等步骤的灵活组合。该模式通过解耦处理器、支持动态配置链式结构,显著提升代码复用性和可维护性。但需注意链条覆盖不全和调试复杂度等缺点。典型应用场景包括中间件管道、事件处理和过滤系统等。责任链模式的核心价值在于构建灵活可扩展的处理流水线。(150字)
2025-08-18 21:10:25
1082
原创 HTTPS面试题(更新中...)
HTTP与HTTPS的核心区别在于安全性,HTTPS通过SSL/TLS协议加密数据并验证网站身份,防止窃听和篡改。TLS握手过程包括客户端/服务端通信协商、证书验证和密钥交换,确保安全连接建立。数字证书由可信CA颁发,作为网站身份凭证,防止中间人攻击。HTTPS优势包括数据加密传输、完整性保护、身份认证及SEO优化,是现代网络通信的安全基础。
2025-08-18 14:39:05
665
原创 QUIC浅析
QUIC是基于UDP的新一代传输协议,解决了TCP在现代网络中的关键性能问题。它通过合并TLS握手实现1-RTT安全连接和0-RTT重连,显著降低延迟;采用多路复用和独立流控制,彻底消除队头阻塞;通过连接ID实现网络切换时的无缝迁移。作为HTTP/3的底层协议,QUIC还支持前向纠错和灵活的拥塞控制,为网络应用提供更高效的传输能力。QUIC不仅适用于HTTP,还可支持其他应用层协议。
2025-08-17 22:33:30
406
原创 DNS总结
DNS(域名系统)将域名转换为IP地址,采用分层分布式架构进行递归和迭代查询。常见记录类型包括A/AAAA、CNAME、MX等,实现不同网络功能。由于存在DNS劫持、缓存投毒等安全威胁,可通过DNSSEC、DoH/DoT等机制防护。优化方面建议选择优质DNS服务商、合理设置TTL值,并配合CDN提升性能。DNS是互联网基础设施的核心环节,其安全性与效率直接影响网络服务质量。
2025-08-17 22:19:48
711
原创 SpringBoot 3.2x项目报错:Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String
摘要:项目使用Spring Boot 3.2+时出现"Invalid value type for attribute"错误,原因是MyBatis-Plus与Spring Boot 3.2+存在兼容性问题。关键问题在于mybatis-spring 2.x版本的factoryBeanObjectType类型不兼容新版本的类型检查机制。解决方案包括降级Spring Boot至3.1.x版本,或升级mybatis-spring至3.x版本(通过排除旧依赖并显式引入新版本)。该问题已在多个Git
2025-08-17 22:10:02
418
原创 六大主流负载均衡算法
摘要 负载均衡算法是分布式系统中的关键技术,用于合理分配用户请求到后端服务实例,提升系统性能和可用性。常见的算法包括:1)轮询算法,适用于无状态服务;2)粘性会话算法,通过IP哈希保持用户会话;3)加权轮询算法,根据服务器性能分配权重;4)哈希算法,确保相同特征的请求路由到同一实例;5)最少连接数算法,优先选择负载轻的实例;6)最短响应时间算法,综合考虑响应时间和连接数。在Java生态中,通常通过Spring Cloud LoadBalancer、Nginx或云服务实现负载均衡,无需自行开发核心算法。不同场
2025-08-15 23:40:36
1071
原创 一致性哈希Consistent Hashing
本文介绍了分布式系统中数据分布的关键技术——简单哈希和一致性哈希。简单哈希通过取模运算实现数据分布,但在服务器变动时会导致大量数据迁移。一致性哈希通过哈希环结构,在服务器增减时仅影响少量数据,显著减少系统抖动。文章详细分析了一致性哈希原理,并指出其潜在问题:热点现象、负载不均衡、数据副本管理复杂、有状态连接中断、地理延迟影响等。虽然一致性哈希能有效分散负载,但其实现复杂度较高,需要权衡各种因素。该技术已应用于Apache Cassandra、CDN等实际场景,是构建大规模分布式系统的关键技术之一。
2025-08-14 23:55:42
1361
原创 进程和线程
本文探讨了进程与线程的核心概念及其在实际应用中的差异。内容涵盖:1)进程是资源分配的基本单位,线程是执行流且共享进程资源;2)进程与线程的状态转换机制,如就绪、阻塞、运行等;3)进程间通信方式(管道、消息队列、共享内存等)与线程调度算法;4)死锁的成因与检测方法。通过线上故障案例,揭示了进程假死与线程阻塞的区别,强调理解底层机制对排查系统问题的重要性。文章结合Java线程模型和操作系统原理,为开发者提供了实践指导。
2025-08-13 23:43:14
753
原创 5种缓存策略解析
本文介绍了高并发系统中常用的几种缓存策略。Cache Aside通过业务代码显式控制缓存读写,适合热点数据但需防范缓存击穿;Read Through由缓存组件自动加载数据,简化代码但需缓存层访问数据库。写入策略方面,Write Around只写数据库不主动更新缓存,适合写多读少场景;Write Back先写缓存后异步更新数据库,提升写性能但存在数据丢失风险;Write Through同步更新缓存和数据库,保证一致性但延迟较高。实际应用中需根据业务特点组合策略,并采用TTL、持久化等措施保障性能与可靠性。
2025-08-13 21:29:11
986
原创 SSH浅析
SSH(Secure Shell)是一种加密网络协议,用于在不安全网络中安全访问远程计算机,替代Telnet等明文协议。SSH-2是主流版本,采用AES等强加密算法和Diffie-Hellman密钥交换。其架构分为三层:传输层(加密通信)、身份验证层(密码/公钥认证)和连接层(多通道复用)。SSH支持远程登录、文件传输、端口转发等功能,具有高安全性、功能丰富和跨平台特性。核心优势在于加密传输、完整性校验和灵活的认证机制,适用于各种远程管理场景。
2025-08-13 00:08:15
903
原创 Session、Cookie、JWT、Token、SSO 和 OAuth 2.0对比
摘要: 本文介绍了用户身份管理的核心概念(身份标识、验证、授权)及常见技术方案。WWW-Authenticate通过HTTP头实现简单认证但安全性差;Session-Cookie依赖服务器存储会话,适合浏览器但跨平台性弱;Token解决非浏览器环境兼容问题;JWT通过签名实现无状态认证;SSO实现多系统共享登录;OAuth 2.0提供第三方安全授权。每种技术各有优缺点,适用于不同场景(如内网测试、移动API、单点登录等),面试常关注安全性、分布式实现等问题。配图直观展示了各类技术的交互流程。
2025-08-12 23:46:48
442
原创 Cookies和Sessions
Cookies和Sessions是Web应用中常见的状态管理机制。Cookies存储在客户端,大小有限(约4KB),每次请求自动发送,适合存储用户偏好等非敏感数据。Sessions存储在服务端,通过Session ID标识,安全性更高,适合存储登录状态等敏感信息。两者在存储位置、容量、安全性和网络开销等方面存在差异。
2025-08-12 22:57:06
755
原创 计算机网络(一)——TCP
TCP 协议的核心特性包括面向连接、可靠传输和基于字节流。三次握手建立连接时,通过序列号确认防止历史连接干扰,确保双方同步序列号;四次挥手优雅断开连接,TIME_WAIT状态等待2MSL避免脏数据。数据传输依赖滑动窗口、拥塞控制等机制保证可靠性。工程实践中需注意HTTP Keep-Alive、短连接高并发优化以及防御SYN Flood攻击等。理解TCP底层机制对网络编程和调优至关重要。
2025-08-11 21:39:47
1244
原创 设计模式(三)——观察者模式
本文介绍了观察者模式及其在电子产品商店通知系统中的应用。观察者模式通过订阅机制实现发布者与订阅者的解耦,当事件发生时自动通知相关订阅对象。文章以文件变更通知系统为例,展示了EventManager、Editor和具体监听器的实现,说明了如何动态绑定事件与监听器。该模式具有松耦合、灵活扩展等优点,适用于需要解耦状态变化响应的场景,如用户行为日志、异常报警等。观察者模式让系统能精准通知关心的对象,避免无效打扰,是一种高效的智能通知解决方案。
2025-08-11 12:29:11
1078
空空如也
数据结构(c++)课后习题找不出bug
2024-09-21
LIghtGBM做回归时预测值都一样怎么解决
2023-04-29
毕设所需的油田生产数据集可以在那儿找
2023-01-15
数据集里数据的含义是什么
2021-11-11
多元非线性方程的可行域为离散值时如何求解极值
2021-09-12
用随机森林做二分类,数据集里既有数字又有字符的数据该怎么预处理比较好啊?
2021-03-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅