自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 资源 (4)
  • 收藏
  • 关注

原创 搭建 prometheus + grafana + springboot3 监控

1、解压 grafana-enterprise-9.4.1.windows-amd64.zip,双击bin目录下的grafana-server.exe,启动grafana。如果你的微服务打印了请求日志,会看到每隔15S,Prometheus就会请求 actuator/prometheus 接口获取微服务的监控数据。选择jvm_buffer_count_buffers,点击Execute,即可查看jvm_buffer_count_buffers信息。就可以监控cloud-web-01服务的JVM了。

2024-01-29 23:26:35 1560

原创 分布式事务解决方案——TCC

tcc

2023-02-14 20:28:46 1707 1

原创 2PC(两阶段提交)方案

seata

2023-02-14 20:26:28 437

原创 CAP和BASE理论

CAP、BASE

2023-02-14 20:20:42 435

原创 Ubuntu-22 live-server安装完成后的配置

ubuntu 22

2023-01-05 21:37:46 2325

原创 Kubernetes Pod 水平自动扩缩

Pod 水平自动扩缩(Horizontal Pod Autoscaler,简称HPA) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。 控制器会周期性地调整副本

2021-11-04 15:47:55 996

原创 Java8 HashMap源码解析

HashMap底层数据结构HashMap底层数据结构是 数组 + 链表,当链表长度大于等于8,链表将转为红黑树。HashMap的一些重要成员变量// 初始容量大小,1左移4位是10000,转为十进制是16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/** * 同时满足 HashMap元素超过64个,且链表长度超过8 才将链表转为红黑树 */// 树化阀值static final int.

2021-11-03 22:14:29 591

原创 Istio 笔记三 部署 Bookinfo 应用

官方地址:https://istio.io/latest/zh/docs/examples/bookinfo/笔记部署bookinfo应用# 进入istio目录cd istio-1.9.2/# 查看default命名空间是否自动注入Sidecarkubectl get namespaces --show-labels# 若没有自动注入Sidecar,则要开启自动注入Sidecarkubectl label namespace default istio-injection=ena

2021-04-21 22:47:51 562

原创 Istio 笔记二 使用 Istio 的 Ingress Gateway

上一篇安装好Istio后,本篇使用 Istio 的 Ingress Gateway官方教程地址https://istio.io/latest/zh/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-i-p-and-ports以下是学习过程的整理安装 httpbin 提供http服务# 进入Istio目录cd istio-1.9.2/# default命名空间启用sideca

2021-04-21 22:46:49 1470 1

原创 Istio 笔记一 使用 Helm 安装 Istio 1.9.2

集群基本信息1、使用VirtualBox创建了3台虚拟机,安装Centos7操作系统。2、基于Kubernetes V1.20,有一个master节点、两个worker节点。3、本教程会安装istio-ingress,若集群已经安装了ingress-controller,请删除。开始安装1、下载Istio发行版官方提供了自动下载解压脚本curl -L https://istio.io/downloadIstio | sh -进入istio目录,我下载的是 istio-1.9

2021-04-19 19:54:48 1488

原创 VirtualBox 使用 NAT网络、仅主机(Host-only)网络 实现双网卡上网并与宿主机连接。

Virtual Box支持多种网络,如下图所示网络地址转换(NAT):1、虚拟机可以上网。2、默认情况下,主机无法连接虚拟机。3、虚拟机与虚拟机不能相互连接,使用此网络模式的虚拟机,VirtualBox会给每个虚拟机单独创建一个NAT设备,虚拟机与虚拟机是无法相互连接的。桥接网卡:1、虚拟机可以上网。2、主机能连接虚拟机,虚拟机也可以连接主机。3、虚拟机与虚拟机能相互连接。仅主机(Host-Only)网络:1、虚拟机不能上网。2、主机能连接虚拟机,虚拟机也可以

2021-04-05 17:49:26 10339 7

