自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不想睡觉的橘子君的博客

行有不得,反求诸己。

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

原创 【MySQL】explain之type类型

在连接查询时,如果被驱动表是通过主键或者唯一二级索引列等值匹配的方式进行访问的〈如果该主键或者唯一二级索引是联合索引的话,所有的索引列都必须进行等值比较),则对该被驱动表的访问方法就是eq_ref。:当表中只有一条记录并且该表使用的存储引擎的统计数据是精确的,比如MyISAM、Memory,那么对该表的访问方法就是system。本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他属于查找和扫描的混合体。:最熟悉的全表扫描,将遍历全表以找到匹配的行。

2024-11-13 15:15:13 1017

原创 【MQ】RabbitMQ、RocketMQ、kafka特性对比

本篇文章导入了写在本地的一个md文档,仅对rabbitmq、rocketmq、kafka做一些简单的对比,方便记忆。

2024-11-06 16:31:50 681 1

原创 Paxos算法、Raft算法、ZAB原子广播协议、gossip协议的描述与对比

1,paxos算法这里简单总结下,gossip协议是所有分布式共识算法(用于达成一致,也就是满足一致性)的祖宗,但是gossip协议比较复杂,它设想的是有多个节点都可以提出提案,也有多个节点都可以对提案进行投票。每个节点在发出提案时,都会有一个提案ID分配给该提案,其他节点收到提案后,会和自身记录的已接受过的上次的提案ID比较,如果这次的提案ID比上次提案更大,意味着是新的提案,对其进行投票;如果这次提案ID没上次大,意味着是旧的提案,不用管。

2024-11-05 14:54:16 1074

原创 【Redis】一种常见的Redis分布式锁原理简述

上面实现的分布式锁,解决了如下几个问题不要重复设置锁→setnx被别的线程解锁怎么办→ThreadLocal和UUID只依靠setnx,持有锁的线程挂掉无法释放锁→给锁添加过期时间,expire命令设置过期时间setnx和expire不够原子→set命令和参数ex、nx,或者lua脚本配置命令eval、evalsha过期时间不好评定→加入看门狗守护线程,配合延迟队列,看门狗线程用死循环,使用take方法阻塞的等待将最近要续期的任务,将其续期。

2024-11-01 17:12:02 951

原创 【MySQL】可重复读级别下基于Next Key Lock解决幻读

昨天读到了一篇文章[1],里面讲,面试官说mysql的可重复读级别下有解决幻读的方式,最后公布了答案,是在sql后面加for update。这么说倒是没错,但是这种问法给我一种奇怪的感觉,因为for update无论在哪个隔离级别下,都能提供x锁进行锁定防止幻读,而next key lock,是x锁的三种实现算法之一,next key lock,也不应该翻译为间隙锁。下面我们一一讲来。

2024-10-31 15:30:33 946

原创 【MySQL】基于MVCC的RR、RC级别事务原理简述

最后,事务A再次查询,生成一个Read View,注意此时事务B已经关闭,不再活跃,也就是说事务B的版本快照对于事务A是可见的,那么事务A再次查询得到的值,就和一开始查询得到的值不一样了,这就是所谓的不可重复读问题。读已提交,是在每次读取时,都生成一个Read View,这样根据m_ids列表中的活跃事务(这些活跃事务的版本快照,属于未提交的脏数据,不读取),去undo log链表中找到可见的版本快照,这样就避免了脏读问题。这两种事务隔离级别,其默认的读的方式,是走的。undo log链表。

2024-10-16 10:33:48 427

原创 【分布式】简述CAP理论与BASE理论

以上三个特点就是CAP原则(又称CAP定理),但是三个特性不可能同时满足,所以分布式系统设计要考虑的是在满足P(分区容错性)的前提下选择C(一致性)还是A(可用性),即:CP或AP。

2024-08-19 21:38:40 546

原创 【设计模式】漫谈设计模式

不过,大人,时代变了。如今已经不是硅谷黄金时代,仅靠个人就可以实现一个火遍全球的商用软件那样英雄主义的事,不复存在,大多数开发者,只是一个开发工作中的小小的分子。我们不得不依靠大量成熟的商用中间件和框架及更易使用的高级语言,这大大加速了我们开发的速度,减轻了我们设计和开发的难度,同时意味着,我们对于设计模式的依赖,变得更小了。设计模式最早是在上个世纪就被人提出来了,如今被奉为圣经,也就是GOF等人写的《设计模式》,其中的设计模式,是指导开发者如何进行开发出高内聚、低耦合、易扩展的好代码的。

