自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

划不出的界限

公众号《andyqian》

  • 博客(88)
  • 资源 (2)
  • 收藏
  • 关注

原创 MySQL InnoDB 锁事

本文首发于个人微信公众号《andyqian》, 期待你的关注 ~前言在数据库中,通常通过锁来解决并发下数据一致性问题,从而避免数据产生脏乱。在保证数据一致性问题的前提下,通过锁范围又分为不同种类,在 MySQL 中,存储引擎就支持不同类型锁。如: MyISAM 只支持表锁。InnoDB 支持:行锁,表锁,Gap 锁等等。今天就来聊聊 MySQL InnoDB 的 " 锁事" 。...

2020-03-23 13:03:13 213

原创 Java 基本功 之 AQS

本文首发于个人微信公众号《andyqian》,期待与你相遇 ~前言在之前的文章《Java 基本功 之 CAS》中介绍了CAS的概念以及原理,今天来介绍 Java concurrent.locks 包 中的基础组件AQS - AbstractQueuedSynchronizer类。看到这里,也许你会感到些许陌生,心想:这家伙是干啥的?怎么从来没见过?能用来干什么?别急,下面一一解...

2019-12-08 22:43:49 227

原创 软件设计实践

本文首发于个人微信公众号《andyqian》, 期待你的关注!前言拿破仑曾经说过:“不想当将军的士兵不是好士兵”。而在软件行业中,几乎每个程序员心里都有一个成长为架构师的梦想。程序员与架构师之间,不仅仅是角色的转变,更多的是知识的积累,以及架构,设计能力的转变。最近有幸参与了一些设计工作,系统算不上复杂,庞大。但在这过程中将自己的不足暴露的淋漓尽致,如同裸奔,有着凉飕飕的感觉。记录...

2019-12-01 20:39:23 662

原创 JDK SPI 源码解读

本文首发于个人微信公众号《andyqian》, 期待你的关注!前言在之前的文章《Seata 之 config 模块源码解读》中提到了Microkernel + Plugin 的架构模式。如果对它还不熟悉的话,没关系。我们可以简单的将其理解为一个接口的多个实现,与设计模式中的策略模式极为相似。其中调用组装这些 Plugin 的地方称之为 Microkernel,而接口的实现则可以理解为 ...

2019-09-19 09:48:54 192

原创 Java 代码中几类典型的 "坏味道"

本文首发于个人微信公众号《andyqian》, 关注即可获得一线互联网内推!前言最近一段时间进行了部分代码的code review。其中有 review 的,也有被review的。在这过程中发现了许多问题,而其中就包含许多本不该发生的。同样的,这些不该发生的问题如果携带上线,随之而来的则是一个个的生产事故。对于金融系统来说,会直接造成资产损失,而对于医疗软件而言,甚至涉及生命安全。经过...

2019-09-12 14:13:04 648

原创 Seata 之 config 模块源码解读

本文首发于个人微信公众号《andyqian》,关注即可获取一线互联网内推机会!前言我们在编写项目过程中,配置文件几乎是标配,从最简单且最常用的 application.properties 文件,到现在集群环境下的配置中心。也算是互联网技术发展的一个缩影(单体应用到分布式应用)。在这方面,目前有非常多的开源实现,如:zookpeer,nacos,apollo 等等。像是命题作文下交付的...

2019-09-07 16:24:09 1248 1

原创 接口设计的五点建议!

本文首发于个人微信公众号《andyqian》, 期待你的关注!前言接口是目前:前后端交互(Rest),系统交互(RPC)最普遍的一种方式。一个好的接口,应该清晰易懂,职责明确,易于维护。反之,则会造成很多困扰。特别是Open API,谁做谁知道。基于这样的前提以及自己之前踩过的坑,就成了这篇文章的由来。编写文档文档与程序员之间有着一种非常奇妙的关系。一句话概括就是:”写之,痛之...

2019-09-03 23:06:39 1010

原创 Seata 分布式事务

本文首发于个人微信公众号《andyqian》, 期待你的关注~前言上一篇文章《Seata 之 rm-datasource 源码解读》发出后。有很多同学对 Seata 是什么还不够了解,今天我们就起来认识一下它。简介Seata 是一款由阿里巴巴与蚂蚁金服共同开源的分布式事务框架。由最初的Fescar(Fast & Easy Commit And Rollback)框架更名...

2019-08-16 14:02:30 1480

原创 Seata 之 rm-datasource 源码解读