原创 helm的安装、使用以及自定义Chart

Helm概述Helm 是一个 Kubernetes 的包管理工具,类似Linux 的包管理器,如RedHat系的yum、Debian的apt,可以很方便的将之前打包好的 yaml 文件部署到 Kubernetes 上。Helm主要解决以下问题:1、把yaml作为一个整体管理。2、实现yaml的高效复用。3、实现应用级别的版本管理。当前 Helm 已经升级到V3版本,相比于V2版本主要变化如下:1、 最明显的变化是删除了 Tiller 。2、 Release 名称可以在不同命名空间重用。3、.

2021-01-01 19:50:24 10961

原创 投射数据卷Secret、ConfigMap、DownwardAPI

Projected Volume译为“投射数据卷”,与普通的volume不同,投射数据卷不是用于实现宿主机与容器共享数据,而是用于将预先定义好的配置应用在容器中,就像是把配置投射到容器中。常见的Projected Volume有三种:Secret、ConfigMap、DownwardAPI。Secretsecret 用来给 Pod 传递敏感信息,例如密码。secret被存储在ETCD中,信息使用base64加密。查看secretkubectl get secret将“user”、“pwd

2020-12-27 14:28:19 426

原创 Kubernetes部署策略:重建、滚动更新、蓝绿部署、金丝雀部署

Kubernetes原生支持重建、滚动更新两种部署策略。通过修改Service的label,切换流量转发到后端特定Pod可以实现蓝绿部署、金丝雀部署。部署前的准备1、需要有一个k8s集群。没有可查看此博客https://blog.csdn.net/u010606397/article/details/898179582、安装ingress控制器。下载mandatory.yaml、service-nodeport.yaml文件可能会被墙,请走代理。wget https://raw.githu.

2020-12-26 13:14:07 1472

原创 harbor安装与使用

安装harbor-1.6.0版本,github地址:https://github.com/goharbor/harbor/blob/release-1.6.0/docs/installation_guide.md服务器硬件要求:CPU > 4个内存 > 4G硬盘 > 40G软件环境要求:官方给出的安装脚本使用docker-compose安装harbor1、安装docker。按此教程安装https://blog.csdn.net/u010606397/artic.

2020-12-26 11:46:40 1457

原创 Linux后台运行Java程序命令详解

nohup java -jar -Xms512m -Xmx512m app3.jar > /var/log/java/app3.log 2>&1 &上面是后台运行Java程序,并将日志输出到 /var/log/java/app3.log的Linux命令,本文将详细分析此命令。java -jar -Xms512m -Xmx512m app3.jar 这条命名是运行app3.jar,并将最大堆内存、最小堆内存设置为512m。...

2020-12-18 20:49:04 2846

原创 Linux安装nginx并配置HTTPS

CentOS7安装nginx有两种方式:编译源码安装、yum安装。编译源码安装nginx下载nginx源码包http://nginx.org/en/download.html也可以使用wget命令直接下载wget http://nginx.org/download/nginx-1.19.6.tar.gz将源码解压到 /usr/local/src 目录tar -zxvf nginx-1.19.6.tar.gz -C /usr/local/src/安装依赖yum ...

2020-12-18 20:48:53 2806 1

原创 Linux SSH免密登陆

SSH是一种网络协议,用于计算机之间的加密登录,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。Linux常用OpenSSH。使用SSH协议,客户端需要安装openssh-clients,服务端需要安装openssh-server(系统默认安装好了)。本文使用CentOS7系统,并用root用户登陆,服务端需要保证/etc/ssh/sshd_config 的配置正确,一些云服务器默认是不允许ROOT用户远程登陆的。# 是否允许以root用户身份登录,默认可以Permit..

2020-12-18 20:48:36 20795 2

原创 tar压缩打包与解压

