自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

桔子

每件事都有它自然发生的时间

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

原创 Java实现知乎热点小时榜爬虫

启动程序后,自动展示热点问题,并等待终端输入。

2024-03-14 15:54:57 609

原创 c++编译报错:xxx was not declared in this scope

这就会报错:funcB was not declared in this scope.:变量、函数、或者类未声明或者定义。

2024-01-22 10:55:31 10500 1

原创 StringUtil.isNotBlank和StringUtil.isNotEmpty的区别

1.区别StringUtil.isNotBlank是判断“非Null 且 size > 0 且 非连续空字符串”;StringUtil.isNotEmpty是判断“非Null 且 size > 0”;2.举例String str1 = null;String str2 = "";String str3 = " ";String str4 = "test";字符串StringUtil.isNotBlankStringUtil.isNotEmptystr

2021-12-08 10:28:25 2509 1

原创 go执行shell脚本报错:exec: executable file not found in $PATH

代码示例:command := exec.Command("ls ~ | grep .zip")报错:exec: "pidof tor | xargs kill -HUP": executable file not found in $PATH解决:// 添加额外参数 bash -ccommand := exec.Command("bash","-c","ls ~ | grep .zip")// 或command := exec.Command("sh","-c","ls ~ | gre

2021-04-23 20:44:00 6024

原创 Sentinel-Go:3.Sentinel-Go的基本使用(三)Gin框架结合Zipkin实现链路追踪

文章目录1.教程1.1 创建一下目录结构及代码1.2 代码示例1.3 调用接口,然后访问zipkin控制台,输入对应的资源名,查看链路效果2.小练习本文示例源码:关于Zipkin的介绍和安装教程,请参考:Spring Cloud Sleuth结合Zipkin实现链路追踪。1.教程本文使用Gin框架来实现简单的web服务,并结合Zipkin实现链路追踪。1.1 创建一下目录结构及代码sentinel-go-samplesentinel-go-sample-providertracezi

2021-04-22 11:07:35 1432

原创 Sentinel-Go:2.Sentinel-Go的基本使用(二)流控规则持久化

