自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 代理设计模式&JDK动态代理&CGLIB动态代理原理

代理设计模式简介,JDK动态代理简介,原理,CGlib动态代理简单原理

2024-01-22 14:03:52 1070

原创 分布式系统CAP理论与BASE理论

本文主要描述分布式系统中的可用性、一致性、分区容错性, 基本可用、软状态、最终一致性等分布式系统中的概念。

2023-12-08 18:16:04 82

原创 tigase8使用smack库实现群聊

然后用两个用户登录tigase,并进入相同的房间,互发消息可以发现对方能收到。实现群聊和单聊实际差不多,下面给出一个案例供不熟悉的朋友参考。首先引用smack库(整体pom文件都给出好了)直接运行即可测试群聊进组、发消息、退群功能。

2023-11-30 16:12:21 139

原创 一致性Hash算法

一致性哈希算法在1997年由[麻省理工学院](https://baike.baidu.com/item/麻省理工学院/117999)提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。 在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式[哈希表](https://baike.baidu.com/item/哈希表/5981869)( Distributed Hash Table,DHT) 中存在的动态伸缩等问题。

2023-11-28 20:20:20 125

原创 Raft分布式一致性算法

raft是一个用于实现分布式共识的协议。

2023-11-11 16:18:44 106

原创 Kafka基础架构与核心概念

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。架构特点是分区、多副本、多生产者、多订阅者,性能特点主要是高吞吐,低时延。Kafka主要设计特征如下:通过时间复杂度为O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。高吞吐量 :即使是非常普通的硬件机器,Kafka也可以支持每秒数百万的消息。

2023-07-25 14:17:21 1219

原创 消息中间件概述

对消息中间件进行概述,具体描述了消息中间件的含义,消息队列的含义与数据结构,消息中间件使用场景,优缺点,消息中间件选型等方面的内容。

2023-07-15 16:51:08 478

原创 大数据简介&大数据应用场景

大数据(big data),或称巨量资料,指的是所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。大数据是数据集合,信息资产,当这些数据集合大到常规数据库处理软件(如关系型数据库mysql、oracle、DB2等)无法处理,或说难以处理时,此时我们可以认为这类数据为大数据,当然,数据量巨大不过是大数据的一个基础特征,它还具有其它的一些特征。

2023-07-10 19:10:54 288

原创 Helm部署高可用redis k8s分片集群

使用helm部署redis分片高可用k8s集群,介绍redis分片集群搭建过程及服务暴露、客户端使用等内容

2023-05-30 19:50:35 1158

原创 Helm部署高可用rabbitmq k8s 镜像集群

使用helm部署rbbitmq k8s 高可用镜像集群,镜像集群可以对rabbitmq服务进行服务和数据的容灾。随意连接一个节点,创建队列和交互机,把数据发送到队列,所有节点将同步队列的数据,避免在消费数据前数据丢失的风险。然后,如果有消费者对数据进行消费,所有节点对应的数据也将被清理。

2023-05-25 17:11:10 1231 2

原创 Helm部署mysql k8s主从集群

helm是k8s的包管理器,使用helm部署能简化部署过程中需要编写的Yaml文件,本文使用bitnami的helm仓库部署mysql一主二从集群。

2023-05-24 09:40:39 1653

原创 k8s部署mongodb副本高可用集群

mongodb集群部署分两种情况,一是只部署副本机制,不使用分片,另一种情况是使用分片集群。使用分片的情况下会略复杂,但基本部署方法和只部署副本的方法是差不多的,只不过是多了一些角色。这里只介绍部署副本集群到k8s集群。

2023-05-22 09:37:55 2078

原创 Harbor企业docker私服安装及SSL安全访问配置

Harbor将nginx实例用作所有服务的反向代理。将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中。从Docker客户端登录Harbor,确保所有需要使用harbor的节点都能正常登录。另外,将ca.crt证书安装到受信任的根证书机构即可让浏览器承认,显示绿色小箭头。vi harbor.yml,大致更改点参考如下,https先关闭。使用该v3.ext文件为您的Harbor主机生成证书。证书通常包含一个.crt文件和一个.key文件。向Harbor和Docker提供证书。

2023-05-19 19:49:22 694

原创 Maven Nexus3 私服搭建、配置、项目发布(docker方式)

maven nexus私服搭建、配置、项目版本发布等内容

2023-03-21 19:05:36 660

原创 计算机基础-原码、反码、补码

计算机世界里只有0和1,进位时逢二进一,借位时借一当二,称之为二进制。其物理表现形式可能是三极管的通电与断电、也可能是CPU的低电平与高电平。一个数在计算机中的二进制表示形式称之为机器数,机器数是带符号的,最高位表示符号,0为正数,1为负数。通过二进制转换为十进制的数为真值。机器数与真值举例如下 :下面以8位二进制讲解原码、反码、补码的含义与原理。原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种

2023-03-14 14:41:50 3812

原创 Java线程池之线程复用原理解析

一个线程只能执行一个Runnable对象,那么这条线程它就是不能复用的。线程池要实现的就是线程复用。不能说还是一条线程只处理一个Runnable任务,而是一条线程处理无数Runnable任务。最容易想到的方案就是将Runnable对象放到队列中,在Thread类的run方法中不断从队列中拉取任务执行,这样一来就实现了线程复用。当然,实际线程池也差不多是这么干的,下面我们详细看一下线程池实现线程复用的原理。

2023-03-07 10:14:14 1131

原创 Java线程池使用与原理解析2(自定义线程池、合适的线程数量、线程池阻塞队列、线程拒绝策略)

在我们学习了线程池各个参数的含义,线程池任务处理流程,使用线程池的好处等内容,本篇我们学习如何创建一个适合我们业务的线程池。为此,我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小、当线程池没有能力处理任务了该如何使用拒绝策略等内容。

2023-03-06 11:05:14 475

原创 Java线程池使用与原理解析1(线程池优点、使用方法、参数含义及线程池运转机制)

创建线程需要消耗一定的内存、CPU资源,大量的线程也会导致大量的线程上下文切换,上下文切换代码也是相当大的,过多的线程导致频繁切换更是可能使系统性能急速下降。比如下面的例子,创建上万的线程,每个线程打印一下线程名字,观察一下任务管理器,CPU直接用完。线程池就是为了解决上述问题出现的,解决问题的思路很清晰,就是创建好一定数量的线程,有任务来了就用这些线程来执行任务,任务过多把池里面的线程都占用了就放队列排队等候其他任务执行,一旦有空闲线程就可以从队列里面取出任务并执行。

2023-02-24 18:03:59 639

原创 Java多线程并发之内存模型

Java内存模型(Java Memory Model)描述了Java编程语言中的线程如何与内存进行交互,是和多线程相关的一组规范,需要各个 JVM 的实现来遵守 JMM 规范,以便于开发者可以利用这些规范,更方便地开发多线程程序。有了这些规范,即便同一个程序在不同操作系统的虚拟机上运行,得到的程序结果也是一致的。如果没有这些规范,不同操作系统的虚拟机对相同关键字的解释不一致,这是不可接受的。JMM旨在解决 CPU 多级缓存、处理器优化、指令重排等导致的结果不可预期的问题。

2023-02-24 09:51:27 378

原创 Java线程安全

Java Concurrency In Practice》对线程安全的定义如下:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方代码不作其他的协调,这个类的行为仍是正确的,那么称这个类是线程安全的。简单理解就是,多线程环境下访问这个对象,我们不必考虑对象里面方法间协调的问题,对象的行为依然正确。通常这些类自己已经做好了同步等工作,比如,并发访问对象的共享变量时加上锁等同步机制。

2023-02-17 16:51:05 1123

原创 Java多线程优点与代价

当时间片用完,CPU被调度去执行其它线程,此时,当前线程就得通过程序计数器保存当前执行到哪里了,通过本地局部变量表保存本地变量数据,也就是线程执行现场得保留,这个现场就是上下文。CPU密集型任务通常需要大量的计算,因此比较耗CPU资源,而IO型任务,通常是一些网络请求任务,这些任务耗时,不怎么耗费CPU资源,因为在等待IO数据时,CPU是可以被调度去干别的活的。生活中到处都是多线程工作提高效率的例子,试想一个场景,需要将100块砖头从1楼搬到5楼,一个人搬,一次只能搬10块砖头,那这个人他得搬10趟。

2023-02-15 17:20:09 540

原创 Java线程状态转换

所以,如果一个正在运行的线程是 Runnable 状态,当它运行到任务的一半时,执行该线程的 CPU 被调度去做其他事情,导致该线程暂时不运行,它的状态依然不变,还是 Runnable,对应到操作系统,此时状态已变为Ready,因为它有可能随时被调度回来继续执行任务。Java 中的 Runable 状态对应操作系统线程状态中的两种状态,分别是 Running 和 Ready,也就是说,Java 中处于 Runnable 状态的线程有可能正在执行,也有可能没有正在执行,正在等待被分配 CPU 资源。

2023-02-15 11:01:55 741

原创 Java并发编程基础知识简介

并发是指在某个时间段内,多任务交替处理的能力。比如说,你有一台单核心CPU电脑,注意必须是以单核心来理解下面的例子才是正确的。你可以利用电脑边听音乐,边写PPT,还能随时斗上一盘地主。这些事情表面上看起来就是同一时刻在执行多个任务。在同一应用上又可以做多个事情,比如你玩斗地主,程序在播音乐,在处理各个玩家的出牌,还要处理玩家有聊天界面上相互骂娘的任务。在单核CPU电脑上能“同时”处理多个事情,这个叫并发。假设你是多核心电脑,你在电脑时同时进行多个任务,此时叫并行。

2023-02-14 17:14:06 126

原创 MVCC可重复读与幻读测试

因此当事务B提交了新记录后,事务A 再去查询时,由于读视图生成时,事务B提交的记录 根据数据可见 算法,事务A并不能读取(事务版本大于等于事务A的读视图的最大事务+1)。当事务 A提交后,再去读,相当于开启了新的事务,此时再读,无疑是可以读取的。测试结果表明,在第三处,新添加行并没有被读取出来,依然读的是之前的数据,但原本course_name为“音乐”的这一行读出来已经变成了“美术1”。情况四:如果把更新操作改成更新在事务B中新添加的行,结果就不一样,此时在第三处,能读到新添加的行,也就是出现了幻读。

2023-01-28 16:47:59 127

原创 MVCC多版本并发控制实现原理

InnoDB 是一个数据多版本的存储引擎。它保留有关已更改行的旧版本的信息,以支持并发性和回滚等事务性特性。此信息存储在系统表空间中,或在undo 表空间中称为回滚段的数据结构中。InnoDB使用回滚段中的信息来执行事务回滚中所需的撤消操作,它还会使用这些信息来构建具有一致性读的行的早期版本(即多版本快照读)。

2023-01-28 16:24:47 1016

原创 InnoDB的ACID模型

ACID模型是一套重视业务数据和关键应用的可靠性的数据库设计原则。Mysql的InnoDB存储引擎严格遵循ACID模型,这样数据不会因软件崩溃和硬件故障等异常情况导致损坏。当你依赖于ACID特性时,你不需要重新发明一致性检查和故障恢复机制的轮子。如果你有额外的软件保障措施、超可靠的硬件,或者能够容忍少量数据丢失或不一致的应用程序,你可以调整mysql设置,以交换一些ACID的可靠性更大的性能或吞吐量。: atomicity,原子性: consistency,一致性isolation,隔离性。

2023-01-03 18:53:13 235

原创 tigase8集群高可用

tigase8集群化搭建按官方文档来看,是很容易整的,但实际上,坑不少。摸索了好几天终于把tigase8集群化搞出来了。主要参考官方文档来安装:集群配置。

2022-08-16 17:01:44 1048

原创 Helm部署rancher 高可用集群

Helm部署rancher 高可用集群,使用自签SSL证书方式和使用官方cert-manager两种高可用搭建方式

2022-08-16 16:39:16 2852 1

原创 RKE部署高可用Kubernetes集群

RKE简介RKE全称Rancher Kubernetes Engine,是一个快速的,多功能的 Kubernetes 安装工具。通过RKE,我们可以快速的安装一个高可用K8S集群。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows。K8S原生安装需要的先决条件较多,比如说需要预安装kubeadm,kubectl,配置网络等一系列繁琐的工作。而使用RKE安装k8s,基本上只要docker版本是当前RKE版本支持的即可。Rancher简介。...

2022-08-11 14:16:27 3151

原创 mysql性能优化

数据库优化维度有四个:硬件升级、系统配置、表结构设计、SQL语句及索引。优化选择: 优化成本:硬件升级>系统配置>表结构设计>SQL语句及索引。 优化效果:硬件升级<系统配置<表结构设计<SQL语句及索引。 系统配置优化保证从内存中读取数据MySQL会在内存中保存一定的数据,通过LRU算法将不常访问的数据保存在硬盘文件中。尽可能的扩大内存中的数据量,将数据保存在内存中,从内存中读取数据,可以提升MySQL性能。扩大innodb.

2022-04-02 17:59:18 1278

原创 Tigase8使用smack库实现聊天

依次执行这两份代码则可以看到,admin和kmning都能收到来自对方的消息。当然,后登录的一个收到的可能是离线消息,因为当消息发出去,对方不在线时,tigase会将消息放到离线消息表里面,对方上线后再将消息发出去。kmning登录,给admin发一条消息并接收来自admin的消息。

2022-03-16 11:34:31 570 1

原创 Tigase8 SSL安全连接配置与代码实现

SSL安全连接tigase版本:8.1.2默认tigase在certs目录下有tigase自签证书,参考:Server Certificates备份tigase原certs目录(里面的域名证书,如ubuntu.pem是使用开源ca创建的,参考上面的文章),然后把我们自定义生成的服务证书(pem格式,包括证书和私钥内容)放置到certs目录,然后客户端使用服务端的crt证书(不包含私钥)即可。不用ca签,使用自己的key来签(虚拟机:192.168.43.23)输入密码并记住opens

2022-03-16 11:19:33 7294

原创 Oauth2知识总结

官网:OAuth Community SiteOAuth是一个关于授权(authorization)的开放网络工业标准,允许用户授权第三方应用访问用户存储在其它应用上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本。An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop ap

2022-03-11 20:39:44 1660

原创 Redis数据结构-链表实现

链表提供了高效的节点重排能力, 以及顺序性的节点访问方式, 并且可以通过增删节点来灵活地调整链表的长度。作为一种常用数据结构, 链表内置在很多高级的编程语言里面, 因为 Redis 使用的 C 语言并没有内置这种数据结构, 所以 Redis 构建了自己的链表实现。链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层实现。举个例子, 以下展示的 int

2022-03-08 15:28:39 208

原创 Redis数据结构-整数集合

整数集合(intset)是集合键的底层实现之一: 当一个集合只包含整数值元素, 并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。举个例子, 如果我们创建一个只包含五个元素的集合键, 并且集合中的所有元素都是整数值, 那么这个集合键的底层实现就会是整数集合:redis> SADD numbers 1 3 5 7 9(integer) 5​redis> OBJECT ENCODING numbers"intset"在这一章, 我们将对整数集合及

2022-03-08 15:20:26 431

原创 Redis数据结构-字典的实现

字典, 又称符号表(symbol table)、关联数组(associative array)或者映射(map), 是一种用于保存键值对(key-value pair)的抽象数据结构。在字典中, 一个键(key)可以和一个值(value)进行关联(或者说将键映射为值), 这些关联的键和值就被称为键值对。字典中的每个键都是独一无二的, 程序可以在字典中根据键查找与之关联的值, 或者通过键来更新值, 又或者根据键来删除整个键值对, 等等。字典经常作为一种数据结构内置在很多高级编程语言里面, 但 Re

2022-03-06 11:49:30 400

原创 Redis数据结构-字符串对象(SDS)

Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。在 Redis 里面, C 字符串只会作为字符串字面量(string literal), 用在一些无须对字符串值进行修改的地方, 比如打印日志:redisLog(REDIS_WARNING,"Redis is now ready to exit,

2022-03-05 18:20:01 204

原创 Redis数据结构-跳跃表

跳跃表(skiplist)是一种有序数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的。跳跃表支持平均 O(log N) 最坏 O(N) 复杂度的节点查找, 还可以通过顺序性操作来批量处理节点。在大部分情况下, 跳跃表的效率可以和平衡树相媲美, 并且因为跳跃表的实现比平衡树要来得更为简单, 所以有不少程序都使用跳跃表来代替平衡树。Redis 使用跳跃表作为有序集合键的底层实现之一: 如果一个有序集合包含的元素数量比较多, 又或者有序集合中元素的成员(membe

2022-03-05 17:01:58 1723

原创 Openfire通过rest-api-client操作用户例子

简单的介绍了如何利用rest api操作openfire用户信息,除此之外,RestApiClient还有创建群聊、管理房间成员、管理group等功能

2022-03-03 19:17:54 634

原创 Openfire rest-api-client设置与使用

通过rest-api-client来管理用户、群组等信息。服务端设置 openfire服务端安装REST API插件 openfire服务端设置rest api 下面有个超链接可以看rest api的文档:http://www.test.com:9090/plugin-showfile.jsp?plugin=restapi&showReadme=true&decorator=nonehttp管理端口默认为9090,安全端口为9091,我们操作api也.

2022-03-03 19:13:04 1033 5

阿里巴巴Java开发手册(终极版)

阿里巴巴Java开发手册终极版1.3.0。首次公开阿里官方Java代码规范标准。这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大降低代码维护成本。

2017-12-20

空空如也

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

TA关注的人

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