- 博客(73)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 Springboot3.0并不能拯救你的屎山
Spring Boot 3.0升级困境分析 Spring Boot 3.0虽带来重大技术革新(Java 17+支持、Jakarta EE迁移),但企业升级面临多重障碍:1)技术层面,javax→jakarta包名变更导致全生态链断裂,需同步修改所有依赖;2)Java 8→17的跨越式升级引发兼容性问题;3)组织层面,涉及CI/CD、容器镜像、安全策略等多部门协调。此外,第三方库和企业自研SDK的兼容性滞后形成升级瓶颈,使得老系统迁移成本远高于新建项目。这些结构性挑战导致企业普遍采取"新项目用3.x
2025-12-12 20:35:26
1017
原创 Java 接入Pinecone搭建知识库踩坑实记
本文介绍了使用Java集成Pinecone向量数据库构建知识库的实践经验。针对传统结构化查询的局限性,文章推荐采用Pinecone的语义检索能力,并详细分析了其内置embedding服务的优势(免费、低延迟、自动维度匹配)。在技术实现上,指出官方Java SDK存在Spring Boot版本兼容问题,建议改用HTTP接口方案以兼容各版本环境。同时提供了模型选择、速率限制等关键注意事项,特别强调了批量写入策略和文本分块处理的最佳实践。该方案尤其适合个人开发者或中小型项目构建低成本、高效率的知识检索系统。
2025-12-06 12:45:16
608
原创 我用 AI 花了6个小时写了一个 AI 面试网站
摘要:作者仅用两条AI对话就完成了AI面试网站interview.shiker.tech的开发部署。项目采用Next.js+TailwindCSS技术栈,支持算法、Java八股、系统设计等多场景模拟面试,AI能像真实面试官一样深度追问。从架构设计到代码生成、UI绘制、Docker部署全由AI自动完成,5分钟即可上线。这展现了AI时代个人开发者突破传统团队协作限制的可能性,未来"几句话开发完整应用"将成为常态。网站还提供简历撰写、面经分析等附加功能。
2025-11-27 18:17:58
297
原创 搞定系统设计题:如何设计 API 网关
API网关是微服务架构中的关键组件,它作为统一入口集中处理请求路由、负载均衡、安全认证、限流熔断等核心功能。本文从系统设计角度剖析API网关的架构与实现,包括:1)六大核心功能模块设计;2)整体架构与请求流转路径;3)高并发场景下的性能优化策略,如异步非阻塞I/O模型;4)高可用保障机制。通过配置中心集成和插件化设计,API网关能够实现动态扩展和灵活定制,为微服务系统提供可靠的流量管控能力。
2025-10-26 18:22:14
255
原创 搞定系统设计题:如何设计一个全局唯一 ID 生成器?
设计全局唯一 ID 生成器,是系统设计面试中非常典型的题目,同时也是实际分布式系统中不可或缺的基础组件。明确需求是关键功能需求:唯一性、高并发、可扩展。非功能需求:容错性、可监控性、可维护性。选择合适的 ID 类型UUID:简单、全局唯一,但不易排序。数据库自增 ID:易用、可排序,但单点瓶颈明显。Snowflake:分布式、高性能、可排序,最适合高并发分布式场景。核心设计思路拆分 ID 组成:时间戳 + 数据中心 ID + 机器 ID + 序列号。
2025-10-19 07:52:20
679
原创 搞定面试设计题:如何设计推荐系统?
推荐系统是互联网公司的核心面试题,其复杂性在于融合算法与工程实现。系统需处理海量数据,满足实时性要求,并平衡CTR、多样性等多目标优化。设计流程包括:明确业务场景(电商/内容平台)、数据埋点采集、用户/内容画像建模(特征提取与向量化)、多阶段推荐(召回、精排、重排)。关键挑战在于冷启动问题和实时更新机制,需结合离线计算与在线学习。推荐系统的效果70%依赖数据质量,30%取决于算法模型,因此需构建标准化埋点体系与实时特征管道。
2025-10-12 15:17:21
691
原创 用了一年多AI,谈谈我的感受
AI工具的双面性:机遇与挑战并存 AI在2024年深度融入工作与生活,展现出显著价值,但也带来新问题。企业场景中,AI Oncall、代码生成和文档工具虽提升效率,却因上下文缺失、幻觉问题增加沟通与调试成本;个人场景中,AI能快速完成开发、面试模拟和信息检索,尤其适合小项目。AI不会直接替代人类,而是模糊岗位边界,推动全栈化发展。适应AI时代需掌握Prompt技巧、持续学习新工具,并保持开放心态,将其视为能力放大器而非威胁。关键在于平衡AI辅助与人工判断,发挥协同效应。
2025-09-28 09:00:00
911
原创 搞定系统面试题:如何设计一个订单系统?
本文系统性地拆解了支付系统的设计思路,从面试答题技巧、需求澄清到架构设计与核心挑战应对。支付系统作为高复杂度金融场景,需兼顾高并发、强一致性和安全性。作者提出分层架构(支付网关、交易服务、风控、对账等模块),并重点剖析了幂等性、一致性、安全性和高可用性四大关键问题的解决方案。面试中应突出需求分析能力,通过简洁架构图展示系统思维,并深入讨论异常处理和数据一致性保障机制。全文以面试场景为导向,为技术面试提供了清晰的答题框架和核心要点。
2025-09-21 10:44:22
1212
原创 搞定系统面试题:如何设计一个支付系统?
支付系统作为互联网业务的核心基础设施,涉及高并发、强一致性和安全合规等关键挑战。本文从面试场景出发,系统拆解了支付系统的设计思路: 需求分析:明确支付类型(电商/订阅)、支付方式(银行卡/第三方)及非功能性需求(安全、高可用等)。 架构设计:核心模块包括支付网关(统一入口)、交易服务(状态管理)、风控模块(风险检测)和对账系统(资金核对)。 关键挑战:重点解决幂等性(唯一流水号)、一致性(状态机+补偿机制)、安全性(加密/防重放)和高可用(多活/熔断)等问题。 数据流程:通过订单表、支付流水表和对账表实现数
2025-09-14 15:32:43
738
原创 搞定系统面试题:如何实现分布式Session管理
分布式Session管理是分布式架构中的核心挑战之一。在单机时代,Session存储在本地内存中,但随着应用集群化,Session一致性、可用性、性能和安全性成为关键问题。常见解决方案包括Session复制、Sticky Session、Redis集中存储和JWT无状态方案。其中Redis集中存储因其高性能和扩展性成为主流选择,而JWT更适合微服务架构。不同方案各有优劣,需根据业务规模、性能要求和技术栈进行权衡。实际应用中通常采用Redis存储Session数据,并通过唯一sessionId实现跨节点
2025-09-07 12:18:42
830
原创 Lombok vs Java Record:谁才是未来?
摘要: Java开发者常面临样板代码问题,Lombok通过注解自动生成代码显著提升效率,但依赖第三方库。Java 16引入的Record语法原生支持不可变数据对象,代码更简洁。对比显示,Lombok适合可变对象和复杂构建场景,而Record更适用于不可变数据载体。未来,随着JDK 17+普及,Record可能逐步取代Lombok的部分功能,但老项目可渐进迁移,新项目可优先使用Record。两者并非对立,可根据场景结合使用。
2025-08-29 13:54:29
860
原创 搞定面试设计题:如何设计短链接系统
短链接系统设计是面试高频考题,其核心在于将长URL转换为短链并实现高效跳转,同时需兼顾唯一性、扩展性、高可用等。系统功能包括长短链互转、访问统计及过期机制。设计难点涉及分布式唯一ID生成(如雪花算法)、存储方案(MySQL分库分表或NoSQL)、缓存优化(Redis+Bloom Filter)及异步统计(Kafka)。架构分层处理请求、应用逻辑与存储,通过预生成短链池、CDN加速等提升性能,并借助风控策略保障安全。面试应答需分步阐述需求分析、最小可行方案、潜在问题及优化策略,体现系统思维。
2025-08-25 09:30:00
1259
原创 搞定面试设计题:秒杀系统怎么答
本文系统介绍了秒杀系统设计的关键要点与解决方案。秒杀场景具有瞬时高并发、库存有限等特点,系统设计需重点解决流量洪峰、库存超卖等问题。核心方案包括:通过Nginx和接口层限流拦截请求;使用Redis原子操作预减库存;采用消息队列异步下单削峰;数据库层采用乐观锁保证一致性。文章还对比了不同实施策略的成本效益,并提供了扩展优化方向。最后总结面试回答框架,强调需层次分明地展现架构思维,兼顾技术深度与成本权衡。该方案既能应对面试考察,也可作为实际业务架构参考。
2025-08-17 11:19:05
794
原创 通过trae开发你的第一个Chrome扩展插件
本文介绍了Chrome插件开发的基础知识,重点讲解了Manifest V3版本的配置要点。通过一个简单的页面背景色切换插件示例,展示了Chrome插件的基本开发流程。文章首先说明了Chrome插件开发的价值,然后详细解析了manifest.json文件的核心配置项,包括必备字段、界面配置、权限声明、背景脚本和内容脚本等内容。最后通过完整代码示例,演示了如何创建一个能够改变网页背景色的实用插件,包含manifest.json配置、背景脚本、内容脚本以及弹出页面的实现代码。该教程适合想要入门Chrome插件开发
2025-08-10 16:21:57
1137
原创 仍然嫌GC卡顿?新一代低延迟GC了解一下
ZGC是Java新一代低延迟垃圾收集器,专为超大规模内存和毫秒级停顿设计。它通过着色指针、并发标记转移等技术实现全流程并发,最大停顿时间<1ms,支持TB级堆内存。相比G1/CMS,ZGC在JDK15后成为生产级选项,特别适合延迟敏感型服务。启用只需添加-XX:+UseZGC参数,搭配JDK17+使用效果更佳。随着容器化和云原生发展,ZGC凭借其卓越的延迟控制和内存管理能力,正成为现代Java应用的首选GC方案。
2025-08-03 11:28:22
1050
原创 JDK17 前后写法对比:差点没认出是 Java
摘要: Java 12到17版本通过多项语法增强显著提升了开发效率与代码简洁性。关键特性包括:switch表达式(支持返回值与箭头语法)、文本块("""简化多行字符串)、模式匹配(instanceof自动绑定变量)、record类(一行定义不可变数据载体)以及密封类(限制继承范围)。这些改进使Java更接近现代语言风格,尤其在Web应用中,如通过record定义DTO、密封类建模订单状态、switch处理支付逻辑等场景,显著减少样板代码,提升可读性与安全性。
2025-07-28 09:00:00
1251
原创 Java 性能难排查?JFR 到底能帮上什么忙?
JFR 最早是 Oracle JDK 的商业功能,自 JDK 11 起在 OpenJDK 中也成为开源组件,默认集成在 JVM 中。它通过埋点的方式在 JVM 各个子系统中记录事件数据,这些事件被高效编码为二进制格式,几乎不影响应用运行。Java Flight Recorder 是现代 Java 应用性能诊断的重要工具。无需侵入应用代码、运行时开销小、事件粒度细、可视化支持完善。相比 APM 或 metrics 工具,JFR 更适合精准问题定位,特别是在生产环境中捕捉难以复现的异常行为。
2025-07-21 09:00:00
1892
原创 揭秘ZGC:下一代低延迟垃圾收集器
Java新一代垃圾回收器ZGC:打破低延迟与大内存的瓶颈 ZGC是JDK11引入的革命性垃圾回收器,专为低延迟和大内存场景设计。其核心创新在于: 采用并发标记+复制机制,最大停顿时间<10ms且与堆大小无关 通过着色指针和Load Barrier实现全阶段并发操作 支持TB级堆内存,同时解决内存碎片问题 采用单代设计但性能优异,无需分代回收 相比传统GC,ZGC在延迟、并发能力和大堆支持方面表现突出,特别适合电商秒杀、实时游戏等对延迟敏感的场景。
2025-07-14 09:30:00
1527
原创 JAVA竟然还有只分配不回收的奇葩GC
摘要:JDK 11引入的实验性Epsilon GC是一个"无操作"垃圾回收器,仅管理内存分配而不回收对象。它采用线性分配策略,当内存耗尽时直接抛出OutOfMemoryError终止程序。Epsilon GC适用于性能测试、短生命周期任务、内存边界测试等场景,为开发者提供零GC干扰的环境。作为JEP 318的产物,Epsilon GC通过参数"-XX:+UseEpsilonGC"启用,其极低开销的特点使其成为性能基准测试和GC研究的理想工具,但不适合长期运行的生产环境
2025-07-06 11:48:46
904
原创 JDK自带的HttpClient,替代Apache的更优解?
JDK 官方HttpClient的加入标志着 Java 网络通信 API 的一次重要革新。✅ 更轻的依赖管理✅ 更清晰的异步模型✅ 更现代的 API 设计但在一些高级场景中,Apache HttpClient 仍具有不可替代的优势。如果你是从零开始,优先使用 JDK 原生 HttpClient;如果你在维护老项目,不妨先封装一层调用,再逐步替换底层实现,避免全量重构带来的高风险和高成本。
2025-06-29 11:54:08
1296
原创 Java 11 底层增强解析:嵌套类访问优化与动态常量机制
JEP名称解决的问题对开发者的意义181嵌套类访问控制不再生成合成方法更安全、更快、更语义一致309动态常量机制常量强制初始化、体积臃肿更小、更快、为未来特性打基础这些变化大多数开发者不需要“显式使用”,但却直接影响着你写的每一行代码、每一次编译与启动。
2025-06-23 10:00:00
808
原创 JDK10 GC新特性,到底能带来多大提升?
本文介绍了JDK9和JDK10在垃圾收集(GC)方面的改进,包括统一日志格式(JEP 214)、G1并发Full GC(JEP 304)和Parallel GC的TLAB优化(JEP 307)。JDK10进一步优化了G1的分代晋升效率,并引入了实验性ZGC。相较于JDK8,新版GC在日志管理、并发性能和监控能力上显著提升。文章还通过Visual VM的对象直方图功能,展示了如何分析对象年龄分布,结合GC日志参数优化内存管理。
2025-06-09 10:00:00
1751
原创 摸鱼神器:AI打造的博客IDEA插件
本文分享了从零开发IntelliJ IDEA博客助手插件(orange-tech)的全过程。该插件通过Swing组件实现博客文章的结构化预览和导航,利用JBCefBrowser加载HTML文章内容,并创新性地集成了AI气泡对话功能。开发过程中解决了API数据解析、跨平台UI渲染、Markdown转HTML等技术难题。文章详细介绍了Gradle打包方案的迭代优化过程,最终采用distribution插件实现稳定发布,并配置GitHub Actions实现了自动化构建发布流程。作者还分享了如何借助AI工具加速开
2025-05-30 10:00:00
1481
原创 冷知识:Java -version发生了哪些变化?
JEP 223 和 JEP 322 体现了 Java 生态对现代化、自动化运维和版本管理的持续改进。对于开发者而言,理解版本号背后的语义,有助于更精准地选择、升级和调试 JDK 版本,也有助于构建更健壮的工具链和系统。同时,随着Java版本的不断演进,未来或许还会出现新的版本号提案与变更。开发者应持续关注官方文档与社区动态,及时掌握最新变化,从而更好地应对开发过程中可能出现的版本适配等问题。如果你对版本号策略还有疑问,欢迎留言交流!
2025-05-26 10:00:00
1106
原创 Java访问HTTPS失败?看懂根证书支持与配置
下面用流程图对比一下JDK 10 之前与JDK 10 及以上版本在访问 HTTPS 地址时,证书验证和连接建立的关键步骤差异。JEP 319 虽然是一项“看不见”的增强,但对 Java 应用连接现代互联网 HTTPS 服务来说意义重大。它简化了证书管理流程,减少了很多因“不受信任证书”导致的连接失败问题。但与此同时,我们也要意识到,JDK 的选择直接影响到你的应用能否顺利访问 HTTPS 服务。如果你还在使用 JDK 8,建议尽快升级,享受更完整的 TLS 支持和安全能力。
2025-05-17 19:52:53
1225
原创 玩转 Java 国际化:进击的Locale!
Locale使用场景示例技术/类说明国际化文本通过不同 Locale 加载不同语言资源格式化显示本地化的日期、时间、数字、货币多语言 UI根据 Locale 显示不同文本内容排序与比较Collator根据语言规则进行字符串排序与匹配默认偏好设置决定默认显示语言和格式。
2025-05-11 22:52:31
1654
原创 并发编程太难写?这些新方法救了我
JEP 266带来的新特性,不仅让异步编排变得更加简洁和标准化,还提高了代码的可维护性和性能。通过使用 orTimeout、Flow API等新方法,我们能够更加方便地管理异步任务、错误处理以及超时控制。如果你还没有使用这些新特性,建议从简单的 orTimeout和 Flow API开始,逐步提升你的异步编排能力。相信你会发现,异步编排再也不需要那么痛苦了!🎉想了解更多 JDK 新特性,提升开发效率?欢迎关注我的专栏👉 JDK 新特性专栏!一起来变得更强大吧 🚀。
2025-04-26 23:43:14
918
原创 Spring Framework 5.3 → 6.3全栈升级指南
强制使用6.3+需要云原生特性:GraalVM原生镜像+可观测性使用Java 17+新特性:Records/Pattern Matching。
2025-04-19 00:32:23
2256
原创 为什么IDEA不建议使用append拼接字符串?
拼接方式是否创建新对象是否适合循环性能String +是(每次)否差否(复用)是优所以如果是在写性能敏感的代码,或者涉及循环拼接字符串,java推荐用或(线程安全)。特性Java 8StringJava 9+ 紧凑字符串存储结构char[]每个字符内存2 字节1 字节(LATIN1)或 2 字节(UTF-16)内存利用率固定开销动态节省性能正常持平或略优向后兼容✅✅如果你正在开发高并发应用、微服务或内存敏感系统,
2025-04-19 00:28:56
1238
原创 探究分布式哈希算法:哈希取模与一致性哈希
哈希取模(Hash Modulo),堪称一种简洁明了的分布式哈希算法。其核心原理便是借助哈希函数算出键的哈希值,即 hash(key),接着将该哈希值对节点数量取模,也就是 hash(key) % N,如此一来,所得结果便是数据应存放的节点编号,最终数据就稳稳地存储在对应编号的节点上。通过对哈希取模和一致性哈希的详细介绍,我们清楚地看到了它们各自的优缺点和适用场景。
2025-04-06 17:45:57
915
原创 你的AI我的AI好像不一样~深入了解prompt
Prompt是指输入给AI模型的指令或问题,用于引导模型生成特定的输出。它可以是一个简单的问题、一个复杂的任务说明,或者一系列的指令。有效的prompt能够帮助AI更好地理解用户的需求,从而生成相关性更强、准确性更高的内容。关于prompt的概念,它并没有一个特定的提出者或明确的提出时间,而是随着自然语言处理和深度学习技术的发展逐渐演变而来的。最早的AI模型使用简单的指令,而随着模型能力的增强,prompt的复杂性和灵活性也不断提升。
2025-03-29 01:12:59
1195
原创 Java 高效日志管理:如何优化 Logback 和 SLF4J 的性能?
SLF4J 采用的日志门面模式将日志使用和实现分离。logger . info("执行某项操作");} }logger . info("执行某项操作");} }Logger;import orglogger . info("执行某项操作");} }logger.info("执行某项操作");这种方式让代码与具体日志实现解耦,若后续需从 Logback 切换到 Log4j2 等框架,仅调整依赖配置即可,无需大规模修改业务代码,降低维护成本。
2025-03-22 18:56:36
1177
原创 META-INF文件夹详解
需要注意的是,META-INF文件夹的位置应该在项目的classpath根目录下。不,META-INF文件夹不是Spring项目特有的,它是Java项目中常见的一个目录,用于存放一些元数据和配置文件。它在很多Java框架和工具中都得到了广泛的应用,如Java数据库连接(JDBC)的驱动加载、日志框架的实现类加载、dubbo框架中的类加载等。在Java开发中,META-INF目录的作用是为各种框架和工具提供一种统一的约定和扩展机制,用于管理项目的元数据、配置文件和资源文件等。
2025-02-22 20:09:58
1583
原创 Mybatis和Spring源码解析
内容实在太多,不在做搬运,本人原文:https://shiker.tech/s/yuan-ma-jie-xi-xi-lie。最近看代码总结了一下,各位朋友可以看看是否更便于理解了。
2023-06-10 10:18:56
177
原创 maven拆分ssh项目之文件通配符
今天用maven对之前做过的一个springMVC+spring+hibernate项目进行了拆分,在拆分时文件通配符这个东西弄的有点儿懵。。。经过几个小时的调试,终于将通配符弄明白了,话不多说,先看项目目录:雷区一-----spring中的classpath将ssh项目拆分时,spring的配置文件也随之进行拆分。但是spring中依赖的个properties、xml文件依旧在子项目中,因此不需...
2022-01-23 23:51:18
381
原创 理解和对比BIO、NIO、AIO的特性
示例代码:https://gitee.com/shiker/Stream同步阻塞式--BIO一个客户端(连接)对应一个线程,只有一个服务线程为每个连接分配处理线程缺点:缺乏弹性伸缩能力,服务端与客户端并发访问数呈1:1的正比关系,并发访问量过大,系统会产生线程堆栈溢出,创建新线程失败的问题,导致宕机或者僵死,不能对外提供服务。核心代码实例:TimeServerTimeServerHandler:T...
2022-01-23 23:51:10
504
原创 spring整合hibernate获取currentSession
首先,在spring中配置hibernate的数据源和sessionfactory工厂<!-- 配置组件扫描器 --> <context:component-scan base-package="edu.hrbeu" /> <!--扫描配置文件(这里指向的是之前配置的那个config.properties) --> <context:prop...
2022-01-23 23:50:58
1325
原创 jvm运行时数据区与内存管理机制
提纲运行时内存区域 1.程序计数器 1. 当前线程所执行的字节码的行号指示器。 2. 如果线程郑在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器的值则为空。 3. 此内存区域是唯一一个在Java虚拟机规范中没有定义任何out of memory情况的区域 2. Java虚拟机栈 1. 每个方法在执行时都会创...
2022-01-23 23:50:48
290
2
原创 自己动手在Cent OS6.9上编译OPENJDK
之前看jvm的时候就尝试编译一下jdk(为什么要自己编译openjdk呢,一方面可以帮助我们了解jvm的运行机制,另一方面我们可以得到jdk的debug版本,而debug版本的调试工具更丰富),但是时间有限,没成功之后也没再管(考试周。。。==||),今天终于有时间把这个坑补上了。看网上都是ubuntu上编译的jdk,为了不雷同,就换个环境吧。没想到换了个环境之后各种坑都有遇上了,实际上并不一帆风...
2022-01-23 23:50:29
384
原创 jvm垃圾收集器与内存分配策略
提纲判断对象的存活状态垃圾收集主要区域:Java堆和方法区。因为只有在程序运行时才能知道创建哪些对象,所以这部分的内存分配和回收都是动态的。1.引用计数算法:定义:给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1;任何时候计数器为0的对象是不可能在被使用的。 优点:实现简单,判定效率高。 缺点:很难解决对象之间相互循环引用的问...
2022-01-23 23:50:19
350
1
求交集怎么不对?????
2016-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