- 博客(159)
- 收藏
- 关注
原创 RocketMQ学习总结
2、异步刷盘:消息在被写入PageCache后就会响应ACK,当PageCache里的消息积累到一定量后,由OS线程将PageCache里的消息刷入磁盘。注:如果RocketMQ服务挂了,PageCache里的消息并不会丢失,因为PageCache是属于Linux系统的缓冲区,只有当服务器突然断电才会导致消息丢失。注:在该模式下,RocketMQ服务宕机或服务器突然断电都会导致消息丢失。:存储消息的commitLog记录(存储在内存),类似于消息的索引,消息体存储在磁盘中,通过commitLog关联。
2024-01-21 16:12:33
409
原创 解决jackson版本和springboot版本不兼容的问题
一、错误搭配错误搭配一:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.13.RELEASE</version></dependency><dependency>
2022-05-23 20:59:32
15201
1
原创 java中i++和++i、+=和=+的区别
i++和++i的区别public static void main(String[] args) { int a = 1; int b = 1; int c = 4; int d = 4; c = a++; // a++是先将a的原始值1赋值给c,再进行加1操作 d = ++b; // ++b是先执行++b,即b=1+1=2后,再将b的值赋值给d,即d=b=2 System.out.println("c="
2022-05-06 22:10:16
822
原创 开发常用命令(Mac版本)
Mac键盘说明说明快捷键Command⌘Shift⇧Option⌥Control⌃IDEA快捷键功能快捷键代码格式化Option+Command+L直接查看实现方法Option+Command+B优化importControl + Option + O查看类的所有方法Command+7查看调用Command+B复制行或选定的块Command + D删除行或选定的块Command +
2022-02-22 10:13:32
475
原创 idea本地进行远端DEBUG
在idea中,选择Edit Configurations创建一个RemoteHost位置填写IP,Port位置填写端口号启动DEBUG在需要的位置打断点即可
2022-02-15 14:18:19
222
转载 Git取消合并(merge)、暂存修改(stash)、回退到某个版本(reset)的使用方法
取消某次合并git merge --abort #如果Git版本 >= 1.7.4git reset --merge #如果Git版本 >= 1.6.1Note: 在合并之前要保证没有未提交的文件,如果有未提交的文件但现在又不想提交,用stash命令暂存。暂存命令stash使用git stash #将本地修改暂时存储起来git stash list #查看暂存的信息git stash pop #应用最近一次暂存的内容git stash apply stash@{1} #应用指
2022-01-11 15:40:53
3336
原创 Mac 彻底卸载IDEA
rm -rf ~/Library/Logs/JetBrains/IntelliJIdea*rm -rf ~/Library/Application\ Support/JetBrains/IntelliJIdea*rm -rf ~/Library/Caches/JetBrains/IntelliJIdea*rm -rf ~/Library/Preferences/jetbrains.idea*
2021-12-20 18:31:33
741
原创 《MySQL实战45讲》14 | count(*)这么慢,我该怎么办?
count(*) 的实现方式MyISAM 引擎把一个表的总行数存在了磁盘上,在执行无过滤条件的 count(*) 语句的时候会直接返回这个数,效率很高;InnoDB 引擎在执行无过滤条件的 count(*) 语句的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。count(*) 实现方式的优缺MyISAM 表虽然 count(*) 很快,但是不支持事务;show table status 命令虽然返回很快,但是不准确(通过采样实现);InnoDB 表直接 count(*) 会遍历
2021-12-09 09:50:28
276
原创 《MySQL实战45讲》13 | 为什么表数据删掉一半,表文件大小不变?
表数据存储位置参数 innodb_file_per_table控制了表数据的存储位置:设置为OFF时,表数据存放在系统的共享表空间,也就是和数据字典放在一起;不建议存放在共享表空间,即使表删除了,空间也不会被回收;设置为ON(MySQL 5.6.6开始,默认为ON)时,表数据存放在以.idb为后缀的文件中。存储在文件中更容易管理,通过drop table就可以删除表,且系统会直接删除该文件。数据删除流程记录的复用:适用于符合范围条件的数据。如表中存储着id为300、500、600的记录,删除
2021-12-03 09:42:50
565
原创 《MySQL实战45讲》12 | 为什么我的MySQL会“抖”一下?
“抖”的含义之前执行很快的SQL语句,偶尔会出现执行很慢,且很难复现,持续的时间很短。感觉就是数据库“抖”了一下。“抖”的原因名词解释脏页:内存数据页和磁盘数据页内容不一致时,称内存页为“脏页”;干净页:内存数据页和磁盘数据页内容一致时,称内存页为“干净页”;刷脏页(flush):内存的数据页写到磁盘的过程。触发刷脏页的情况redo log写满了,需要触发flush脏页,系统将不能接受更新操作,要尽量避免。内存不足MySQL系统空闲(无性能问题)MySQL正常关闭(无性能问题)
2021-12-01 09:36:44
147
原创 T+1对账设计
整个对账的流程主要包括以下几个步骤:资方推送对账单到sftp服务 ⇒ 资方对账单告警⇒ 后端服务解析对账单文件 ⇒ MySQL数据同步至数仓 ⇒ 数据清洗 ⇒ 数据核对 ⇒ 轧差 ⇒ 差异原因分析 ⇒ 数仓数据回流至MySQL ⇒ 差异告警 ⇒ 差异处理⇒差异同步数仓...
2021-11-29 20:35:53
1828
原创 InnoDB特性—变更缓冲change buffer
一、简介change buffer是InnoDB存储引擎的一个重要特性,但在InnoDB 1.0.x版本之前,只支持插入缓冲(insert buffer),后来又对其进行升级,不仅支持insert buffer,还支持delete、update的缓冲,分别对应delete buffer、purge buffer,并统称为变更缓冲(change buffer)。结构:change buffer数据结构是一颗B+树;存储:位于缓冲池(buffer pool)中,存储在共享的表空间,默认是iddata1系
2021-11-26 22:40:44
1076
原创 《MySQL实战45讲》09 | 普通索引和唯一索引,应该怎么选择?
查询过程select id from T where k=5若k为普通索引:查找到满足条件的第一条记录后,依旧会继续查找下一条记录,直到查到不满足条件的记录为止;若k为唯一索引:查找到满足条件的第一条记录后,停止查找。因InnoDB是按照数据页为单位进行读写的。当k=5的记录都在一个数据页时,普通索引无非就是多做一次指针寻找和计算;当k=5的记录不在一个数据页时,会比唯一索引多一次读磁盘的操作,但不在一个数据页的情况微乎其微,可不考虑这种情况。故普通索引、唯一索引在查询过程中几乎一样。更
2021-11-24 10:07:41
637
原创 《MySQL实战45讲》08 | 事务到底是隔离的还是不隔离的?
一个可重复隔离级别的事务A,另一个可重复隔离级别的事务B,A要更新B锁住的行,此时A只能进入等待状态,等A获得行锁时,要更新的数据的值是什么呢?事务启动的两种方式一致性视图在执行第一个快照读语句时创建;一致性视图在执行start transaction with consistent snapshot 时创建。两种视图view视图:在执行查询语句时生成,为查询语句定义的虚拟表。一致性视图:InnoDB 在实现 MVCC使用的就是一致性读视图(consistent read view),用
2021-11-19 10:43:57
790
原创 《MySQL实战45讲》07 | 行锁功过:怎么减少行锁对性能的影响?
行锁是在存储引擎实现的,能够锁住行记录的锁。两阶段锁两阶段锁协议:在InnoDB事务中,行锁只有在需要的时候才加,在事务结束后才释放。当事务中需要锁多行时,将最可能造成锁冲突、最可能影响并发度的锁放在后面,减少锁的时间。死锁和死锁检测死锁:当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态。如:事务A需要用到事务B锁定的资源,而事务B又需要事物A锁定的资源,出现循环依赖,就会导致死锁。解决死锁的策略:直接进入等待状态,直至超时
2021-11-08 09:47:12
594
原创 《MySQL实战45讲》06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
全局锁对整个数据库实例加锁本文为《MySQL实战45讲》学习笔记
2021-11-05 10:06:02
214
原创 《MySQL实战45讲》05 | 索引
最左前缀原则建立联合索引时,会遵循从左到右依次匹配的原则。索引下推索引下推(Index Condition Pushdown,简称 ICP)是MySQL5.6做的优化,对使用最左前缀匹配原则下的索引中包含的字段进行优先判断,减少回表次数。如:mysql> select * from tuser where name like '张%' and age=10;本文为《MySQL实战45讲》学习笔记......
2021-11-03 09:36:31
211
原创 《MySQL实战45讲》03 | 事务隔离:为什么你改了我还看不见?
事物是在引擎层(并不是所有引擎都支持事物,如MyISAM就不支持事物)实现的,具有ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)特性,四种隔离级别(read uncommitted、read committed、repeatable read、serializable,即读未提交、读提交、可重复读、串行化),保证了一组数据库的操作,要么全部成功,要么全部失败。隔离性与隔离级别当数据库存在多个事物同时执行时,就会出现脏读
2021-11-01 09:49:49
142
原创 《MySQL实战45讲》02 | 日志系统:一条SQL更新语句是如何执行的?
一条更新SQL假设表T只有一个整形字段c和主键ID,当执行如下更新时发生了什么呢?mysql> update T set c=c+1 where ID=2;与查询过程类似,但更新操作涉及到两个日志:redo log和binlog。redo logredo log是InnoDB存储引擎特有的日志,每个InnoDB至少有一个重做日志文件组(group),且每个文件组下至少有两个重做日志文件,默认的两个重做日志文件为“ib_logfile0“和”ib_logfile1”。redo log条
2021-10-31 18:30:13
188
原创 《MySQL实战45讲》01 | 基础架构:一条SQL查询语句是如何执行的?
一条查询SQL表T只有一个字段ID,当执行如下查下时发生了什么?mysql> select * from T where ID=10;MySQL架构从架构图中可看出,MySQL分为两部分:Server层(连接器、查询缓存、优化器、执行器等)和存储引擎层(InnoDB、MyISAM、MEMORY等,InnoDB是MySQL 5.5.5之后默认的存储引擎)。连接器:负责与客户端建立连接、获取权限、维持和管理连接。查询缓存:建立连接后,可执行select语句。命中缓存则直接将结果返回给客
2021-10-28 22:02:24
160
原创 Linux性能优化学习笔记
本文为极客时间:《Linux性能优化》学习笔记简介常见的性能分析工具,如 I/O 性能问题时,可以参考图片最下方的 I/O 子系统,使用 iostat、iotop、blktrace 等工具分析磁盘 I/O 的瓶颈。性能分析和优化的思维导图:一、基础篇1.1 平均负载平均负载 ≠ CPU使用率平均负载:单位时间内,系统处于可运行状态(正在使用 CPU 或者正在等待 CPU 的进程)和不可中断状态(正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O
2021-10-13 17:43:41
5516
原创 maven helper(解决Maven依赖冲突的利器)
IDEA安装maven helper插件Preferences、Plugins使用教程栗子:需要排调spring-boot-starter依赖点击Exclude后,刷新Maven,再点击Refresh UI,这是会发现spring-boot-starter-test已经不包含spring-boot-starter的依赖了!...
2021-08-05 16:36:00
481
原创 mysql大于、小于符号的两种表示方法
符号>>=<<=&'"方法一>>=<<=&'"方法二<![CDATA[ > ]]><![CDATA[ >= ]]><![CDATA[ < ]]><![CDATA[ <= ]]>&
2021-08-02 09:33:16
6346
原创 @Transactional事物失效的场景总结
一、底层数据库引擎不支持事物MySQL中,MyISAM引擎不支持事物,InnoDB 支持事物二、非public修饰的方法@Transactional注解只有在public修饰的方法下使用,才会失效三、@Transactional属性配置错误rollbackFor属性错误@Transactional回滚事物时,默认的异常是RuntimeException,若要在抛其他异常时也使事物生效,需要指定异常,如:@Transactional(rollbackFor = Exception.cla
2021-07-18 11:53:18
314
转载 解剖AOF日志【打卡学废Redis】
“我发明了一句话,我说人的收入,是跟自己的不可替代性成正比的,你越不可代替你的收入越高,你越可以被替代,你的收入越低”——白岩松AOF是Redis持久化机制之一,采用写后日志的方式来保存日志,通过Always、Everysec、No三种写回策略来减少数据丢失的风险,通过重写机制实现快速恢复数据。一. 写后日志名称概念优势风险写前日志先将数据记录到日志,再写入内存便于故障时恢复数据写后日志先执行命令将数据写入内存,再记录日志确保了只会记录正确的命令;不会阻..
2021-02-09 14:51:42
184
原创 文件上传、解析及存储(前端+后端)
圣旨(金科玉律)前端人员接旨: 1. 提交方式必须是:post 2. 文件上传的表单项必须是:<input type="file"/> 3. 表单类型必须是:enctype="multipart/form-data"后端人员接旨: 1. 文件上传接口如果走auth网关,则必须配auth网关白名单 2. 最好指定文件在服务器的存储路径 3. 文件上传超时可考虑异步上传 4. 若涉及到文件存储,可考虑使用OSS(注意:文件的存储时长,
2020-12-24 17:51:14
9116
1
原创 YapiUpload插件上传接口至YApi(IDEA详细教程)
一、 IDEA安装YapiUpload插件安装完成后重启IDEA二、在misc.xml中进行配置配置内容 <component name="项目名"> <option name="projectToken">YApi中项目的token</option> <option name="projectId">YApi中项目的id</option> <option name="yapiUrl">部署的YApi
2020-10-14 09:32:59
7967
转载 当构造方法参数过多时使用 builder 模式——《effective-java》
//Builder Patternpublic class NutritionFacts{ public final int servingSize; public final int servings; public final int calories; public final int fat; public final int sodium; public final int carbohydrate; //静态内部类Builder
2020-08-13 10:26:42
128
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人