tar命令可以将多个文件归档为一个文件,称为archive。tar命令有一些常用的选项参数 -c:create的缩写,表示“创建” -v:verbose的缩写,表示“冗余”,会显示操作细节 -f:file的缩写,表示“文件”,指定归档文件 -x:extract的缩写,表示“提取”,从备份文件中还原文件tar -cvf 归档文件名.tar 归档目录 打包目录tar -cvf归档文件名.tarfile1 file2 file3 打包多个文件。tar ...

2020-12-18 20:48:05 1121

原创 VirtualBox安装CentOS7

Liunx一些发行版介绍: RHEL:Red Hat公司开发,收费。 CentOS:RHEL的社区克隆版本,免费。 Fedora Core:由Red Hat桌面版发展而来,免费。 Debian:算是迄今为止最遵循GNU规范的Linux系统。 Deepin:由武汉深之度科技有限公司在Debian基础上开发的Linux操作系统。 Ubuntu:Debian发展而来,是目前最适合做桌面系统的Linux发行版本。本文介绍在Virtualbox(虚拟机)上...

2020-12-16 21:45:00 511

原创 HTTPS加密过程

对称加密是最快速、最简单的一种加密方式,加密与解密用的是同样的密钥。非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥和私钥。公钥可以发给任何请求它的人,公钥用于加密信息。私钥只能由一方安全保管,不能外泄,只有私钥才能解密被公钥加密的信息。HTTP协议以明文方式发送内容,不对数据进行加密。如果攻击者截取了Web浏览器和网站服务器之间的传输报文, 就非常危险,用户的账号密码、银行卡等信息会被攻击者掌握。而HTTPS在HTTP的基础上加了一个安全套接层(SSL)实现了对报文的加

2020-12-10 22:22:24 552

原创 应用层——DNS协议、DHCP协议

TCP/IP协议簇把OSI七层网络模型的应用层、表示层、会话层合并为一层——应用层。应用层直接和应用程序接口结合,并提供常见的网络应用服务。常见的应用层协议有DNS协议、DHCP协议、HTTP协议。DNS协议域名系统(Domain Name System,缩写:DNS)也可以叫做域名解析协议,是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。域名由点、字母和数字组成,点分割不同的域。TCP协议、UDP协议使用IP地址+端口表示网络进程,但是

2020-12-10 22:15:00 1396

原创 传输层——TCP协议、UDP协议

传输层管理端到端(进程到进程)的通信连接,传输层不关心数据在网络间的转发,路由器就没有传输层。传输层使用端口(Port)来标记不同的网络进程,端口(Port)使用16比特位表示(0~65535)。一些常见的端口如下:常见的传输层协议有TCP协议、UDP协议。TCP协议传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP首部16位源端口:发送端的的端口号。16位...

2020-12-10 22:05:54 989

原创 网络层——IP地址分类、子网划分、CIDR、网络地址转换NAT

IP地址长度为32位,常分成4个8位,一般将二进制IP地址转为十进制表示。十进制IP地址:192.168.1.1二进制IP地址:11000000.10101000.00000001.00000001IP地址分类IP地址分为两部分,网络号与主机号。分为A、B、C三类及特殊地址D、E。A类地址网络号占8位,主机号占24位。B类地址网络号占16位,主机号占16位。C类地址网络号占24位,主机号占8位。D类地址,该类IP地址的最前面为1110,所以地址的网络号取值于224~239之间

2020-12-10 21:38:35 2318

原创 网络层——IP协议的转发流程

IP地址长度为32位,常分成4个8位,IP地址常使用点分十进制来表示(0~255.0~255.0~255.0~255)。例如:114.114.114.114、255.255.255.255IP数据报IP数据报由首部和数据两部分组成版本:指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6,占4位。首部位长度:最大数值为15,表示的是IP首部长度,单位是“32位字”(4个字节),也即是IP首部最大长度为60字节,占4位。总长度:最大数值为65535,

2020-12-09 22:53:07 2758

