自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

楼下小黑哥

微信搜索:程序通事

  • 博客(114)
  • 收藏
  • 关注

原创 手机没网了,却还能支付,这是什么原理?

现在生活已经离不开微信/支付宝电子支付,平常出去吃饭、购物只要带个手机,就可以解决一切,以致于现在已经好久没摸过真????了。有一次出去吃饭,排着队付钱,等着过程非常无聊,准备拔出手机来把荒野乱斗,却发现这个地方竟然连不上网 。看着手机明明信号满格,但是就是显示网络无连接,苹果手机用户痛,谁用谁知道。画外音:真的要 Diss 一下使用英特尔基带的 Iphone,????好差,没事网络就会闪断~说回正题,由于没有网络,而我又没带钱,所以就怕付钱的时候因为手机没网,没办法使用支付宝扣款。正想着时,已

2020-09-03 08:53:27 748

原创 轻轻一扫,立刻扣款,付款码背后的原理你不想知道吗?

前言最近由于业务需求,需要开发付款码功能,该接口底层将会聚合市面上主流钱包 APP 的付款码功能,如微信支付,支付宝支付。ps:付款码支付别称有很多,如微信支付端支付产品为付款码支付(之前的文档叫做刷卡支付),而支付宝端产品为当面付-条支付,而有些文档会成为二维码被扫支付。下文统一使用微信的定义方式,统称为付款码支付。可能有些同学对于付款码支付这个听起来很陌生,其实这个功能我们可能每天...

2020-04-16 11:26:44 4599 23

原创 定时任务莫名停止,Spring 定时任务存在 Bug??

Hello~各位读者新年好!这里楼下小黑哥给大家拜个年,祝大家蒸蒸日上烫烫烫,年年有余屯屯屯。那年那 Bug春节放假,小黑哥坐上高铁回家,突然想到一次生产问题。那是小黑哥参加工作第一年,那一年国庆假期,小黑哥提前一天请假回家办个护照。那时候刚开始负责一个生产系统,所以工作日请假,还是有点担心,就怕问题看小黑哥不在,悄然上门。哎,真实越怕什么,就来什么。高铁开到一半的时候,同事反馈系统不能...

2020-01-31 10:19:34 2071

原创 悲剧!IDEA 突然找不到类了?

Hello,大家好,我是楼下小黑哥~我们本地使用 IDEA 运行 maven 项目的时候,有时候运气不好,就会遇到某些 maven 依赖无法正常找到、导入。这就会导致 IDEA 构建项目的时候爆出一堆醒目的红色 Error。那最近小黑哥新拉取一个项目源码,本地运行项目,又碰到这种情况。按照以前的解决经验,捣鼓了一下,发现没办法解决。于是研究了一下午,终于解决这个问题????。吐槽一下,刚开始一度以为是这个项目有问题,找了一个同事,发现他的电脑是却可以正常运行这个项目。那今天这篇的文章,总结一下

2021-07-29 08:51:30 3650 2

原创 进来偷学一招,数据归档二三事儿

Hello,大家好,我是楼下小黑哥~随着业务的快速增长,业务体量变得越来越大,这个过程我们会碰到各种问题,倒逼着我们进行技术升级。那今天我们来聊下,这个过程将会碰到关于数据的问题。数据增长带来的烦恼业务快速增长,业务表数据记录不断在增加,这就会带来两个问题。第一,数据库数据最终将会保存在本地磁盘中,数据记录越多,磁盘占用空间就会越多,对应剩余可用空间就会越少。剩余空间到达一定的阈值之后,将会引发磁盘空间的持续报警,消耗宝贵的数据库生产服务器的资源。第二,业务表记录越多,表查询的效率就会相应变低

2021-07-10 18:13:26 585 1

原创 LogBack 日志等级设置无效,原因竟然是因为这个?!