本文首发于个人微信公众号《andyqian》, 期待你的关注!前言这篇文章主要讲述的是分布式事务 seata 框架的 rm - datasource 模块。文章会按照以下几点进行讲解:简介 结构 源码解析 涉及的设计模式 后续的扩展简介我们知道seata框架本身是事务的协调者,协调多个本地事务“符合事务的特性”,从而构成一个”分布式的全局事务”。这也是seata框架的...

2019-08-09 21:51:07 1577

原创 Dubbo 线程池源码解析

本文首发于个人微信公众号《andyqian》,期待你的关注~前言之前文章《Java线程池ThreadPoolExecutor》《ThreadPoolExecutor 原理解析》中,分别讲述了ThreadPoolExecutor 的概念以及原理,今天就一起来看看其在 Dubbo 框架中的应用。ThreadFactory 与 AbortPolicy Dubbo 为我们提供了几种不...

2019-07-22 11:51:20 380

原创 你所不知道的 BigDecimal

本文首发于个人微信公众号《andyqian》,期待你的关注~前言在Java中,我们通常使用 BigDecimal 类型来表示金额,特别是在金融,财务系统中,使用的特别多。例如:转账金额,手续费等等。今天就一起来认识下BigDecimal。为什么是BigDecimal ?在此之前,我们先来讲讲为什么要使用 BigDecimal ?而不是Float,Double类型?其实光从表现形...

2019-07-18 09:35:20 488

原创 软件之路 之 项目外包

本文首发于个人微信公众号《andyqian》, 期待你的关注~一前两天,被一篇题为《贫困县的4000万是怎么花的》的文章刷屏了。内容简直精彩的不像话,可惜很快被删除了,其原因不得而知。感兴趣的朋友,可以去搜索看看。我看过文章后,感到非常惊讶,这种现象在软件行业简直太普遍了,其精彩程度一点也不亚于上述文章中的描述。趁这个机会,今天就继续沿着之前的文章《软件之路》继续完善,来看看软件行...

2019-06-27 08:28:07 921

原创 ThreadPoolExecutor 原理解析

本文首发于个人公众号《andyqian》,期待你的关注前言在上一篇文章《Java线程池ThreadPoolExecutor》中描述了ThreadPoolExecutor的基本概念,以及一些常用方法。这对于我们来说,是远远不够的,今天就一起来看TreadPoolExecutor类的内部实现。线程池状态在学习ThreadPoolExecutor源码时,首先来看看下面这段代码,也...

2019-06-14 20:42:53 589

原创 系统设计的几点思考

首发于个人公众号《andyqian》,期待你的关注!前言又有好一阵子没有更新文章了,今天聊聊系统设计的几点思考。对于我们来说,始终会独自设计,研发,迭代系统。为系统的演进,整个生命周期负责。而负责的系统到底处于什么状态?是否健康?是否出现问题?这些都是需要考虑的问题。开关 对关键流程,进行开关设置。例如:交易开关,资金池开关。对于金融系统而言,特别是出金端,要做好严格的把控。...

2019-06-11 23:24:19 472

原创 Java线程池ThreadPoolExecutor

本文首发于个人微信公众号《andyqian》,关注免费获取Java学习资料前言多线程一直是Java进阶的必修课。在Java中,我们很早就知道可以通过 Thread 类和 Runnable 接口来实现多线程。与之有着类似职责的数据库连接,也可通过JDBC创建与使用。但我们深知无论是数据库连接的创建与销毁,还是线程的创建与销毁,都是一件及其消耗性能的事情。为了减少这种情况的发生,前辈...

2019-05-15 08:05:46 135

原创 使用 Mybatis 真心不要偷懒!

本文首发于个人微信号《andyqian》,期待你的关注~前言这篇文章非常简单,没有什么高深技术。这些细节用过Mybatis的童鞋都知道。写这篇文章的缘由是:在最近的工作中,接手了一个外包项目,发现项目中 mapper 文件全部是自动生成的,代码十分冗余且不易维护,用知乎上的回答,这算得上是名副其实的”屎山”代码了。现在用 Mybatis做持久层算是Java系的主流,其中有一...

2019-05-07 21:50:50 257

原创 再谈Java 生产神器 BTrace

首发个人公众号《andyqian》,期待你的关注~前言在上一篇文章《Java 生产神器 BTrace》中我们认识了BTrace,并了解到 BTrace 脚本如何编写,如何执行,不熟悉的朋友,也可以对着文章照葫芦画瓢。但对于我们技术人来说,仅有这些是不够的,我们必须弄清楚每一个参数的意义,用法,才能百变不离其宗。另外,在这基础之上,还有一些更高阶的用法也是需要我们掌握的。用法...