1.教程在Sentinel-Go:1.Sentinel-Go的基本使用(一)流控规则中,已经创建好了module:sentinel-go-sample,我们继续以它为例来演示流控规则持久化。1.1 先在Nacos配置中心添加配置文件Nacos的安装部署,请参考:Nacos:1.Nacos的基本使用(一)服务注册与发现添加配置文件配置文件内容示例: sentinel-go-sample-sentinel-flow[ { "resource": "te

2021-04-18 23:16:54 905

原创 Sentinel-Go:1.Sentinel-Go的基本使用(一)流控规则

文章目录1.创建项目1.1 创建Go Modules项目,并设置代理1.2 创建下面目录结构以及代码`【埋点】`1.3 等待idea下载完成依赖库后,启动项目并访问本文示例源码:1.创建项目建议使用idea编译器按照下面教程创建:1.1 创建Go Modules项目,并设置代理如果https://goproxy.cn不行,试试https://goproxy.io1.2 创建下面目录结构以及代码sentinel-go-samplesentinel-go-sample-providerf

2021-04-18 23:15:31 1704 1

原创 Spring Cloud Sleuth结合Zipkin实现链路追踪

1.概述1.1 技术背景在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,这时就需要解决一个问题,即如何快速定位服务故障点,分布式系统调用链追踪技术就此诞生了。1.2 ZipkinZipkin是一个由Twitter公司提供并开放源代码分布式的跟踪系统, 它主要用于收集服务的时间数据;每个服务会向Zipkin定时汇报数据;Zipkin提供ZipkinUI

2021-04-16 20:13:54 311

原创 Sentinel:5.Sentinel的高级使用(二)降级规则持久化

文章目录1.教程1.1 修改Sentinel Dashboard源码1.2 修改Nacos配置中心里的nacos-sample-provider.yml1.3 重启Sentinel Dashboard控制台和nacos-sample-provider服务,验证是否实现降级规则持久化1.4 注意事项2. 小练习本文示例源码:延续上一篇:Sentinel:4.Sentinel高级使用(一)流控规则持久化,在其基础上,本篇开始演示降级规则的持久化。1.教程在Nacos:1.Nacos的基本使用(一)服务注册

2021-04-16 14:19:05 737 1

原创 Sentinel:4.Sentinel的高级使用(一)流控规则持久化

1.概述1.1 问题Sentinel Dashboard所配置的规则,都是保存在内存中的,不论是重启Sentinel Dashboard服务还是重启已注册的应用服务,都会导致这些规则被清除。1.2 解决方法Sentinel提供了动态数据源支持,目前,Sentinel支持Consul、ZooKeeper、Redis、Nacos、Apollo、Etcd等数据源的扩展,本文就以Nacos为例进行规则持久化演示。2.教程在Nacos:1.Nacos的基本使用(一)服务注册与发现中,已经创建好了modul

2021-04-15 19:26:40 1324

原创 Sentinel:3.Sentinel的基本使用(三)授权规则、系统规则

文章目录1.在项目中使用Sentinel:授权规则1.1 为接口sayHello()添加一条授权规则2.在项目中使用Sentinel:系统规则2.1 为服务nacos-sample-provider添加一条系统规则2.2 多线程访问nacos-sample-provider服务3.小练习本文示例源码:继续沿用上一篇中的项目:module:nacos-sample-provider,以它为例来演示Sentinel的授权规则和系统规则的使用。1.在项目中使用Sentinel:授权规则1.1 为接口sayH

2021-04-14 17:12:50 850

原创 模拟高并发场景工具:siege

1.模拟高并发场景1.1 安装工具:siegewget http://download.joedog.org/siege/siege-latest.tar.gztar -zxvf siege-latest.tar.gzcd siege-4.0.8./configuremakemake install1.2 模拟高并发场景创建一个包含url请求的文件这里的url例子是作者自己创建的本地服务,读者根据实际情况自行修改。 url.txthttp://localhost:8001/

2021-04-14 16:27:45 594

原创 Sentinel:2.Sentinel的基本使用(二)降级规则、热点规则

文章目录1.在项目中使用Sentinel:降级规则1.1 在HelloServiceImpl中新增接口testDegradeRule(),添加注解@SentinelResource1.2 新建目录fallbackhandler,并创建熔断降级类FallbackHandler1.3 启动nacos-sample-provider,然后在Sentinel-Dashboard控制台中可以看到对应的菜单1.4 为接口testDegradeRule()添加一条降级规则2.在项目中使用Sentinel:热点规则2.1

2021-04-14 16:07:13 660

原创 Sentinel:1.Sentinel的基本使用(一)流控规则

1.启动Sentinel-Dashboard,使用Sentinel控制台1.1 下载Sentinelgit clone https://github.com/alibaba/Sentinel.git1.2 安装并启动Sentinel-Dashboard官方文档教程:README.md【注意】官方教程中使用的端口是8080,用户可以自定义更改,本文中改成了8849。官方教程中的mvan clean package指令,建议改成mvn clean package -Dmaven.test.sk

2021-04-14 16:05:50 541

原创 Nacos:2.Nacos的基本使用(二)配置中心

文章目录1.引入Nacos“配置中心”功能的依赖包2.改造nacos-sample-provider项目2.1 删除nacos-sample-provider项目中的application.yml2.2 添加bootstrap.yml,内容如下:2.3 修改Controller类,为其添加@RefreshScope,实现配置的热加载2.4 在Nacos控制台添加对应的配置文件2.5 启动服务,调用一下url,验证服务是否正常2.6 在Nacos控制台修改一下配置文件中的配置值,再次验证3.小练习本文示例源码

2021-04-09 21:45:56 1049

原创 Nacos:1.Nacos的基本使用(一)服务注册与发现

1.Nacos的安装与启动Nacos支持三种部署模式:单机、集群、多集群,要求使用JDK1.8以上版本。Nacos的安装有两种方式:源码安装和使用编译好的安装包,这里演示源码安装方式。# step.1 下载源码git clone https://github.com/alibaba/nacos.git# step.2 进入根目录,执行构建命令mvn -Prelease-nacos clean install -U -Dmaven.test.skip=true# 这里使用-Dmaven.te

2021-04-09 19:39:52 713

转载 SpringCloud架构分析

原文地址:https://mp.weixin.qq.com/s/mOk0KuEWQUiugyRA3-FXwg,原创作者:中华石杉,微信公众号:石杉的架构笔记。 一、概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。 实际上,Spr...

2021-04-07 11:34:53 283

原创 shell脚本:在一个shell脚本中执行pssh命令,shell脚本进程会卡死

背景:在shell脚本A里执行pssh,执行该脚本A,该脚本A的进程会一直卡死脚本如下:#! /bin/bash# hostsFile是存放了多个ip的文件pssh -h hostsFile "mkdir -p /root/wy"原因:pssh是一个批量linux终端执行命令的工具,它执行完毕后会需要占用终端的输入输出打印执行结果,而脚本A本身就是一个进程,它执行pssh也需要占用终端的输入输出打印pssh的执行结果,那么就产生了死锁问题,导致脚本A的进程一直卡死。解决方法:使用nohu

2020-11-18 15:20:13 1085 1

转载 4张图看明白用户、权限和租户的关系

1、最简单的用户系统一个最简单的用户系统,只需要有用户和身份验证两个模块就够了。如图:这里提示一下:上层数据依赖下层数据。举个栗子,就是身份验证需要依赖用户数据。2、具有权限管理的用户系统如果需要进行权限管理的话,那么就加上资源和角色模块。同时,在身份认证之后需要按需进行鉴权。资源和用户都是最底层的数据,角色需要关联用户和资源完成对用户的授权。了解RBAC模型的,应该很清楚这种关系。3、带有用户组、组织机构的复杂系统如果我们需要有用户组辅助用户管理,或者系统中需要有组织机构,并且...

2020-10-30 15:30:54 3237

转载 2.k8s入门:YAML配置文件内容详解

一、使用YAML创建PODapiVersion: v1kind: Podmetadata: name: kube100-site labels: app: webspec: containers: - name: front-end image: nginx ports: - containerPort: 80 - name: flaskapp-demo image: jcdemo/flaskapp

2020-10-12 17:45:35 1300

转载 1.k8s入门:kubectl常用命令

图片来源:Kubectl管理工具文字来源:k8s的一些基本命令基础命令:create,delete,get,run,expose,set,explain,edit。create命令:根据文件或者输入来创建资源# 创建Deployment和Service资源kubectl create -f javak8s-deployment.yamlkubectl create -f javak8s-service.yamldelete命令:删除资源# 根据yaml文件删除对应的资源,但是yaml文件

2020-10-12 16:51:10 1264 1

原创 1.Docker进阶:存储驱动overlay2

1.overlay2存储驱动架构图2.概念介绍当需要修改一个文件时,使用cow(copy-on_write,写时拷贝)将文件从只读属性的Lower复制到读写属性的Upper进行修改,结果也保存在Upper层在Docker中,底下的只读层就是Image,可写层就是Container如上图所示,当我们在容器中访问(包括增删改查操作)某个文件时,如果在UpperDir中(即容器层)访问不到,就去LowerDir(即镜像层)访问,如果LowerDir和UpperDir中都有,那么UpperDir会覆盖L

2020-10-09 21:37:31 408

原创 14.Docker网络:容器互联之不同网络间的容器互联

1.不同网络之间进行容器互联测试上一节中已经创建好一个自定义网络my_net,于是我们可以测试Docker默认的bridge网络和自定义my_net网络的连通性,也可以再创建一个自定义网络my_net-1,测试my_net和my_net-1之间的连通性,本节以两个自定义网络为例测试。step.1 再创建一个自定义网络my_net-1# 创建自定义网络my_net-1docker network create --driver bridge --subnet 192.167.0.0/24 --gate

2020-09-01 10:48:48 588

原创 13.Docker网络:容器互联之自定义网络

1.如何创建自定义网络step.1 查看当前环境中的网卡信息# 查看当前环境中的网卡信息docker network ls# 内容如下:[root@iZ2zefjrz9szlt99tuu23fZ wy]# docker network lsNETWORK ID NAME DRIVER SCOPEc5440000e49f bridge bridge loc

2020-09-01 10:46:54 567 1

原创 12.Docker网络:容器互联之--link

写在前面:本节可以作为了解,不看也行,因为--link技术已经被淘汰了,可以直接学下一节:自定义网络1.问题看完上一节,我们可以知道,在同一个Docker环境中,容器与容器之间的网络是联通的,只要知道两个容器的ip,就可以实现两个容器之间通信。那么能不能通过ping容器名访问呢?# 示例# 以两个tomcat容器为例docker run -d -P --name tomcat-1 tomcatdocker run -d -P --name tomcat-2 tomcat# 查看一下tomc

2020-09-01 10:44:33 860

原创 11.Docker网络:基础原理&示例

【示例】step.1# 清空Docker所有镜像,用一个空的Docker环境来玩一下Docker网络docker rmi -f $(docker images -aq)# 启动Docker后查看一下网卡地址ip addr# 如下图,docker0网卡就是docker的“路由器”step.2# 我们启动一个容器,来测试一下宿主机与容器之间的网络连通性# 以tomcat容器为例docker run -d -P --name tomcat-1 tomcat# 启动完成后查看一下to

2020-09-01 10:38:11 241

原创 10.Docker入门学习回顾小结

【什么是Docker】Docker本质是一个可以使用yum下载的软件,下载完成后可以用Docker提供的指令集来操作Docker。它的主要目的/作用就是实现一个轻量级的虚拟机,实现方式是:使用Docker下载镜像(即软件安装包),然后再用Docker把镜像运行起来成为一个实际的进程,在Docker概念中,镜像运行后的进程被称为容器。那么Docker如何就能做到“实现一个轻量级虚拟机”呢?这需要从两方面回答:1.如何保证具备一个独立的系统运行空间?2.如何保证轻量?其一,每个容器创建之后,都具备一套

2020-08-24 20:19:11 232

原创 9.Docker镜像制作:Commit和DockerFile

1.Commit制作镜像按照下面指令执行即可,类似git commit操作docker commit -m="提交的描述信息" -a="作者" [容器ID] [image_name]:[TAG版本号]#说明:以当前容器ID,制作一个名为image_name的新镜像,并指定版本号(可以不指定)2.DockerFile制作镜像DockerFile是专门用来构建Docker镜像的命令脚本,脚本内容:指令[空格]参数,指令必须大写2.1构建步骤编写一个DockerFile文件docker bui

2020-08-24 20:11:37 354

原创 8.Docker数据卷:数据交互、数据卷、数据卷容器

1.数据交互1.1从容器中拷贝数据到主机docker cp [容器ID]:[容器内路径] [主机路径]1.2从主机中拷贝数据到容器docker cp [主机路径] [容器ID]:[容器内路径]以上命令均在宿主机上操作。2.数据卷上述两种数据交互的方式均属于手动操作,现在使用-v挂载数据卷,即可实现自动同步数据。2.1什么是数据卷?数据卷,又叫数据盘,在Linux操作系统下,数据卷就是一个文件目录;在Windows操作系统下,数据卷就是C盘、D盘等。在Docker概念中,只有通过-v

2020-08-24 20:10:57 279

原创 7.Docker容器:什么是Docker容器?

1.容器是什么?镜像运行起来之后,就是容器。也可以理解它就是一个服务,这个服务可以由多个服务组成,比如某个镜像提供的是一个启动服务的安装包,将其运行成容器后,它会拉起几个其他程序来提供一个完整的服务。2.容器与镜像的关系举个例子,把容器、镜像、Linux内核比作一个餐厅服务来说,那么它们对应的关系如下:概念比喻镜像集装箱,箱子里装了桌子、椅子、餐盘Linux内核厨房,中西餐都会做容器拆开集装箱,把桌子、椅子、餐盘摆放好,随时坐人随时就餐这个餐厅有

2020-08-24 20:08:59 759

原创 6.Docker镜像:什么是Docker镜像?Docker镜像加载原理?

1.镜像是什么?1.镜像是一种轻量级、可执行的独立软件包;2.镜像是用来打包“软件运行环境”和基于“运行环境”开发的软件;3.镜像包含运行某个软件所需的所有内容,如代码、库、环境变量和配置文件等;总结:镜像就是软件安装包,所有的应用只要打包成docker镜像,都可以通过docker直接下载、安装并运行。2.如何下载镜像?从远程仓库下载别人拷贝给你自己制作镜像3.Docker镜像加载原理3.1UnionFS(联合文件系统)UnionFS:联合文件系统,是一种分层、轻量级

2020-08-24 20:07:53 1152

原创 5.Docker实战:Docker部署MySQL

1.部署可以复制下面内容,以脚本的方式执行,也可以复制一条执行一条#! /bin/bash# 搜索nginx镜像,看是否存在(这一步可以不做,一般都会存在)docker search mysql# 官方推荐部署方式# docker run -it --rm mysql:5.7# 指令解释:下载并运行95.7版本的mysql,以交互的方式运行,并且在容器运行结束后清除该容器(镜像不会删除)# 我们不推荐使用这种方式,一般都是需要该容器运行结束后处于关闭或者暂停状态,而不是直接清除# 按

2020-08-24 20:07:09 352

原创 4.Docker实战:Docker部署Tomcat

1.部署可以复制下面内容,以脚本的方式执行,也可以复制一条执行一条#! /bin/bash# 搜索nginx镜像,看是否存在(这一步可以不做,一般都会存在)docker search tomcat# 官方推荐部署方式# docker run -it --rm tomcat:9.0# 指令解释:下载并运行9.0版本的tomcat,以交互的方式运行,并且在容器运行结束后清除该容器(镜像不会删除)# 我们不推荐使用这种方式,一般都是需要该容器运行结束后处于关闭或者暂停状态,而不是直接清除#

2020-08-04 20:18:31 656

原创 3.Docker实战:Docker部署Nginx

1.部署可以复制下面内容,以脚本的方式执行,也可以复制一条执行一条#! /bin/bash# 搜索nginx镜像,看是否存在(这一步可以不做,一般都会存在)docker search nginx# 下载nginx镜像docker pull nginx# 以后台的方式启动nginx,起名为nginx-1,设置公网访问为3344,设置启动占用端口为80docker run -d --name nginx-1 -p 3344:80 nginx # 启动完成后,别人就可以通过访问3344端口

2020-08-04 20:17:51 307

原创 2.Docker入门:Docker命令

1.Docker命令详解菜鸟教程:Docker 命令大全2.常见命令简介# 如果不想记下面的指令,可以使用docker --help # 查看所有docker指令# docker常用指令# 以下指令均需要以docker开头,如docker portport # 查看映射端口对应的容器内部源端口pause # 暂停容器ps # 展示容器列表pull # 从docker镜像源服务器拉取指定镜像或者库镜像push # 推送指定镜像或者库镜像至docker

2020-08-04 20:17:04 405

原创 1.Docker入门:什么是Docker?如何安装Docker?

1.什么是Docker1.Docker的本质也是一个可以通过yum下载并安装的工具;2.可以使用Docker下载某些镜像,如:centos、nginx、tomcat、mysql等镜像;3.Docker可以基于已下载的镜像创建一个容器,并且使用创建好的容器;4.镜像和容器的关系就像类和对象、程序代码和进程、模板和实例的关系;5.容器和虚拟机之间的关系:一个虚拟机可以包含多个容器,容器与容器之间相互独立,可以简单理解成容器时虚拟机内创建的微型虚拟机;6.容器不仅仅可以创建在虚拟

2020-08-04 20:16:05 467

原创 JVM底层原理分析:2.堆内存分析和JVM调优

1.堆内存内部结构组件说明年轻代(新生代)新创建的对象会先存放在年轻代,一般占堆内存的1/3,包括:伊甸区、幸存区From、幸存区To,占比分别为年轻代的8/10、1/10、1/10老年代存放由年轻代转过来的对象,一般占堆内存的2/3【如图】2.年轻代内部结构2.1结构说明 组件 说明 伊甸区 1.新创建的对象一般先放在年轻代中的伊甸区,当伊甸区填满后,会触发minor

2020-07-10 19:29:08 229 2

原创 JVM底层原理分析:1.JDK体系、JVM架构和运行时数据区

1.JDK体系结构【组成部分】组件说明Java基础命令如java、javac、javadoc等JRE(Java运行时环境)由各个组件组成,如JDBC、JVM等【如图】2.JVM内部结构【组成部分】组件说明类加载器读取.class文件,并生成class对象,并将其加载到内存中运行时数据区(内存模型)为生成的class对象提供的生存空间字节码执行引擎用于调用内存区中的class对象并执行代码逻辑,以及执行GC操作等【如图

2020-07-10 19:28:35 197

原创 MySQL进阶:7.SQL优化

以下内容均以InnoDB类型的表为例1.海量数据导入优化# 导入指定文件的数据到指定表# 文件中的数据格式:"1,wy,123123\n2,xy,123123\n3,zy,123123"mysql> load data local infile '/xx/xx/xx' into table 'xxx' fields terminated by ',' lines terminated by '\n';优化方法原因建议按照主键顺序导入因为存在主键,所以必定要维护至少一个

2020-07-08 20:51:45 267

原创 MySQL进阶:6.定位SQL性能问题

1.SQL性能问题在应用开发过程中,初期数据量往往比较小,SQL语句的性能体现并不明显。举个例子:假设数据量为100时,查询性能是0.01s,数据量增长到1000时,查询性能是0.05s。0.01和0.05这种差值从直观感受上来说体现不出来太大变化,还是会觉得挺快的。随着数据量的增加,SQL语句的性能问题就会逐渐显露出来,比如当数据量为10w时,查询性能为5s,这就能明显感觉到性能非常低。如果开发过程中遇到这样的问题,即SQL性能问题,就需要我们进行SQL优化。2.SQL优化步骤定位SQL性能瓶颈位

2020-07-07 19:53:34 611

空空如也

空空如也

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

TA关注的人

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