Hello,大家好,我是楼下小黑哥~最近被公司派去北京出差,本以为是个轻松的差事,北京一周游~但是没想到第一天就是九点半下班, 大意了~好了,回到正题,今天来讲下最近调试项目的时候发现的一个 Logback 日志级别设置不生效的问题。问题背景事情是这样的,我们的项目是一个 SpringBoot 的工程的,其中日志框架使用的是 LogBack,配置文件如下所示:<configuration scan="true" scanPeriod=" 5 seconds" debug="true"&g

2021-05-30 11:31:45 969 4

原创 LogBack 日志等级设置无效,原因竟然是因为这个?!

Hello,大家好,我是楼下小黑哥~最近被公司派去北京出差,本以为是个轻松的差事,北京一周游~但是没想到第一天就是九点半下班, 大意了~好了,回到正题,今天来讲下最近调试项目的时候发现的一个 Logback 日志级别设置不生效的问题。问题背景事情是这样的,我们的项目是一个 SpringBoot 的工程的,其中日志框架使用的是 LogBack,配置文件如下所示:<configuration scan="true" scanPeriod=" 5 seconds" debug="true"&g

2021-05-30 11:27:52 3365 1

原创 IDEA 这么设置 Maven,再也不用担心依赖下载失败了

Hello,大家好,我是楼下小黑哥。B 站视频版本那今天这期视频我们将带来一个 IDEA 中 Maven 设置的小技巧。那这个技巧可以说非常有用,学会设置之后,再也不用担心 maven 依赖下载变慢的问题。Maven 设置当我们下载安装 Maven 之后,如果不修改 maven 中 setting 文件的。那默认情况下, Maven 远程中央仓库地址为是个国外的地址。http://repo1.maven.org/maven2那我们国内的网络,因为神秘的力量的影响,访问国外的地址就会比较慢。

2021-05-19 21:08:56 747 2

原创 这样设置,让你的 IDEA 好看到爆炸

Hello,大家好,我是楼下小黑哥。今天这篇文章是次条视频的文案,这里推荐大家直接看视频学习。IDEA 这样设置,好看到爆炸!!!#01今天这期我们来分享几个美化 IDEA 设置技巧,让你的 IDEA 与众不同。首先我们来看下 IDEA 默认设置,虽然不丑,但就是太单调,千篇一律。接着,我们来看下美化以后的界面,总体看起来是不是比默认好看了很多。好了,废话不多话,我们进入设置环节。那今天 IDEA 所有设置,小黑哥这里都总结好,大家可以看下这张思维导图。主题首先我们来设置 IDEA

2021-05-06 22:50:55 4365 5

原创 别再这么写代码了,这几个方法不香吗?

JDK8 应该是 Java 中最坚挺一个版本,这个版本新增很多特性,让我们开发起来多了很多便利。不过最近 Review 项目代码的时候发现,虽然很多项目工程已经使用了 JDK8,但是工程代码却很少使用到 JDK8 新特性、新方法。如果单从代码正确性上来说,老方式写法写当然没有什么问题,那唯一的缺点其实就是代码行数比较多,比较繁琐。那同样的需求,使用 JDK8 新方法,其实几行代码就可以搞定,这样代码就会变得非常简洁。今天就以三个比较常见的场景为例,教你几招,使用 JDK8 Map新增的方法简化代码开

2021-02-25 07:52:51 179

原创 抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题

Hello,大家好,我是楼下小黑哥~好久没写支付相关的文章了,今天继续从事老本行~上次在文章钱被扣走了,但是订单却未成功!支付掉单异常最全解决方案提到,支付过程会出现掉单、卡单的情况,这种情况对于用户来讲,体验非常差,明明自己付了钱,扣了款,但是订单却未成功。上篇文章我们简单说了下解决方案,这次小黑哥就结合生产实际碰到的情况,给出两种详细设计的方案:定时轮询补偿方案延迟消息补偿方案大家可以根据自己系统的实际情况,选择性参考。当然了,以下设计方案可能并不完美,如果各位读者还有其他解决方案,欢

2021-01-07 08:36:21 359

原创 30G 上亿数据的超大文件,如何快速导入生产环境?

