自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(246)
  • 收藏
  • 关注

原创 常用DOS命令全解析:从基础操作到实用技巧

作为Java后端程序员,日常开发中难免要和DOS命令打交道——不管是切换目录、查看文件,还是部署项目时的环境配置,掌握常用DOS命令都能大幅提升效率。这篇文章就按知识树结构,整理最实用的DOS命令,每个命令都配实操示例,新手也能直接上手。这类命令是DOS操作的基石,用于定位文件、切换目录,相当于“电脑文件管理器的键盘版”。用于创建、删除、复制、移动文件/文件夹,覆盖日常文件管理需求,避免频繁切换图形界面。删除指定文件,支持通配符批量删除,同样慎用(无回收站,直接永久删除)。

2026-01-26 17:07:02 359

原创 SpringBoot自定义启动banner:给项目加个专属“开机画面”

刚学SpringBoot的时候,每次启动项目,控制台都会跳出默认的SpringBoot logo和版本信息,看久了总觉得少点意思。后来发现原来这个启动画面(也就是banner)是可以自定义的,花几分钟改一改,既能加项目名称、版本,甚至还能加些有趣的字符画,瞬间让自己的项目有了专属感。今天就聊聊怎么自定义SpringBoot的启动banner,步骤超简单,新手也能跟着做。这个就是默认banner,我们要做的就是替换掉它,换成自己想要的内容。SpringBoot默认会读取resources目录下的。

2026-01-26 09:12:43 584

原创 Docker run 命令详解(-a、-d、-e、-h、-i、-m、-p、-t、-v、--cpuset、--dns、--env-file、--expose、--link、--name、--net)

用来声明容器开放的端口,但不会做端口映射,只是告诉 Docker 这个容器会使用这些端口,通常用于容器间通信,或者让外部知道容器的端口用途。就算不小心删了容器,重新启动时再挂载同一个目录,数据就能恢复。之后,容器会在后台默默运行,还会返回一个唯一的容器 ID,后续管理容器(比如停止、重启)都能用这个 ID 或者容器名操作。即可,不过要注意,这种方式启动的容器,退出后会自动停止,如果想让容器继续后台运行,可以加。选项能把容器里的目录挂载到主机的目录,数据会直接存在主机上,就算容器删了,数据也能保留。

2026-01-23 13:04:15 993

原创 为什么游戏公司的server不愿意微服务化?

但游戏服不行,玩家在线的每一秒,都要维护他的实时状态,要是把状态拆到多个服务,比如位置存在场景服、血量存在战斗服,玩家掉血的时候,场景服没及时拿到血量更新,就会出现“玩家血条空了还在跑”的BUG。但游戏服务器的负载是“脉冲式”的,开服瞬间几万玩家同时登录,团战的时候几百人在一个场景里交互,这种高并发是集中在某几个核心模块的,拆成微服务也没法把压力分散,反而会因为服务间依赖,导致一个模块崩了,整个链路都出问题。微服务里,状态分散在不同服务,要保证强一致,就得用分布式锁、事务,复杂度直接翻倍。

2026-01-23 08:50:52 686

原创 SpringData JPA 都能写 SQL,为啥还要用 MyBatis?

要是关联的表多,比如用户关联订单、订单关联商品、商品关联分类,JPA会生成一堆JOIN语句,甚至出现N+1查询问题(查1个用户带出N个订单,会执行1次查用户+N次查订单的SQL),性能直接拉胯。MyBatis就不一样了,写的SQL就是最终执行的SQL(除了动态拼接的部分),要是查询有问题,直接把XML里的SQL复制到数据库客户端,替换掉#{参数},执行一下就能定位问题。MyBatis处理多表关联,是手动写JOIN SQL,虽然要自己写关联条件,但能精准控制查询的字段和关联的表,避免冗余查询。

2026-01-22 11:02:43 853

原创 Java Spring中@AllArgsConstructor注解引发的依赖注入异常解决

会覆盖无参构造函数,Spring Bean若无无参构造函数则无法实例化,需搭配使用;触发的构造函数装配默认使用@Autowired逻辑,无法兼容等特殊注解,需改用字段注解装配;Lombok注解简化开发的同时,需兼顾Spring依赖注入的规则,避免注解冲突。

