自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 REST模式下不同请求方式的浅析

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是POST,GET,PUT,DELETE;而PATCH是后来新增的方法。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的POST,GET,PUT,DELETE,PATCH就对应着对这个...

2020-07-14 19:51:54 4 0

原创 DNS多级缓存系统

DNS基础 DNS,是英文Domain Name System的简称,中文称之为“域名系统”。互联网主机之间通信是通过IP地址来互相访问,IP地址是十进制数,比如10.11.10.235,但这样的数字串对人类来说很难理解和记忆。于是,人们发明了DNS系统,使用人类可读、可理解的字符串来代替一堆堆...

2020-06-01 15:37:42 66 0

原创 服务发现追求CP还是AP?

服务发现 生产环境中服务提供者对外提供服务,集群里面得ip随时再发生改变,那么就需要一个“通讯录”随时去获取服务节点,那么这个就是服务发现 为什么需要服务发现 对于服务提供者来说,契约就是接口,也就是相当于通讯录中得名字,服务节点就是提供该服务得一个实例。服务ip集合作为通讯录中得地址,可以...

2020-06-01 15:12:06 202 0

原创 为什么JSON占用额外开销大

这个就相对于二进制文件占用内存少来说的。 文本文件:是基于字符编码的文件,常见的编码有ASCII编码,UNICOD。 ASCII:是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646 二进制文件:是基于值编码的...

2020-06-01 10:40:20 83 0

原创 Spring的注解使用

直接上代码,代码中有注释 AspectJ.java package com.wemew.wmgame.spring_mybatis.config; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.anno...

2020-04-17 14:27:32 57 0

原创 Spring 如何解决循环依赖?