Hello,大家好,我是楼下小黑哥~如果给你一个包含一亿行数据的超大文件,让你在一周之内将数据转化导入生产数据库,你会如何操作?上面的问题其实是小黑哥前段时间接到一个真实的业务需求,将一个老系统历史数据通过线下文件的方式迁移到新的生产系统。由于老板们已经敲定了新系统上线时间,所以只留给小黑哥一周的时间将历史数据导入生产系统。由于时间紧,而数据量又超大,所以小黑哥设计的过程想到一下解决办法:拆分文件多线程导入欢迎关注我的公众号:小黑十一点半,获得日常干货推送。如果您对我的专题内容感兴趣,也

2020-12-24 08:31:39 466

原创 IDEA 2020.3 更新了,机器学习都整上了

Hello,大家好,我是楼下小黑哥~上周 Java 开发申请神器 IDEA 2020.3 新版正式发布:小黑哥第一时间就在开发机上更新了新版本,并且完整体验了两周了。下面介绍一下这个版本的主要功能:1、全新的欢迎窗口,更加人性化IDEA 欢迎窗口全新升级,首页增加三个选项卡,一个用于设置 IDE 界面的 Customize,一个用于插件安装的 Plugins,一个于访问帮助和学习资源的 Learn IntelliJ IDEA,另外包括之前用于管理项目的 Projects。这是特别提一下 Le

2020-12-17 08:06:07 1015

原创 数据库读写分离这个坑,你应该踩过吧?

Hello,大家好!我是楼下小黑哥,我又来了~今天分享一下刚入职公司第一次发布项目遇到的一个问题,一个数据库读写分离的坑。前言事情是这样的,刚入职的时候接到了这样的一个业务需求:每个支付通道支付失败的时候都会返回特定的错误码,业务内部需要将通道特定的错误码转义成内部的错误码,这样对外就可以统一返回我们自己的错误码。这个需求其实不难,当时设计的系统架构如下:新增规则的流程简单分为三步:业务人员通过管理后台新增映射规则数据库新增、修改这条映射规则删除缓存这里之所以增加缓存,是因为这个场

2020-12-09 08:38:23 472

原创 写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理

Hello,各位小伙伴们,早上好~上周文章年轻人不讲武德,竟然重构出这么优雅后台 API 接口我们使用 @ControllerAdvice与 ResponseBodyAdvice 重构后端的 API 接口,降低了复杂度,减少了重复代码,后续接口开发非常简洁优雅。知其然而知其所以然,今天这篇文章来聊聊这个注解背后的原理,让我们彻底掌握这个注解,避免后续踩坑。另外,有个小伙伴看完上篇文章,觉得这个注解的跟 Spring Interceptor 功能很类似,再加上之前还学习了 Servlet 体系 Fil

2020-12-02 08:56:41 168

原创 年轻人不讲武德,竟然重构出这么优雅后台 API 接口

Hello,早上好,我是楼下小黑哥~最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐的重复代码,使其开发更加优雅。展示具体重构代码之前,我们先来看下原先对外 API 接口是如何开发的。这个 API 接口主要是用来与我们 APP 交互,这个过程我们统一定义一个交互协议,APP 端与后台 API 接口统一都使用 JSON 格式。另外后台 API 接口对 APP 返回时,统一一些错误码,APP

2020-11-27 09:02:12 129

原创 贞炸了!上线之后,消息收不到了!

hello,各位小伙伴们,上午好~昨晚生产系统机房切换,又度过了一个不眠之夜。趁着这段无聊时间,分享一下前一段时间 RocketMQ 踩坑经历欢迎关注我的公众号:程序通事,获得日常干货推送。如果您对我的专题内容感兴趣,也可以关注我的博客:studyidea.cn前言事情是这样的,前端时间我们有个新业务上线,这个业务需要监听支付成功的 mq 消息,然后向绑定的音箱推送消息。这样用户在支付完成之后,商家端就就可以收到收款播报。起初我们在测试环境的测试的时候,一切流程非常顺利,没有任何问题。但是

2020-11-24 08:44:44 173

原创 一笔订单,但是误付了两笔钱!这种重复付款异常到底该如何解决?

