- 博客(20)
- 收藏
- 关注
原创 RESTful API设计与后端开发全流程详解
一致性:保持整个API的设计风格一致简洁性:避免过度设计,保持接口简单易懂可预测性:遵循惯例,让使用者能够预测接口行为兼容性:考虑版本演进,保证向后兼容安全性:实施适当的认证、授权和防护机制。
2025-09-29 22:12:41
1030
原创 详解MySQL中的索引、事务和锁
若通过非唯一索引更新,或查询条件无法使用索引导致全表扫描,则可能退化为间隙锁或表锁,严重影响并发。即使数据库突然崩溃,重启后也能通过Redo Log重做已提交的事务,确保数据不丢失。:是并发控制的乐观策略,通过维护数据的多个版本(通过Undo Log链实现)来处理读写冲突,实现。:非叶子节点仅存储索引键,使得一个页(Page)能容纳更多索引项,查询时I/O次数更少。但开销大,可能死锁。唯一且非空,InnoDB的聚簇索引,数据文件本身即索引。:启用死锁检测,发现死锁后会自动回滚代价较小的事务。
2025-09-28 22:02:17
797
原创 MyBatis技术详解:从入门到高效开发
MyBatis作为一款优秀的持久层框架,在SQL控制灵活性和性能优化方面具有明显优势。通过本文的详细介绍,读者可以掌握MyBatis的核心概念、配置方法、高级特性及最佳实践。在实际项目开发中,应根据具体需求和技术团队特点,合理选择和使用MyBatis的各种功能,才能充分发挥其价值。
2025-09-28 21:58:05
1138
原创 Java并发编程与多线程详解
Java并发编程是充分利用多核CPU、构建高性能应用的核心技术。从基础的Thread和Runnable,到保证线程安全的和Lock,再到强大的JUC工具包(线程池、等),Java提供了丰富的并发编程组件。核心思想:在保证线程安全(数据正确性)的前提下,尽可能提高程序的性能和响应能力。
2025-09-24 22:39:35
1345
原创 深入理解布隆过滤器
当要添加一个元素时,该元素会依次通过 k 个哈希函数,得到 k 个哈希值。:这个数学公式描述了布隆过滤器的位数组大小(m)、哈希函数个数(k)、预计元素数量(n)和误判率(p)之间的关系。:传统布隆过滤器不支持删除已添加的元素,因为置零操作可能会影响其他元素的判断。在决定是否使用它时,关键是判断你的业务场景是否能接受那一点小小的误判概率,以换取巨大的性能和空间收益。:这是你预计会添加到过滤器中的元素个数。,像 Guava 这样的库会在你指定 n 和 p 后自动计算出最优的 m 和 k。
2025-09-23 23:49:46
1072
原创 Java过滤器全局拦截引发500错误的排查与修复实录
这次事故让我深刻体会到过滤器配置的重要性和全局拦截的风险。在后端应用中,过滤器是强大的工具,但需要谨慎使用。关键要点包括:始终为安全过滤器设置排除规则,放行登录、健康检查等必要接口实现完善的异常处理,避免直接抛出未处理异常导致500错误使用配置化方式管理排除列表,提高灵活性记录详细日志,便于问题排查编写充分测试,覆盖各种请求场景通过这次经历,我更加理解了Java后端应用中过滤器的正确使用方式,希望我的经验能帮助你避免类似的坑。
2025-09-22 22:43:41
1330
原创 Redis 缓存击穿、缓存穿透、缓存雪崩等高并发场景下的问题及解决方案
缓存穿透、击穿和雪崩是高并发系统必须面对的挑战。理解其根本原因至关重要:穿透源于数据不存在,需在前端拦截。击穿源于单点热点失效,需控制重建并发。雪崩源于大规模失效或服务宕机,需分散风险与保障可用。通过布隆过滤器、互斥锁、差异化过期、多级缓存、集群高可用以及熔断降级等技术的合理运用,可以构建起一套健壮的缓存防护体系,有效保障系统的高并发能力和稳定性。
2025-09-21 19:29:27
1104
原创 Java vs C++:深入探索两大编程语言的核心差异
Java和C++都是强大的编程语言,但它们服务于不同的需求和哲学。C++提供无与伦比的控制力和性能,但需要更多经验和注意来避免常见陷阱。Java强调安全性、简单性和可移植性,通过虚拟机抽象和自动内存管理简化开发。
2025-09-20 21:47:35
1136
原创 Oracle JDK 与 OpenJDK:深入解析与正确选择指南
OpenJDK和Oracle JDK的核心代码几乎一致,本质上是同一枚硬币的两面。它们的核心区别在于许可证模式、支持策略和商业模式。对于绝大多数开发者、团队和项目,选择基于OpenJD的免费发行版(如Eclipse Temurin、Amazon Corretto)是更安全、更经济且足够稳定的选择。这也是目前业内的主流趋势。而对于那些需要Oracle提供的企业级商业支持、有严格合规要求的大型企业,付费的Oracle JDK订阅可能仍是一个值得考虑的选择。最终建议。
2025-09-20 21:44:13
1214
原创 Java编译模式揭秘:AOT与JIT,为何鱼与熊掌不可兼得?
除此之外,AOT编译无法支持Java的一些动态特性,如反射,动态代理,动态加载,JNI(Java本地接口)等。举例,cglib动态代理使用的是ASM技术,而这种技术大致原理是运行时直接在内存中生成并加载修改后的字节码文件也就是.class文件,如果全部使用AOT提前编译,也就不能使用ASM技术了。AOT避免了JIT预热等各方面的开销,可以提高Java程序的启动速度,避免预热时间长,并且还能减少内存占用和增强Java程序的安全性,AOT编译后的代码不容易被反编译和修改,特别适合云原生场景。
2025-09-19 17:06:32
548
原创 深入浅出:Java字节码揭秘——跨平台背后的魔法
JVM可以理解的代码就叫做字节码,也就是.class文件,它不面向任何特定的处理器,只面向虚拟机。Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以,Java程序运行时相对来说还是高效的。不过和C,C++相比还是有一定的差距,而且,由于字节码并不针对一种特动的机器,因此,Java程序无需重新编译便可在多种不同操作系统的计算机上运行。
2025-09-19 17:05:36
258
原创 深入浅出:解密JVM、JDK与JRE的核心奥秘与演进
也就是说,可以用jlink根据自己的需求,创建一个更小的runtime,而不是不管上面应用,都是同样的JRE。不过,从JDK9开始,就不需要区分JDK和JRE的关系了,取而代之的是模块系统(JDK被重新组织成94个模块)+jlink工具(随Java9一起发布的新命令行工具,用于生成自定义Java运行时映像,改映像仅包含给定应用程序所需的模块)。JRE是运行时已编译Java程序所需的环境,主要包含Java虚拟机和Java基础类库(一组标准的类库,提供常用的功能和API,如io操作,网络通信,数据结构等)。
2025-09-19 17:03:31
340
原创 Java三大平台:SE、EE、ME深度解析——从桌面到企业级再到嵌入式开发
JavaEE:Java平台企业版,建立在Java SE基础上,半酣了支持企业级应用开发和部署的标准和规范(比如servlet,jsp,ejb,jdbc,jpa,jta,javamail,jms)。简单来说,Java SE是Java EE的基础版本,Java EE是Java SE的高级版本。JavaSE可以用于构件桌面应用程序或很简单的服务器应用程序。还有一个Java ME,Java ME是Java的微信版本,主要用于开发嵌入式电子设备的应用程序,例如手机,冰箱,空调等。无需重点关注这个,现在已经用不上了。
2025-09-19 17:02:51
205
原创 Java为什么如此强大?深入剖析Java的十大核心特性
支持多线程(C++语言没有内置的多线程机制,必须调用操作系统的多线程功能来进行多线程程序设计,而Java语言提供了多线程支持)安全性(Java语言本身的设计就提供了多重安全防护机制如访问权限修饰符、限制程序直接访问操作系统资源)高效性(通过just in time也就是JIT编译器等技术的优化,Java语言的运行效率还是很好的)平台无关性(Java虚拟机实现平台无关性)可靠性(具备异常处理和自动内存管理机制)面向对象(封装、继承、多态)支持网络编程并且很方便。简单易学(语法简单)
2025-09-19 17:02:17
346
原创 Spring底层原理——彻底理解 IOC 和 AOP
AOP(Aspect Oriented Programming,面向切面编程)是一种编程思想,它允许我们把与业务逻辑无关但到处都会用到的功能(比如日志、事务、权限检查)抽取出来,集中管理。类比: 写一本书:业务逻辑 = 正文内容。AOP = 页眉、页脚、页码,这些和内容没关系,但每一页都要有。AOP 就是帮你在“特定的点”自动加这些东西,而不用你在每一页都手写。IoC:一种思想,把对象的控制权交给容器。DI:IoC 的实现方式,通过注入把依赖交给你。AOP。
2025-09-18 21:13:36
1519
原创 GitCode(.net) /GitHub / Gitee / SSH 密钥配置指南
可以同时添加到多个平台(GitHub、Gitee、GitCode)。如果你选择为每个平台生成,就必须在中指定好对应关系。每个平台只认你在账户后台添加的公钥,私钥保存在本地。
2025-09-17 15:08:35
922
原创 Java进阶之——什么是反射
反射允许Java在运行时检查和操作类的方法和字段。通过反射,可以动态获取类的信息(字段、方法、构造器),并且在运行的时候调用方法或者访问字段。
2025-09-16 21:20:30
532
原创 Java入门之Java数据类型
选择类型:根据数据范围和精度要求选择合适的基本类型,例如,明确不会超过 127 的数字就用byte,而不是默认的int,以节省内存。自动装箱与拆箱:从 Java 5 开始,引入了自动装箱和拆箱机制,使得基本类型和对应的包装类(如intInteger)可以自动转换,方便了集合的使用(集合不能存储基本类型)。字符串的特殊性String是引用类型,但由于其不可变性,在使用上有时会让人感觉像基本类型。内存管理:理解基本类型和引用类型在内存中的区别,对于编写高效、正确的程序至关重要。
2025-09-15 20:59:20
858
原创 Java入门之理解Java语言
Java是一门面向对象的编程语言,吸收了c++语言中大量的优点,抛弃了c++中的垃圾回收和指针。Java也是一门平台无关的语言,一次编译,处处运行。字节码就Java程序编译后产生的.class文件。Java程序从源代码到运行经过以下三步编译:将.Java编译为JVM可识别的.class字节码文件。解释:JVM执行字节码文件,将字节码翻译成操作系统可识别的机器码。执行:操作系统执行二进制的机器码。采用字节码的好处:平台无关性 / 可移植性字节码不依赖于任何特定的硬件或操作系统。
2025-09-15 20:46:16
492
原创 Java集合之手写HashMap
if ((node.key.hashCode() == key.hashCode()) // 如果找到相同的键。if ((node.key.hashCode() == key.hashCode()) // 如果找到键。
2025-09-15 16:58:11
1064
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