在Spring实际的开发过程中,可能会出现一种情况:BeanA 依赖BeanB ,BeanB依赖BeanA,代码如下: @Component public class A { private B b; public void setB(B b) { this.b = b; ...

2020-04-15 18:52:46 101 0

原创 volatile

为了更好的说明volatile可见性的使用场景,看下面的案例: /** * <p> * cpu现在是多核的,那么各自之间会存在缓存不一致的问题。 * 以前的解决办法是:总线加锁,在第一个线程来的时候开始加锁,当这个线程执行完成后,进行 * 解锁后,第二个线程才可以进行读取值...

2020-04-09 21:48:40 41 0

原创 手写HashMap

为了便于进行深刻了解HashMap的底层实现,所以手写了一个可以put和get值的简易版本的HashMap,代码如下: /** * 手写HashMap * <p> * 为什么使用红黑树,不使用平衡二叉树和链表? * 答:因为平衡二叉树查询效率虽高,但插入数据慢...

2020-04-09 20:02:34 61 0

原创 ThreadLocal

在线上的时候遇到一个关于ThreadLocal的问题,伪代码如下: private static final ThreadLocal<Integer> currentUser = ThreadLocal.withInitial(() -> null); @GetMapp...

2020-04-07 16:48:22 40 0

原创 关于write()和fsync()

write ssize_t write(int fd, const void *buf, size_t count); 将数据写到文件中. 注意, 如果文件是保存在硬盘中, write() 函数调用返回之后, 并不表示数据已经写入到硬盘中, 这时如果掉电, 数据可能会丢失. fsync i...

2020-03-23 11:15:04 182 0

原创 彻底解决mysql报错:1030, 'Got error 28 from storage engine'

这个问题确实是服务器系统盘满了,mysql指定的临时文件目录满掉,大概就是这个意思. 下面解决/dev/vda1系统盘满了,其实我压根不知道/dev/vda1这在哪,是什么,后来了解这是 virtio-block 类型的设备。 科普一下: 以 'c' 开头的一行表示该...

2020-03-23 10:56:56 64 0

原创 redis探析

Redis(REmote DIctionary Server)是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis过期键删除策略 redisDb 结果的 expires 字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典 过期字典的键是一个指...

2020-03-20 18:50:45 42 0

原创 logback的additivity="false" 与root关系

它是 子Logger 是否继承 root的Logger 的 输出源(appender) 的标志位。 具体说,默认情况下子Logger会继承root的Logger的appender,也就是说子Logger会在root的Logger的appender里输出。 1.若是additivity设为fal...

2020-03-16 11:38:51 43 0

原创 binlog_format=row不生效

binlog 有两种格式,一种是 statement,一种是row。可能你在其他资料上还会看到有第三种格式,叫作 mixed,其实它就是前两种格式的混合。 查看当前的格式: show VARIABLES like '%binlog_format%' mysql&...

2020-03-05 11:34:19 349 0

原创 Spring事务传播行为详解
原力计划

前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇...

2020-03-04 17:38:25 318 0

原创 如果你的 MySQL 现在出现了性能瓶颈,而且瓶颈 在 IO 上,可以通过哪些方法来提升性能呢?

1. 设置 binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count 参数,减少 binlog 的写盘次数。这个 方法是基于“额外的故意等待”来实现的,因此可能会增加语句的响应时间,但没有丢失数据的风险。 ...

2020-03-04 10:59:28 144 0

原创 如何解决幻读?

现在你知道了,产生幻读的原因是,行锁只能锁住行,但是新插入记录这个动作,要更新的是记录之间的“间隙”。因此,为了解决幻读问题,InnoDB 只好引入新的锁,也就是间隙锁 (Gap Lock)。 顾名思义,间隙锁,锁的就是两个值之间的空隙。比如文章开头的表 t,初始化插入了 6个记录,这就...

2020-02-26 11:36:41 431 0

原创 幻读是什么?

为了便于进行解释幻读,新建一张表进行详细阐述: CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY ...

2020-02-26 10:57:13 224 0

原创 慢查询记录

慢查询 分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。注意:超过指定时间,这个时间是可以设置的,如果设置为0秒,那么所有的查询都会记录再慢查询日志中,都被视为慢查询。 慢...

2020-02-26 10:03:35 79 0

原创 Hibernate 限制查询数目,解决Limit在hql不能使用问题

在hql语句中,不能使用limit来限制显示的条数。 例如: FROM user_info order by createdTime desc limit 1 显示的数目不是1条,而是你查询出来的条数,所以上述写法是错误的。 如何解决limit在hql中不能使用,并设置查询出来集合的数目...

2020-02-25 18:06:04 126 0

原创 针对mysql delete删除表数据后占用空间不变小的问题

开发环境 MySQL 前言 物流规则匹配日志表记录订单匹配规则相关日志信息,方便管理员维护和查阅不匹配的订单,四个月时间,该日志表数据就有174G,当前,这么大的数据量,不仅对数据库造成了很大的负载压力,同时查询等维护也缓慢,所以采取将日志记录移出到文件进行存储。但是短期内,还需要数据库中的...

2020-02-24 17:27:32 82 0

原创 数据字典

数据字典 是数据库重要的组成部分之一,数据字典是对数据库中的数据、库对象、表对象等的元信息的集合。 包含内容 在MySQL中,数据字典信息内容就包括表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、存储过程、触发器等内容。MySQL INFORMATION_SCHEMA库提供了...

2020-02-24 17:03:42 137 0

原创 为什么这些SQL语句逻辑相同,性能却差异巨大?

案例一:条件字段函数操作 假设你现在维护了一个交易系统,其中交易记录表 tradelog 包含交易流水号 (tradeid)、交易员 id(operator)、交易时(t_modified)等字段。为了便于描 述,我们先忽略其他字段。这个表的建表语句如下: mysql> C...

2020-02-21 12:05:18 68 0

原创 MySQL的INSERT ··· ON DUPLICATE KEY UPDATE使用的几种情况

在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入操作。另外,ON DUPLICATE K...

2020-02-19 12:01:49 73 0

原创 mysql的全局锁

顾名思义,全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法, 命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候, 可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包...

2020-02-11 11:41:33 56 0

原创 给表加字段,导致整个库挂了

给一个表加字段,或者修改字段,或者加索引,需要扫描全表的数据。在对大表操作的时候,你肯定会特别小心,以免对线上服务造成影响。而实际上,即使是小表,操作不慎也会出问题。 如果现在有4个session sessionA:begin,select * from T limit 1 sessi...

2020-02-11 11:33:58 90 0

原创 怎么让mysql的myisam引擎支持事务

这个是一个面试题,但是考察的并不是常规逻辑思维。 myisam想支持事务,那么可以借助lock table 来实现,但是这样只能实现串行化隔离级别,其它隔离都实现不了。 但是因mysiam不支持崩溃恢复,所以即使用lock table硬实现,也是问题多多: ACID里面, 原子性和持久性做不到;...

2020-02-11 10:58:48 233 0

原创 二叉树数据结构的索引

索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,所以这里也就引入了 索引模型的概念。可以用于提高读写效率的数据结构很多,这里我先给你介绍三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。 哈希表 是一种以键 - 值(key-value)存储数据的结构,我们只...

2020-02-10 10:51:35 51 0

原创 事务的两阶段提交

为什么必须有“两阶段提交”呢? 这是为了让两份日志(redo log和binlog)之间的逻辑一致。 详细解释 用update 语句来做例子。假设当前 ID=2 的行,字段 c 的值是 0,再假设执行 update 语句过程中在写完第一个日志后,第二个日志还没有写完期间发生了 crash,...

2020-02-08 17:21:16 69 0

原创 redo log与binlog的区别

redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎 都可以使用。 redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日 志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段...

2020-02-06 18:42:32 112 0

原创 生动解释redo log

《孔乙己》这篇文章,酒店掌柜有一个粉板,专门用来记录客人的赊 账记录。如果赊账的人不多,那么他可以把顾客名和账目写在板上。但如果赊账的人多 了,粉板总会有记不下的时候,这个时候掌柜一定还有一个专门记录赊账的账本。 如果有人要赊账或者还账的话,掌柜一般有两种做法: 一种做法是直接把账本翻出来,把...

2020-02-06 18:24:21 62 0

原创 数据库的查询缓存

MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询 的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客...

2020-02-06 18:03:47 207 0

原创 数据库的长连接和短链接

数据库里面,连接可以分为长连接和短链接; 长连接 是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。 短连接 是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。 注意 建立连接的过程通常是比较复杂的,所以建议在使用中要尽量减少建立连接的动作, 也就是...

2020-02-06 17:53:30 290 0

原创 非spring注入使用RedisTemplate,需先调用afterPropertiesSet()方法

错误信息: Exception in thread "main" java.lang.IllegalArgumentException: template not initialized; call afterPropertiesSet() before using it ...

2020-02-06 10:58:07 657 0

原创 @Primary

在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的。但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下 @Primary的作用就出来了。下面是个简单的使用例子。 public interface Singer { ...

2020-02-04 17:13:10 140 0

原创 maven project和maven pom

Type 选择的时候 maven project 和maven pom 有什么区别? 选择project的话,它会帮你生成整个完整的工程结构; 选择pom的话,它只会在工程目录下生成pom.xml,而没有src等等结构 ...

2020-02-04 17:06:37 965 0

原创 Random伪随机

Random生成的随机数都是伪随机数,也就是说生成的随机数是有依据可循。 查看Random源代码: public Random() { this(seedUniquifier() ^ System.nanoTime()); } private static ...

2020-02-03 17:41:54 66 0

原创 算法之:三门问题

问题: 再A\B\C三扇门后面只有一辆汽车,但是用户只能选择其中一扇门。再用户选择一扇门之后,主持人会选择没有汽车得一扇门打开,并告诉用户是否更改最初选择的答案。请问更改答案和不更改答案的中奖概率是多少? 分析: 由此可见:更改后中奖概率为2/3。不更改中奖的概率为1/3。因此可见最好要...

2020-01-17 16:57:44 141 0

原创 一条SQL查询语句是如何执行的

这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构。我们经常说,看一个事儿 千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同 样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比 如,你有个最简单的表,表里只有一个 ID 字段...

2020-01-16 16:16:42 80 0

原创 因为需要启动时load数据到内存,重启数据库很慢

我在做贴吧系统的时候,每次访问页面都要请求一次权限。所以,这个请求权限的请求, 访问概率会非常高,不可能每次都去数据库里查,怎么办呢? 我想了个简单的方案:在应用程序里面开了个很大的内存,启动的时候就把整张表全部 load 到内存里去。这样再有权限请求的时候,直接从内存里取就行了。 数据库重启...

2020-01-15 16:33:55 108 0

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