2024-08-14 20:41:55 500

原创 【多线程】线程状态与并发三大特性的细节剖析

这篇文章主要用于对于多线程的一些查缺补漏。

2024-08-03 11:19:30 974

原创 【架构】应用保护

这篇文章总结一下应用保护的手段。如今说到应用保护,更多的会想到阿里的sentinel,手段丰富,应用简单。sentinel的限流、降级、熔断,可以自己去试一下,sentinel主要通过配置实现功能,不难。sentinel的简介放在最后。但其实还是有一些别的方式进行应用保护的,这里简单总结下。应用保护的原因,是系统压力太大,负载过高,导致数据库慢查询,应用保护的核心思想是,优先保证核心业务,优先保证大部分用户。

2024-08-01 11:52:40 1061

原创 【架构】网络分发

这篇文章总结一下整个架构中涉及网络分发的部分,如DNS、CDN和代理服务器。

2024-07-31 21:06:41 805

原创 【Win10】记一次蓝屏修复

这个问题出现了很多次,也历经了很长时间。具体的错误进程经常改变,于是笔者怀疑是不是硬件故障,怀疑主板or内存条,不太可能是驱动问题,因为我查了下一直没有升级驱动,重置系统后也没有更改驱动,依然报错。直接搜这个错误代码不太好找原因,于是按照这篇文章[1]来打开错误日志文件。需要先在windows的应用商店中下载WinDbg。去售后检测出是主板问题,换了块主板,ok了。打开桌面上的错误文件后,看到这个。可以看到错误原因[3]

2024-07-31 17:03:36 589

原创 【架构】客户端优化

静态数据不仅包括 传统意义上的页面/图片等,也包括和访问者无关的非个性化数据。如一篇新闻,假设其和用户推荐无关,那么这篇新闻就可以放入CDN中作为静态数据。再比如,有时电商网站访问高峰期,猜你喜欢会关闭动态推荐,改为所有用户推荐一样的数据,那么这些数据也可以作为静态数据,放入CDN或代理服务器缓存中。

2024-07-31 16:38:58 1237

原创 【架构】缓存与数据库:双写一致性、缓存问题

这里我讲的是缓存和数据库,以redis和mysql举例,实际上缓存包括不限于浏览器缓存、redis、memcache、本地缓存guava等等,数据库也有很多种,这里我们仅仅以较常见的redis和mysql举例。

2024-07-26 21:21:58 802

原创 【Zookeeper】两种基于原生zk客户端的分布式锁的实现

基于zk的分布式锁的实现主要依赖zk节点的原子性,可以基于原生zk来自己实现分布式锁,更多的是基于Curator这个框架来直接使用基于zk的分布式锁[1]。这里我们仅仅讨论基于原生zk客户端依赖自己实现的zk分布式锁。原生zk客户端中的一些调用如getChildren方法,可以是同步返回,也可以通过实现AsyncCallback的内部接口来重写异步回调处理逻辑。同步实现[1],这篇文章中缺少了关于"Watcher关注的前面节点状态改变后CountDown"的逻辑,即缺少了Watcher的回调。

2024-06-26 18:30:00 573

原创 【Docker】docker-compose常用的构建docker容器的yml文件

将下方的要使用的内容粘贴进去,根据自己需要添加/删除/修改一下。最后在当前文件夹直接后台启动即可,docker-compose的简单使用方法,在准备好的文件夹中,好要挂载的如data或者conf文件夹,及。的挂载有一些区别[2]

2024-06-12 23:14:19 1652

原创 【Nacos】【踩坑专栏】nacos启动失败:libstdc++.so.6: 无法打开共享对象文件: 没有那个文件或目录

我一开始是怀疑自己没有配置好环境,也确实如此,新装的虚拟机没有官网要求[1]的Java和maven环境(虽然之前安装启动nacos好像也没有maven)。nacos是装在虚拟机上的,这个虚拟机最近重装过,之前装nacos解压缩后直接启动没有问题的,但是重装后在解压缩启动就失败了。再次启动nacos,访问nacos管理页面http://localhost:8848/nacos没有问题。一堆的嵌套异常,最后的那个就是我们要找的最初的异常。即,问题的根源是缺少类库 libstdc++.so.6。

2024-06-12 17:28:43 521

原创 【Linux】另一种基于rpm安装yum的方式