封面送给我狗哥~Hello,大家好,我是楼下小黑哥~今天的文章我们接着上次的话题,继续聊聊支付系统异常解决办法。在上篇文章中「支付掉单异常解决方案」,我们主要提到的是支付过程中掉单的场景,用户明明付款成功,银行卡都扣款了,但是订单却还显示待付款。而在今天的文章中,我们将聊到重复付款的异常,即同一笔订单,扣了用户两笔钱。另外我们还将会提到另外一种异常,用户扣款成功,但是订单却支付失败的场景。以上两种异常对于被扣款的用户来讲,使用体验极差,自己多付了钱,订单却还不成功。所以如果不及时处理这两类异常.

2020-10-27 08:40:53 1060 2

原创 钱被扣走了,但是订单却未成功!支付掉单异常最全解决方案

前言好了,回归到今天的主题,今天分享一下支付系统中异常一些处理方式。其实这些处理方式并不只是局限于支付系统,也可以适用于其他系统,大家可以借鉴,应用到自己系统中,提高自己系统的健壮性。异常是系统运行不可避免会发生的问题,如果一切都正常,我们的系统设计将会相当简单。但是可惜没有人能做到这一点,所以为了处理异常可能导致的问题,我们不得不需要加上很多额外的设计,用来应对这些异常。可以说系统设计中,异常处理需要我们着重思考,将会占据我们大部分的精力。下面我们先来看下支付系统中最常见的异常:掉单欢迎关

2020-10-12 08:44:31 1393

原创 收款神器!解读聚合收款码背后的原理

Hello,我是楼下小黑哥!今天跟大家分享一下聚合收款码的支付原理,这也是我这大半年来一直在做的项目。微信/支付宝收款码大家应该不会陌生,线下小微商户收款大多使用这个,就比如下图。这种收款方式很方便,微信、支付宝后台申请开通,然后还可以免费申请相关物料。不过这种方式用户体验其实不是很好,之前有好几次拿出支付宝,却扫了微信支付码。另外,这种个人的收款码通常还有单日收款的上限,比如支付宝单日上限 500元。有了需求,自然会有聪明人人想到解决方案,于是有了聚合收款码产品解决方案,如下图。一个收款

2020-09-28 08:54:00 6881

原创 Redis 发布订阅,小功能大用处,真没那么废材!

今天小黑哥来跟大家介绍一下 Redis 发布/订阅功能。也许有的小伙伴对这个功能比较陌生,不太清楚这个功能是干什么的,没关系小黑哥先来举个例子。假设我们有这么一个业务场景,在网站下单支付以后,需要通知库存服务进行发货处理。上面业务实现不难,我们只要让库存服务提供给相关的给口,下单支付之后只要调用库存服务即可。后面如果又有新的业务,比如说积分服务,他需要获取下单支付的结果,然后增加用户的积分。这个实现也不难,让积分服务同样提供一个接口,下单支付之后只要调用库存服务即可。如果就两个业务需要获.

2020-09-23 07:22:37 1647 2

原创 血的教训!千万别在生产使用这些 redis 指令

哎,最近小黑哥又双叒叕犯事了。事情是这样的,前一段时间小黑哥公司生产交易偶发报错,一番排查下来最终原因是因为 Redis 命令执行超时。可是令人不解的是,生产交易仅仅使用 Redis set 这个简单命令,这个命令讲道理是不可能会执行这么慢。那到底是什么导致这个问题那?为了找出这个问题,我们查看分析了一下 Redis 最近的慢日志,最终发现耗时比较多命令为 keys XX*看到这个命令操作的键的前缀,小黑哥才发现这是自己负责的应用。可是小黑哥排查一下,虽然自己的代码并没有主动去使用 keys命令,

2020-09-16 08:56:19 393

原创 阿里面试官:HashMap 熟悉吧?好的,那就来聊聊 Redis 字典吧!

