Java 设计模式——观察者模式

一、前言好久没更新设计模式系列了,这周闲来无事,就水一把,介绍个简单的——观察者模式。 所谓观察者模式,本质是就是发布与订阅,在日常生活中发布/订阅的例子有很多,比如大家微信里面的公众号,你可以订阅微信公众号,公众号发布文章后,微信会将文章推送给你。。。 二、发布 / 订阅在上面提到的公众号的例子,就是一个观察者模式。 你作为一名普通用户就是观察者,你可以关注或者取关公众号,当公众号发布消息时,你...

JTA 深度历险 - 原理与实现

一、利用 JTA 处理事务1.1 什么是事务处理事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity )、一致性 ( Consistency )、隔离性 ( Isolation ) 和持久性 ( Durabilily )。 关于事务最经典的示例莫过于信用卡转账:将用户 A 账户中的 500 元人民币转移到用户 B 的账户中,其操作流程如下: 将 A 账户中的金额...

详解 Spring 声明式事务

一、引言Spring的事务机制包括声明式事务和编程式事务。 编程式事务管理:Spring推荐使用 TransactionTemplate,实际开发中使用声明式事务较多。 声明式事务管理:将我们从复杂的事务处理中解脱出来,获取连接,关闭连接、事务提交、回滚、异常处理等这些操作都不用我们处理了,Spring都会帮我们处理。 声明式事务管理使用了 AOP 实现的,本质就是在目标方法执行前后进行拦截。...

SpringBoot 远程调试

在配合 QA 进行代码测试,以及处理线上 BUG 时,代码往往已经被部署于服务器端,因此服务器端程序支持远程调试功能就尤为重要。 Java 原生支持调试功能,由于实际开发中使用 SpringBoot,因此本文探讨基于 jar 包的调试,远程调试的 IDE 为 IDEA。 注:war 包调试、Eclipse 远程调试功能请另行了解,这不在本文的探讨范围内。 一、调试命令最为常见的远程调试命令,也是我...

理解 BigDecimal 的 RoundingMode

在金融等对数据精度计算要求较高的领域,传统 double 运算无法满足要求, BigDecimal 类应运而生。实际使用中,RoundingMode 这个枚举类控制着小数的舍位原则,本文对该枚举类进行介绍。 一、RoundingMode.DOWN等价枚举: BigDecimal.ROUND_DOWN 舍位原则: 粗暴截断舍弃位,不考虑任何进位舍位操作 例: Scale = 2 1234Origin...

探讨 Spring MVC 能否注入 Request 和 Response

一、引言当我们第一次接触到 Java Web 开发,从最原生的 Servlet 方法开始,我们就知道在 doGet() 或者 doPost() 方法有两个形参,分别是 HttpServletRequest 和 HttpServletResponse,这两个参数代表了 web 容器为我们封装的 HTTP 请求和 HTTP 响应。 当 Java Web 进化到 SpringMVC 中,一系列的杂活脏活...

从 Git 仓库的 Commit 历史中移除敏感文件

在很多情况,我们由于疏忽会将一些敏感信息误传到 Git 仓库上面去。 尽管我们可以使用 git rm 将包含敏感信息文件删除掉,然后重新提交上传,文件就不会在仓库文件列表显示。 但是这并不能完全将敏感信息文件从仓库中完全删除, commit history 仍然会有敏感信息的文件的残留,我们仍然可以从仓库中的 commit history 中访问到文件。 如果想要将敏感信息文件完全删除。不仅需要将...

Java Switch 是如何支持 String 的,为什么不支持 long

我们知道 Java Switch 支持byte、short、int 类型,在 JDK 1.5 时,支持了枚举类型,在 JDK 1.7 时,又支持了 String类型。那么它为什么就不能支持 long 类型呢,明明它跟 byte、short、int 一样都是数值型,它又是咋支持 String 类型的呢? 一、结论不卖关子,先说结论: switch 底层是使用 int 型 来进行判断的,即使是枚举、S...

String hashCode 方法为什么选择数字31作为乘子

一、背景某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一个奇怪的数字,也就是本文的主角31。在接下来章节里,请大家带着好奇心和我揭开数字 31 的用途之谜。 二、选择数字31的原因在详细说明 String hashCode 方法选择数字31的作为乘子的原因之前,我们先来看看 String...
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×