2026-01-22 09:46:36 614

原创 Java DateTimeException:Unable to obtain LocalTime from TemporalAccessor问题解决

如果不想引入,可以通过自定义解析规则,只提取时间字段,忽略日期字段。这种方案更灵活,适合复杂的解析场景。try {// 关键:自定义TemporalQuery,仅提取LocalTime字段});System.out.println("订单支付时间:" + payTime);// 输出:15:30:45System.err.println("时间解析失败:" + e.getMessage());包含了LocalTime不需要的日期字段,导致无法构建纯时间对象;

2026-01-21 13:14:14 775 1

原创 Java java.lang.ArithmeticException: Rounding necessary问题解决

异常的核心是BigDecimal的setScale无参方法默认不允许舍入,仅当需要舍入时抛出;解决该异常的核心思路是显式指定舍入模式,要么在setScale中指定,要么在除法/乘法等运算时直接指定;不同舍入模式对应不同的业务规则,需根据实际场景选择(如金额计算优先用HALF_UP。

2026-01-21 09:32:39 906

原创 VARCHAR 存日期的灾难

比如存2024年1月19日,有人写“2024-01-19”,有人写“2024/01/19”,还有人图省事写“20240119”,甚至还有“24-01-19”“2024年1月19日”这种写法。排序就更坑了,字符串排序是按字符一个个比的,比如“2024-10-01”和“2024-02-01”,按 VARCHAR 排序,“2024-02-01”会排在“2024-10-01”后面,因为字符“0”比“1”小,但实际时间上2月明明在10月前面。后来改成 DATE 类型,加个索引,同样的查询1秒不到就出来了。

2026-01-19 14:13:06 746

原创 openfeign vs nginx 负载均衡对比

我认为 openfeign 和 nginx 不是竞争关系,而是互补关系。不用纠结哪个更好,关键看使用场景。如果是做对外的入口层负载,选 nginx 准没错,简单、稳定、性能强。如果是微服务内部调用,优先用 openfeign,和 Spring Cloud 生态契合,开发效率高,还能轻松实现熔断、重试等功能。在我看来,理解两者的定位差异,就能在项目中合理搭配使用,既保证外层请求的高效分发,又能让内部服务调用更灵活可靠。

2026-01-16 13:18:49 1107

原创 SpringBoot 在一次 http 请求中耗费了多少内存?

其实问“一次请求耗多少内存”,没有固定答案,我认为核心不是纠结具体的数字,而是要有“内存意识”——知道哪些代码会耗内存,高并发下该怎么优化。普通的业务接口,单次消耗几十 KB 其实很正常,只要不是几百 KB 甚至几 MB,一般都没问题。但如果是每秒几千、几万的高并发接口,哪怕单次只耗 10 KB,一秒钟也会耗掉几十 MB 内存,这时候就得精打细算了。总的来说,SpringBoot 本身的基础开销是固定的,我们能优化的主要是业务代码里的对象创建和数据传输量。

2026-01-16 08:54:43 1072

原创 聊聊负载均衡:分布式架构的“流量调度员”

负载均衡看着知识点多,但实际用的时候,核心就是“选对类型+选对算法+选对产品”。我认为,中小项目优先用Nginx+云厂商SLB,成本低、配置简单、稳定性够;中大型集群可以用HAProxy+LVS,四层七层配合;微服务项目直接上Ingress-Nginx。另外,不要盲目追求“最好的产品”,适合自己业务的才是最好的。比如简单的Web服务,Nginx完全够用,没必要上F5;对会话要求高的场景,用IP哈希+动态兜底算法,既保证会话又能均衡负载。

2026-01-15 09:37:19 629

原创 JDK8和JDK17的GC对比:用着顺手才是王道

不管是默认的G1 GC,还是低延迟的ZGC、Shenandoah,都比JDK8的GC表现更好,而且不用复杂的参数调优,用起来更省心。除了回收器本身,GC的日志和监控方面,JDK17也比JDK8好用很多。我之前查JDK8的GC日志,最头疼的就是不同回收器的日志格式不一样,Parallel GC和CMS的日志看得我眼花缭乱,还要找专门的工具解析。如果你的项目是老项目,一直用JDK8,而且是后台批处理、数据计算这类对延迟不敏感的场景,那继续用JDK8的Parallel GC也没问题,毕竟稳定最重要。

2026-01-15 08:30:00 633

原创 idea中为啥双 Shift 叫 “全局搜索” 却搜不到文本内容?

双Shift的“全局搜索”是实体类型的全局覆盖,不是文本内容的全局扫描它的强项是找“东西”(类、文件、功能),不是找“文字”(代码片段、字符串)。Ctrl+Shift+F才是专门用来找“文字”的工具,它的强项是扫描所有文件的文本内容。我们的经验是,别被“全局搜索”这个名字骗了。找实体用双Shift,找文本用Ctrl+Shift+F,这样效率才最高。

2026-01-14 08:45:28 1126

原创 【Java报错已解决】java.lang.UnsatisfiedLinkError:踩坑后才懂的排查与解决

看似复杂,其实核心就三类问题:库找不到、方法名不对、架构/依赖不兼容。先确认库文件在里,这是最常见的问题方法名一定要用工具自动生成,别手动写,避免拼写错误库的架构必须和JVM一致,依赖库要装全我们的经验是,遇到这个报错别慌,按“路径→方法名→架构→依赖”的顺序排查,90%的问题都能在10分钟内解决。如果是用第三方库(比如OpenCV、TensorFlow的Java包)碰到这个错,优先看官方文档的库配置说明,大部分开源库都会标注需要的依赖和配置方式。

2026-01-13 10:29:58 411

原创 RabbitMQ 中无法路由的消息:原来它们都去这了

RabbitMQ 中无法路由的消息,命运完全由我们的配置决定:默认丢弃、退回生产者、转发到 AE 交换机。别依赖默认配置,除非明确允许消息丢失对可靠性要求高的场景,用mandatory=true + 退回回调需保存无法路由消息的场景,配置 AE 交换机定期监听 AE 队列,排查路由配置问题,避免大量消息堆积其实这个问题不难,关键是搞懂 mandatory 和 AE 交换机的作用,再根据业务场景选择合适的配置。如果大家有其他处理无法路由消息的技巧,也欢迎一起交流~

2026-01-13 09:28:20 1214

原创 我的笔记:怎么用 MySQL 的 EXPLAIN 来分析 SQL

我常常用EXPLAIN来调优慢查询;索引不见得越多越好,但没有关键索引,查询肯定会慢;同一个WHERE条件写法不同,执行计划也可能变化,所以写 SQL 的时候注意表达方式;多表关联的时候,EXPLAIN能帮我判断哪个表应该做先驱表(这个在复杂联查里特别重要)。总的来说,我认为EXPLAIN就像是数据库对你说:我打算怎么执行这条 SQL。理解它,不是为了背输出字段,而是为了能根据结果判断这条 SQL 有没有优化的空间。

2026-01-09 10:57:54 1024

原创 MySQL 索引真不是越多越好!聊聊索引的 “隐形代价”

索引就像调料,放对了能提味,放多了反而毁菜。它不是越多越好,而是要在查询性能和写入成本之间找平衡。每个索引都是“负债”,要承担维护成本,不是必需的就别建优先建联合索引,一个设计好的联合索引能顶好几个单列索引定期清理无用、冗余的索引,就像定期大扫除写入频繁的表,索引一定要精简;查询频繁的表,可适当多建,但也要控制数量其实建索引没有绝对的标准,关键是结合自己的业务场景,按需创建、定期优化。如果盲目建一堆索引,最后只会导致整个数据库性能下滑,得不偿失。

2026-01-06 08:57:21 931

原创 秒懂 MySQL 索引下推:从查询原理看清有无下推的核心差异

索引下推的核心差异:无下推时存储引擎只筛索引前缀列,服务层全量回表后筛剩余条件;有下推时存储引擎利用索引内的非前缀列提前过滤,大幅减少回表IO。性能提升的关键:减少无效回表次数——回表是磁盘IO操作,每少一次,查询效率就高一分。EXPLAIN看Extra列,即生效,则未生效。其实索引下推的本质很简单:让离数据最近的存储引擎多做筛选,少让服务层做“无用功”。理解了存储引擎和服务层的交互逻辑,有无下推的区别就一目了然,不用靠生活例子也能精准掌握。

2026-01-05 09:06:50 887

原创 MySQL B + 树索引高度:原来这么多数据才需要 3 次 IO

B+树索引高度的计算看着复杂,其实核心就是“算每个节点能存多少,再算整棵树的容量”。理解了这个逻辑,就知道为啥千万级数据查询还能很快——因为索引高度没上去,IO次数少。主键尽量用INT或BIGINT,别用太长的VARCHAR,减少索引项大小控制单行数据大小,别搞太多大字段,让叶子节点能存更多行数据量超千万后,提前规划分库分表,别等性能下降了再补救每个节点=一个InnoDB页,读一个页=一次IO,查数据要从根节点走到叶子节点,经过的节点数=树的高度,所以IO次数=树的高度。

2026-01-04 09:10:23 867

原创 消除Intellij IDEA的Not annotated parameter overrides @NonNullApi parameter警告

只需要在方法的参数上添加@NonNull注解即可(注意:是org.,尤其是纯 Java 且不用 Kotlin 的项目。.lang.NonNull,不要导入错了)

2025-12-30 11:22:25 459 1

原创 MySQL 行锁:别让数据打架了

简单说,行锁就是 MySQL 在执行某些操作时,只锁住某一行数据,而不是整张表。这样别人还能改别的行,不会被你一个人占着茅坑不拉屎。假设 A 用户和 B 用户同时要转账,如果用表锁,那 A 转账的时候 B 就得干等着;但用了行锁,A 改自己的那行,B 改自己的那行,互不干扰。行锁是 InnoDB 的“精细控制”手段,只锁需要的行。必须走索引,否则可能锁太多。“读-判断-写”场景记得用FOR UPDATE。死锁不可避免,但可以通过规范操作顺序减少。行锁锁的是整行,不是某个字段。

2025-12-29 11:39:46 638

原创 Spring Retry 实战:优雅搞定重试需求

catch 加 while 循环写,代码又丑又难维护,后来发现了 Spring Retry,用起来是真方便,分享下我的使用经验。有状态重试就特殊了,比如数据库事务场景,失败后需要回滚事务再重新开始,这时候上下文得存在堆里,避免丢失。用 Spring Retry 第一步肯定要引依赖,我这边是 Spring Boot 项目,除了核心的 spring-retry,还得加 aop 依赖,不然注解不好使。这个点容易被忽略,我简单说下。无状态重试就是普通场景,重试上下文存在线程栈里,不用额外存储,大部分情况都能用。

2025-12-29 09:43:06 999

原创 静态资源映射相关问题解答

文件保存到本地 / 服务器磁盘只是「物理存储」,但浏览器地址栏输入 URL 访问文件是「网络请求」—— 必须有一个「中间层」(Web 服务器 / 接口)把「磁盘文件路径」映射成「HTTP 可访问路径」,否则浏览器根本不知道如何访问本地文件。后来排查才知道,服务器上肯定配置了静态资源映射,把磁盘路径和 HTTP 路径关联起来了,而我本地只做了文件保存,没加这个配置。不过这个方法只适合测试,我们的经验是,项目重新编译或者重启后,static 目录里的上传文件会丢失,生产环境绝对不能用。,但访问就是 404。

2025-12-26 09:23:43 811

原创 MyBatis-Plus 的 updateById 会把没查的字段清成 null 吗?

这个问题我前阵子被同事问过,自己也一度有点犯嘀咕。场景很简单:有个订单表order,20个字段。我只用id=1查了 A、B、C 三列,然后改了 C 的值,调我当时第一反应是:“好像不会吧?”但又不敢拍胸脯。于是翻源码、打日志、写测试,折腾了一下午,总算搞明白了。今天就用大白话讲讲我的理解,顺便给还在担心的朋友吃颗定心丸。

2025-12-25 08:58:10 917

原创 踩坑:Gateway 请求体只能被消费一次?

当时想在 Spring Cloud Gateway 里加个全局过滤器,把所有进来的请求参数(尤其是 POST 的 JSON)打个日志,方便排查问题。我认为,这个“只能读一次”的设计虽然反直觉,但其实是合理的。跑起来你会发现:日志是打出来了,但下游服务收到的 POST 请求是空的,直接报错“缺少参数”。这样,后续的过滤器和下游服务拿到的还是完整的 body。它是一个字节流,像水管一样,数据流过去就没了。读完了,下游路由到微服务的时候,body 就空了。今天就聊聊这个“坑”,以及我们是怎么绕过去的。

2025-12-24 15:29:26 945

原创 Gateway 中能写 Servlet Filter 吗?

不能在 Spring Cloud Gateway 中使用,因为它不跑在 Servlet 容器上。要实现类似功能,请用或。别硬套旧习惯,响应式编程有它自己的套路,适应了其实也挺香。如果你只是做个后台管理,QPS 几十,用 Spring MVC + Tomcat 完全够用,Filter 写起来也顺手。但如果你要做 API 网关,面对的是成千上万的移动端或第三方调用,那 Gateway + Netty + Reactor 这套组合拳,就是更合适的选择。

2025-12-24 09:09:33 641

原创 @Validated 和 @Valid的坑:踩过这些坑才敢说会用参数校验

/ 新增用户的分组// 修改用户的分组嵌套校验用@Valid:嵌套实体类的字段上,必须用@Valid标记,@Validated替代不了。分组校验用@Validated:只有@Validated支持groups参数,@Valid不支持。@Validated依赖Spring环境:非Spring管理的类,用@Valid配合手动校验。必须捕获校验异常:用全局异常处理器返回友好的错误信息。注解不要冗余使用:参数上的@Validated/@Valid已经足够,方法上的注解大多多余。

2025-12-23 11:47:28 814

原创 MySQL 索引的最左前缀匹配原则:原来这么好懂

最左前缀匹配原则其实就是联合索引的“使用规则”,核心就是“从左到右,不能跳过”。我认为只要记住“最左前缀是关键,跳过前面的字段就没用”,再结合实际场景多测试,就能轻松掌握。建联合索引的时候,一定要结合自己的业务查询场景来设计字段顺序,不能盲目拼接字段,否则索引建了也用不上,还会占用存储空间、影响增删改的性能。如果不确定索引是否合理,多用水晶球EXPLAIN分析执行计划,慢慢就能找到最优的索引设计方案。如果有哪里理解不到位的地方,欢迎大家指正呀!

2025-12-23 09:16:57 1266

原创 聊聊 MyBatis 缓存的 “安全性”:为啥同一个 SqlSession 里改数据不会查到假数据?

回到最开始的问题:MyBatis的缓存是不是很不安全?在合理使用的场景下,它是安全的;但如果使用方式不当(比如长时间持有SqlSession),就可能出现数据不一致的问题。MyBatis的一级缓存设计是偏向“性能优化”的,但它优先通过“增删改清空缓存”的机制保证了同一个SqlSession内的数据一致性;而对于外部修改数据的情况,它并没有做自动处理(也没法做,因为本地缓存感知不到外部变化),这就需要我们在开发中通过规范SqlSession的使用、手动清空缓存等方式来规避风险。

2025-12-22 10:37:20 1016

原创 Java final关键字学习笔记:原来“不可变”这么有用

final关键字看着简单,其实里面的细节还挺多的。核心就是分清“不可变的是什么”——是类不能继承,方法不能重写,还是变量不能重新赋值。我觉得掌握好final,不仅能减少bug,还能让代码的意图更清晰,别人一看就知道哪些东西是不能动的。现在我写代码的时候,遇到该固定的东西就会下意识用final修饰,感觉代码确实稳定了不少。如果有理解不到位的地方,欢迎大家指正呀!

2025-12-19 09:48:41 632

原创 docker 新手入门:10分钟搞定基础使用

Docker 不是什么高深技术,它就是一个“打包+隔离运行”的工具。你不需要懂 Linux 内核、cgroups、namespace,也能用它干活。先跑起来,再慢慢理解原理——这是我最大的体会。赶紧去装个 Docker,跑个 Nginx,你就已经入门了。

2025-12-18 11:46:06 262

原创 ES 新手入门:10分钟搞定项目集成与基础使用

假设我们要存“用户”信息,比如 ID、姓名、手机号、邮箱。@Id// getter / setter 省略:告诉 ES,这个类对应 ES 里的user索引(你可以理解成“表”)。@Id:主键,ES 会用它做文档 ID。我们的经验是:字段名尽量用英文小写,别用下划线,避免映射出问题。ES 确实强大,但新手最容易犯的错就是“想一口吃成胖子”——又是调分片,又是搞高亮,又是聚合分析……结果连最基础的增删改查都没跑通。在我看来,先让它跑起来,能用就行。等真遇到性能问题或功能瓶颈,再深入优化。

2025-12-18 09:22:03 759

原创 为什么你用 RocketMQ 只发挥了 50% 威力?

RocketMQ 的高级特性远不止这些 —— 比如延迟队列的 “自定义延时等级”、消息过滤的 “Tag+SQL92”、主从切换的 “Dledger 集群”。我们目前在研究 “消息轨迹全链路追踪”,想把 RocketMQ 的消息和 SkyWalking 的链路打通,实时监控每一条消息的发送、存储、消费状态。但全量采样会带来性能损耗,抽样又可能错过异常消息。如果你有低成本实现消息轨迹追踪的方案,或者在使用 RocketMQ 时踩过什么奇葩的坑,欢迎评论区交流~

2025-12-17 13:41:15 980

原创 纠结@Autowired报黄?我踩坑后理清的Spring注入那些事儿

Autowired报黄就是提醒你别用字段注入,改用构造函数才规范;大家爱用@Resource就是图省事、够灵活;没黄线不代表它更优秀,只是没被IDEA检查而已。现在我写代码是这么选的:新项目或者需要长期维护的代码,就老老实实用构造函数注入,虽然麻烦点,但后期维护省心;要是赶进度的小需求,偶尔用用@Resource也没啥,但会尽量备注清楚依赖关系。希望我踩的这些坑能帮到大家,不用再跟我一样纠结黄线的事儿啦!

2025-12-17 09:58:10 674

原创 IDEA提示Untrusted Server‘s certificate

如果你用的是Intellij系列IDE(GoLand, PHPStorm, WebStorm, IDEA),突然弹出个提示『Untrusted Server's certificate 』而本机恰好做过一个 SSL 绑定,IDE 查询注册码是否正版时,触发了https访问导致,而本机的 SSL 证书多数是自己生成的,不是正规机构颁发的证书,所以会弹出这个不可信证书的提示框。

2025-12-16 09:27:11 223

原创 RocketMQ 新手入门:10分钟搞定项目集成与基础使用

本文介绍了RocketMQ的入门使用指南,包括环境搭建和SpringBoot集成。首先阐述了RocketMQ作为分布式消息队列的核心优势:高吞吐、高可用、易集成,适合解决系统解耦、削峰和异步通信问题。然后详细讲解了单机版环境搭建步骤,包括NameServer和Broker服务的启动配置,特别提醒了JVM内存调优的注意事项。接着通过SpringBoot项目展示了RocketMQ的快速集成方法,包括依赖引入和配置文件设置。最后提供了生产者发送消息和消费者接收消息的完整代码示例,涵盖同步/异步发送方式,帮助开发者

2025-12-16 09:19:08 1683

原创 MySQL中16个写sql的好习惯-学习笔记

NOT NULL列更节省空间,NULL列需要一个额外字节作为判断是否为 NULL 的标志位。NULL列需要注意空指针问题,NULL列在计算和比较的时候,需要注意空指针问题。

2025-12-15 09:51:05 730

原创 Java 是值传递:深入理解参数传递机制

调用函数时,将实参的值复制一份传给形参。函数内部对形参的任何修改,不会影响原始实参。C 语言中基本类型就是典型的值传递。

2025-12-12 17:21:41 1073 1

原创 吃透MySQL IN子句:没有1000个限制!底层逻辑+实战方案全解析

所谓“1000个”只是部分场景下的经验阈值,而非强制限制——真正的约束来自SQL长度、内存开销和性能风险,后文会详细拆解。其实这道题的核心,从来不是死记硬背数值限制,而是理解IN子句的执行逻辑、实际约束与优化思路。IN的执行逻辑和二分查找毫无关系,核心取决于查询字段是否有索引,两种场景的处理方式完全不同。在后端面试中,“MySQL的IN子句最多能放多少个值”绝对是高频考点,然而90%的求职者都会陷入“1000个值”的认知误区,或是只知。:IN的执行效率,关键看是否能走索引,而非IN列表的长度。

2025-12-12 08:58:21 706

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除