最近,小黑哥的一个朋友出去面试,回来跟小黑哥抱怨,面试官不按套路出牌,直接打乱了他的节奏。事情是这样的,前面面试问了几个 Java 的相关问题,我朋友回答还不错,接下来面试官就问了一句:看来 Java 基础还不错,Java HashMap 你熟悉吧?我朋友回答。工作经常用,有看过源码。我朋友本来想着,你随便来吧,这个问题之前已经准备好了,随便问吧。谁知道,面试官下面一句:那好的,我们来聊聊 Redis 字典吧。直接将他整蒙逼。小黑哥的朋友由于没怎么研究过 Redis 字典,所以这题就直接回答

2020-09-08 21:54:39 299

原创 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!

某日中午,午睡正香的时候,接到系统的报警电话,提示生产某物理机异常宕机了,目前该物理机已恢复,需要重启上面部署的应用。这时瞬间没有了睡意,登上堡垒机,快速重启了应用,系统恢复正常。本想着继续午睡,但是已经没有了睡意。旁边的小师弟(我们叫他小灰吧)刚才在我们边上,目睹这一切,然后向我请教个问题。小灰:黑哥,刚才应用突然宕机,会不会对交易有影响啊?小黑:影响确实会有,不过也不大,就当时应用正在运行那些那些交易会受到影响。小灰:不对啊,我们现在系统架构是下面这样。我们这次宕机的是业务逻辑层,那

2020-08-28 08:35:15 1429 1

原创 实战开发,使用 Spring Session 与 Spring security 完成网站登录改造!!

上次小黑在文章中介绍了四种分布式一致性 Session 的实现方式,在这四种中最常用的就是后端集中存储方案,这样即使 web 应用重启或者扩容,Session 都没有丢失的风险。今天我们就使用这种方式对 Session 存储方式进行改造,将其统一存储到 Redis 中。实现方案我们先来想一下,如果我们不依靠任何框架,自己如何实现后端 Session 集中存储。这里我们假设我们的网站除了某些页面,比如首页可以直接访问以外,其他任何页面都需要登录之后才能访问。如果需要实现这个需求,这就需要我们对每个

2020-08-19 07:41:54 812

原创 我还在生产玩 JDK7,JDK 15 却要来了!|新特性尝鲜

自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15。恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 JDK 引入的新功能。这几天升级了 IDEA,顺便体验了一下 JDK15 的新特性。虽然我知道你们可能跟我一样JDK8 都还没用熟,但是无妨,看看新版本 JDK 来酸一下。Text Blocks 最终定板之前版本的 JDK,如果我们需要插入 HTML,XML,SQL 或 JSON 片段,非常麻烦,需.

2020-08-05 07:41:26 2039 6

原创 艺术鬼才!Unicode 字符还能这么玩?

上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞。还没来得及了解咋回事来着,这个直升飞机就????到的微博热搜。后面越来越多人开来他们的直升飞机,盘旋在朋友圈上方。于是很多朋友开来他们的坦克,专打直升飞机,一轰一个准。好了,说回正题!程序员朋友应该都很熟悉 Unicode (万国码),它几乎包含世界上所有符号,比如组成直升飞机这几个特殊符号对应的 Unicode 码分别为:ps:推荐一个网站,可以根据符号搜对应的 Unicode 码:https://un

2020-07-27 08:38:23 616

原创 一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

前言公司有一个 Web 管理系统,使用 Tomcat 进行部署。由于是后台管理系统,所有的网页都需要登录授权之后才能进行相应的操作。起初这个系统的用的人也不多,为了节省资源,这个系统仅仅只是单机部署。后来随着用的人越来越多,单机已经有点扛不住了,于是我决定再部署了一台机器。这时后端系统有两台服务,于是我们使用 Nginx 作为反向代理,整体架构图如下:这个架构图想必大家应该比较熟悉,现在主流的 Web 系统应该都是这么部署。经过一些调试之后,在一个夜深人静的晚上,将这套系统部署到了生产。本以为没

2020-07-17 09:36:41 1027 4

原创 6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