另外,就是还有一种,也是下载压缩包,但是不用apt,而是基于python安装yum[2]。以上两种没有试过,可能会有问题,如第二种方法,python可能会报异常,没有指定的module。此外,也有通过下载压缩包[3],通过解压后基于apt安装yum的方式[1],更加方便快捷(但是我的虚拟机没有自带apt和apt-get)。之前的163的镜像源504网关异常了,网上找到的方法基本都是基于apt,或是基于apt-get。最后,等弄好的时候,我发现之前网关异常的163镜像网站,好了…内心多多少少有点崩溃…

2024-06-07 22:55:28 380

原创 【JVM】调优工具

这里简单介绍一下各种调优用到的工具。

2024-05-14 17:44:37 1063 1

原创 【JVM】从可达性分析,到JVM垃圾回收算法,再到垃圾收集器

深入理解Java虚拟机》[1]中,有下面这么一段话:在JVM的各个区域中,如虚拟机栈中,栈帧随着方法的进入和退出而有条不紊的执行者出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由即时编译器进行一些优化,但在基于概念模型的讨论里,大体上可以认为是编译器可知的),因此这几个区域的内存分配和回收都具有确定性,在这几个区域内就不需要考虑如何回收的问题,当方法结束或者线程结束时,内存自然就跟随着回收了。

2024-05-13 22:45:24 1016

原创 【JVM】从硬件层面和应用层面的有序性和可见性,到Java的volatile和synchronized

Java的关键字volatile保证了有序性和可见性,这里我试着从底层开始讲一下有序性和可见性。

2024-05-03 17:41:21 1004

原创 【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式,讲着讲着越讲越多。JVM这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把标题中的这些的主要知识点都总结一下,不会过深,也不会是太浮于表面的八股文,总结一下比较好记,也省的后面自己再忘了。

2024-05-02 16:05:18 1292 1

原创 【JVM】简述类加载器及双亲委派机制

双亲委派模型,是加载class文件的一种机制。在介绍双亲委派模型之前,我需要先介绍几种类加载器(Class Loader)。

2024-04-30 15:29:34 1149

原创 【RabbitMQ】RabbitTemplate类无法自动注入

在一个spring项目中,添加了spring整合的spring-boot-starter-amqp依赖,以及测试用的spring-boot-starter-test依赖。我发现我在运行时空指针异常,debug发现是因为RabbitTemplate 没有注入成功。这是因为spring的版本比较低,高版本的spring应该是不需要加这个注解的。解决办法是在类上添加注解,

2024-04-10 10:03:32 1276 2

原创 【Maven】个人可用的maven settings文件

这里通过博客备份一个个人用的maven settings文件。如果使用默认的maven settings文件,经常出现plugin加载不出来等问题。而重置系统的时候,maven setting经常忘记备份,因此特地在blog上备份一次。这个xml是结合[1]改动来的,注释掉了其中一些不需要的以及错误的标签。个人改动一下最上方的maven repo地址即可,要和idea中的maven repo地址保持一致。

2024-03-21 15:08:27 636 1

原创 【Linux】安装yum

本文参考的文章[1],但是文章[1]中存在一些问题,就是文章[1]参考的163 mirror的文档的那部分[2],因此在最后一步vim repo那里多此一举搞了一遍163的repo。不仅163的repo连接速度很慢,而且最后repo中的镜像都换成了中科大的ustc镜像,因此实际上163的镜像是没必要替换的。我这里整理了一下后重新写出来,这样更清晰一些。

2024-03-20 16:47:19 376

原创 【Linux】调整字体大小、颜色和背景颜色

初始的背景和字体颜色,是白底黑字。这里的设置和字体大小一样,都是在edit->preference里,不过颜色是在color里调。下面有Text和BackGround(文本和背景)默认颜色的选项,点进去,选择自己想要的颜色即可。而命令行的字体大小和颜色,应在命令行中,打开edit去调整,勾选custom font后,点击选择栏,里面可以选择大小和字体种类。linux初始的系统字体和命令行的字体太小了,需要我们调大。首先系统字体大小,是在application中,进行设置。

2024-03-20 16:23:00 4044

原创 【RabbitMQ】【Docker】基于docker-compose构建rabbitmq容器

本文通过docker-compose构建一个单体的rabbtimq容器。

2024-03-13 20:21:44 2214

原创 【Docker】docker-compose安装

搜索引擎上能搜到的,github的那个网址,curl显示要十几个小时(蛮奇怪,win主机直接访问下载就很快,虚拟机Linux去curl就很慢)。这里有个问题,readme上写着将docker-compose-linux-x86_64复制到图中几个路径之一并改名为docker-compose,我复制到。下载下来后,通过如finalshell等工具,将下载下来的docker-compose-linux-x86_64传到Linux上。所以,干脆自己动手,别再想偷懒,直接去github里去看吧。