2019-05-04 14:38:55 157

原创 Java 生产神器 BTrace

本文首发于个人微信公众号《andyqian》,期待你的关注!前言在《说说Java单元测试》文章中,强调了单元测试的重要性,也提倡大家一定要写单元测试,能帮我们筛选掉很多低级错误,找出一些没必要的bug,避免生产事故。单元测试通过后,我们开始集成,随着服务集成的日渐增多,业务逻辑也变得越来越复杂,在这样的前提下,解决bug就变得异常复杂。在本地环境中,我们可以通过日志分析 + debug的方...

2019-04-26 00:21:12 152

原创 Java 基本功 之 CAS

本文首发于个人微信公众号《andyqian》, 期待你的关注!前言 在Java并发编程中,我们经常使用锁对竞争资源予以并发控制,以解决资源竞争的问题。但无论是使用 Lock 还是 Synchronized,随着锁机制的引入,就不可避免的带来另一个问题,也就锁与解锁时的上下文切换,线程等待 等性能问题。现在回过头来看,在有些场景中,是否真的需要引入锁才能解决竞争资源共享...

2019-04-20 15:31:53 154

原创 重构不完全指南!

本文首发于个人公众号《andyqian》,期待你的关注前言程序员在职业生涯中,不可避免的就是接手老项目,重构历史项目。事实证明,不论是老项目还是新项目都会遇到这种情况,不信你去看看一周前自己写的代码,是不是有很大的改进空间?对于新入行的朋友们也要做好准备,以后也或多或少会面对这样的情况。在面对这样的情况时,不管你接手前是多么不愿意,接手后怎么破口大骂,甚至有过无数次想放弃的念头。但问题...

2019-04-16 23:24:29 169

原创 谈谈 996 背后的现象

本文首发于个人微信公众号《andyqian》,期待你的关注!前言最近在程序员圈,最火的莫过于Github上的996项目了。如果说之前对996的抵制是单兵作战,这次算得上是团战了,截止目前为止已经集结了15w+的star。可见其受害面之广,受害人数之庞大,可谓深感痛惜!但,为什么有很多企业热衷于996呢?996的背后又是什么呢?我想,站在一位程序员的角度来谈谈。供需关系曹大在...

2019-04-02 23:07:52 2517 1

原创 SQL 性能分析利器 show profile

前言在之前的文章中,我们提到过一些慢SQL优化的步骤。其中就包括: 使用 explain 关键字来查看执行计划,是否命中索引。 通过计算某列的区分度,来判断该列是否适合新建索引。 这都是一些比较好的方法。但我们还是不知道,慢SQL,到底慢在哪个环节?在每个环节中耗时是多少?根据木桶定理,我们应该找到耗时最长,性能最低,也就是最慢的环节,才能分析出慢SQL为什么这么慢...

2019-03-24 15:47:24 305

原创 说说Java 位运算

本文首发于个人微信公众号《andyqian》,期待你的关注~前言 我们都知道,在计算机世界里,再复杂,再美的程序,到最后都会变成0与1。也就是我们常说的:二进制。二进制相信大家都很熟悉。与现实世界不同的是,在现实世界里,我们通常都是用十进制来表示的,也就是遇十进一,这些都是我们熟悉的。到这里,我们就会发现端倪,现实世界中的十进制与计算机中的二进制其计量单元是不一样的。那它们之间怎么转换...

2019-03-06 22:57:24 107

原创 上千行存储过程有感!

本文首发于个人微信公众号《andyqian》, 期待你来撩!一实话说,已经有一段时间没有写MySQL系列文章了,不过平常也一直在关注MySQL相关技术。就在前几天,偶然在知乎的时间线上出现了这么一个问题:怎样评价一个几千行的sql存储过程? (链接如下)https://www.zhihu.com/question/311546275说实话,看到这个问题,表示很震惊!当...

2019-03-02 14:54:50 606

原创 Git的诞生以及常用命令

本文首发于个人微信公众号《andyqian》,期待你的关注~Git 的诞生在企业开发中,源代码使用版本控制工具已经是常态了。如果你还没用过版本控制工具,那就很不应该了。要说版本控制工具,现在比较流行的是SVN和Git。今天这里要介绍的是Git,Git 的诞生也是非常有趣的,Linux系统大家都知道吧,其创始人Linus在开发它时,因为Linux系统是开源的,一开始参与的人少,都是Lin...