每周趣图产品经理设计体验/用户实际体验本周就不写技术分析文章了,分享几个珍藏已久的 IDEA 的「骚技巧」,助你快速完成代码。还等什么?赶紧上车吧…前进/后退我们使用浏览器的过程,可以点击后退查看之前的浏览记录。在 IDEA 也有同样的功能,当我们编辑代码时,点击查看了调用类实现逻辑,然后可以使用后退快捷键,快速回到刚才待编辑的代码处。有后退,当然也有前进啦~前进/后退快捷键如下:Windows:Ctrl + Alt + Left/Right(方向键)Mac: ⌘ + ⌥ + ← /

2020-07-14 07:25:53 757

原创 Dubbo 高危漏洞!原来都是反序列化惹得祸

前言这周收到外部合作同事推送的一篇文章,【漏洞通告】Apache Dubbo Provider默认反序列化远程代码执行漏洞(CVE-2020-1948)通告。按照文章披露的漏洞影响范围,可以说是当前所有的 Dubbo 的版本都有这个问题。无独有偶,这周在 Github 自己的仓库上推送几行改动,不一会就收到 Github 安全提示,警告当前项目存在安全漏洞CVE-2018-10237。可以看到这两个漏洞都是利用反序列化进行执行恶意代码,可能很多同学跟我当初一样,看到这个一脸懵逼。好端端的反序列化

2020-07-09 08:13:13 1137 1

原创 没想到,这么简单的线程池用法,深藏这么多坑!

又又又踩坑了生产有个对账系统,每天需要从渠道端下载对账文件,然后开始日终对账。这个系统已经运行了很久,前两天突然收到短信预警,没有获取渠道端对账文件。ps:对账系统详细实现方式:对账系统设计与实现本以为又是渠道端搞事情,上去一排查才发现,所有下载任务都被阻塞了。再进一步排查源码,才发现自己一直用错了线程池某个方法。由于线程创建比较昂贵,正式项目中我们都会使用线程池执行异步任务。线程池,使用池化技术保存线程对象,使用的时候直接取出来,用完归还以便使用。虽然线程池的使用非常方法非常简单,但是越简单

2020-06-29 07:34:31 965

原创 谁再悄咪咪的吃掉异常吗,我上去就是一JIO

又到周末了,周更选手申请出站~这次分享一下上个月碰到的离奇的问题。一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上。这个美好的晚上,本想着开两把 LOL 无限火力,在召唤师峡谷来个五杀的~哎,就这样没了啊!我知道,你们一定能理解这种五杀被抢的感觉~下次,真的,谁再让我看到悄咪咪的吃掉异常,我真的要上去一 Jio 了!好了,本文可不是水文,看完本篇文章,你可以学到以下知识点:Arthas 排查技巧啥是 NoClassDefFoundErrorDubbo

2020-06-23 07:29:01 850

原创 老大吩咐的可重入分布式锁,终于完美的实现了~

重做永远比改造简单最近在做一个项目,将一个其他公司的实现系统(下文称作旧系统),完整的整合到自己公司的系统(下文称作新系统)中,这其中需要将对方实现的功能完整在自己系统也实现一遍。旧系统还有一批存量商户,为了不影响存量商户的体验,新系统提供的对外接口,还必须得跟以前一致。最后系统完整切换之后,功能只运行在新系统中,这就要求旧系统的数据还需要完整的迁移到新系统中。当然这些在做这个项目之前就有预期,想过这个过程很难,但是没想到有那么难。原本感觉排期大半年,时间还是挺宽裕,现在感觉就是大坑,还不得不在坑里一

2020-06-15 07:13:51 1440

原创 分布式锁没那么难,手把手教你实现 Redis 分布锁!|保姆级教程

书接上文上篇文章「MySQL 可重复读,差点就让我背上了一个 P0 事故!」发布之后,收到很多小伙伴们的留言,从中又学习到很多,总结一下。上篇文章可能举得例子有点不恰当,导致有些小伙伴没看懂为什么余额会变负。这次我们举得实际一点,还是上篇文章 account 表,假设 id=1,balance=1000,不过这次我们扣款 1000,两个事务的时序图如下:这次使用两个命令窗口真实执行一把:注意事务 2,③处查询到 id=1,balance=1000,但是实际上由于此时事务 1 已经提交,最