2024-03-13 17:38:19 606

原创 【踩坑专栏】追根溯源,从Linux磁盘爆满排查故障:mycat2与navicat不兼容导致日志暴增

问题到这里似乎就明晰了,猜测应该是和navicat和mycat2不兼容,导致mycat2的日志一直暴增。这个虚拟机是我个人的一个虚拟机,mycat连接的一主二从中master的redo log(ib_logfile0 1)、undo log、bin log,从几百k到十几M不等,虽然和那寥寥几条测试数据比起来确实不小,但是跟mycat这8个G的日志比起来也是小意思了。昨天遇到了一个比较奇怪的问题,就是在挂起虚拟机的时候,虚拟机提示我XX脚本正在运行,很奇怪,我没有运行脚本,为什么会提示我这个呢。

2024-02-29 20:41:53 584 2

原创 【MySQL】基于Docker搭建MySQL一主二从集群

本文记录了搭建mysql一主二从集群,这样的一个集群master为可读写,slave为只读。过程中使用了docker,便于快速搭建单体mysql。

2024-02-28 22:23:31 1400 1

原创 【踩坑专栏】主机ping虚拟机失败

最开始我是把虚拟机的网络设置改为桥接模式,问题解决了,但是这种模式的问题就是每次开机,ip都会改变,因此非常麻烦,特别是搭伪集群的时候,更是噩梦。这次就找了一下其他解决办法,发现是将虚拟机网络的“属性”的ipv4中,改为自动获得ip和DNS,就可以解决问题[1]我出现的问题finalshell连接超时,再ping一下,ping通了。所以我就将网络模式改回。,于是发现问题所在。

2024-02-21 17:58:44 564

原创 【Docker】Docker设置开机自启动,及docker启动命令

设置Docker开机自启动[1]docker启动命令[2]

2024-02-21 17:30:44 811

原创 【Docker】docker常用命令简介

查看所有容器(查看正在运行的和已经停止运行的)[1],MyCat应用与实战教程。查看最后一次运行的容器。

2024-02-21 16:12:34 476

原创 【Docker】基于yum安装docker

之前的Linux虚拟机不用了,所以需要重新安装一下docker。这次使用基于yum的方式安装docker,docker可以方便我后续快速部署其他中间件实例。但是这里加的镜像源是docker官方的,在国外所以速度慢,我们需要添加一下国内的镜像源。

2024-02-21 16:06:36 848

原创 ipad作为扩展屏的最简单方式(无需数据线)

在win上的toDesk的设备列表的ipad右侧选择扩展屏模式,win+p,选择扩展选项,可以看到ipad成为了一个默认win桌面的扩展屏。连接ipad,在ipad中输入win设备的设备密码和临时密码,连接上后可以看到ipad会是win屏幕的镜像。我这里是把鼠标向右拖,鼠标指针可以进入扩展屏,如果不成功,上下左右都试试[1]。ipad和win都下载安装toDesk,并且都处于同一局域网下。

2024-02-20 16:27:31 1519

原创 【MySQL】双写、重做日志对宕机时脏页数据落盘的作用的疑问及浅析

首先,我先介绍或者说概括一下双写机制,和重做日志文件。在《MySQL技术内幕 InnoDB技术引擎》[1]一书中,双写机制部分介绍原文如下:如果说Insert Buffer带给InnoDB存储引擎的是性能上的提升,那么doublewrite(两次写)带给InnoDB存储引擎的是数据页的可靠性。当发生数据库宕机时,可能InnoDB存储引擎正在写入某个页到表中,而这个页只写了一部分,比如16kb的页,只写了前4kb,之后就发生了宕机,这种情况被成为部分写失效(partial page write)。

2024-01-29 23:30:49 1125 1

原创 【MongoDB】mongodb安装及启动踩坑点

mongodb的安装,基本上参考文章[1]。但是在过程中,有一些踩坑点。

2024-01-24 18:11:04 1625

原创 【踩坑专栏】控制台输出中文乱码

再次尝试,问题解决。猜测应该是project encoding中的编码格式管不到控制台,控制台里的编码可以由Vm Option来改变。尝试在Project Encoding中将格式改为utf8,未解决问题。本次问题出现是在main方法在控制台输出时,中文出现乱码。

2024-01-24 11:41:25 551

原创 【Redis】【MySQL】redis与mysql的慢查询

redis和mysql都存在对于慢查询的日志记录,下面将叙述一下两者的慢查询。

2023-12-15 20:15:45 402

空空如也

空空如也

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

TA关注的人

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