- 博客(1263)
- 资源 (1)
- 收藏
- 关注
原创 Java开发者的年度回顾:技术突破与个人成长并行
本文回顾了2025年在Java技术栈、微服务架构、云原生应用和人工智能领域的深度实践与个人成长。通过329篇原创文章,分享了技术项目实战经验,包括项目规划、团队协作、CI/CD和性能优化等关键环节。文章还探讨了个人生活与博客事业的平衡,以及对未来技术趋势的展望,如量子计算、边缘计算等。这是一份全面的技术年鉴,旨在为读者提供宝贵的学习资源和启发,共同期待技术的未来。
2025-12-29 09:28:12
394
原创 MySQL 字符集与排序规则总结:utf8mb4、utf8mb3、collation 选型与避坑(可直接当团队规范)
MySQL字符集与排序规则最佳实践总结: 核心原则:新项目统一使用utf8mb4字符集和utf8mb4_0900_ai_ci排序规则 关键区别: utf8mb4支持完整Unicode(包括emoji),而utf8/utf8mb3仅支持3字节字符 排序规则后缀说明:_ci(不区分大小写)、_cs(区分)、_bin(二进制严格比较) 实施建议: 建库建表时显式指定字符集和排序规则 特殊字段(如token)可单独使用utf8mb4_bin 常见问题: 唯一索引冲突(大小写不敏感导致) 混合排序规则导致的比较异常
2025-12-29 05:15:00
531
原创 知识库向量化:文本文件分片(按句末)导致 split 卡死的根因与修复方案
摘要:本文分析了文本分片过程中导致死循环的根本原因——在最后一片处理时由于重叠回退导致的无限循环,并提供了修复方案。修复后的TextSplitter版本确保分片永不卡死,通过强制推进起始位置和末尾直接结束机制。同时指出了主流程中的两个潜在问题:chunk索引查找的性能问题和metadata中存储向量的不合理性。最后推荐了一个完整的处理流程,包括分片、向量化和批量入库的最佳实践方案,特别强调了向量应作为单独字段存储而非metadata的一部分。
2025-12-29 05:15:00
259
原创 Spring Boot 4.0 正式发布:新一代起点到底“新”在哪?(Spring Framework 7 / Java 25 / JSpecify / API 版本管理 / HTTP Service
Spring Boot 4.0正式发布,标志着Spring生态进入新世代。该版本基于Java 17+和Jakarta EE 11,重点支持Java 25特性,并移除Undertow支持。核心新特性包括:1)声明式HTTP Service Clients,简化REST调用;2)原生API版本管理,统一服务端和客户端版本控制;3)JSpecify空安全体系,将NPE问题提前到编译期发现;4)模块化代码库和配置改进。这些变化使Spring Boot从单纯依赖升级转变为体系架构的全面革新,为开发者提供更现代化的开发
2025-12-28 05:15:00
1364
原创 字节一面高频题:20 亿手机号存储,选 BIGINT 还是 STRING?VARCHAR 还是 CHAR?为什么
本文探讨了在20亿级用户表中存储手机号的字段类型选择问题。关键结论如下: INT类型不适用,因为无法存储11位手机号; BIGINT虽然能存储11位数字,但不推荐作为通用方案,会丢失前导0、无法支持国际号和特殊格式; 推荐使用字符串类型(VARCHAR)存储规范化后的手机号,保留原始格式并支持扩展; 在VARCHAR和CHAR的选择上,固定11位数字可用CHAR(11),但更推荐VARCHAR(20/32)以支持国际化和格式变化; 需要考虑索引体积、查询性能和数据合规性,建议建立唯一索引并使用二进制排序规则
2025-12-27 05:15:00
536
原创 一次慢 SQL + 锁等待引发的雪崩复盘
摘要: 一次由慢SQL和锁等待引发的系统雪崩事故复盘,涉及Spring Boot、MySQL等技术栈。事故表现为支付回调接口RT飙升、连接池耗尽、大量锁等待,最终导致全站拥塞。根因是订单表索引缺失导致UPDATE扫描过慢,加上事务范围过大、幂等不足,放大了锁竞争。应急措施包括限流、降级和异步化,最终通过加索引、缩小事务、幂等改造彻底修复。 关键教训: 慢SQL+事务持锁=雪崩 索引缺失和事务过长是主要放大器 监控需覆盖锁等待和连接池状态 幂等和限流是防重复请求的核心 改进方向包括慢SQL治理、索引评审、事务
2025-12-26 05:15:00
759
原创 5 分钟内判断是不是线程池饥饿死锁(Thread Starvation Deadlock),以及怎么把证据抓全。
摘要: 线程池饥饿死锁(Thread Starvation Deadlock)表现为大量请求线程(如Tomcat/NIO)卡在CompletableFuture.join/get等等待操作,同时执行异步任务的线程池资源不足或被阻塞。关键特征是同线程池的嵌套等待(外层任务等待内层任务)。通过连续三次jstack抓取堆栈,可观察线程是否持续卡在同一位置。诊断要点包括:1)Tomcat线程卡在join/get;2)线程池线程自身也在等待;3)commonPool并行度不足。与经典死锁不同,它不会显示"d
2025-12-25 05:15:00
1686
原创 一次 CompletableFuture 使用不当导致的“死锁”复盘
CompletableFuture 使用不当导致线程池饥饿事故复盘 事故原因:使用 CompletableFuture 并行调用时未指定专用线程池,导致默认的 ForkJoinPool.commonPool 被阻塞型 IO 任务占满,形成线程池饥饿,表现为接口 RT 飙升、系统"卡死"。 关键问题: 使用 commonPool 处理阻塞型 IO 任务(DB/RPC) 异步任务内部再次 join 同线程池的子任务 缺乏超时和拒绝策略 解决方案: 为 IO 任务创建专用有界线程池 禁止在异步
2025-12-24 05:15:00
420
原创 如何选线程池大小(IO 密集 vs CPU 密集的计算方法)
摘要:线程池大小设置需根据任务类型区分处理。CPU密集型任务建议线程数≈CPU核数,避免过多线程导致上下文切换;IO密集型任务可用公式N≈CPU核数×(1+W/C)计算,其中W/C为等待时间与计算时间的比值。混合型任务建议拆分线程池或按占比估算。关键配置包括有界队列、合理maxPoolSize和拒绝策略,同时需考虑下游并发限制。上线后应监控线程池活跃数、队列长度等指标进行动态调整,确保系统稳定运行。(149字)
2025-12-24 05:15:00
874
原创 一次线程池配置错误导致全站 502 的完整复盘
Bean很多人看到这里会觉得:20 个线程,不算少,也不算多,看起来很安全但问题正是出在这里。502 是网关拿不到应用返回应用线程没有崩溃,只是长时间不返回Nginx 等待超时 → 502new ArrayBlockingQueue<>(100), // 有界队列new ThreadPoolExecutor.AbortPolicy() // 拒绝策略导出任务是“非核心” → 严格限流宁可拒绝,也不能拖垮系统线程池不是为了“跑得快”,而是为了“死得慢”
2025-12-23 05:15:00
881
原创 一次真实的 Java 线上事故完整复盘:缓存击穿引发雪崩,最终拖垮数据库
摘要: 某电商活动页在整点发券时发生线上事故,由于缓存Key集中过期导致缓存击穿,大量请求直接打到数据库,引发雪崩效应。监控显示接口RT从80ms飙升至15s,错误率超30%,数据库连接池被打满。排查发现热点Key在整点附近同时失效,无互斥保护机制导致并发查询DB。应急措施包括限流、降级和手工重建缓存。最终修复方案采用TTL加随机值防雪崩、Redis互斥锁防击穿,并优化线程池配置。事故持续23分钟,复盘后完善了监控和熔断机制。
2025-12-22 05:15:00
1185
原创 深入 Java 技术栈:从 JVM 底层机制到高并发系统设计的完整思维链路
本文系统梳理了Java技术栈的核心知识链路,从JVM底层机制到高并发系统设计。首先剖析了开发者常见的技术瓶颈,指出纵向深入的重要性。然后依次讲解了JVM运行机制、并发编程原理、内存管理要点、数据库一致性解决方案和缓存设计模式,强调实战中如何定位和解决性能问题。最后指出Java技术的真正上限在于理解系统在压力下的行为,并给出进阶学习路径。全文贯穿"从理论到实践"的主线,帮助开发者构建完整的技术认知体系。
2025-12-21 05:15:00
695
原创 跳槽 20K+ 的 Java 技术栈能力模型
摘要: 本文为3-8年经验的Java开发者提供跳槽至20K+薪资的能力模型指南。核心观点指出,20K+岗位更看重系统性能力而非技术点堆叠,包括复杂系统交付、问题定位、技术判断和独立负责能力。能力模型分为五层:业务理解、系统设计、Java核心、工程稳定性、表达复盘。重点强调JVM、并发、分布式设计等技术的深度理解,以及线上事故处理经验的重要性。20K+工程师需具备兜底意识、技术取舍能力,并能用业务语言阐述技术方案。最终建议聚焦核心领域深耕,将实践经验转化为面试中的结构化表达,体现"让系统慢而不死&q
2025-12-20 09:33:23
712
原创 Java 开发实战:从分层架构到性能优化(Spring Boot + MyBatis-Plus + Redis + JWT)
本文介绍了Java工程化开发的实战经验,重点讲解了分层架构设计和常见问题的解决方案。主要内容包括:1)推荐的分层目录结构(controller/service/mapper等);2)统一返回体的实现(Result类);3)全局异常处理机制(BizException和GlobalExceptionHandler);4)参数校验的最佳实践(@Valid注解);5)JWT鉴权的轻量级实现方案。文章针对常见工程问题(如代码维护困难、异常处理分散、参数校验重复等)提供了可直接落地的代码示例,帮助开发者从"能
2025-12-20 09:04:29
734
1
原创 美团面试:接口被恶意狂刷,怎么办?
摘要 本文介绍了如何使用自定义注解实现接口防刷功能,防止恶意请求。主要技术点包括: 自定义@AccessLimit注解,设置访问次数上限和登录验证 通过拦截器实现防刷逻辑,利用Redis记录用户访问次数 采用"URI+用户ID+日期"作为Redis键,设置一天有效期 注册拦截器并应用到Spring Boot项目中 在Controller方法上添加注解即可实现防刷功能 该方法简单高效,只需一个注解就能实现接口访问控制,适合防止恶意刷接口的场景。
2025-12-19 05:15:00
828
原创 JDK 8钉子户进阶指南:十年坚守,终迎Java 21升级盛宴!
摘要: 本文为JDK 8用户提供升级至Java 21的实用指南,对比了10个关键新特性: 模式匹配(instanceof/switch)消除类型转换冗余 Switch表达式支持箭头语法与直接返回值 文本块简化多行字符串处理 HTTP Client原生替代第三方库 虚拟线程显著提升并发性能 Record类一键生成不可变数据类 var类型推断减少样板代码 不可变集合工厂方法快速创建 Try-With-Resources支持外部资源注入 Sequenced集合统一首尾访问接口 每个特性标注了从JDK 9到21的版
2025-12-19 05:15:00
699
原创 同事查日志太慢,我现场教他一套 grep 组合拳!
同事查日志效率低?教你一套高效grep组合拳! 本文分享了作者指导新同事快速排查日志问题的实战技巧。针对常见的日志查询场景,文章提供了一套高效的grep命令组合: 查完整异常堆栈:使用grep -A 50显示匹配行后50行 实时监控日志:tail -f | grep -A 50实时捕获异常 查压缩日志:zgrep直接搜索.gz文件无需解压 统计异常次数:grep -c快速判断问题频率 文章还介绍了grep的常用参数表,帮助开发者在排查问题时快速定位关键信息,告别低效的vi搜索方式。这套方法适用于Java等语
2025-12-17 05:15:00
426
原创 分库分表正在被淘汰
摘要: NewSQL数据库(如TiDB)正在逐步替代传统的分库分表方案,解决其带来的跨库JOIN、聚合查询、分页等问题。TiDB作为开源分布式数据库,兼容MySQL协议,支持HTAP、水平扩展和高可用,适用于大数据量、高并发场景。与MySQL相比,TiDB在扩展性、复杂查询和金融级高可用方面优势明显,但成本较高且对小数据量简单查询性能较弱。选型需根据数据规模、业务需求和预算决定:TiDB适合TB级OLTP/HTAP场景,MySQL则更适合中小规模数据或简单读写需求。迁移时需注意功能兼容性和性能测试。
2025-12-16 05:15:00
814
原创 Netty的原理和springboot项目整合
Netty是一个高性能异步网络编程框架,其核心组件包括事件循环(EventLoop)、通道(Channel)、事件处理器(ChannelHandler)和缓冲区(ByteBuf)。在Spring Boot中使用Netty需要先引入依赖,然后创建配置类初始化服务端,包括线程组配置和事件处理器设置。服务端启动后会监听指定端口,通过自定义的ChannelHandler处理客户端连接、数据读写等事件。可选地也可以配置Netty客户端进行网络通信。Netty通过事件驱动模型提供高效的网络IO处理能力,适合构建高性能网
2025-12-15 15:51:01
324
原创 瞧瞧别人家的判空,那叫一个优雅!
这篇文章介绍了Java中优雅处理空指针异常的多种方法。从传统多层判空嵌套的弊端出发,重点讲解了Java8的Optional类、Spring工具类、Lombok注解等现代化解决方案,并提供了空对象模式、断言拦截、AOP拦截等工程级优化思路。通过对比实际业务场景中的新旧代码,展示了如何使用链式调用、函数式编程等方式简化判空逻辑,提升代码可读性和健壮性。文章还分享了Guava工具包和防御式编程技巧,为开发者提供了处理空指针问题的完整工具箱。
2025-12-06 05:15:00
663
原创 为什么要尽量将MySQL表字段要设置为NOT NULL?
MySQL表字段设置为NOT NULL的优化建议背后有多重考量:查询性能上,NOT NULL可让数据库优化查询逻辑;存储空间上,避免NULL值列表可节省每行1字节以上;索引效率方面,NULL值会复杂化比较运算和索引使用;聚合函数处理NULL时可能产生失真;代码逻辑上可减少空值判断;还能在数据库层强制数据一致性。当然,业务上确实需要表示"不存在"状态的字段仍应允许NULL。最佳实践是尽量使用NOT NULL,仅在必要时允许NULL,以兼顾性能与业务需求。
2025-12-04 03:15:00
1209
原创 为什么Spring不建议使用@Autowired?@Resource才是王道
Spring官方更推荐使用@Resource而非@Autowired进行依赖注入。主要原因包括:1) @Resource遵循JSR-250标准,注入机制更明确(先按名称再按类型);2) 能更好处理多实现类场景;3) 避免循环依赖问题。实际应用中,构造器注入是首选方案,其次才是@Resource注解,而@Autowired字段注入已被官方视为不推荐做法。从Spring Boot 2.6开始,官方甚至考虑默认禁用循环依赖,进一步推动更健康的代码设计模式。
2025-12-03 05:15:00
394
原创 别再重复造轮子!SpringBoot 内置的 20个高效工具类
SpringBoot内置20个高效工具类,覆盖数据处理、HTTP请求、缓存异步、校验日志、测试调试等场景。包括StringUtils处理字符串判空拼接、RestTemplate/WebClient实现HTTP请求、@Cacheable/@Async简化缓存异步、@Validated参数校验、MockMvc测试Controller等。这些工具类与Spring生态深度集成,可替代Apache Commons等第三方库,避免重复造轮子。还包含冷门实用功能如BannerCustomizer定制启动Banner,帮助
2025-12-02 08:47:34
637
原创 CompletableFuture的5大坑!
摘要: 本文深入探讨了Java中CompletableFuture的5大使用陷阱。首先介绍了默认线程池的隐患,指出其不适合IO密集型任务且可能导致内存溢出,并给出了正确配置线程池的方案。其次分析了异常"神秘消失"问题,这是由于CompletableFuture的异常处理机制导致异常被包装在ExecutionException中。文章通过代码示例对比了错误和正确用法,并附上线程池工作流程对比图,帮助开发者避免这些常见陷阱。
2025-12-02 05:15:00
1530
原创 Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
MyBatis-Flex是一个新兴的MyBatis增强框架,提供了比MyBatis-Plus更轻量级、灵活且功能丰富的ORM解决方案。它通过SqlProvider实现,无第三方依赖和拦截器,具有极高性能。支持多表查询、逻辑删除、数据脱敏等功能,且全部免费。相比MyBatis-Plus,MyBatis-Flex更易调试,支持复合主键和多种数据库方言。本文展示了其基本用法,包括CRUD操作和多条件查询,证明它是一个值得尝试的ORM框架替代方案。
2025-12-01 05:15:00
752
原创 为什么阿里巴巴代码开发规范推荐@Transactional需要指定回滚的异常?
阿里巴巴代码规范推荐@Transactional指定回滚异常的原因是:Spring默认只在遇到RuntimeException时回滚事务,对检查型异常(如IOException)不会自动回滚。这可能导致业务异常时数据不一致,比如转账操作中钱已扣除但外部系统调用失败的情况。最佳实践是显式声明rollbackFor属性,如@Transactional(rollbackFor=Exception.class),确保所有异常类型都能触发回滚,保证事务的原子性。这种主动声明的方式能避免因异常处理不当导致的数据问题。
2025-11-29 05:15:00
1354
原创 Java通用枚举还能这样做?前后端终于不扯皮了!
本文介绍了一种实现前后端通用枚举的优雅方案,通过定义IBaseEnum接口和两种枚举返回类型(名称和JSON)来解决前后端状态值同步问题。方案提供简单枚举(IBaseEnumSimple)和JSON枚举两种实现方式,利用@JsonValue和@JsonCreator注解实现自动序列化/反序列化,并内置了枚举查找、匹配等通用方法。通过自定义反序列化器DictSimpleDeserializer,实现了枚举值的灵活转换,使前后端可以共享同一份枚举定义,避免频繁的状态值同步,提高了开发效率。
2025-11-28 05:15:00
227
原创 为超过10亿条记录的订单表新增字段
10亿级大表安全新增字段方案 核心方案对比 1. MySQL 8.0+ Instant ADD COLUMN(推荐) 毫秒级完成(仅修改元数据) 需满足:列在末尾、有默认值/可为空 不重建表、不锁表 2. gh-ost工具(MySQL 5.6/5.7) 在线无锁变更(创建影子表+binlog同步) 支持限速、可监控 需要额外工具部署 实际应用建议 若使用MySQL 8.0+,优先选择Instant方式 旧版本建议通过云服务或gh-ost实现 传统DDL仅适合业务绝对低峰期 两种方案都能有效解决10亿级大表加
2025-11-27 05:15:00
1833
原创 别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
SpringCloud Gateway 内置过滤器速查手册 本文总结了 SpringCloud Gateway 30 个内置过滤器的使用场景和配置示例,大幅减少重复代码编写。主要分为请求和响应两大类: 请求相关:包含 11 个过滤器,如添加/移除请求头(AddRequestHeader/RemoveRequestHeader)、修改请求参数(AddRequestParameter)、请求体缓存(CacheRequestBody)等,支持请求头映射、大小限制等功能。 响应相关:包含 5 个过滤器,如添加/修改
2025-11-26 23:45:00
711
原创 这20条SQL优化方案,让你的数据库查询速度提升10倍
本文提供了20条SQL优化方案,从基础优化、索引优化、高级技巧到数据库设计优化四个方面全面提升查询性能。主要建议包括:避免SELECT *查询、合理选择EXISTS/IN语句、优化WHERE子句、正确使用索引、处理深度分页问题、采用批量操作、优化JOIN查询、使用覆盖索引、选择合适数据类型以及谨慎使用NULL值等。通过这些优化措施,可以有效减少数据库负载,提升查询响应速度,部分场景下性能可提升10倍以上。文章特别强调了针对不同场景选择合适优化方案的重要性,以及平衡数据库读写性能的关键设计原则。
2025-11-24 05:15:00
116
原创 MySQL 8.0 SQL优化黑科技,面试官都不一定知道!
MySQL 8.0带来了多项SQL优化黑科技,包括窗口函数简化复杂查询、降序索引优化排序性能、Generated Column加速JSON查询、Invisible Index安全测试索引、Hint强制执行计划、Resource Group资源控制以及LATERAL JOIN处理复杂关联。这些新特性相比传统优化方法,能显著提升查询效率和系统稳定性,同时为开发人员提供了更灵活的优化手段。掌握这些技巧不仅能解决实际性能问题,还能在面试中展现专业深度。
2025-11-23 05:15:00
51
原创 你们公司的 QPS 是怎么统计出来的?这 5 种常见方法我踩过一半的坑
QPS统计方法总结与避坑指南 本文介绍了5种常见的QPS统计方法,适用于不同业务场景: 网关层统计:适合微服务全局视角,如Nginx和Spring Cloud Gateway实现 应用层埋点:使用Spring AOP实现细粒度的接口级统计 监控系统集成:利用Prometheus等工具实时采集指标 日志分析:通过ELK等工具进行离线统计 分布式链路追踪:结合SkyWalking等工具实现全链路QPS监控 关键经验: 不同场景需要不同统计粒度(全局/接口/方法级) 网关统计需过滤健康检查等无效请求 分布式环境下
2025-11-22 05:15:00
61
原创 面试官:如何决定使用 HashMap 还是 TreeMap?
摘要: HashMap与TreeMap的核心区别在于数据结构、排序性和性能。HashMap基于哈希表实现,提供O(1)的快速访问,但无序;TreeMap基于红黑树,保持键的有序性,但操作复杂度为O(log n)。选择依据:若需极速访问且不关心顺序(如缓存、去重),选HashMap;若需范围查询、顺序遍历或自动排序(如股票价格排序),则用TreeMap。高级考量包括内存开销、哈希碰撞风险及持续有序的效率优势。面试中,理解两者的适用场景及性能差异是关键加分项。
2025-11-21 11:00:11
38
原创 同事混用@Transactional和TransactionTemplate被我怼了,三种事务管理到底怎么选?
Spring事务管理有三种方式:1️⃣ @Transactional注解(简单但存在内部调用失效等问题);2️⃣ TransactionTemplate(可控性强但代码略复杂);3️⃣ 直接使用TransactionManager(最灵活但易出错)。日常开发推荐优先使用@Transactional,需要精细控制时选择TransactionTemplate,特殊场景才考虑TransactionManager。文中通过用户导入案例分析了各方式的适用场景及常见陷阱,特别是@Transactional在内部方法调用
2025-11-21 05:15:00
47
原创 玩转EasyExcel,看这一篇就够了!!(合并导入 自定义导出 动态表头 合并单元格)
本文介绍了使用EasyExcel处理Excel导入导出的实用技巧。通过引入EasyExcel依赖,开发者可以轻松实现高效、低内存占用的Excel操作。文章提供了多种常见场景的代码示例,包括基础导出、本地文件导出、多Sheet页导出以及自定义表头功能。重点展示了如何利用注解定义模型、设置响应参数,以及通过工具类方法实现不同导出需求(如合并单元格、动态表头等)。这些"即用即贴"的代码片段解决了传统Excel处理中常见的性能问题和复杂格式处理难题,让Java开发者能够优雅地完成Excel数据交
2025-11-20 05:15:00
435
原创 一个Java工程师的17个日常效率工具
Java工程师效率工具精选 本文总结了Java开发者常用的17个效率工具,涵盖IDE增强、调试分析、代码质量、API开发、数据库管理和构建部署等多个方面。核心工具包括: IDE增强:IntelliJ IDEA终极版配合Key Promoter X、Lombok等插件提升编码效率 调试分析:Arthas在线诊断、JProfiler性能剖析、Charles抓包工具 代码质量:SonarQube静态分析、ArchUnit架构测试、JaCoCo覆盖检测 API开发:Postman接口测试、OpenAPI代码生成 数
2025-11-19 05:15:00
557
原创 MessageChannel-通信机制
本文介绍了MessageChannel这一前端双向通信机制。作为postMessage的替代方案,MessageChannel提供了更高效的低延迟通信方式,特别适用于Web Workers和多线程场景。文章详细讲解了MessageChannel的基本用法,包括对象创建、消息发送接收,以及其在Web Workers中的高级应用。虽然兼容性存在限制(不支持IE),但MessageChannel在现代浏览器中为双向通信提供了更优解决方案,有效解决了postMessage的延迟问题,是多线程通信的理想选择。
2025-11-18 05:15:00
286
原创 JDK17 前后写法对比:差点没认出是 Java
Java 17新特性大幅提升开发体验:record简化POJO定义,自动生成构造器和方法;switch表达式支持返回值与模式匹配,避免传统陷阱;文本块(""")优雅处理多行字符串;instanceof模式匹配消除冗余类型转换;密封类(sealed)精确控制继承范围。这些特性使Java代码更简洁安全,特别适合Web开发中的数据建模(DTO/Response)、状态处理(订单/支付结果)、SQL/模板生成等场景,显著减少样板代码,提升可读性和类型安全性。
2025-11-17 05:15:00
844
原创 高性能场景为什么推荐使用PostgreSQL,而非MySQL?
摘要:PostgreSQL在高性能场景下相比MySQL具有显著优势:1)采用进程池模型,支持更高并发连接;2)提供多元索引策略(B-Tree、GIN、BRIN等),高效处理复杂查询;3)优化器更强大,支持CTE和并行查询;4)原生支持数组、JSONB等复杂数据类型;5)MVCC实现更先进,减少锁竞争。这些特性使PostgreSQL更适合处理大数据量、高并发和复杂查询场景。
2025-11-16 05:15:00
881
原创 JPG 与 JPEG 有什么区别?是不是一样的?
JPG和JPEG本质上是相同的图片格式,区别仅源于历史原因。JPEG是图片压缩标准名称,而".jpeg"和".jpg"都是其文件扩展名。早期Windows系统因8.3文件名格式限制将".jpeg"缩短为".jpg",而macOS/Linux保留了完整后缀。如今两者在技术层面完全相同,采用相同的压缩标准,具有一致的画质和兼容性。用户可随意选用,仅需注意在特定场景下保持后缀统一便于管理。简单来说,JPG就是JPEG的缩写形式,实质并
2025-11-15 05:15:00
1027
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