2020-06-08 07:50:13 509

原创 我去,这么简单的条件表达式竟然也有这么多坑

最近,小黑哥在一个业务改造中,使用三目运算符重构了业务代码,没想到测试的时候竟然发生 NPE 的问题。重构代码非常简单,代码如下:// 方法返回参数类型为 Integer// private Integer code;SimpleObj simpleObj = new SimpleObj();// 其他业务逻辑if (simpleObj == null) { return -1;} else { return simpleObj.getCode();}这段 if 判断

2020-06-05 08:13:11 381

原创 MySQL 可重复读,差点就让我背上了一个 P0 事故!

小黑黑的碎碎念哎,最近有点忙,备考复习不利,明天还要搬家,好难啊!!本想着这周鸽了,但是想想还是不行,爬起来,更新一下,周更可不能断。偷懒一下,修改一下之前的一篇历史文章,重新发布一下。先赞后看,微信搜索「程序通事」,关注就完事了P0 事故:余额多扣!这是一个真实的生产事件,事件起因如下:现有一个交易系统,每次产生交易都会更新相应账户的余额,出账扣减余额,入账增加余额。为了保证资金安全,余额发生扣减时,需要比较现有余额与扣减金额大小,若扣减金额大于现有余额,扣减余额不足,扣减失败。账户

2020-06-01 07:29:56 2537 5

原创 用了这么多年的 Java 泛型,你对它到底有多了解?

作为一个 Java 程序员,日常编程早就离不开泛型。泛型自从 JDK1.5 引进之后,真的非常提高生产力。一个简单的泛型 T,寥寥几行代码, 就可以让我们在使用过程中动态替换成任何想要的类型,再也不用实现繁琐的类型转换方法。虽然我们每天都在用,但是还有很多同学可能并不了解其中的实现原理。今天这篇我们从以下几点聊聊 Java 泛型:Java 泛型实现方式类型擦除带来的缺陷Java 泛型发展史点赞再看,养成习惯,微信搜索『程序通事』。点击查看更多相关文章Java 泛型实现方式Java

2020-05-22 07:29:40 556

原创 解读银行卡支付背后的原理

上次写了一篇『轻轻一扫,立刻扣款,付款码背后的原理你不想知道吗』 ,本以为这类文章没什么会看,没想到发布之后,阅读量数据还不错。那么今天小黑哥再来跟大家聊聊支付。虽然现在我们主流的支付方式是使用支付宝/微信支付,但是当我们余额不足,或者选择从银行卡扣款时,将就会使用到银行卡支付。所以今天我们就来来讲讲银行卡支付的相关原理,科普一下银行卡支付整个流程。银行卡支付可以将其分为线上支付与线下支付。其中线下支付分类就比较简单,就是我们平常在商城购物时,POS 机刷卡支付。而线上支付分类就比较多了,根据银行卡

2020-05-19 07:16:17 1248 1

原创 求求你了,不要再自己实现这些逻辑了,开源工具类不香吗?

最近公司来了一批实习生,小黑哥负责带一个。这位小师弟说实话,基本功很扎实,做事也非常靠谱,深得小黑哥真传。不过最近给其 Review 代码的时候,小黑哥发现小师弟有些代码逻辑有些繁琐,有些代码小黑哥看来可以用一些开源工具类实现,不需要自己重复实现。不过这也是正常的,小黑哥刚入行的时候写的代码也是这样,这几年慢慢接触了一些开源工具类,逐渐积累。现在写代码才会直接用工具类替换自己实现的这些繁琐的逻辑。于是小黑哥给小师弟分享了几个自己常用的开源工具类,小师弟学完直呼:『666』。这里小黑哥抛砖引玉,分

2020-05-12 10:12:17 3788 16

原创 编程坑太多,Map 集合怎么也有这么多坑?一不小心又踩了好几个!

编程坑太多系列~

2020-05-07 07:49:48 2620 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除