2019-02-27 23:35:14 136

原创 软件之路

本文首发于个人微信公众号《anydqian》, 期待你的关注!背景  公众号的朋友大部分都是从事互联网行业的。多多少少都知道一些行业趣事,有些拿来当段子,有些用来调侃同行,玩的不亦乐乎。我想,我能不能用文字来记录这些趣事呢?嗯,试试看!一  阿成今年28岁,经常穿着一身西服,一双锃亮的皮鞋,简直就是一个标准的商务哥。阿成从事的是房地产销售,做的是中介业务。也就是我们常说的“中介”,...

2019-02-24 21:40:59 414

原创 一天真的等于24小时吗?

本文首发于个人微信公众号《andyqian》,期待你的关注!一  一天等于24小时,已经是不争的事实。(如果从更严谨的角度来看,其实一天也并不等于24小时,或大或小。但这不在本文的讨论范围内)首先阐述这个背景,其实是与今天要说的主题是有关的。我想从另外的角度来说说:一天不等于24小时!二  大家都知道,研发工程师与产品是有紧密联系的。产品作为需求方,制定需求文档输出给研发,研发则将...

2019-01-16 15:48:16 5374

原创 张小龙先生与微信

本文首发于个人微信公众号《andyqian》,期待你的关注~引子  取这个略显浮夸的标题,确实有点标题党之嫌。但一下子确实没想到合适的标题。恩,就这样吧。微信,一个早已融入我们生活的产品,我们都在使用,却极少听闻她背后的故事。去年偶然间看到了微信公开课,甚是喜欢,从此心里留下了种子,一直期待着今年的公开课。昨天,公开课如期而至。公开课的最后,是张小龙长达4小时的演讲,也是我第一次通过产品经...

2019-01-10 16:03:39 365

原创 Ant Design 圣诞节的踩蛋!

本文首发于个人微信公众号《andyqian》,期待你的关注~前言圣诞节,并非中国传统节日!但随着最近几年的发展,在中国的节日氛围也越发浓厚。商家,互联网企业自然不会放过这么好的日子,大多会选择在这一天进行大额优惠,有些网站,APP甚至会换上圣诞主题,以迎接圣诞节的到来。有些网站,APP则会在系统中留下彩蛋,以供用户去发现,在无言之中给用户创建些许惊喜,让用户体验企业对产品的用心。但是。。留...

2018-12-26 09:46:03 566

原创 浅谈 Java JPDA

本文首发于个人微信公众号《andyqian》,期待你的关注~前言   程序员在坊间有非常多有趣的故事,其中就有这么一则:”这个在我的电脑上是好的,没问题的呀,诺,你看咯,一定是你打开姿势不正确,浏览器版本不正确,操作系统不统一等,总之不是我代码问题(傲娇)”。看到这里,有些朋友也许会笑,甚至拿着这些梗来调侃我们程序员兄弟。我是第一个不同意的,做技术的都知道,上面的回答一点毛病都没有,甚至称...

2018-12-19 14:44:20 210

原创 说说MySQL权限

本文首发于个人微信公众号《andyqian》,期待你的关注~前言  今天继续MySQL系列文章,讲讲MySQL权限相关的内容。我们都知道,在写系统的时候,都会有权限相关的服务,以达到权限控制的目的。以最简单的权限菜单为例: 管理员拥有最大权限,可以查看系统下所有菜单。操作员只拥有部分菜单权限。同样的,在MySQL数据库中也有相应的权限管理。例如:数据库连接权限,新增,修改,查询权限等等。下...

2018-11-04 18:24:14 190

原创 『不就是』先生

 本文首发于个人微信公众号《andyqian》,期待你的关注~前言  最近有好长一段时间没有和大家聊聊了,确实比较忙。对还没有取关的朋友表示感谢。我最近认识一个朋友,他的长相和我们一样,典型的程序员风格。总是戴着黑边眼镜,头发乱糟糟的,常年背着双肩背包,一股十足的程序员范。他不善于言谈。但总爱说『这不就是』(一)  他刚入行的时候,就进了一个外包公司。这公司虽然不大,但在项...

2018-09-27 08:55:35 174

原创 分享几份好的资料

