自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学而时习之

做一个积极主动的人

  • 博客(103)
  • 资源 (1)
  • 收藏
  • 关注

原创 看了这篇你就会手写RPC框架了

原文地址:https://leisure.wang/procedural-framework/framework/704.html一、学习本文你能学到什么?RPC的概念及运作流程RPC协议及RPC框架的概念Netty的基本使用Java序列化及反序列化技术Zookeeper的基本使用(注册中心)自定义注解实现特殊业务逻辑Java的动态代理自定义Spring Boot Starter这里只是列出了你能从RPC框架源码中能学到的东西,本文并不会每个知识点都点到,主要讲述如何手写一个RPC框

2020-07-24 00:42:14 813

原创 Linux命令笔记

文章目录切换用户退出文件linux操作系统模式切换Centos 7静态IP设置,网络自启动修改用户,使其属于root组压缩解压文件文件相关操作查看当前目录修改文件读写执行权限卸载centos自带的openjdk删除java操作服务端口操作查看文件几种方式配置jdk修改linux主机名超级复制( 网络复制 格式:scp 源文件 目标文件位置 )-R 递归式地改变指定目录及其下的所有子目录和文件的属组...

2019-08-22 22:07:06 636

原创 常用Git命令笔记

1. 设置全局邮箱和姓名git config --global user.email "[email protected]"git config --global user.name "Your Name"2.在现有目录中初始化仓库git init3.跟踪文件并提交git add . (添加项目目录下所有文件至暂存,会变成暂存状态)git add <file> (添加指定...

2019-07-04 10:28:15 225

原创 Python中使用matplotlib绘制各类图表示例

在括线图中,每个箱子代表数据的25%~75%分位数,中位线是每个箱子中的中位数,普通线是每个箱子之外的最小值和最大值。通过在横轴上放置时间或如此类似的连续变量,可以在纵轴上放置数据点的值,从而捕捉到数据随时间发生的变化。箱线图用于展示数据的分布情况和异常值等信息,通常用于比较不同数据集之间的差异。热力图用于展示数据之间的关系和趋势,通常用于分析二维数据的相关性和变化。饼图用于展示数据的占比情况,通常用于比较不同类别或部分之间的占比情况。直方图用于展示数据的分布情况,通常用于分析数据集的偏态和峰态等特征。

2023-06-16 15:05:38 7870 2

原创 Python中文件的基本操作

可以使用with open语句按行读取两个文件,在每一行进行比较,如果不同就输出不同行的行数和行内容。可以使用os库和os.path模块中的函数,遍历目录下的所有文件,判断文件大小是否符合要求,并将符合要求的文件路径加入一个集合中返回。可以使用with open语句以追加模式打开两个文件,读取其中的内容并逐行写入新的合并文件中,最终关闭三个文件。可以使用with open语句以读写模式打开文件,在每一行查找指定字符并用新的字符替换,最终关闭文件。

2023-06-16 14:41:11 359

原创 【C++初学者需要掌握的知识点】

第10行代码使用了ifstream类打开文件example.txt进行读操作,然后读取文件中的一行内容,并将其存储在字符串str中进行输出。C++标准库提供了许多常用的算法和数据结构,包括排序、搜索、栈、队列、链表、树等。第12行代码使用了queue类实现了一个队列,依次将1、2、3入队,并输出队列中的元素。数组和字符串是C++中常用的数据结构,可以使用各种方式初始化、赋值、遍历等。函数是C++中模块化编程的基础,可以方便地实现代码的复用和封装。面向对象编程是C++的重要特性,支持类、对象、继承、多态等。

2023-06-09 11:38:42 799

原创 初学Golang的N个小技巧

初学Golang的N个小技巧

2022-06-09 00:35:18 418 1

原创 10. 并发

有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而GO从语言层面就支持了并行。goroutinegoroutine是Go并行设计的核心。goroutine说到底其实就是线程,但是他比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比

2021-09-21 11:09:33 142

原创 9. interface

什么是interface简单的说,interface是一组method的组合,我们通过interface来定义对象的一组行为。我们前面一章最后一个例子中Student和Employee都能Sayhi,虽然他们的内部实现不一样,但是那不重要,重要的是 他们都能say hi让我们来继续做更多的扩展,Student和Employee实现另一个方法Sing,然后Student实现方法BorrowMoney而Employee实现SpendSalary。这样Student实现了三个方法:Sayhi、Sing、B

2021-09-21 11:09:02 1349

原创 8. 面向对象

前面我们介绍了函数和struct,那你是否想过函数当作struct的字段一样来处理呢?今天我们就讲解一下函数的 另一种形态,带有接收者的函数,我们称为methodmethod现在假设有这么一个场景,你定义了一个struct叫做长方形,你现在想要计算他的面积,那么按照我们一般的思路应该会用下面的方式来实现package main import "fmt" type Rectangle struct { width, height float64 }func area(r Rectangl

2021-09-21 11:08:11 113

原创 7. struct类型

structGo语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型 person 代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如下代码所示:type person struct { name string age int}看到了吗?声明一个struct如此简单,上面的类型包含有两个字段一个string类型的字段name,用来保存用户名称这个属性一个int类型的字段age,用

2021-09-21 11:07:34 433

原创 6. Go语言之函数

函数是Go里面的核心设计,它通过关键字 func 来声明,它的格式如下:func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) { // 这里是处理逻辑代码 // 返回多个值 return value1, value2}上面的代码我们看出关键字 func 用来声明一个函数 funcName函数可以有一个或者多个参数,每个参数后面带有类型,通过 , 分隔函数可以返回多个值上面返回

2021-08-31 22:59:45 133

原创 5. Go语言之流程控制

流程控制包含分三大类:条件判断,循环控制和无条件跳转。ifif 也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事。Go里面 if 条件判断语句中不需要括号,如下代码所示if x > 10 { fmt.Println("x is greater than 10")} else { fmt.Println("x is less than 10")}Go的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条

2021-08-31 22:59:12 110

原创 4. Go语言之array、slice、map

arrayarray 就是数组,它的定义方式如下:var arr [n]type在 [n]type 中, n 表示数组的长度, type 表示存储元素的类型。对数组的操作和其它语言类似,都是通过 [] 来进行读取或赋值:var arr [10]int // 声明了一个 int 类型的数组arr[0] = 42 // 数组下标是从 0 开始的arr[1] = 13 // 赋值操作fmt.Printf("The first element is %d\n", arr[0]) // 获取数

2021-08-29 21:41:04 310

原创 3. Go语言一些技巧

分组声明在Go语言中,同时声明多个常量、变量,或者导入多个包时,可采用分组的方式进行声明。例如下面的代码:import "fmt"import "os"const i = 100const pi = 3.1415const prefix = "Go_"var i intvar pi float32var prefix string可以分组写成如下形式:import( "fmt" "os")const( i = 100 pi = 3.1415

2021-08-29 21:39:35 111

原创 2. Go语言内置基础类型

布尔类型在Go中,布尔值的类型为 bool ,值是 true 或 false ,默认为 false 。// 示例代码var isActive bool // 全局变量声明var enabled, disabled = true, false // 忽略类型的声明func test() { var available bool // 一般声明 valid := false // 简短声明 available = true // 赋值操作}数值类型整数类型有无

2021-08-29 21:38:35 147

原创 1. Go语言变量定义及常量

变量定义Go语言里面定义变量有多种方式。使用 var 关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面:// 定义一个名称为 “variableName” ,类型为 "type" 的变量var variableName type定义多个变量// 定义三个类型都是 “type” 的三个变量var vname1, vname2, vname3 type定义变量并初始化值// 初始化 “variableName” 的变量为 “value” 值,类型是 “type

2021-08-29 21:37:10 577

原创 进制互转,你想要的这都有

一、整数互转1.1 十进制转二进制转换规则:将十进制整数一直除以2,记录余数,如果结果不为0,继续将结果除以2,记录的余数从下往上就是2进制整数。整数10转2进制示例:除数被除数结果余数10250522122101201余数从下往上的结果为:10101.2 二进制转十进制转换公式:S = a × 2^0 + b × 2^1 + c × 2^2 + d × 2^3 + ……公式说明:a、b、c、d表示二进制从低位到高位对应的

2020-07-28 21:52:57 744

原创 【睡JDK】Java函数式编程接口详解之UnaryOperator、BinaryOperator

今天介绍的这两位兄弟大U(Unary:一元的)和大B(Binary:二元的)其实并不是全新的东西,而是两个特例,我们先来康康他们的源码。UnaryOperator的源码:@FunctionalInterfacepublic interface UnaryOperator<T> extends Function<T, T> { static <T> UnaryOperator<T> identity() { return t -&g

2020-06-29 23:40:43 849

原创 【睡JDK】Java函数式编程接口详解之Supplier

一、Supplier简介Supplier有什么好处?这个在网上也是众说纷纭,Supplier可能不像之前介绍的Predicate、Consumer、Function那么好理解。官方的介绍是:表示结果的提供者,不要求每次调用Supplier时都返回新的或不同的结果。源码如下:@FunctionalInterfacepublic interface Supplier<T> { /** * Gets a result. * * @return a

2020-06-29 23:38:50 1457

原创 【睡JDK】Java函数式编程接口详解之Consumer、Function

今天将介绍Java另外两个函数编程接口Consumer、Function,这两个函数是干嘛的呢?先看看官方的定义:Consumer:表示接受单个输入参数但不返回结果的操作。Function:表示接受一个参数并生成结果的函数。一、Consumer1.1 源代码@FunctionalInterfacepublic interface Consumer<T> { void accept(T t); default Consumer<T> andThen(C

2020-06-29 23:33:40 2295

原创 【睡JDK】Java函数式编程接口详解之Predicate

一、初识Predicate是Java提供的重要的函数编程接口之一,作用主要是用于逻辑判断。首先看看源码:@FunctionalInterfacepublic interface Predicate<T> { boolean test(T t); default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other);

2020-06-29 23:31:07 741

原创 重识Java8函数式编程

前言最近真的是太忙忙忙忙忙了,很久没有更新文章了。最近工作中看到了几段关于函数式编程的代码,但是有点费解,于是就准备总结一下函数式编程。很多东西很简单,但是如果不总结,可能会被它的各种变体所困扰。接触Lambda表达式已经很久了,但是也一直是处于照葫芦画瓢的阶段,所以想自己去编写相关代码,也有些捉襟见肘。1. Lambda表达式的不同形式// 基本形式参数 -> 主体1.1 形式一Runnable noArguments = () -> System.out.println("He

2020-06-21 21:30:37 286

原创 还不会K8S吗?先从kubeadm开始吧

文章目录1. 准备工作1.1 机器准备1.2 系统配置1.2.1 主机名及域名解析1.2.2 免密登录1.2.3 配置yum源1.2.4 安装必要依赖包1.2.5 关闭防火墙、SELinux、Swap分区1.2.6 配置内核参数2. 安装Docker2.1 安装2.2 配置镜像加速3. 使用kubeadm部署k8s集群3.1 安装kubeadm、kubelet、kubectl3.2 配置kubeadm3.3 使用kubeadm 配置master 节点3.3.1 安装 kubernetes 主节点3.3.2

2020-05-24 09:56:23 4782 2

原创 MongoDB启动闪退问题完美解决

原文地址:http://leisure.wang/?p=486如果你看到这篇文章,说明你也遇到了启动MongoDB闪退的情况。由于只是学习MongoDB,所以很多人不想使用MongoDB的安装版,而使用免安装版。但是在启动mongod.exe 的时候,就会出现闪退的情况,就跟以前某cat一样的…网上有类似的教程,但是不能很好的解决读者的需求,很多教程都是一次性的解决问题,而不能永久解决。今天小编将介绍两种方式:一次性解决、永久性解决。一次性解决1)首先再D盘新建一个文件夹test2)在mongod

2020-05-21 22:09:43 6330 6

原创 git push撤销、git commit 撤销、git add撤销、修改git提交信息

虽然自觉是一个Git工具的老手了,但是平时犯了一点错误,就发现有点捉襟见肘了。就好像今天我把一些代码玩坏了,想撤回到前几个版本去(此时已经push到远程分支),但是仔细一想:卧槽,这操作我好像不太熟练啊,于是乎就有了这篇文章了。一、git push撤销1.1 使用场景代码已经修改并push到远程分支,想撤回到前几个版本,并且会删除本地代码所做的修改!1.2 示例场景如下图。1.3 示例目标撤销第二、第三次提交代码,回到第一次提交代码1.4 详细步骤1.4.1 获取第一次提交commit版

2020-05-19 01:27:04 816

原创 小问题:warning push.default is unset its implicit value has changed in Git 2.0 from matching to simple

在升级了高版本的Git工具后,在使用git push操作时,可能会出现如下提示:warning: push.default is unset; its implicit value has changed inGit 2.0 from 'matching' to 'simple'. To squelch this messageand maintain the traditional behavior, use: git config --global push.default matching

2020-05-18 23:28:55 1629

原创 对象属性深拷贝工具DozerBeanMapper封装

前段时间我分享了两个对象属性拷贝工具,Spring的BeanUtils以及CGLIB的BeanCopier的封装类,之所以封装就是因为直接使用原始的类的话,使用方式不够统一,且略微复杂。上面两个工具都是浅拷贝,今天分享的则是深拷贝。感兴趣的移步:封装BeanCopier工具,支持单个对象以及列表拷贝,超高性能简单实用代码片段:BeanUtils.copyProperties扩展复制列表深拷贝DozerBeanMapper封装import org.dozer.DozerBeanMapper;imp

2020-05-11 09:10:45 2706 5

原创 基于docker-compose构建dubbo-admin应用实践篇

我们都知道Compose是docker三剑客之一,主要负责实现对 Docker 容器集群的快速编排。前面的文章也介绍了docker-compose的使用方法,今天分享一下docker-compose的实战,让读者更好的理解docker-compose。1. 从github获取dubbo-admin源码并修改内容目前dubbo-admin源码分支默认是develop,而我们需要获取的是master分支,所以拉取代码的时候需要指定一下分支名:$ git clone -b master https://gi

2020-05-10 18:11:49 950

原创 快速配置SSH免密登录

前言我们可以通过ssh命令连接远程机器,在上面执行操作,但是每次使用ssh都需要密码,不利于编写脚本操作:$ ssh [email protected]'s password: 准备工作准备两台机器:机器A:192.168.199.231机器B:192.168.199.233我们需要配置机器A免密登录机器B。配置免密登录# Step 1:在...

2020-05-05 11:02:52 1106

原创 Kubernetes核心概念及专业术语简介

Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s)或者简称为 “kube” ,是一种可自动实施 Linux 容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行 Linux 容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云、私...

2020-05-04 08:37:48 1745

原创 Docker Swarm集群搭建教程

1. Docker Swarm 简介Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。注意:Docker 1.12.0+ Swarm mode 已经内嵌入 Docker 引擎,成为了 ...

2020-05-03 10:04:59 1048 2

原创 如何搭建docker镜像私有仓库

有时候使用Docker Hub这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。比如,基于公司内部项目构建的镜像。docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。1. 安装运行docker-registry可以通过获取官方registry镜像来运行。默认情况下,仓库会被创建在容器的/var/lib/registry目录下。可以通过-v参数来将镜像文件存放...

2020-05-03 09:58:35 629

原创 Dockerfile文件常用指令详解

镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,这个脚本就是Dockerfile。Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。FROM指令该指令指定基础镜像,然后对镜像进行定制。FROM ubuntu:16.04Docker还存在一个特殊的镜...

2020-05-03 06:50:43 2850

原创 Docker常用命令笔录

1. 获取镜像## 格式docker pull [选项] [仓库地址[:端口]/]仓库名[:标签]## 解释# 仓库地址:一般格式是<域名/IP>:[:端口号],默认地址是Docker Hub# 仓库名:为两段式名称,即<用户名>/<软件名>,对于Docker Hub,如果不给用户名,默认为library## 示例docker pull ubu...

2020-05-03 06:49:11 147

原创 Cassandra数据库之初体验

什么是Cassandra?当您需要可伸缩性和高可用性而不影响性能时,Apache Cassandra数据库是正确的选择。线性可扩展性 和在商用硬件或云基础架构上经过验证的容错能力使它成为关键任务数据的理想平台。Cassandra对跨多个数据中心的复制提供了一流的支持,为您的用户提供了更低的延迟,并且能让您在区域性断电情况下也稳如老狗,生生不息。Cassandra有以下特性:容错:数据会自动复...

2020-05-02 12:49:01 960

原创 docker-compose模板文件常用指令

模板文件是使用docker-compose的核心,默认的模板文件名称为docker-compose.yml,格式为YAML格式。每个服务都必须通过image指令指定镜像或build指令(需要Dockerfile)等来自动构建生成镜像。注意:在编写docker-compose.yml文件时,所有的冒号(:)、短横线(-)后面都需要加一个空格,不然会出错。下面将介绍docker-compose模板...

2020-05-02 09:43:23 1401

原创 docker-compose常用命令说明

本文介绍docker-compose相关的常用命令,以下命令都是以docker-comose开头的。up该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。链接的服务都将会被自动启动,除非已经处于运行状态。选项:-d 在后台运行服务容器–no-color 不使用颜色来区分不同的服务的控制台输出–no-deps 不启动服务所链接的容...

2020-05-02 09:39:38 1224

原创 docker-compose命令简介及安装

如果是mac或者wins,安装了docker以后自带了docker-compose,可以使用docker-compose version查看,但是如果是linux就不会安装docker-compose,需要单独安装。命令安装:该方法是通过指定版本下载链接完成的,首先需要获取到最新的版本。1. 获取最新版本(非必须操作)浏览器打开:https://github.com/docker/comp...

2020-05-02 09:37:39 1001

原创 虚拟机集群机器快速准备小贴士

活到老,学到老,不求做到最好,只求做到更好。今天来康康怎么能快速准备虚拟机集群机器呢?笔者安装虚拟机的功夫也算比较熟练了(不熟练的小伙伴移步:Linux虚拟机安装教程),反手就是一套虚拟机,emmm… 但是每次等待虚拟机安装还是很费时间的,而克隆虚拟机可以一分钟内就生成一个新的虚拟机。快速准备虚拟机步骤笔者一直使用的是VMware Workstation Pro安装虚拟机,visualBox...

2020-05-01 14:03:56 231

kube-flannel.yml

Flannel通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于Linux TUN/TAP,使用UDP/VXLAN封装IP包来创建overlay网络,并借助etcd(也支持kubernetes)维护网络的分配情况。由于github上无法下载,故分享出来。

2020-05-23

空空如也

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

TA关注的人

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