- 博客(142)
- 收藏
- 关注
原创 MySQL——关于删除数据的几个问题
本篇介绍MySQL执行删除命令时的一些机制,包括:解释为什么删除数据后表文件大小不变?MySQL如何删除一行数据?为什么建议删除数据的语句条件上加索引?如何删除大量数据?truncate与delete/drop的区别?
2023-02-06 20:00:30
37
原创 《MySQL实战45讲》——学习笔记25 “主备延迟“
正常情况下,主库执行更新生成binlog,binlog传到备库并被正确地执行,备库就能达到跟主库一致的状态,保证数据的最终一致性;但是,MySQL要提供高可用能力,只有最终一致性是不够的,还需要考虑主备延迟;本篇介绍MySQL主备延迟相关的知识,包括什么是主备延迟、产生主备延迟的原因、准备切换的方式;
2023-02-06 10:50:54
149
原创 编码技巧——JDK版本切换/JDK7和JDK6下的文件输入输入
最近有使用低版本JDK实现文件输入输出的需求,主要是妹子计算机专业考研复试上级算法题,输入输入依赖文件而非纯算法代码,并且IDE一般使用JDK8以下的SDK,导致一些JDK8的API不适用;较早版本的JDK API代码是操作一大堆的缓冲区Buffer和输入输出流InputStream/OutputStream,代码较为复杂,不利于上机演示,因此帮整理下JDK7/JDK6下较为简洁的文件输入输出代码;
2023-01-31 20:22:58
40
原创 《MySQL实战45讲》——学习笔记24 “Master/Slave主备同步机制“
binlog可以用来归档,也可以用来做主备同步,binlog在MySQL的各种高可用方案上扮演了重要角色;本篇主要介绍MySQL主备(M-S结构)的基本原理、不同格式binlog的优缺点和设计者的思考、MySQL双主结构和循环复制问题(双M结构)相关知识,这些点可以说是所有MySQL高可用方案的基础,在这之上演化出了诸如多节点、半同步、MySQL group replication等相对复杂的方案;在做系统开发时候,也能借鉴这些设计思想;
2023-01-31 16:42:27
133
原创 《MySQL实战45讲》——学习笔记23 “binlog&redolog 的写入机制/组提交机制“
本篇主要介绍数据的可靠性有关的知识,包括binlog的写入机制和redolog 的写入机制;
2023-01-29 09:55:24
239
原创 编码踩坑——MySQL更新存放JSON的字段、\“ 转义成 “
本篇介绍在执行MySQL线上变更时遇到的问题,表现为"更新JSON字段时,实际更新的值与SQL语句中的值不一致,JSON格式错误";原因是MySQL对value的转义处理导致;
2022-12-19 17:44:27
383
原创 《MySQL实战45讲》——学习笔记22 “大量短连接/慢查询/QPS突增的临时处理方案“
22 | MySQL有哪些“饮鸩止渴”提高性能的方法?
2022-12-08 17:50:52
666
原创 《MySQL实战45讲》——学习笔记20 “幻读、全表扫描的加锁方式、间隙锁、next-key lock“
20 | 幻读是什么,幻读有什么问题?
2022-12-06 16:21:48
434
原创 《MySQL实战45讲》——学习笔记19 “SQL查一行执行慢的排查、锁等待/一致性读“【建议收藏】
19 | 为什么我只查一行的语句,也执行这么慢?
2022-12-04 23:00:54
337
原创 编码技巧——使用Easypoi导出Excel、多sheet
本文主要介绍easypoi导出Excel的代码示例;自己之前手动实现过导出工具类《编码技巧——导出工具类》,基于实体和注解,通过反射来映射实体字段和exce列的关系;在部分工程里面看到了easypoi的二方包,于是准备试用下,记录下如何引入并使用Easypoi的过程;
2022-11-29 20:29:05
852
原创 编码技巧——Mybatis分页插件PageHelper使用、遍历表数据
本篇介绍Mybatis分页插件PageHelper的使用,本质上是Mybatis拦截器起作用,在执行目标SQL之前添加count语句及拼接limit到目标SQL后面,这里不再赘述,可参考,本篇仅简单介绍如何让一个使用Mybatis+springboot的项目快速接入PageHelper;
2022-11-28 16:47:16
226
原创 编码踩坑——记一次fastjson引发的空指针问题、引用标识$ref
本篇介绍在使用fastjson过程中遇到的一个问题,从而引申出使用fastjson时的注意事项——(1)尽量避免在实体中定义 get 开头的方法;(2)避免较深的实体字段层级;(3)避免实体字段之间的引用关系;
2022-11-22 20:56:53
400
原创 《MySQL实战45讲》——学习笔记14 “count(*)的原理、与count(1)/count(id)的区别“
14 | count(*)这么慢,我该怎么办?-极客时间
2022-11-07 21:29:25
165
原创 《MySQL实战45讲》——学习笔记13 “数据删除流程、表空间释放、重建表过程、inplace&online DDL“
13 | 为什么表数据删掉一半,表文件大小不变?
2022-11-07 18:36:47
372
原创 代码技巧——Apache集合类&字符串工具包中实用的API
本篇结合代码示例介绍Apache集合类&字符串工具包中实用的API,很多sonar中的NPE问题都可以用Apache工具包来解决,代码的可读性也会得到提升;
2022-11-01 16:35:33
707
原创 《MySQL实战45讲》——学习笔记09 “普通索引和唯一索引、change buffer 和 redo log“
09 | 普通索引和唯一索引,应该怎么选择?
2022-10-18 17:32:57
272
原创 代码技巧——如何关闭订单?延迟任务的实现方案【建议收藏】
本篇介绍交易系统下,延迟关闭订单的几种实现方式,包括:定时任务、JDK实现、Redis过期时间/ZSet、Redisson RdelayQueue、RabbitMQ死信队列、时间轮算法,分别介绍其原理及代码示例,比较其优劣;
2022-10-05 20:53:50
858
原创 《MySQL实战45讲》——学习笔记06-07 “全局锁、表锁、行锁“
06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?07 | 行锁功过:怎么减少行锁对性能的影响?
2022-09-26 23:27:04
325
原创 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“
《MySQL实战45讲》——学习笔记04-0504 | 深入浅出索引(上)-极客时间05 | 深入浅出索引(下)-极客时间
2022-09-01 17:57:17
253
原创 《MySQL实战45讲》——学习笔记01-03 “MySQL基本架构、日志系统、事务隔离“
《MySQL实战45讲》学习笔记01-03:01 | 基础架构:一条SQL查询语句是如何执行的?02 | 日志系统:一条SQL更新语句是如何执行的?03 | 事务隔离:为什么你改了我还看不见?
2022-08-30 10:34:55
296
原创 代码技巧——dubbo泛化调用
「泛化调用」方式调用dubbo接口,即Dubbo的调用方,在不引入服务接口类的情况下,远程调用其他Dubbo服务;下面给出代码示例;
2022-08-28 15:30:11
716
原创 代码技巧——dubbo编程式调用
现在有一种新的场景,A提供接口规范(方法及出入参),由B、C、D等多个业务方来实现这个接口,并将各自的服务以dubbo的形式注册到zk(以group区分);A在业务处理逻辑中,通过业务参数找到对应的group,然后在代码中调用对应group的dubbo接口;因为业务方的数量是不确定的,也就是说A不知道当前有哪些接入方,因此不能提前在代码中使用@DubboReference注解配置各个provider的bean,仅知道自己定义的接口定义和group;这时,就需要A在代码中能「编程式动态」调用dubbo;..
2022-08-25 17:42:47
182
原创 编码踩坑——打二方包时加入源码 解决“Cannot download Sources“
打二方包时加入源码,解决IDEA点击“Download Sources”下载源码时提示"Cannot download Sources"的问题;
2022-08-24 20:23:08
134
原创 学习笔记——异地多活
站在业务开发的角度,平时写代码时,代码的可靠性是需要我们考虑的东西,例如对于一个简单的业务场景,我们或许会使用幂等的Retry操作来尽量保证在一些些突发情况如MySQL抖动时能尽量处理成功当前业务;对于存储层来说,我们或许会使用本地缓存、Redis、MySQL三层存储结构保证系统读性能的可靠性,或是配置MySQL的读写分离来保证MySQL的读写性能;站在架构设计的角度,本篇从宏观的角度来介绍保证系统可用性的架构方案——异地多活,内容包括:异地多活到底是什么?它到底解决了什么问题?究竟是怎么解决的?
2022-08-24 17:56:58
244
原创 编码踩坑——多线程可能带来意想不到的OOM
多线程技术数据Java基础中比较重要的知识点;实际使用时,我们往往会用线程池来管理我们的异步线程,本篇介绍一个由于使用ExecutorCompletionService多线程可能导致的OOM问题,开发时要千万小心,即使用一套JDK API时一定要熟悉其原理和可能踩的坑,不要只看到其好处拿来就用,搞不好就要出线上事故;.........
2022-08-14 17:28:06
233
原创 学习笔记——RSA加密&签名
前后端请求,内容涉及用户信息时一般会要求对数据进行加密;对于支付系统的接口,为了保证参数不被篡改(如订单金额、支付单号等),需要对下单参数进行签名;本篇介绍RSA相关的知识以及应用场景,包括:对称加密和非对称加密、RSA原理简介、加密和签名的区别以及RSA加密算法的代码示例;...
2022-08-12 19:59:41
1504
原创 代码技巧——数据迁移方案【建议收藏】
开发工作中,可能会遇到如"大表拆分"、"跨库数据迁移"等场景,本文介绍互联网常见架构下的数据迁移方案及实现,包括:有损迁移、平滑迁移、增量迁移;
2022-08-11 16:05:21
2078
原创 编码技巧——@KafkaListener的使用
最近在接手某个项目代码时,发现关于Kafka的consumer相关的代码写的很乱,consumer中写了大量的配置的代码,并且手动的拉取消息,并开启线程消费,不够优雅;理想的做法是单独维护kafka的consumer配置,在定义consumer的bean时,指定topic和group,仅实现消费逻辑;从kafka-clients的2.2.4版本开始,可以直接使用@KafkaListener注解来标记消费者,注解的属性将覆盖在消费者者工厂中配置的具有相同名称的所有属性,下面介绍使用方法;.........
2022-08-08 17:49:50
4507
1
原创 消息队列——引入的问题:重复消费&顺序消费&分布式事务
上篇文章《消息队列入门》里面提到,技术是把双刃剑!使用消息队列是因为他带给我们很多好处:系统间解耦、异步执行、削峰限流,但是使用消息队列可能带来一些问题:消息队列的消息被重复消费、消息的顺序保证、异步执行导致的数据不一致;本篇就来介绍一下这几个引入消费队列后可能带来的问题,以及常见的解决方案;......
2022-07-26 10:49:45
386
原创 消息队列——消息队列入门
本篇介绍消息队列相关的知识,包含:什么是消息队列、为什么要使用消息队列、使用消息队列需要注意的点、常见的消息中间件,对MQ做一个快速的熟悉和入门;
2022-07-19 20:05:55
825
原创 Spring——事务注解@Transactional【建议收藏】
在某些业务场景下,如果一个请求中,需要同时写入多张表的数据或者执行多条sql,为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到事务;Spring框架下,我们经常会使用@Transactional注解来管理事务;本篇介绍Spring的事务注解@Transactional相关的知识,包括事务简介、事务隔离级别、Spring声明式事务实现原理、事务的传播行为、@Transactional的用法及注意事项等,属于Spring的常用注解之一,需要掌握相关知识点;...
2022-07-18 16:05:40
5259
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人