本文首发于个人微信公众号<andyqian>, 期待你的关注~ 前言  有好几天没有更新文章了,最近确实比较忙。但仔细想想,时间挤挤也还是有的。今天给大家推荐几个比较好的开源项目。有些项目也是刚发现,自己都还没来得及细读,就分享出来了。希望能够对大家有所帮助。Linux   Linux是程序员必学的技术之一,尤其是后端工程师。更应该对之有足够的了解。无论是系统服务部...

2018-09-02 16:26:03 173

原创 重构

前言  有好几天没有更新了,今年过的格外快些。眨眼间已经到了下半年。嗯,切入今天的正题。今天给大家推荐一本好书《重构》。说起重构,在技术圈中总有一种现象,就是不愿意接手别人的代码,不愿意维护老系统。甚至想着每进一个公司都是从零开始设计系统。殊不知,在职业生涯中,我们参与的系统更多的不是从0到1,而是从1到100的演进。在这期间,我们不免会接触别人的代码,在老系统中进行日常迭代。或许是随着时...

2018-08-19 15:53:50 286

原创 几个常见的Mybatis错误

本文首发于个人微信公众号《andyqian》, 期待你的关注!前言  今天记录几个Mybatis常见错误。在使用Mybatis时,或多或少的会碰到这些问题。问题本身并不难,解决起来也非常简单。下面会一一介绍各个问题出现的场景,发生原因以及解决方案。最后统一说说如何避免这类问题的发生。问题一 (不存在的列)这个问题在使用Mybatis时,属于比较常见的低级错误。问题描述:#...

2018-08-05 00:13:18 1532

原创 CORS跨域 实践

本文首发于个人微信公众号《andyqian》,期待你的关注~前言  系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不少新的问题。其中跨域问题就成了第一只拦路虎。今天我们就来揭露一下这只老虎的真面目!什么是跨域?  在解决问题前,我们首先得先了解什么是跨域?其实我们可以简单的理解跨域就是跨不同的”域名”。但这个域...

2018-07-18 08:53:40 478

原创 分享两个小问题

本文首发于个人微信公众号《andyqian》,期待你的关注!前言  有好一段时间没有更新文章了,期间有好几次提笔。却又不知,如何下手。今天来分享两个常见的小问题。(一) Linux上传文件后大小总是为0 kb大小问题描述:无论是使用xftp工具,还是使用rz命令上传至Linux服务器中的文件大小总是为0。导致原因 : 经分析,由于系统磁盘被占满导致。可以通过命令df -lh命令来查看系统情况。 如...

2018-07-13 11:41:39 207

原创 谈谈用户隐私

本文首发于个人微信公众号《andyqian》,期待你的关注!前言  又有一段时间没有更新了。一大清早就被一则A站被脱库的新闻所吸引。事件的影响有多夸张呢?其用户隐私数据甚至被明码标价的在暗网中出售。其中就包括: 用户的ID,用户姓名,用户登录密码等隐私数据。这是一件多么可怕的事情呢?。对于普通人来说,可能用处不大。但对于商业公司,黑客来说。那就是巨大的商业价值。殊不知对于用户来说那就是巨大危害。怎...

2018-06-14 08:43:10 855

原创 再谈MySQL JSON数据类型

本文首发于个人微信公众号《andyqian》,期待你的关注~前言  眨眼间,有一小段时间没有更新文章了。惰性属性又增。你是否还记得,之前写过的《说说 MySQL JSON 数据类型》这篇文章,在这篇文章中,我们简单的介绍了MySQL JSON函数。但是在实际操作中。还有更多的实用操作没有介绍。如: JSON字符串如何搜索?如何获取JSON字符串中特定的属性?能不能批量替换JSON中特定key?等等...

2018-04-18 23:36:02 733

原创 说说Java日志

本文首发于个人微信公众号《andyqian》,期待你的关注~前言 我们在编写代码时,都知道在关键算法,逻辑性较强的地方添加注释。一来提高了代码的可维护性。二来让代码有了自可读性。如果我们把注释理解为静态的自可读性。那么,程序在运行时,我们如何才能知道程序的实际运行路径呢?这就是今天的主角--日志!为什么要打日志? 有很多朋友,不太喜欢打日志。好几百,甚至上千行的代码。啪,啪,啪的全写完!自信满满,...

2018-04-08 22:16:00 196

iText 案例

iText生成pdf完整案例,其中包括:表格,图片,html转换为pdf, Freemarker转换pdf, (该项目为工程,使用intellij idea打开即可)

2017-05-30

微信基本功能的封装

为微信开发者节省时间,让刚接触微信开发的开发人员更易上手

2015-01-08

空空如也

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

TA关注的人

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