原创 数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议

OSI模型中的数据链路层与物理层,在TCP/IP协议中同属于网络接口层。数据链路层为物理连接之间提供了可靠的数据传输。数据链路层主要解决3个问题:封装成帧、透明传输、差错检测。封装成帧“帧”是数据链路层中数据的基本单位,发送端在一段数据前后添加特定标记形成“帧”,接收端根据前后特定标记识别出“帧”。帧首部和尾部是特定的控制字符(特定比特流),帧首部(SOH)使用00000001,帧尾部(EOT)使用00000100。透明传输假如帧数据中刚好存在帧首部、帧尾部的比特流,那该怎么..

2020-12-09 22:29:03 3184

原创 物理层概述

物理层的作用1、连接不同的物理设备,屏蔽掉物理设备、传输媒体、通信手段的不同,使数据链路层感觉不到这些差异。2、传输比特流。物理层常用的电缆有3种:1、光纤。2、双绞线。一般来说,家里面连接路由器与电脑的网线就是双绞线。3、同轴电缆。数据以比特流的形式在物理层传输。使用1表示高电平,0表示低电平。光电信号转化为了数字信号。信道就是传输信号的通道。通常对信道由两种理解:一种是指信号的传输介质,如双绞线、光纤等。另一种是将传输介质和信号转换设备都归集在一起称为信道。信道可以是物理概

2020-12-09 22:08:36 1442

原创 计算机网络——网络分层、网络拓扑、性能指标

