首页
专栏
橙Bot
动态
图库
留言板
友链
1
为什么PUT和DELETE请求在大公司中逐渐被弃用?
2
JDK25已来,为何大多公司仍在JAVA8?
3
MySQL8.x已成事实标准,但这些“坑”才刚刚暴露
4
走向全栈:前后端数据存储与使用方式的差异深度解析
5
【科技资讯】jQuery 4.0 发布:是否仍值得使用?
橙序员
累计撰写
257
篇文章
累计创建
73
个标签
累计收到
6
条评论
栏目
首页
专栏
橙Bot
动态
图库
留言板
友链
搜索
标签搜索
HTTP
node
Chrome插件
JDK
响应式编程
R2DBC
小说
成长
公众号
事务
流处理
大数据
旅行
mongo db
SUNO
github
IDEA
安全
注解
总结
求职
分布式事务
CAP
分布式系统
loadbalancer
装修
买房
前端
方案设计
AIGC
JVM
资讯
Netty
NIO
BIO
zookeeper
RocketMQ
MySQL
stable diffusion
spring MVC
spring AOP
JDBC
mybatis
logback
docker
consul
spring event
新冠
连接池
redis
运维
nginx
hiper-v
DDD
搞笑
数据库
团建
游戏
Gradle
心情
好物
eureka
spring framework
spring boot
设计模式
apache common
ShardingSphere
KAFKA
leetcode
spring cloud
feign
ES
起点
目 录
CONTENT
以下是
开发技巧
相关的文章
2026-02-02
为什么PUT和DELETE请求在大公司中逐渐被弃用?
本文探讨了PUT和DELETE请求在RESTful API中的基本作用及其逐渐被大公司避免使用的原因。第一章介绍了PUT请求用于更新资源,DELETE请求用于删除资源,强调了RESTful API的设计理念。第二章分析了大公司不再使用这两种请求的原因,包括幂等性问题、复杂的错误处理和回滚机制、灵活性与易用性以及安全性考虑。第三章提出了替代方案,如使用PATCH请求和POST请求进行软删除,强调了在现代API设计中非标准化使用的重要性。第四章总结了POST、PATCH和GET请求的优势,并探讨了它们在实际应用中的组合使用。最后,第五章讨论了大公司在API设计中的趋势,包括无状态管理、版本管理、微服务架构及安全性管理,展望了未来API设计的灵活性、扩展性和智能化。整体上,文章强调了PUT和DELETE请求的局限性及其替代趋势。
2026-02-02
295
0
0
开发技巧
2026-01-27
JDK25已来,为何大多公司仍在JAVA8?
错误,而是系统的行为、性能和稳定性发生了改变。这种变化往往难以追踪和定位,导致团队感到无所适从,最终对升级产生恐惧。这种情况的发生,表明了即使在表面上看似顺利的升级,实际上可能隐藏着深层次的问题。 第四章:真正的风险,不在 JDK,而在你不敢动的那一部分代码。很多时候,企业面对 JDK 升级时,真正的顾虑并不在于 JDK 本身,而在于那些不敢触碰的老代码。这些代码可能是历史遗留,或者是业务核心部分,涉及到复杂的依赖关系和风险。对这些代码的改动往往需要经过严格的测试和验证,使得升级过程变得更加复杂和缓慢。 第五章:真正逼你升级的,从来不是技术本身。技术本身的演进并不会直接推动企业的升级,真正的驱动力往往来自于业务需求、竞争压力或者技术债务的积累。企业在面对市场变化时,才会意识到升级的重要性,从而在技术上做出改变。 第六章:一次相对靠谱的 JDK 升级,应该从哪里开始。进行一次成功的 JDK 升级,建议从小范围的试点开始,逐步评估影响。可以通过建立测试环境、编写测试用例、监控系统行为等方式,来降低升级过程中的风险。同时,也要注重文档和团队的沟通,确保每一个成员都了解升级的目的和过程。 第七章:如果一直不升,会发生什么?不进行 JDK 升级,可能导致技术债务的累积,使得系统逐渐与现代技术脱节,无法利用新的特性和性能优化。同时,还可能面临安全风险,因为旧版本的 JDK 可能不再获得支持和更新。 结语:也许问题不只在我们。在技术升级的过程中,企业文化、团队信心以及对风险的管理同样重要。面对升级的挑战,企业需要在技术和管理上进行双重努力,以适应不断变化的技术生态。
2026-01-27
298
0
1
开发技巧
2026-01-26
MySQL8.x已成事实标准,但这些“坑”才刚刚暴露
该文章讨论了MySQL 8的升级重要性及其带来的变化,强调了以下几个要点: 1. **不可选的升级**:MySQL 8已成为默认版本,尤其是在各大云平台上,5.7版本逐渐被视为历史版本,升级已经不仅仅是技术选择,而是时间问题。 2. **字符集与排序规则变化**:MySQL 8将默认字符集改为utf8mb4,排序规则变为基于Unicode 9.0的规则,这导致了数据排序和索引的一致性问题,可能导致在生产环境中出现意外的行为变化。 3. **SQL行为变得严格**:在MySQL 8中,许多以前可以运行的SQL语句在新版本中可能会报错,系统开始严格执行SQL标准,增加了兼容性挑战。 4. **执行计划的不可预测性**:虽然执行计划在某些情况下变得更为智能,但其不可预测性可能导致性能问题。 5. **窗口函数与CTE的使用**:正确使用窗口函数和CTE可以提升性能,但错误使用则可能造成性能损失。 6. **系统表与权限模型的变化**:MySQL 8在系统表和权限模型上有显著变化,可能导致权限问题。 7. **生产环境升级的建议**:建议在升级前进行SQL模式检查、执行计划对比、字符集与排序规则扫描、索引长度检查和真实压力测试,以确保平稳过渡。 8. **新阶段的理解**:MySQL 8不仅是一个新版本,更是一个新的发展阶段,用户需要对新特性和潜在问题有深入了解,以避免在升级后遇到意外问题。 文章提醒用户,若对MySQL 8的变化不熟悉,需从头仔细阅读相关内容;若已在使用中,建议从生产升级的策略部分开始,以便更好地应对挑战。
2026-01-26
300
0
0
开发技巧
2026-01-22
走向全栈:前后端数据存储与使用方式的差异深度解析
本文探讨了前后端数据存储的重要性及其差异。引言部分强调了前后端分离架构在现代互联网应用中的普遍性,并指出数据存储在性能和用户体验中的关键角色。文章结构包括前端和后端的数据存储方式,前端使用浏览器存储机制(如LocalStorage、SessionStorage和IndexedDB)及状态管理工具(如Redux、Vuex),并分析了它们的优缺点和应用场景。后端则讨论了关系型数据库与非关系型数据库的区别及其各自优势。 此外,文章还探讨了前后端交互的API设计、安全性和数据一致性问题,以及前后端数据处理的流程和实时数据与静态数据的处理策略。通过案例分析,比较了成功与失败的项目经验,强调了不同存储方式对应用性能的影响。 最后,文章总结了前后端数据存储的最佳实践,展望了未来发展趋势及新兴技术对数据存储方式的影响,并提出了在项目中优化数据存储的思考与实践。
2026-01-22
331
0
0
开发技巧
2026-01-17
本周github热门:AI工具大爆发,智能开发助力新潮流!
本周的开源社区动态围绕人工智能(AI)技术的迅速发展,重点介绍了几款创新的AI开发工具,推动了开发效率和AI应用的广泛潜力。其中,Claude Code、OpenCode和Superpowers成为焦点。Claude Code是一款智能编码工具,利用自然语言处理简化编码过程,受到新手和资深开发者的欢迎;OpenCode则通过高度抽象的接口为开源项目开发者提供便利,星数增长显著;Superpowers则优化了团队协作,适合需要频繁迭代的软件项目。 此外,多模态AI技术在GitHub项目中展现了强大能力。bytedance的UI-TARS-desktop连接多种AI工具,适合数据科学家和开发者;hacksider的Deep-Live-Cam利用深度伪造技术实现实时换脸,受到内容创作者的关注。 在科学研究领域,MiroThinker和memU展示了AI在复杂数据处理和记忆基础设施中的应用。MiroThinker提供高效的推理能力,适合多种科研领域,而memU则为大型语言模型提供记忆架构,提升信息存储和检索能力。 总体来看,这些开源项目不仅便利了开发者,还推动了AI技术在各领域的应用,同时引发对道德和法律问题的关注。
2026-01-17
393
0
0
开发技巧
2026-01-15
解密前端包管理工具:npm、Yarn与pnpm的全面对比
前言部分强调了包管理工具在现代前端开发中的重要性,尤其是在管理复杂项目的第三方依赖时。包管理工具如npm、Yarn和pnpm,能够提升开发效率并降低技术债务,选择合适的工具至关重要。 包管理工具的基本功能包括依赖管理、版本控制、安装与卸载、更新管理、缓存机制和脚本执行等。这些功能使得开发者能够更高效地处理项目依赖。 npm是Node.js的默认包管理工具,拥有庞大的生态系统,易用性高,支持社区广泛。Yarn由Facebook开发,强调性能和安全性,具备快速安装和离线缓存等特性。pnpm则以节省空间和快速安装著称,利用硬链接管理依赖。 结论部分指出,包管理工具对提高生产效率和管理项目依赖至关重要。开发者在选择工具时应考虑项目需求和团队习惯。npm、Yarn和pnpm各有优势,了解其功能和用法将为开发者提供更顺畅的开发体验。同时,具体的项目案例分析将有助于进一步理解不同工具的适用性。
2026-01-15
374
0
0
开发技巧
2025-12-12
Springboot3.0并不能拯救你的屎山
本文系统分析了Spring Boot 3.0发布后,许多项目迟疑升级的原因。主要原因包括: 1. **核心破坏性变更**: - **Java EE(javax)迁移到Jakarta EE(jakarta)**带来了包名大规模变更,导致编译和运行时严重不兼容。许多依赖库未同步迁移,造成“看似兼容但运行失败”的常见问题。 - **JDK版本升级至Java 17及以上**,跨越多个Java版本,带来架构和基础设施链路的连锁反应,增加迁移复杂度。 2. **依赖生态未跟进**: - Spring全家桶及第三方库的版本升级存在依赖关系限制,单独升级Spring Boot 3.x通常无法成功启动。 - 企业自研SDK多依赖旧版javax包,成为升级的关键瓶颈。 - 依赖链越深,升级成本呈指数级增长。 3. **老项目升级成本高昂**: - 代码庞大且跨模块,积累大量技术债务,潜在不兼容点多。 - 自动配置变化导致集成测试和业务回归风险增加,尤其在分布式系统中端到端测试难度大。 - 升级涉及多个团队协作,需同步升级架构、基础设施和运维体系,QA面临覆盖难题。 4. **Spring Boot 3亮点难以形成强刚需**: - AOT和Native Image技术门槛高,难以快速落地。 - 虚拟线程和Java 17语言特性虽有优势,但非多数业务痛点。 - 当前生态成熟度有限,且2.x版本已能满足大多数业务需求。 5. **升级时机与决策模型**: - 系统性能受旧JDK限制、需要现代能力(如AOT、可观测性)时应考虑升级。 - 技术债务持续增加或组织架构调整时,升级的收益大于成本。 总结来看,Spring Boot 3的升级是一次架构和技术栈的深层次变革,带来显著的破坏性变化和高昂的迁移成本。多数既有项目选择观望,等待依赖生态成熟和业务驱动,避免盲目冲动升级。升级决策应基于实际收益与风险的综合评估,采取稳健的工程管理策略。
2025-12-12
765
0
0
开发技巧
2025-12-06
Java接入Pinecone搭建知识库踩坑实记
本文系统总结了基于 Pinecone 向量数据库构建 Java 知识库的全流程与实战经验。首先阐述了构建知识库的必要性,指出传统数据库或 Elasticsearch 无法实现语义检索,且直接调用成本高、维护复杂;而 Pinecone 作为轻量、稳定且成本可控的向量数据库,适合个人及中小项目。 文章详细介绍了环境准备(Pinecone 账号、API Key、Index 创建注意事项),并推荐在创建索引时选择 Pinecone 内置 Embedding(如 llama-text-embed-v2),以节省成本、降低延迟及避免维度错误。同时提醒速率限制等使用细节。 在 Java 项目接入方面,指出官方 SDK 依赖 Spring Boot 3.x,且与 Spring 2.x 存在 HttpClient 冲突,Java 8 项目难以使用,故推荐绕开 SDK,直接通过 HTTP 接口调用 Pinecone 服务。 文中还详细介绍了 Pinecone 的核心概念(索引、维度、命名空间、topK、度量方式、副本分片等)、Java 端完整调用链和知识库问答(RAG)实现流程。针对数据建模,强调文本块(chunk-text)及 metadata 字段设计对检索效果的重要性。 此外,分享了常见坑点与排查技巧,如 JSON 解析错误、SpringBoot 编码问题、网络差异、HttpClient 版本冲突等。最后涵盖了性能优化、成本控制、测试监控及运维部署(包括历史数据迁移和增量同步),并总结了最佳实践,帮助开发者快速上手,避免重复踩坑。
2025-12-06
936
0
0
开发技巧
2025-10-26
搞定系统设计题:如何设计 API 网关
随着微服务架构的流行,系统的复杂性增加,前端需要面对多个服务的接口,导致了安全、流量控制、监控等逻辑重复实现。为了解决这些问题,API 网关应运而生,成为系统中的统一入口,负责请求路由、安全保护、流量控制等多种职能。API 网关的核心功能包括请求路由、负载均衡、鉴权与认证、限流与熔断、日志与监控及安全防护。它通过灵活的路由策略,将请求正确转发到相应的服务,同时实现限流和熔断机制,保证系统安全与稳定。此外,API 网关还提供监控功能,帮助开发者掌握系统运行状态,提高服务可观测性。设计一个成熟的 API 网关需要综合考虑高可用性与可扩展性,以满足高并发环境的需求。总体而言,API 网关在微服务架构中扮演着至关重要的角色,旨在提升系统的性能、可靠性和安全性。
2025-10-26
816
0
0
开发技巧
2025-10-18
搞定系统设计题:如何设计一个全局ID生成器?
本论文探讨了全局唯一 ID 生成器的设计与实现,系统分为七章。首先,需求分析明确了功能与非功能需求,包括唯一性、高可用性和高性能等关键要素,并提出面试中常见的引导问题。接下来,详细介绍了三种 ID 类型及其优缺点:UUID、数据库自增 ID 和分布式 Snowflake 方案。核心设计思路部分讨论了集中式与分布式生成的利弊、ID 组成、唯一性保证策略以及性能优化点。系统架构设计章节则强调高可用性与可扩展性,建议通过多机房部署和动态机器 ID 分配来增强系统的容错能力。最后,具体实现方案包括单机与分布式 Snowflake 的实现细节,并提供了异常处理及简化版 Java 代码示例。本文的目标是帮助读者掌握全局唯一 ID 生成的关键技术,同时提高在技术面试中的表现。
2025-10-18
742
0
0
开发技巧
2025-10-12
搞定系统面试题:如何设计一个推荐系统?
推荐系统是每个互联网公司面试中的经典考题,其设计难度源于复杂的数据处理、实时性要求和多维度的优化目标。推荐系统主要功能是帮助用户发现感兴趣的内容,从而提升转化率与用户黏性。系统设计首先要明确推荐场景,例如电商或内容平台,并根据不同业务目标定义推荐目标。数据来源和埋点设计是成功推荐系统的核心,确保高质量的数据收集、处理和特征生成是至关重要的。此外,通过构建用户画像和内容画像,系统能够进行有效的向量化匹配。召回层和排序层设计更进一步优化推荐结果,实现多路召回和智能排序。最后,实时性与模型更新和监控评估也是确保推荐效果的重要环节。本文将逐步拆解如何从零开始搭建一个高效的推荐系统。
2025-10-12
1955
0
0
开发技巧
2025-09-21
搞定系统设计题:如何设计一个订单系统?
本文讨论了订单系统设计的全过程,适用于技术面试中的系统设计题目。引言部分指出,订单系统是电商、支付等业务中的核心组件,因此设计时需从多个维度考虑。需求分析分为功能性和非功能性需求,涵盖用户下单、支付方式、订单状态流转等核心功能,还包括高并发支持、一致性、可扩展性等非功能要求。 随后,文章描述了核心架构设计,建议使用微服务或分层架构以实现灵活性和扩展性。数据库设计部分展现了核心实体、表设计、索引优化及并发控制等要素。核心流程如下单、支付、订单状态机等被详细设计,以确保系统的高可用性和安全性。 此外,技术实现要点如缓存策略、消息队列和事务处理,优化了系统在高并发环境下的表现。最后,文章探讨了如何进行扩展与优化,包括秒杀活动的特殊应对、多支付渠道的集成等内容,帮助面试者全面理解订单系统的设计与实现。
2025-09-21
2011
0
0
开发技巧
2025-09-14
搞定系统设计题:如何设计一个支付系统?
本文围绕支付系统的设计展开,提供了系统设计面试的答题思路与关键要点。首先,强调需求分析的重要性,确保与面试官对齐功能性和非功能性需求,例如支付处理、退款能力和安全性等。接着,通过高层架构设计,展示系统的核心模块如支付网关、交易服务和风控模块,确保简洁明确,避免实现细节的纷繁复杂。文中还分析了支付系统面临的核心挑战,包括幂等性、一致性、安全性和高可用性,提供了相应的解决方案,例如生成唯一流水号保证支付幂等性、使用状态机保证一致性等。此外,数据与流程设计也是考察重点,需展示对核心数据表及状态流转的理解。最后,扩展和优化策略如多支付方式支持、实时监控等,作为加分项提升答题的深度与广度,帮助候选人在面试中脱颖而出。
2025-09-14
1007
0
0
开发技巧
2025-09-07
搞定系统面试题:如何实现分布式Session管理
本文介绍了分布式环境下的Session管理挑战及解决方案。首先,Session用于识别用户身份和存储临时数据,单机应用中Session存储简单高效。然而,随着应用向分布式架构发展,Session管理面临一致性、高可用性、性能及安全等挑战。针对这些问题,常见的解决方案包括Session复制、Sticky Session、集中式Session存储(如Redis)和Token无状态Session等,每种方案在复杂度、性能和适用场景上各有优劣。在高并发场景中,集中式存储如Redis表现优异;而微服务架构则更适合使用Token方式。面试中,考生应展示对多种方案的理解,并结合具体场景进行分析与选择,以展现系统设计能力。
2025-09-07
810
0
0
开发技巧
2025-08-29
Lombok vs Java Record:谁才是未来?
本文比较了Java中的Lombok和Record两种减少样板代码的工具。Lombok通过注解简化JavaBean的写法,允许开发者以几行注解替代冗长的代码,显著提高开发效率。它广泛应用于微服务和Spring Boot项目中,但存在编译依赖、黑箱问题和未来兼容性的风险。而Record则是Java官方推出的语法特性,旨在简化不可变数据对象的表达,使用一行代码即可实现与传统写法同等的功能,且无须依赖第三方库。Record天然支持不可变编程,但对于频繁修改属性的场景灵活性较差,且仅在Java 16及以上版本可用。 通过实例对比,传统JavaBean写法冗长,Lombok使用注解后代码极为简洁,而Record则更为直观。使用场景方面,Lombok适合对复杂业务逻辑进行简化,而Record更适合轻量级数据对象。明晰未来趋势,Record有可能逐渐取代Lombok成为主流选择。
2025-08-29
868
0
0
开发技巧
2025-08-24
Java 面试救命题:短链接系统设计如何兼顾唯一性与高可用?
短链接系统是系统设计类面试中的热门考题,它表面上看似简单,实际上涉及多个关键设计要点,包括唯一性、存储、性能、高可用性等。短链接广泛应用于社交平台、营销推广和数据统计等场景,面试官通过此题考察候选人的系统设计思路及对存储扩展、性能优化和可靠性的理解。 核心设计目标包括将长链接转换为短链接、跳转功能、访问统计及短链接的失效机制。主要难点在于如何保障短链唯一性、支持水平扩展、高可用性设计以及性能优化。设计思路包括短链生成策略(如自增ID、哈希、雪花算法)、存储方案(关系型数据库或NoSQL)、架构流程设计等。 系统架构设计需考虑高性能优化、高可用性、监控和日志收集等方面,并结合缓存策略和分布式生成来应对高并发访问。总结时强调了代价最小与最大策略,展示了应对安全问题和扩展功能的思路,如用户自定义短链和短链过期机制等。
2025-08-24
830
0
0
开发技巧
2025-08-17
搞定面试设计题:秒杀系统怎么答
本文针对秒杀系统的设计进行了详细分析,旨在帮助开发者在面试中自信应对相关问题。首先介绍了秒杀场景的特点,如高并发流量和有限库存,强调了系统设计的核心目标,包括抗高并发、避免超卖和保持高可用性。接着,文章阐述了常见的问题与难点,如流量洪峰、库存超卖及恶意请求,提出了相应的解决方案。设计方案包括架构总览、请求拦截与限流、库存预减、异步下单、数据库优化和缓存策略,强调了多种技术手段的结合使用,如Nginx限流和Redis原子操作。同时,文章也分析了避免超卖、重复下单和防刷的策略,建议采用代价最小的方案以便快速上线,并探讨了进一步扩展与优化的方向。最后,总结了答题框架,强调了在面试中应层次分明、清晰表达思路,以展示技术深度和架构能力。
2025-08-17
822
0
0
开发技巧
2025-08-10
通过trae开发你的第一个Chrome扩展插件
随着浏览器功能的不断丰富,Chrome插件成为提升工作效率的重要工具,尤其对开发者而言,掌握Chrome插件开发技能可以增强前后端协作能力。本文介绍了Chrome插件开发的基础,包括关键配置Manifest V3、权限申请、背景脚本和内容脚本等要素。开发流程涉及创建manifest.json、popup.html、popup.js等文件,并通过实际示例实现简单插件,如页面背景色切换。此外,讨论了插件的调试和发布过程,以及如何通过精细的权限声明和消息通信提升安全性和用户信任。通过学习这些基础知识,开发者能够快速入门,并为项目打造专属工具,拓展更多功能可能性。
2025-08-10
986
0
0
开发技巧
2025-08-03
仍然嫌GC卡顿?新一代低延迟GC了解一下
本文讨论了Java中ZGC(Z Garbage Collector)垃圾收集器的核心机制与优化演进,ZGC是一种超低延迟的垃圾收集器,适用于大堆内存和高并发场景。文章首先介绍了不同版本JDK(如JDK 11、15、16、21)对ZGC的支持和改进,包括并发线程栈处理和分代收集的引入。与传统的G1和CMS垃圾收集器相比,ZGC显著降低了停顿时间(通常小于1ms),并且能够有效管理TB级别的堆内存,适合延迟敏感的应用如在线服务和广告系统。 此外,文章提供了ZGC的启动和调优参数示例,并分析了在容器化环境下ZGC的资源管理优势。最后,探讨了主流Java框架与不同JDK版本的兼容性,强调了学习新技术以适应行业变化的重要性。通过对ZGC的深入了解,开发者能够更好地选择合适的GC方案,以提升应用性能和用户体验。
2025-08-03
841
0
0
开发技巧
2025-07-27
JDK17 前后写法对比:差点没认出是 Java
Java语言在JDK 12至JDK 17之间经历了显著的语法演进,使得其变得更加简洁和现代化。几个关键的新特性包括:首先,switch表达式引入了箭头语法,支持多标签匹配和返回值,使逻辑分支更清晰;其次,文本块(Text Blocks)使多行字符串的处理变得优雅,自动处理换行和缩进,提升了代码可读性;再者,instanceof模式匹配简化了类型判断,去除了冗余的强转;此外,record类允许以一行代码定义不可变数据类,自动生成必要的方法,减轻了样板代码的负担;最后,密封类(Sealed Classes)限制了类的继承范围,确保了子类的可控性。这些特性在实际开发中,通过简化代码实现、增强表达力,极大地提升了开发者的效率和代码的安全性。
2025-07-27
828
0
0
开发技巧
2025-07-20
Java 性能难排查?JFR 到底能帮上什么忙?
随着应用系统复杂度提升,运行时性能监控和问题排查变得愈发重要。Java Flight Recorder(JFR)是JVM内置的强大性能监控工具,自JDK 11起开源并集成在OpenJDK中。JFR通过低开销记录JVM运行时数据,帮助开发者快速定位诸如GC频繁、线程死锁和内存泄漏等问题。文章详细介绍了JFR的功能、使用场景及其与其他监控工具的对比,阐明了JFR在监控指标的精细程度、运行开销及集成方式上的优势。JFR能够记录CPU使用情况、内存分配、线程状态等多维度数据,非常适合云原生和容器化环境。尽管JFR具有诸多优点,但它不支持Java 8及以下版本,且无法跨语言监控。通过在Spring项目中集成JFR,开发者可以高效进行性能调优和问题排查,提升系统稳定性和响应速度。
2025-07-20
773
0
0
开发技巧
2025-07-13
揭秘ZGC:下一代低延迟垃圾收集器
ZGC(Z Garbage Collector)是Java 11引入的新一代垃圾回收器,旨在解决传统GC的“延迟诅咒”问题,为大内存和低延迟场景提供高效的垃圾回收解决方案。其设计目标为最大GC停顿时间低于10毫秒,并支持TB级的堆内存。ZGC通过采用并发标记、并发复制、加载屏障和着色指针等先进技术,实现了几乎无停顿的垃圾回收机制。与传统的分代回收不同,ZGC采用单代模型,几乎完全并发处理整个堆,无需长时间的应用暂停,确保了高吞吐和低延迟。这些特性使ZGC成为对延迟敏感的应用(如电商秒杀、实时游戏、广告竞价)理想的选择。随着ZGC持续迭代,未来将推出更多优化功能,进一步提升其在复杂应用中的性能表现。
2025-07-13
740
0
0
开发技巧
2025-07-06
当垃圾回收器罢工:只分配不回收的奇葩GC
Epsilon GC 是 Java 在 JDK 11 引入的一种实验性垃圾回收器,具备唯一的功能:仅负责内存分配,而不进行对象回收。其工作机制非常简单:在内存分配时检查是否有足够的内存可用,若有则分配,若无则抛出 OutOfMemoryError 错误并终止程序。Epsilon GC 的设计目的是提供一个低延迟的内存分配策略,适用于性能测试和短生命周期的应用场景,尽管其在内存占用和吞吐量方面表现较差。与传统的垃圾回收机制不同,Epsilon GC 不执行任何回收过程,因此避免了与垃圾回收相关的开销。这种全新的“无回收”策略使得 Epsilon GC 成为一种特殊的选择,主要用于特定需求下的内存管理。
2025-07-06
660
0
0
开发技巧
2025-06-29
JDK自带的HttpClient,替代Apache的更优解?
在Java 11及以后的版本中,官方引入了新的标准HTTP客户端——JDK HttpClient,作为Apache HttpClient的替代选项。JDK HttpClient支持现代化的编程体验,包括同步和异步请求处理、HTTP/2和WebSocket的原生支持,且无需外部依赖,非常适合微服务和命令行工具。而Apache HttpClient则功能丰富,适合高并发场景如网关和爬虫,支持连接池管理和复杂表单处理。对于文件上传/下载、Spring应用或Feign客户端的底层替换,Apache HttpClient依然是推荐选择。JDK的简洁性和一致的异常处理使其在大多数日常REST API调用中表现优异。整体而言,选择替代方案时,应根据具体场景和需求来权衡二者的优缺点,建立合理的迁移路径,从而提升开发效率与维护性。
2025-06-29
1093
0
0
开发技巧
2025-06-22
被截断的表情符,差点让我怀疑人生
本文探讨了在保存博客文章时,由于包含 Emoji 或特殊字符而导致 MongoDB 报错的问题。作者在尝试保存文章时,遭遇了 `DataIntegrityViolationException` 异常,经过调试发现,问题源于使用 `substring` 方法截取字符串时,导致 Emoji 的代理对被截断,产生了不合法的 UTF-8 编码。由于 Java 的字符串是基于 UTF-16 编码,普通字符和高位字符(如 Emoji)在内部表示上有所不同,因此简单的字符截断容易导致非法字符出现。为了解决这一问题,作者建议使用 Unicode 码点进行截断,以确保字符串按完整字符处理。通过使用相关 API,如 `codePointCount()` 和 `offsetByCodePoints()`,可以有效避免截断问题,从而确保在保存到 MongoDB 时不会出现编码错误。整体而言,文章强调了处理字符串时需关注字符边界,以提高开发体验。
2025-06-22
703
1
0
开发技巧
1
2
3
4
5
请允许在我们的网站上展示广告
您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。
我已知悉
文章发布订阅~
通过邮箱订阅文章更新,您将在文章发布时收到及时的邮件提醒~
邮箱
昵称
订阅
关闭