自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Leo的博客

记录开发的点滴,更好的阅读体验请访问:leehao.me

  • 博客(233)
  • 资源 (4)
  • 论坛 (18)
  • 收藏
  • 关注

原创 Raft 共识算法学习笔记 三:成员变更

文章 《Raft 共识算法学习笔记 一:领导人选举》 和 《Raft 共识算法学习笔记 二:日志复制》 分别讲述了 Raft 算法如何进行领导人选举和如何进行日志复制。这篇文章继续讲述 Raft 算法如何处理集群成员节点变更的问题。考虑一种场景,原来 Raft 集群中存在三个节点,现在需要增加2 个节点。那么,在这种情况下, Raft 算法如何能保证同一个任期内,只有一个领导者呢?在 Raft 论文中,作者使用配置(configuration)来表示集群由哪些节点组合,即集群所有节点的信息集合。在稳定

2021-03-16 14:04:26 34

原创 Raft 共识算法学习笔记 二:日志复制

文章 Raft 共识算法学习笔记 一:领导人选举 描述了 Raft 算法如何进行领导者选举,本文描述 Raft 共识算法如何进行日志复制。复制状态机在 Raft 集群中,每个服务器可以看成是一个复制状态机(Replicated State Machine),如下图。复制状态机通常基于复制日志(replicated log)实现。每个服务器存储一个包含一系列指令的日志,并且按顺序执行指令。由于日志都包含相同顺序的指令,状态机会按照相同的顺序执行指令,由于状态机是确定的(deterministic),因此

2021-03-16 14:03:05 53

原创 Raft 共识算法学习笔记 一:领导者选举

Raft 算法是现在分布式系统开发首选的共识算法。文章 《图解 Paxos 算法》 介绍了 Paxos 共识算法,绝大多数选用 Paxos 算法的系统(比如 Cubby),都是在 Raft 算法发布前开发的,当时没得选。新系统绝大多数选择了 Raft 算法,例如,Etcd,Consul,等。就像作者 Diego Ongaro 在 Raft 论文 In Search of an Understandable Consensus Algorithm 说的,Paxos 太难理解了,无论是对于学生还是系统开发者来说

2021-02-27 08:07:20 163

原创 图解 Paxos 算法

Paxos 算法由 Leslie Lamport 在 1989 年提出的一个分布式共识算法,Paxos 算法较难理解,本文尝试以图形化方案解释 Paxos 算法。本文在很大篇幅参考了韩健极客时间的课程《分布式协议与算法》,有兴趣了解韩老师其他课程的同学可以购买来学习下。Lamport 提出的 Paxos 算法包括两个部分:Basic Paxos 算法:多节点如何就某个值达成共识Multi Paxos 思想:执行多个 Basic Paxos ,就一系列的值达成共识Basic Paxos问题假

2021-02-11 10:15:20 88

原创 Spring Cloud Gateway 网关

Spring Cloud 在最新版本 2020.0.0 开始,已去除了 Zuul 网关的使用,改用 Spring Cloud Gateway 作为网关。Spring Cloud Gateway 基于 Spring WebFlux 框架实现,相对于 Zuul 来说,性能更高。本文讲述如何在 Spring Cloud 中使用 Nacos 作为注册中心,通过 Spring Cloud Gateway 实现 API 路由的功能。启动 Nacos由于需要使用 Nacos 作为注册中心,网关和微服务都注册到 N

2021-02-11 10:13:33 78

原创 Spring Cloud + MyBatis + Druid 动态数据源实现

