- 博客(54)
- 收藏
- 关注
原创 MySQL 索引设计-唯一索引与普通索引
综上,普通索引的性能还是比uk还是要好一些的,但也并不绝对,而且前面讨论的大前提是「业务代码已经保证不会写入重复数据」,如果业务不能保证,或者业务就是要求数据库来做约束,那么没得选,必须创建uk。...
2022-07-19 00:13:58
859
1
原创 浅谈 MySQL 写数据一致性保障机制
MySQL是通过2PC来保证写数据一致性的,具体步骤如下。redo-logredo-logpreparecommitbinlogbinlogredo-logcommit。
2022-07-15 00:31:20
1262
原创 浅谈Redis sentinel 哨兵模式
为了解决主从模式不能failover的缺点,Redis提出了sentinel哨兵模式。哨兵是一个运行在特殊模式下的Redis进程,其和主从库实例同时运行,主要负责监控、选主、通知三个任务。
2022-07-14 21:00:23
386
原创 浅谈 Redis 主从模式
在 Redis 主从模式下,主库负责处理读写命令以及向从库同步最新数据,从库只负责处理读命令。当我们启动多个 Redis 实例的时候,它们相互之间就可以通过 (Redis 5.0 之前使用 )命令形成主库和从库的关系。 → 从节点发送同步命令给主节点发送 同步命令,要进行数据同步。(同步命令的版本迭代:sync性能太差→psync→)主库收到 psync 命令后,会用 响应命令(表示触发全量复制)并带上两个参数:。从库收到响应后,会记录下这两个参数。 → 首次连接,触发全量复制。主库执行 命令,生成
2022-07-14 16:13:52
399
原创 浅谈 AOF 重写机制
AOF重写可以产生一个新的AOF文件,这个新的AOF文件和原有的AOF文件所保存的信息一样,但体积更小,可以节省 Redis 的空间。AOF重写之所以有日志瘦身的作用,原因在于其可以将旧日志文件中的多条命令,在重写后的新日志中变成一条命令。比如对一个list里面的元素写了又删,我就可以合并为一条命令 → 。如果不进行AOF重写,会导致AOF文件越来越大,从而产生性能问题:AOF重写不会阻塞主线程,其重写过程是由后台子进程 来完成的,从而避免了性能下降。具体流程如下:...
2022-07-14 11:41:07
1702
1
原创 浅谈 Redis 持久化的几种方式
因为 Redis 是基于内存的,如果发生宕机等异常情况,则会导致数据丢失,而这对很多业务来说是不可接受的,因此我们需要引入相应的持久化机制来保障数据的安全性。RDB是Redis默认的持久化方式,其会每隔指定时间将内存的数据以快照的形式保存到硬盘中,所以在做数据恢复时,我们可以直接把 RDB 文件读入内存,很快完成恢复。Redis 提供了两个命令来生成 RDB 文件,分别是 。以bgsave为例,为了保证在RDB持久化时不影响主线程的正常读写,其利用了COW(copy-on-write)机制。持久化,会将Re
2022-07-14 11:33:40
318
原创 浅谈 Kafka Leader Epoch
为了解决只使用高水位而导致数据丢失或数据不一致的问题,Kafka 引入了Leader Epoch。Leader Epoch,可以认为是 Leader 版本。它由两部分数据组成:Broker 会在内存中为每个分区都缓存 Leader Epoch 数据,同时它还会定期地将这些信息持久化到一个 checkpoint 文件中。当 Leader 副本写入消息到磁盘时,Broker 会尝试更新这部分缓存。如果该 Leader 是首次写入消息,那么 Broker 会向缓存中增加一个 Leader Epoch 条目,否则就
2022-07-06 21:33:25
1039
原创 浅谈Kafka High Watermark
HW即,高水位,经典定义如下:「在时刻 T,任意创建时间为 T’,且 T′≤TT'≤TT′≤T 的所有事件都已经到达或被观测到,那么 T 就被定义为水位」。一般而言高水位都用时间戳来表示,但是Kafka中并不是这样做的,在Kafka中高水位是用位置信息即消息位移来表示的。高水位以下的消息被认为是已提交消息,反之就是未提交消息。消费者只能消费已提交消息 → 等于HW的也是不能被消费的。 表示副本写入下一条消息的位移值。介于高水位和 LEO 之间的消息就属于未提交消息。 → 同一个副本对象,其高水位值不会大于
2022-07-06 21:28:21
1317
原创 浅谈Kafka Broker 请求处理流程
首先,无论是 Kafka 客户端还是 Broker 端,它们之间的交互都是通过请求-响应的方式完成的。Kafka 自己定义了一套请求协议,用于实现各种各样的交互操作,所有的请求都是通过 TCP 以 Socket进行通讯的。比如 请求是用于生产消息的, 请求是用于消费消息的, 请求是用于请求 Kafka 集群元数据信息的。因为采用顺序请求的方式吞吐量太低,采用每个请求对应一个线程的方式开销太大,所以Kafka采用Reactor设计模式(1 + M + N) → 经典高并发IO设计模式 来处理请求。在这个架构
2022-07-05 16:16:11
590
原创 IoC和DI的区别
即。这里的控制指的是对程序执行流程的控制,而反转指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程可以通过框架来控制。流程的控制权从程序员反转到了框架。 → 例如Spring框架控制反转并不是一种具体的实现技巧,而是一个比较笼统的设计思想,一般用来指导框架层面的设计。 → 实现控制反转的方法有很多,像模板设计模式、依赖注入等。即。依赖注入跟控制反转恰恰相反,它是一种具体的编码技巧。DI简单来说就是:不通过 new() 方式在类内部创建依赖类对象,而是将依赖的类对象在外
2022-06-26 23:11:19
194
原创 浅谈Java线程的生命周期
在Java中线程的生命周期中共有6种不同的状态:状态转换图如下所示:只有「线程等待 synchronized 的隐式锁」这种场景才会发生上述状态转换。当等待的线程获得 synchronized 隐式锁时,就又会从 BLOCKED 转换到 RUNNABLE 状态。Q:线程调用阻塞式 API 时,是否会转换到 BLOCKED 状态呢?A:在操作系统层面,线程是会转换到休眠状态的,但是在 JVM 层面,Java 线程的状态不会发生变化。因为在 JVM 看来,等待 CPU 使用权(操作系统层面此时处于可执行状态
2022-06-13 15:26:54
230
原创 浅谈享元设计模式
享元模式是一种结构型设计模式,它的意图是复用对象,从而节省内存,且前提是享元对象是不可变对象。之所以要求享元是不可变对象,是因为它会被多处代码共享使用,避免一处代码对享元进行了修改,影响到其他使用它的代码。实际上,不仅仅相同对象可以设计成享元,对于相似对象,我们也可以将这些对象中相同的部分(字段)提取出来,设计成享元,让这些大量相似对象引用这些享元。享元模式的代码实现非常简单,主要是通过工厂模式,在工厂类中,通过一个 Map 或者 List 来缓存已经创建好的享元对象,以达到复用的目的。享元模式对GC并不友
2022-06-12 20:21:21
184
原创 如何设计一个简单的KV数据库
从前到后依次需要考虑的内容如下,下面的内容仅供设计一个简单的KV数据库。如果想要实现一个功能更强的KV数据库的话,还需要考虑:更加丰富的数据类型、数据压缩、过期机制、数据淘汰策略、集群化、高可用等功能,另外还可以增加统计模块、通知模块、调试模块、元数据查询等辅助功能。对于KV数据库而言,其基本的数据模型是KV模型,K一般是String类型,V可以是多种类型,比如String、Hash、List等等。像Memcached的V只能是String类型,Redis的V支持String、Hash、List、Set等
2022-06-03 08:59:33
2253
原创 浅谈Kafka消息压缩
概述Kafka目前支持GZIP、Snappy、LZ4、zstd、不压缩这几种压缩算法。在开启压缩时,Kafka会选择一个batch的消息一起压缩,这样的一批消息就是一个压缩分段,我们也可以通过参数来控制每批消息的大小。在 Kafka 中,生产者生成一个压缩分段发给broker,在broker中是不会解压这个压缩分段的(因为在kafka中一个batch的消息在broker中是不会拆分的,自然也不会进行解压),最后压缩分段由消费者进行解压。Kafka通过这种设计,降低了broker中CPU资源的消耗,同时
2022-05-21 20:27:54
3565
原创 浅谈消息队列的几种消息模型实现
MQ发展到现在共有两种模型:队列模型、发布-订阅模型队列模型它允许多个生产者往同一个队列发送消息。但多个消费者之间是竞争的关系,也就是说一条消息只能被其中一个消费者接收到,读完即被删除。发布-订阅模型如果需要将一份消息数据分发给多个消费者,并且每个消费者都要求收到全量的消息,队列模型是无法满足这个需求的。一个可行的方案是:为每个消费者创建一个单独的队列,让生产者发送多份。这种做法比较笨,而且同一份数据会被复制多份,也很浪费空间。而且还有一个问题,生产者必须要知道有多少个消费者,为每个消费者单独发
2022-05-20 12:51:25
657
1
原创 浅谈RPC中的健康检测
为什么需要健康检测客户端在进行请求时需要选出一个健康的服务提供方IP,但是网络本身是不稳定的,我们无法保证提供的IP一定是健康的。因此我们需要引入健康检测机制,让调用方实时感知到服务节点的状态变化。(这里的客户端指注册中心)如何实现健康检测最常用的方法就是**「心跳机制」**,即调用方每隔一段时间给服务提供方发一个心跳包,询问节点状态。首先需要引入节点的三种状态:健康状态:建立连接成功,并且心跳探活也一直成功亚健康状态:建立连接成功,但是心跳请求连续失败死亡状态:建立连接失败
2022-05-20 10:47:55
318
原创 浅谈BloomFilter
什么是布隆过滤器布隆过滤器是一个由位数组和一系列随机映射函数两部分组成的数据结构。相较于List、Map 、Set 等数据结构,它占用的空间更少并且效率更高,但是缺点是其返回的结果不一定准确,存在误判的可能。理论情况下添加到其中的元素越多,误判的可能性就越大。而且存放在其中的数据不容易删除。因为位数组中的每个元素都只占用 1bit1 bit1bit ,并且每个元素只能是 0 或者 1。这样申请一个 100w个元素的位数组只占用 1000000bit/8=125000Byte=125000/1024kb≈
2022-05-19 22:37:10
264
原创 Kafka中必知必会的基础概念
Broker:Kafka服务端,负责接收和处理生产者和消费者的请求。Producer:生产者。Comsumer:消费者。ComsumerGroup:消费(者)组,多个消费者可以组成消费组,消费组保证每个Partition只能被消费者组中的一个消费者使用,避免重复消费。如果消费者组内一个消费者失效,消费组可以通过Rebalance重新分区,接管失效消费者的工作。Relalance:重平衡,消费组内消费者实例数量变更后,其他消费者实例重新分配消费订阅主题的分区。Record:消息,Kafka处理的基本
2022-05-14 13:21:27
331
原创 Java异常处理机制总结
异常继承体系结构在Java 中,类 Throwable 是整个异常处理机制的最高父类,它有两个子类 Error 和 Exception ,分别代表Java中的「错误」和「异常」。我们平常开发中提到的异常其实指的是 Exception ,因为 Error 对我们程序员而言是不可控制的,他往往是由于虚拟机内部出现问题导致的,例如:内存不足导致栈空间溢出,虚拟机运行故障等。一般这种情况,虚拟机将直接线程终止,并通过 Error 及其子类对象回调错误信息。Exception 异常主要分为两类
2022-05-13 17:02:06
1325
原创 记一次 TypeError: Cannot read property ‘xxx‘ of undefined 排错经历
好久没写Blog了,主要是平时课程太多,还得学课内的哪些玩意儿,几乎没啥充电时间了(才不是因为自己太懒了=,=问题如下:目前在做一个前后端分离项目,前端vue,后端springcloud,测试一个edit功能,前后端写完后进行联调测试,发现前端虽然能收到后端传来的数据,却无法回显到页面上报错信息如下:相关代码如下:点进Object中查看详细信息:发现出现这个异常,猜想是ES严格模式的锅,但禁掉严格模式后问题仍没有解决,后去StackOverflow中查找相关问题,发现一篇类似的如下:.
2021-06-11 15:57:42
8830
原创 通过Java将数据导入phoenix失败问题解决
问题描述在项目中要实现一个将数据通过phoenix保存到hbase的操作,功能实现后经测试,虽在日志中并没有报错,但是数据就是导不进phoenix中。也是在这个问题上困惑了好久,最后经高人提点才将这问题解决(自己还是太辣鸡了=,=)。问题分析出错的代码如下,有经验的一眼就可以看出错误了:if (data != null && data.size() > 0) { String sql = genUpsertSql(tableName.toUpperCa
2021-03-13 00:26:28
565
2
原创 基于Java的简易ORM实现
项目需要实现一个动态分流功能,需要获取各种数据表的配置信息,最终决定将配置信息写入Mysql中,做周期性同步,因业务不是很复杂,就不适用市面上主流的ORM框架了,于是自行编写工具类从Mysql中读取配置表写入到entity中,也趁此复习了一下ORM,泛型,反射等(基础知识还是不过关啊…)话不多说直接上代码吧: /** * @param sql sql语句 * @param clazz 对象所对应的类
2021-03-09 00:40:45
331
原创 HBase完全分布式部署后没有System Tables问题解决
问题描述先介绍一下我的集群各组件的版本hadoop-3.1.3zookeeper-3.4.10hbase-2.0.5问题如文章标题所示,进入web界面后下面两表并不存在,在hbase shell中执行list操作两表依然不存在:解决思路我们知道hbase自身并不支持HA,一般我们都是借助zk来实现hbase的HA的。而我们在配置HBase完全分布式时都会在hbase-env.sh中写入配置export HBASE_MANAGES_ZK=false来禁用其自带的zookeeper。而此处
2021-03-08 12:34:17
1083
1
原创 关于Java泛型类型擦除引发的问题及解决方案
问题描述今天用flink的java版本写项目遇到了一个我颇感奇怪的问题出错的代码如下:OutputTag<String> pageTag = new OutputTag<>("page");没什么特别的,就是一个简单的创建侧输出流tag报错如下:Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: Could not determine TypeIn
2021-03-07 18:01:15
1222
4
原创 IDEA maven plugin Cannot resolve symbol ‘xxx‘问题解决
问题描述maven工程打包时发现<goal>repackage<\goal>没有识别解决思路初步判断自己的maven repository中没有相应依赖,去https://mvnrepository.com/中查找相关依赖引入项目中:问题解决tips其他的‘Cannot resolve symbol ‘xxx’ ’问题也可用上述思路解决...
2021-03-03 23:27:56
2068
1
原创 Kotlin语法备忘录[自用]
早就听说Kotlin这门语言挺香的,学了一下后发现果真如此,但自己Java用多了后写Kotlin时总是会留下各种Java后遗症,故特此写篇博客记录一下Kotlin中自己容易忘记的语法
2020-11-10 20:12:07
204
原创 SQL指定时间段汇总(持续更新ing...)
在sql中处理时间永远是本sql boy的一大痛点,俗话说的好,好记性不如烂笔头,趁此机会记录自己工作中遇到的sql时间处理的问题,以后记不住直接来这里看就行了=,=指定到月eg:数据类型:order_date DATE数据格式:yyyy-mm-dd要求:查出2020年二月的全部数据## 1.order_date BETWEEN '2020-02-01' AND '2020-02-29'## 2.order_date like '2020-02%'## 3.DATE_FORMAT(
2020-10-28 23:36:34
926
原创 Flink1.10.2 No implicits found for parameter evidence$xx 问题解决
这错犯了好多次了,在spark中也犯过类似的错误,趁着这次抓紧记录下来吧=,=报错如下解决方案隐式转化的锅,加上下面这句话即可import org.apache.flink.streaming.api.scala._其他同类型的问题也可按照此方式导相应的包解决...
2020-10-12 11:25:51
174
1
原创 Hive rank(),dense_rank(),row_number()区别
函数应用场景TopN问题区别rank():有多个值相同的会发生排名跳跃eg:score sort1 11 14 35 4dense_rank():多值相同不会跳跃eg:score sort1 11 14 25 3row_number():执行严格的顺序排序,不会发生排名重复的情况eg:score sort1 11 24 35 4...
2020-09-16 17:32:14
255
原创 CentOS7克隆虚拟机后无法上网问题解决方案
老早之前就遇到这个问题了,刚好想起来,趁着这机会记录下来吧以下是解决方案:进入虚拟机设置的网络适配器点击高级生成新的MAC地址并做好记录进入虚拟机输入以下命令生成UUID并做好记录uuidgen输入命令对下面的文件进行修改vim /etc/sysconfig/network-scripts/ifcfg-ens33将之前获取的UUID和HWADDR填入其中进入设置中将IPv4 Method设置为自动重启虚拟机再次进入发现可以正常上网...
2020-09-14 22:51:37
1606
原创 执行xcall脚本出现command not found问题解决方案
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码
2020-09-01 09:44:47
2076
1
原创 Hadoop win10 hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z报错解决方案(亲测有效)
IDE:IDEAjava版本:java8hadoop版本:2.7.2windows版本:win10错误如下Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Nat
2020-08-07 13:39:04
399
原创 OpenFeign调用失败 feign.FeignException$InternalServerError: status 500 reading xxx 解决方案
在项目中用OpenFeign做生产者调用,结果消费者调用失败,并报出如下错误:XXXX 14:11:59.302 ERROR 19596 --- [io-10000-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nes
2020-07-04 14:35:08
23108
7
原创 2020版IDEA的dashboard显示方法
做微服务项目时总是被一个个的module给搞的焦头烂额,自从用了IDEA的dashboard后瞬间爽歪歪,前几天把IDEA更新到2020版本后发现dashboard不见了,找了好久也没有找到,最后好不容易发现这家伙竟然改名了=,=因为对自己的记忆力极度不自信,所以还是写一篇文章把方法记录下来吧。以下是让其重新显示的方法:打开view中的Tool Windows就可以看见改名后的dashboard啦!用他来管理springcloud 的模块只需进行如下操作:添加SpringBoot Run Co
2020-06-08 17:31:31
2702
3
原创 Mybatis-Plus org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题解决方案
maven项目,进行测试时发现如下错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.atguigu.eduservice.mapper.EduCourseMapper.getPublishCourseInfo at com.baomidou.mybatisplus.core.override.PageMapperMethod$SqlCommand.<init>(Pag
2020-06-07 21:05:23
1170
原创 关于使用CSS的float属性后导致button按钮无法点击问题解决
测试后台页面的添加功能,结果发现按钮怎么也点击不了在点击编辑按钮的时候光标并不会变成小手指(QQ截图截不到鼠标=,=):下面是出问题的代码:猜测是写了什么奇怪的CSS样式覆盖到了按钮图层的上面,于是查看CSS代码:果然不出意料,由于float属性的原因,图层被覆盖了。于是注掉p标签的float属性:返回页面中再次点击编辑按钮:果然弹框出现了,问题解决因为自己并不是搞前端的,对css也只是处于了解,会百度的程度,这次解决问题也纯属是靠感觉=,=,如果有哪里不严谨的地方还敬请各位前端大
2020-06-06 18:15:25
5080
4
原创 Vue中使用TinyMCE报错Uncaught SyntaxError: Unexpected token..及Cannot read property ‘init’ of undefined问题解决
给后台管理系统添加描述功能,决定使用流行的TinyMCE富文本编辑器作为辅助插件。按照网上的配置操作了一下测试的时候发现不能完整的显示编辑器,只有上传图片一个按钮:打开F12查看报错信息如下:Uncaught SyntaxError: Unexpected token '<'......[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'init' of undefined"found in---&g
2020-06-05 20:41:59
5306
4
原创 JS ReferenceError: ‘xxx’ is not defined at VueComponent.subjectLevelOneChanged...问题解决
测试后台管理模块的一个二级联动选择功能,结果测试发现啥玩意都没显示打开F12一看,提示出如下错误:该属性没定义?返回代码区查看:果然如此可以发现使用的subjectOneList属性是在data中定义的:额。。发现问题了=,=这种属性在使用的时候应该用this关键词来修饰,不然是调用不到的,只会当作未定义处理所以在属性前面添加上this修饰:重新测试,问题解决PS:这么基础的东西竟然都会出错=,=真是基础不牢地动山摇啊,找时间再把JS基础好好复习一下...
2020-06-05 16:34:55
4454
1
原创 Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource...解决方案
SpringCloud项目实现阿里云OSS服务,搭建项目测试的时候出现以下问题:2020-05-28 15:15:24.071 INFO 1324 --- [ main] com.atguigu.oss.OssApplication : Starting OssApplication on LAPTOP-MNTNVTLB with PID 1324 (E:\IDEAProjects\guli_parent\service\service_oss\target\cl
2020-05-28 15:45:59
336
原创 Mybatis-Plus自动填充之坑:Error updating database.Column 'xxx' cannot be null 解决
早就想把这个坑给写出来了,可自己记性实在是差,竟然给忘记了。结果今天又遇到了这个坑,赶紧把它给记录下来=,=写个小项目,测试update数据,结果给我爆出了如下错误提示:2020-05-10 11:29:46.805 ERROR 6592 --- [nio-8001-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with pat
2020-05-10 11:45:49
6015
10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人