计算机网络分层计算机网络非常复杂,而复杂的系统往往需要分层,每一层专注于实现本层的功能点。计算机网络分层有以下原则:1、各层之间相互独立。当前层不需要了解其他层是怎么实现的,层与层之间通过接口通信。2、每一层要有足够的灵活性。以便应对未来发生的变化。3、各层之间完全解耦。计算机网络有两种著名的分层模型:OSI七层模型、TCP/IP四层模型。OSI七层模型OSI全称“开放式系统互联通信参考模型”(英语:Open System Interconnection Reference

2020-12-09 22:02:55 2588

原创 二叉树与递归

上图是一颗二叉树,二叉树的特点是“二叉树的每个节点的左右子树也是一颗二叉树”,需要特殊说明的是,“空”也是一颗二叉树。二叉树可以拆分为多个小二叉树,小二叉树的性质和大二叉树的性质完全一样。这种性质和递归算法很相似,递归算法也是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。我们往往可以使用递归算法求解二叉树的一些问题。LeetCode第104道问题,二叉树的最大深度。题目地址:https://leetcode-cn.com/problems/maximum-depth-..

2020-11-18 21:50:09 370

原创 移除链表元素(小技巧:设立虚拟头结点)

LeetCode第203道问题,移除链表元素。题目地址:https://leetcode-cn.com/problems/remove-linked-list-elements/删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5/** * ListNode类 */public class ListNode { public ..

2020-11-14 22:38:22 329

原创 反转链表

LeetCode第206道问题,反转链表。题目地址:https://leetcode-cn.com/problems/reverse-linked-list/反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?/** * ListNode类 */public class ListNode {

2020-11-14 19:25:08 115

原创 Java任务与返回结果Runnable、Callable、Future、FutureTask

在Java中,Runnable、Callable都表示能被线程执行的任务。Runnable有以下缺陷: 1、没有返回值 2、不能抛出checked exceptionCallable接口类似于Runnable,但能返回一个结果,也可以抛出Exception,使用者需要实现call()方法。/** * Callable接口源码 */@FunctionalInterfacepublic interface Callable<V> { /** ...

2020-10-30 22:42:51 3247

原创 CountDownLatch、CyclicBarrier、Semaphore、Condition以及AbstractQueuedSynchronizer

CountDownLatch倒数门栓CountDownLatch倒数门栓,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。CountDownLatch(int count): CountDownLatch类只有一个构造函数,count为倒数的数值。await(): 调用await()方法的线程会被挂起,此线程会等待直到count值为0才继续执行。countDown(): 将count值减一,直到为0时,等待的线程才会被唤起。/** * 用法一:一个线程等待多个线程...

2020-10-29 21:53:57 261 1

原创 JAVA CAS、自旋、乐观锁

CAS全称compare and swap,是“比较并替换”的意思。CAS有3个重要的操作数:内存值(a)、预期值(aExpe)、更新值(aNew),当且仅当预期值与内存值相同,才将内存值改为修改值,否则什么都不做,最后返回成功或失败。下图是“比较并替换”的执行流程。使用synchronized来模拟“比较并替换”的代码是这样的/** * 使用代码模拟CAS */class SimulatedCAS{ private volatile int value; public

2020-10-28 22:19:33 359 1

原创 Java锁ReentrantLock

从Java 5之后,Java可使用Lock实现同步访问。首先说明,Lock并不是用来替代synchronized的。synchronized有以下不足效率低:锁的释放情况少、不能设置锁的超时时间、不能中断正在试图获得锁的线程。不够灵活:加锁、释放锁的时机单一,进入同步同步代码块获取锁,离开释放锁。与synchronized相比Lock可以提供更多高级功能。ReentrantLock的基本使用...

2020-10-27 22:34:32 305

原创 synchronized使用与字节码说明

synchronized的作用:被synchronized修饰的方法或者代码块,同一时刻最多只有一个线程执行这段代码。public class SynchronizedDemo { public static final Object LOCK = new Object(); public static void fn1(){ synchronized (LOCK){ System.out.println(Thread.currentThrea

2020-10-24 21:52:20 680

原创 ThreadLocal使用与原理

ThreadLocal是一个用于创建线程局部变量的类,使用ThreadLocal创建的变量只能被当前线程访问和修改,其他线程则无法访问和修改。

2020-10-24 11:40:28 575

原创 使用ThreadPoolExecutor自定义线程池

线程池(Thread Pool)是一种基于池化思想管理线程的工具。可以想象成把一些线程放到一个“池子”中,统一管理。Java封装了一些线程池给开发者使用1、Executors.newSingleThreadExecutor() 创建一个只有一个线程的线程池2、Executors.newFixedThreadPool(int nThreads) 创建具有指定数量线程数的线程池3、Executors.newCachedThreadPool() 创建一个线程池,线程池中的线程空闲时间超过60秒就...

2020-10-21 22:14:01 1728

原创 Java单例模式的多种写法

1、饿汉式class SingletonHunger{ /** * 在类加载的时候就创建实例,即便INSTANCE还没被使用,也创建实例,这种方式叫做饿汉式。 * jvm能保证类加载时线程安全,直接避免了多线程步问题 */ private final static SingletonHunger INSTANCE = new SingletonHunger(); private SingletonHunger() { } pub

2020-10-20 21:31:54 146

原创 Java发现死锁

发生死锁有4个必要条件,4个条件缺一不可:1、互斥条件,共享资源在同一时刻只能被一个线程占用。2、保持与请求条件,请求一把锁的时候还保持着另一把锁。3、循环条件,线程的锁之间存在等待环路。4、不剥夺条件,没有外界条件干扰锁的获取与释放。下面是一个死锁的例子class DeadLockDemo implements Runnable{ int flag = 1; static Object lock1 = new Object(); static Objec

2020-10-19 22:29:38 216

k8s-spring-cloud-csdn.rar

kubernetes部署微服务spring cloud的简单例子

2019-06-17

iocdemo.rar

模仿spring ioc原理,实现通过xml、注解两种方式配置bean,并可通过注解注入bean。

2018-01-13

mybatis工程02.rar

mybatis工程02

2017-03-12

mybatis工程01.rar

mybatis工程

2017-03-12

空空如也

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

TA关注的人

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