最近公司某项目计划对数据库进行水平分库处理,因此需要实现程序根据参数自动切换数据库的功能。本文讲述如何在 Spring Cloud + MyBatis + Druid + Oracle 环境下实现动态数据源切换的功能。配置数据源在两个 Oracle 数据库创建 Person 表,并插入几行数据:create table Person( id NUMBER(8) not null, name VARCHAR2(64) not null)INSERT INTO Person (id, n

2021-02-11 10:12:06 128

原创 Spring Cloud 使用 Nacos 作注册中心

文章 《Spring Cloud 使用 Nacos 作配置中心》 描述了如何在 Spring Cloud 使用 Nacos 作配置中心的使用方法,本文在此基础上,使用 Nacos 作为 Spring Cloud 的注册中心。安装 Nacos为简单起见,这里使用单机版本的 Nacos Server 作为注册中心,安装过程可以参考 《Spring Cloud 使用 Nacos 作配置中心》。服务提供者服务提供者在文章 《Spring Cloud 使用 Nacos 作配置中心》 源代码 springclo

2021-02-11 10:10:49 60

原创 Spring Cloud 使用 Nacos 作配置中心

title: Spring Cloud 使用 Nacos 作配置中心date: 2021-01-14 18:35:39tags:JavaSpring CloudNacoscategories:JavaNacos 是 Spring Cloud Alibaba 核心组件之一,可以用作 Spring Cloud 的注册中心和配置中心。本文讲述如何在 Spring Cloud 中使用 Nacos 作为配置中心。安装 Nacos与 Spring Cloud Config 和 Eurek.

2021-02-11 10:08:00 297 1

原创 Spring Boot Druid 使用教程

阿里巴巴开源的 Druid 是 Java 语言的数据库连接池,提供了强大的监控和扩展功能。本文讲述如何在 Spring Boot 项目中使用 Druid 数据库连接池。教程基于文章 《Spring Boot MyBatis 学习教程》 配套的源代码进行扩展,添加 Druid 数据库连接池和监控的功能。如果读者对于 Spring Boot 如何使用 MyBatis 还不了解,可以先完成文章 《Spring Boot MyBatis 学习教程》 的阅读和学习。添加依赖在 pom.xml 文件添加当

2021-01-12 17:27:55 278

原创 Spring Boot MyBatis 学习教程

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL,存储过程以及高级映射。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects)为数据库中的记录。本文讲述如何在 Spring Boot 框架中基于 XML 方式使用 Mybatis。创建 MySQL 数据表本文采用 MySQL 数据库作为数据源,创建用户表 user:CREATE TABLE `user`( `id` int(32)

2021-01-11 14:00:34 114 1

原创 Spring Boot 多线程使用

Spring Boot 提供了非常优雅使用多线程执行任务的方式,本文说明 Spring Boot 项目如何利用 ThreadPoolTaskExecutor 来使用多线程。创建 Spring Boot 项目使用 IntelliJ Idea 创建向导创建一个 Spring Boot 项目,或者在 Spring 官网创建一个 Spring Boot 项目,地址:https://start.spring.io/。由于创建过程比较简单,此处不再赘述。其中,pom.xm 文件如下:<?xml vers

2021-01-05 19:09:58 285 2

原创 OpenResty 入门教程

OpenResty 是一款基于 Nginx 和 Lua 的高性能 Web 框架,可以方便地基于 Nginx 进行二次开发,以实现超高并发 Web 网关,Web 服务等。本文讲述如何在 Linux 安装和使用 OpenResty。安装 OpenRestyOpenResty 官方提供源代码编译安装以及二进制包安装方式,本文采用源代码编译安装方式。有关二进制包安装方式,可以参考链接 https://openresty.org/cn/linux-packages.html。在 OpenResty 下载页面

2020-12-11 19:38:47 217

原创 Nginx 模块开发 Hello World

最近在研究如何利用 Nginx 实现高性能网关,这里记录一下开发 Nginx 扩展模块 Hello World。编译安装 Nginx下载 Nginx 源代码,解压,进入源代码目录:wget http://nginx.org/download/nginx-1.13.10.tar.gztar zvxf nginx-1.13.10.tar.gzcd nginx-1.13.10编译,安装 Nginx 到指定目录:./configure --prefix=/home/lihao/code/nginx/

2020-12-11 09:06:42 116

原创 Nginx 作 WebService 反向代理

WebService 对外提供 SOAP 接口,SOAP 接口基于 HTTP + XML,因此,可以使用 Nginx 作用 WebService 的反向代理,以实现 WebService 请求的负载均衡功能。本文使用 docker-compose 部署 nginx,有关 docker-compose 的使用,可以参考 《Docker Compose 入门教程》。文件目录结构如下:.├── conf.d│ └── ksb.conf├── docker-compose.yml└── log

2020-12-08 10:45:14 489

原创 Hexo 网站支持 HTTP/2

HTTP / 2 具有以下的特性:采用二进制传输数据基于流的多路复用头部压缩服务端推送由于 HTTP / 2 可以提升网站访问速度,因此,本人决定对个人站点 Leo 的博客 进行 HTTP / 2 升级改造。leehao.me 网站采用 Ngninx + Hexo + NexT 实现,有关部署细节可以参考之前的文章 《在阿里云部署 Hexo 网站》 以及 《Hexo 网站配置免费阿里云证书》。Nginx 从版本 1.9.5 支持 HTTP / 2,因此,为使网站支持 HTTP / 2,只需

2020-12-01 22:25:28 148

原创 CMake 入门教程

文章 CMake 语言 15 分钟入门教程 介绍了 CMake 语言的基础知识,本文在此基础上,进一步说明说明如何利用 CMake 生成 Makefile,并实现编译安装功能。CMake 除了可以生成 Makefile 外,还可以生成以下 IDE 的编译文件:XcodeVisual StudioCodeBlocksEclipseCMake 生成可执行文件先来看如何利用 CMake 编译单个 .cpp 源文件。需要编译的 main.cpp#include <iostream>

2020-11-29 10:18:32 481

原创 GitLab 实现 C++ 项目持续集成

Gitlab 集成了 CI / CD (Continuous Integration,持续集成 /Continuous Delivery,持续交付)功能。下图是 gitlab 官网上有关 ci / cd 各阶段的图示:本文重点讲述如何利用 gitlab 实现 c++ 项目的持续集成。安装 gitlab runner为了利用 gitlab 实现 ci / cd,需要安装 gitlab runner,gitlat runner 用于执行 ci / cd 任务。本文采用 docker 方式安装 gitl

2020-11-19 18:31:18 593

原创 CMake 语言 15 分钟入门教程

cmake 是一个跨平台的编译安装工具,可以用简单的语句来描述所有平台的编译安装过程。本文介绍 cmake 的基础语法。第一个例子使用任意的文本编辑器,输入:message("Hello world!") 然后保存为 hello.txt 文本文件,执行:cmake -P hello.txt输出:Hello world!所有变量都是字符串在 cmake 中,所有变量都是字符串。可以使用 ${} 来引用一个变量。例如,修改 hello.txt :message("Hello $

2020-11-18 13:35:56 272

原创 Dubbo 入门应用程序

Dubbo 是一款微服务框架,提供高性能 RPC 通信,服务发现,流量管理等服务治理能力,提供构建大规模微服务集群所需的整套解决方案。本文讲述如何利用 Dubbo 快速构建一个完整的服务端 - 客户端程序,包括基于 XML,注解和 API 的方式实现一个 Dubbo 的 demo。配置开发环境本文使用 IntelliJ IDEA 作为 Dubbo 应用程序开发的 IDE。安装 ZooKeeperDubbo 推荐使用 ZooKeeper (下文简称为 zk)作用注册中心,为简单起见,本文搭建一个单机

2020-11-11 21:31:44 195

原创 K8s 部署 Nginx 入门

文章 《Mac docker desktop 搭建 kubernetes 环境》 介绍了如何在 mac 上利用 docker desktop 搭建 k8s 运行环境,本文在此基础上,说明如何利用 k8s 部署 nginx 。创建 podpod 是 k8s 最小的编排单位,通常来说不需要直接创建 pod。这里是为了演示 pod 的使用创建了一个 pod。pod 的配置文件 nginx-pod.yml:apiVersion: v1kind: Podmetadata: name: nginx

2020-11-04 17:34:26 843

原创 Mac Docker Desktop 搭建 Kubernetes 环境

学习 kubernetes (下文简称为 k8s)的前提是需要一个 k8s 运行环境。k8s 官网上推荐使用 minikube 开始 k8s 的学习之旅。由于自己的 mac 上已安装了 docker desktop(下文简称 desktop),且 desktop 集成了 kubernetes 功能,可以满足最快完成 k8s 学习环境的搭建的需求。安装/更新 docker desktop如果没有安装 docker desktop,可以直接下载最新版本进行安装。如果已安装 docker,为了更新至最新版本,

2020-11-01 21:08:34 1119 3

原创 Filebeat 日志输出至 Kafka

Filebeat 是一款轻量级的日志采集器,可以用来收集日志,并将日志汇总起来处理。Filebeat 的工具原理如下图所示:图片来源:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html通过 filebeat 配置文件 filebeat.yml 指定需要收集的日志,并指定输出至 elasticsearch,logstash,kafka,redis 等。本文讲述如何配置 filebeat,将日志输

2020-08-03 18:19:11 1139

原创 Kafka 生产者和消费者学习笔记

最近搭建 kafka 集群环境以便于收集应用程序日志并进行个性化的处理,因此学习了 kafka 生产者和消费者 python 程序的实现。这篇文章当是个 kafka 的学习笔记。一、搭建 kafka 集群为方便测试,我们在 MacOS 单机上搭建具有三个 kafka 节点的集群。如果在生产上部署 kafka ,请在不同的物理机上部署 kafka 集群。1. 下载 kafka 镜像我们使用 wurstmeister/kafka 镜像来部署 kafka,由于 kafka 依赖于 zookeeper ,因

2020-07-04 21:07:20 308

原创 使用 Prometheus Python 库编写自定义指标

虽然 prometheus 已有大量可直接使用的 exporter 可供使用,以满足收集不同的监控指标的需要。例如,node exporter 可以收集机器 cpu,内存等指标,cadvisor 可以收集容器指标。然而,如果需要收集一些定制化的指标,还是需要我们编写自定义的指标。本文讲述如何使用 prometheus python 客户端库和 flask 编写 prometheus 自定义指标。安装依赖库我们的程序依赖于 flask 和 prometheus client 两个库,其 requirem

2020-06-27 21:28:07 2128

原创 Prometheus 发送企业微信

最近在公司搭建 prometheus 监控平台。文章 《Prometheus 使用阿里云邮件推送发送告警邮件》 已说明如何实现 prometheus 发送邮件告警的功能,这篇文章说明如何实现发送企业微信告警的功能。申请企业微信账号为实现发送企业微信告警消息,需要一个企业微信账号,在页面 企业微信 可以免费申请一个测试账号。进入应用管理 - 创建应用,创建一个用于接收告警消息的账号。创建成功后,可以看到该应用的 AgentId 和 Secret 串,如图所示:配置 alertmanagerAler

2020-06-25 17:38:34 657

原创 C++ Lambda 学习笔记

C++ 中,对于一个对象或一个表达式,如果可以对其使用调用运算符(()),则称它是可调用的。即,如果 e 是可调用的,则可以这样使用:e(args)其中,args 是一个逗号分隔的一个或多个参数的列表。C++ 中可调用对象除了我们熟悉的函数或函数指针外,还包括函数对象以及 lambda 表达式。本文重点讲述 lambda 表达式。lambda 表达式表示一个可调用的代码单元,我们可以将...

2020-04-26 21:45:59 234

原创 C++ 函数对象学习笔记

函数对象本质上是一个类对象,它重载了函数调用操作符 operator()。调用操作符的函数体实现函数的功能。例如,我们定义类 LessThan:class LessThan {public: bool operator() (const string &s1, const string &s2) { return s1.size() < s2.s...

2020-04-26 10:48:17 306

原创 POJ 1401 Factorial 解题报告

以下是算法的直观解释。假设求60!的结果后面有几个0。由《编程之美》可知其实是求1,2,3……60中共有几个5的因子,如,5有一个,10有两个,……一起加起来即得到结果。但是如果一个一个这样计算下去,会超时的。其实还有更简单的计算方法。我们知道,在1->60的数中,以下的数可以被5整除:5,10,15,20,25,30,35,40,45,50,55,60共60/5 = 12

2020-03-04 08:22:15 889

原创 在多线程环境中使用Jedis

Jedis是一个Java语言的Redis客户端,它为Java语言连接与操作Redis提供了简单易用的接口。Jedis不是线程安全的,故不应该在多线程环境中共用一个Jedis实例。但是,也应该避免直接创建多个Jedis实例,因为这种做法会导致创建过多的socket连接,性能不高。 要保证线程安全且获得较好的性能,可以使用JedisPool。

2020-03-04 08:18:37 30885 7

原创 SOAP Web Services 简介

SOAP(Simple Object Access Protocol)是一种基于 XML 的 web 服务协议。SOAP 是平台独立的,不依赖于特定的语言,例如,我们可以使用 C#,C/C++,或者 Java 语言来实现 SOAP web 服务。SOAP 的优点SOAP 的优点有:WS Security:SOAP 使用 WS Security 作为其安全的标准,安全性较高。语言与平台独立:可以使

2020-03-04 08:17:35 2145

原创 Prometheus 使用阿里云邮件推送发送告警邮件

我们在文章 《使用 docker-compose 搭建 prometheus 监控系统》 的基础上,增加 prometheus 的告警功能。Prometheus 指标的收集和存储与告警是分开的,告警功能由 alertmanager 提供。我们需要在 prometheus 定义告警规则,这些规则可以触发事件,然后传播到 alertmanager。接下来,alertmanager 会决定如何处理相应...

2020-03-03 15:31:49 784

原创 使用 docker-compose 搭建 Prometheus 监控系统

Prometheus 是当前一套非常流行的开源监控和报警系统,于 2016 年加入了 Clound Native Computing Foundation,是继 kubernates 之后的第二个托管项目。本文讲述如何使用 docker 快速搭建 prometheus 监控系统。概览本文的实验环境为 Mac OS,监控系统主要是用来监控两台 CentOS 主机资源使用情况。搭建的监控系统包括...

2020-02-16 21:27:45 2683

原创 使用 Gitlab 搭建 Docker 私有仓库

我们知道,gitlab 可以用来管理 git 提交的源代码,此外,gitlab 还集成了 docker registry 的功能,可以用来作为一个 docker 镜像私有仓库使用。启用 gitlab registry 功能我们假设已安装好 gitlab,具体安装可参考 《使用 docker 安装 gitlab》。Gitlab 默认不打开 docker registry 的功能,需要修改配置打...

2020-02-12 10:26:04 2220 1

原创 使用 Docker 安装 Gitlab

Gitlab 作为开源的 git 代码仓库,功能强大,使用起来非常方便。本文讲述如何使用 docker 来安装 gitlab。本文假定已安装好 docker,可以输入 docker --version 来验证是否已正常安装,输出:Docker version 19.03.5, build 633a0ea使用 docker run 命令安装为方便安装,我们先拉取最新版本的 gitlab ...

2020-02-11 15:45:11 582

原创 Docker Compose 入门教程

Docker compose (以下简称为 compose)可用于定义和运行多容器 docker 应用程序。通过 compose,我们可以使用 YAML 文件来配置应用程序的服务(services),然后只需要通过一个命令,就可以将配置的所有服务启动起来。使用 compose 只需要三步:使用 Dockerfile 定义应用的环境,以便于可以任何地方复制应用的环境使用 docker-co...

2020-02-09 21:39:01 841

原创 Docker 数据持久化

概览默认情况下,在 docker 容器(container)内创建的文件或产生的数据都只是保存在容器的可写层,这意味着当容器不存在时,容器内产生的数据也没有保存下来。Docker 提供两种容器数据持久化的方法,使用这两种方法即使容器不存在时,数据也能持久化下来:Bind mount:bind mount 可以是宿主机(host)文件系统的任意目录或文件,除了 docker 容器可以访问,宿...

2020-02-06 19:54:06 556

原创 gRPC C++ 入门教程

之前曾经写过 Python 使用 gRPC 收发消息的教程,可以参考文章 《体验 gRPC 那些事儿》。最近计划在 C++ 项目中使用 gRPC,故写一篇文章来记录一下如何使用 C++ 语言来实现一个简单的 gRPC 服务端和客户端程序。本教程需要先安装 gRPC,有关 gRPC 的安装教程可以参考文章 《CentOS 7 安装 gRPC》,《体验 gRPC 那些事儿》。本文涉及的程序包括四部...

2020-02-01 20:38:14 4679

原创 CentOS 7 安装 gRPC

之前的文章曾经介绍过有关 protobuf 的安装使用,《Google Protocol Buffers 体验日志》,不过那篇文章针对的 MacOS 系统。最近在公司环境引入 gRPC 的使用,服务器都是 CentOS 7 系统,故写篇文章记录 CentOS 7 下如何安装 gRPC。安装依赖的软件首先是安装必要的软件,包括 git,make,gcc,等。yum install epel-r...

2020-01-23 10:49:16 1677

原创 分布式对象存储服务器 MinIO 牛刀小试

数据存储包括三种类型,分别是块存储,文件存储和对象存储。有关这三种类型的差别,可以参考 对象存储、文件存储和块存储的区别。MioIO 是一个开源的分布式对象存储系统,非常适合于存储大容量非结构化的数据,例如图片,视频,日志文件,备份数据等。本文讲述如何快速搭建 MioIO 服务端和客户端,以便于对 MioIO 有个概要了解。MinIO 服务端安装MioIO 是一个非常轻量级的对象存储系统,可...

2020-01-22 16:11:42 3127

原创 携程 Apollo 配置中心初探

最近在对开源配置中心进行调研。当前流行的开源配置中心包括 Apollo,Nacos,以及 Disconf。Apollo 应该是当前最流行,所以写篇文章来记录 Apollo 的安装与使用。Apollo 是携程开源的分布式配置中心,能够集中化管理不同环境,不同集群的配置,配置修改后能够实时推送到应用,并且具备权限治理功能。本文讲述如何快速搭建开发或者测试使用 Apollo 配置中心。如果需要在生产...

2020-01-21 09:24:20 572

01背包问题及变种详解

经典的背包问题九讲文档,包含了01背包及其变种的详细解释。

2011-01-28

86版五笔字根表,经典,好用

86版五笔字根表,经典,好用,还包括了字根背诵口诀。

2011-02-05

POJ水题集--50道--增加自信

POJ水题集-----50道左右-----增加自信啊..

2010-12-23

matlab中文帮助文档

matlab中文帮助文档,学习matlab的好帮手,各位有福啦。

2011-02-05

haozlee的留言板

发表于 2020-01-02 最后回复 2020-01-02

请问下:如何截取浏览网页时切换不同的标签事件

发表于 2013-01-13 最后回复 2013-04-09

问个C++简单的问题,程序的输出是什么?

发表于 2011-04-20 最后回复 2011-04-21

csai:2007年5月份软考试题已发布!

发表于 2007-05-26 最后回复 2010-12-08

自己写的一个有关构造函数和析构函数的测试程序,大家看下能不能写出运行结果

发表于 2007-09-19 最后回复 2007-09-19

软设通过,散分!

发表于 2007-07-24 最后回复 2007-07-27

J2EE学习

发表于 2007-07-04 最后回复 2007-07-05

有关C++类的一个问题

发表于 2007-06-25 最后回复 2007-06-26

六级今天可以查成绩了,先给大家散下分啊!

发表于 2007-03-04 最后回复 2007-03-04

程序员过了

发表于 2006-12-29 最后回复 2006-12-30

刚考完程序员的请进

发表于 2006-11-04 最后回复 2006-11-22

软件工程的学生终于胜了一会

发表于 2006-11-21 最后回复 2006-11-21

大家推荐一本离散数学的书吧

发表于 2006-10-16 最后回复 2006-10-20

有个小问题不懂,大家看下吧

发表于 2006-10-16 最后回复 2006-10-16

看谭老师<<C++程序设计>>的问题

发表于 2006-10-14 最后回复 2006-10-15

问大家一个简单的问题啊.也不知我是不是钻牛角尖.

发表于 2006-09-03 最后回复 2006-09-15

问个有关成员函数的存储问题.大家进来看下吧.

发表于 2006-09-04 最后回复 2006-09-10

大家帮我看下这个简单的问题啊.

发表于 2006-09-01 最后回复 2006-09-01

空空如也

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

TA关注的人 TA的粉丝

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