自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 spring-cloud学习五-hystrix的使用

目录1 服务雪崩、降级、熔断和限流1.1 服务雪崩1.2 服务降级1.3 服务熔断1.4 服务限流2 hystrix入门2.1 初识服务降级2.2 全局降级方法配置2.3 基于FeignClient配置的降级处理3 hystrix常用的属性3.1 超时时间配置3.1.1 ribbon超时配置3.1.2 hystrix默认超时时间3.1.3 基于方法的超时时间1 服务雪崩、降级、熔断和限流1.1 服务雪崩多个微服务之间调用的时候,假设服务

2020-11-16 00:45:53 9

原创 spring-cloud学习四-feign的使用

目录1 feign简介2 入门案例2.1 主启动类添加启动feign注解2.2 编写service接口2.3 controller调用2.4 调用测试3 日志增强3.1 日志增强简介3.2 配置日志范围3.3 配置日志范围3.4 调用测试1 feign简介feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Fe.

2020-11-08 22:49:45 41

原创 spring-cloud学习三-ribbon负载均衡

在上篇文章中已经学到spring-cloud可以实现负载均衡,主要是通过在代码里注入一个带有@LoadBalance的RestTemplate的对象实现的,其原理是springcloud封装了netfllix的ribbon组件。1 自定义负载均衡1.1 自定义负载均衡策略随机 (Random) 轮询 (RoundRobin) 一致性哈希 (ConsistentHash) 哈希 (Hash) 加权(Weighted)1.2 替换默认的负载均衡策略只需要在配置中添加一个负载均衡规则

2020-11-08 17:46:32 38

原创 spring-cloud学习二-整合zookeeper

首先下载并启动本地zookeeper1 服务提供者1.1 maven依赖由于我本机装的zk是3.4.6版本,排除了springcloud中带的高版本 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</ar

2020-11-08 14:29:27 20

原创 spring-cloud学习一-eureka入门

目录1 核心概念1.1 Eureka Server:注册中心服务端1.2 Eureka Client:注册中心客户端1.3 自我保护1.4 集群工作原理1.5 工作流程2 代码实现2.1 eureka-server2.2 eureka-client provider2.3eureka-client consumer3 启动测试3.1 控制台介绍3.2 actor端点监控3.3负载均衡测试1 核心概念1.1 Eureka Server:注..

2020-11-07 22:51:41 11 2

原创 密码学学习七-非对称加密(java)

import com.sun.org.apache.xml.internal.security.utils.Base64;import javafx.util.Pair;import org.junit.Before;import org.junit.Test;import javax.crypto.Cipher;import java.security.*;import java.security.spec.PKCS8EncodedKeySpec;import java.security.

2020-09-20 15:06:22 23

原创 密码学学习六-消息摘要

1 说明消息摘要(Message Digest)又称为数字摘要(Digital Digest) 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生 使用数字摘要生成的值是不可以篡改的,为了保证文件或者值的安全2 特点无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产

2020-09-20 14:49:38 36

原创 密码学学习五-加密模式和填充模式

1 加密模式ECB : Electronic codebook, 电子密码本. 需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密优点 : 可以并行处理数据 缺点 : 同样的原文生成同样的密文, 不能很好的保护数据 同时加密,原文是一样的,加密出来的密文也是一样的CBC : Cipher-block chaining, 密码块链接. 每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块优点 : 同样的原文生成的密文不

2020-09-18 23:16:10 1475

原创 密码学学习四-DES和AES代码实现

1 DES代码实现import com.sun.org.apache.xml.internal.security.utils.Base64;import org.junit.Before;import org.junit.Test;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;/** * @author huwenlong * @date 2020/9/18 20:22 */public cla

2020-09-18 22:52:15 50

原创 密码学学习三-现代密码学简介

1 散列函数散列函数,也见杂凑函数、摘要函数或哈希函数,可将任意长度的消息经过运算,变成固定长度数值,常见的有MD5、SHA-1、SHA256,多应用在文件校验,数字签名中。MD5 可以将任意长度的原文生成一个128位(16字节)的哈希值SHA-1可以将任意长度的原文生成一个160位(20字节)的哈希值2 对称密码对称密码应用了相同的加密密钥和解密密钥。对称密码分为:序列密码(流密码),分组密码(块密码)两种。流密码是对信息流中的每一个元素(一个字母或一个比特)作为基本的处理单元进行加密

2020-09-18 22:42:19 19

原创 密码学学习二-近代密码学

古典密码的安全性受到了威胁,外加使用便利性较低,到了工业化时代,近现代密码被广泛应用。恩尼格玛机恩尼格玛机是二战时期纳粹德国使用的加密机器,后被英国破译,参与破译的人员有被称为计算机科学之父、人工智能之父的图灵。恩尼格玛机恩尼格玛机使用的加密方式本质上还是移位和替代,只不过因为密码表种类极多,破解难度高,同时加密解密机器化,使用便捷,因而在二战时期得以使用。...

2020-09-18 22:35:44 39

原创 密码学学习一-古典密码学

1 替换法使用固定信息,将原文替换成密文1.1 单表替换单表替换的原文和密文是同一张表如原文密文关系如下a->bb->cc->dd->ee->f则bee的密文就是cff1.2 多表替换多表替换的原文和密文存在多张表中表1:a->bb->cc->dd->ee->f表2:a->cb->dc->ed->fe->g原文:bee密钥:122密文:cgg2 移位法

2020-09-18 22:33:54 83

原创 分布式id生成-雪花算法(SnowFlake)实现

1 雪花算法原理SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:1bit,不用,二进制中最高位是符号位,0表示正数,固定是0 41bit,毫秒时间戳,2^41-1毫秒时间戳表示可使用69年 10bit,工作机器id,前5位表示机房id,后5位表示机器id,最大支持2^5 * 2^5=1024个机器 12bit,序列号,表示同一机器同一时间戳内可以产生的4096个ID序号2 算法实现(java)package com.demo.utils;/**

2020-09-17 21:40:45 28

原创 redis学习九-redis常用配置

1 客户端连接配置1.1 相关配置最大连接数:maxclients 10000,一旦超过最大连接数,新的连接将被拒绝最大空闲时间:timeout 0,空闲时间超过timeout则关闭连接。0表示永不关闭检测tcp连接活性周期:tcp-keepalive 300,默认每300s检查一次,防止大量死连接占用资源1.2 查看当前配置127.0.0.1:6379> config get maxclients1) "maxclients"2) "10000"127.0.0.1:6379

2020-09-13 20:51:38 4

原创 redis学习八-redis当前状态查看

目录1 查看客户端连接信息1.1 客户端标识1.2 输入缓冲区1.2.1 输入缓冲区介绍1.2.2 输入缓冲区使用不当会出现两个问题1.2.3 造成输入缓冲区过大的原因1.2.4 缓冲区监控1.3 输出缓冲区1.4 客户端存活状态1.5 杀掉指定ip端口的客户端2 客户端缓冲区统计3 客户端连接数统计4 内存监控4.1 查看那当前内存使用大小4.2 查看内存配置大小1 查看客户端连接信息通过执行client list命令来查看客户端连接信息

2020-09-13 20:39:35 38

原创 redis学习七-持久化

目录1 RDB1.1 触发机制1.1.1 手动触发1.1.2 自动触发1.2 流程说明1.3 RDB文件处理1.4 优缺点1.4.1 优点1.4.2 缺点1.5 日志2 AOF2.1 使用AOF2.2 流程说明2.3 aof重写说明2.3.1 aof重写文件变小2.3.2 触发机制2.3.3 aof重写过程2.4 优缺点2.4.1 优点2.4.2 缺点2.5 日志3 混合模式3.1 开启混合持久化3.2 混合持久

2020-09-03 11:34:32 16

原创 redis学习六-地理信息定位(GEO)的使用

1 GEO简介redis3.2版本支持存储地理位置信息来存储地理位置,很多app中地理位置相关功能如附近位置、摇一摇等功能可以通过GEO来实现2 常用命令2.1 添加地理位置信息geoadd key longitude latitude member [longitude latitude member ...] longitude:经度 latitude:维度 member:成员 return:添加成功的个数添加5个个城市的经纬度127.0.0.1:63...

2020-09-02 13:01:11 49

原创 redis学习五-HyperLogLog使用

1 HyperLogLog简介HyperLogLog实际类型是字符串,通过基数算法利用极小的空间来完成独立总数的统计。这种统计不是100%准确的,官方给出的是0.81%的误差。2 常用命令同样以用户登录在某天登录来介绍2.1 添加pfadd key element [element ...]4个用户在2020-09-01这天进行登录,3个用户在2020-09-02号这天登录127.0.0.1:6379> pfadd user:login:2020-09-01 user1 use

2020-09-02 12:59:05 34

原创 redis学习四-位图(bitmap)使用

1 bitmap简介现代计算机都是用二进制(位)作为信息的基础,1个字节=8位,如big有2个字符组成,对应的ASCII值分别是98、105、103、对应的二进制分别是01100010、01101001、01100111,如下图 b i g01100010 01101001 01100111bitmap本身并不是数据结构,实际上就是字符串,但是它可以对字符串的位进行操作,可以把bitmap想象成一个以bit为单位的数组,数组每个单元...

2020-09-02 10:49:52 57

原创 redis学习三-redisShell介绍

目录1 redis-cli介绍1.1 执行频率和间隔1.2 集群环境连接1.3 认证连接1.4 大key查询1.5 查看网络延迟1.6 查看redis信息(内存、连接等)2 redis-benchmark介绍2.1 并发数和请求量2.2 统计每秒并发量2.3 随机键插入测试2.4 对指定命令测试2.5 CSV格式输出1 redis-cli介绍1.1 执行频率和间隔-r:repeat表示多次执行-i:表示每隔几秒执行1次,需要和-r配合使用,可

2020-09-01 16:27:40 18

原创 redis学习二-慢查询分析

1 慢查询日志说明redis客户端执行命令包括4步1)发送命令2)命令排队3)命令执行4)返回结果慢查询命令只统计第三步的时间,如果没有慢查询日志,不代表客户端没有超时2 相关配置redis慢查询相关配置主要包括2个慢查询时间阈值配置: slowlog-log-slower-than,默认10000微秒,即10毫秒。如果执行时间超过10ms这条命令就会被记录到慢查询日志中。如果配置值=0,则会记录所有命令;如果<0,则任何命令都不记录慢查询日志存储量:slowlog-max-

2020-09-01 12:53:48 23

原创 redis学习一-入门操作

目录1 全局命令1.1 查看所有键1.2 键总数1.3 查看键是否存在1.4 删除键1.5 键过期和查看过期时间1.6 键的数据结构2 字符串2.1 设置值2.2 获取值2.3 批量设置与获取2.4 自增自减2.5 使用场景3 哈希3.1 设置值3.2 获取值3.3 删除field3.4 计算field个数3.5 批量操作3.6 判断field是否存在3.7 自增自减3.8 使用场景4 列表4.1 添加4.2

2020-09-01 12:51:42 26

原创 kafka学习十三-消费者消费数据

1 自动提交的问题1.1 消息丢失由于自动提交是每隔一段时间提交一次,假如消费者拉到一批数据,刚处理一部分就提交了,然后挂掉了,这个时候未消费的那批数据就彻底丢失了,因为offset已经提交了,不会重新消费。1.2 消息重复同样的,消费者拉到一批数据,刚处理一部分没有提交,然后挂掉了,这个时候已经消费的那批消息会被再次消费。2 手动消费问题手动消费只会造成消息重复,不会造成消息丢失,消息重复原因和自动提交原因一样3 代码实现3.1 设置propertiespublic

2020-08-23 17:37:02 33

原创 kafka学习十二-生产者发送消息

目录1 发送消息流程2 发送消息API2.1 设置properties2.2 生产者发送消息2.3 自定义分区策略2.4 自定义拦截器2.4.1 核心方法介绍2.4.2 代码示例1 发送消息流程kafka Procedure发送消息采用的是异步发送方式,消息发送过程中涉及到两个线程,Main线程和Sender线程,以及一个共享变量RecordAccumulator。main线程把消息发送给RecordAccumulator,Sender线程不断从RecordAccum

2020-08-23 17:34:52 38

原创 kafka学习十一-事务消息

1 Exactly Once语义将服务器的ACK设置为-1,可以保证Procedure到broker不会丢失数据即At Least Once;相对的,服务器级别设置为0,可以保证生产者发送消息只会发一次,即At Most Once语义但是,一些非常重要的消息,如交易数据,下游消费者要求消息不重不漏,即Exactly Once,精准一次,在0.11版本之前,kafka是无能为力的,只能通过设置ACK=-1,然后业务消费者自己去重。0.11版本之后,kafka引入了幂等性概念,procedure无论向b

2020-08-23 17:29:44 40

原创 kafka学习十-高效读写数据

1 顺序写磁盘kafka的procedure生产数据,然后写入到log中,写的过程是直接追加到文件末端,顺序写。官方测试表明,同样的磁盘,顺序写能达到600M/s,随机写只能达到100K/s。这与磁盘结构有关,顺序写之所以快,是因为减少了大量磁头寻址时间2 零拷贝传统模式下,从硬盘读取一个文件是这样的:1)调用read函数,文件数据被copy到内核的缓冲区(read是系统调用,放到了DMA,所以用内核空间)。2)read函数返回,文件数据从内核缓冲区copy到用户缓冲区。3)write函

2020-08-23 00:13:47 30

原创 kafka学习九-消费者offset存储

kafka在0.9版本之前,消费者offset存储在zk中,路径是 /consumers/[groupId]/offsets/[topic]/[partition]0.9版本之后将offset放在kafka内置的一个topic中,该topic是__consumer_offsets,消费该topic需要修改consumer.properties文件exclude.internal.topics=false也是根据[groupId,topic,partition]来划分的...

2020-08-22 23:55:08 14

原创 kafka学习八-消费者分区策略

kafka有两种分配策略,RoundRobin和Range(默认)1 RoundRobin策略1.1 订阅单个topic这种方式下就是按照partition顺序,轮询分配给consumer,如下图1.2 订阅多个topic两个topic,t0和t1,各有3个分区,p0-p2kafka中有个类,TopicAndPartition,把topic和partition排列组合成6个对象,计算出哈希值排序,然后依次轮询分配给各个consumer。RoundRobin策略优点是消费者分区分配

2020-08-22 23:52:11 20

原创 kafka学习七-数据一致性问题

1 LEO和HW这样一个场景leader写了10条数据follower1同步了8条follower2同步了9条假如leader挂了,follower1或follower2任意一个当选为leader,则会出现数据不一致的情况。为了解决这个问题,kafka维护了LEO和HW两个数据如果没有HW这个概念,假如消费者消费到leader的offset=18的数据挂了,然后新选出的leader没有18的数据,消费者消费不到就会有问题。有了HW后,消费者最多看到HW,如果leader挂掉,任意一个fol

2020-08-22 23:47:25 26

原创 kafka学习六-数据可靠性保证

1 副本数同步策略1.1 半数以上完成同步就发送ACK优点:延迟低缺点:选取新leader时,容忍n台节点故障,需要2n+1个副本1.2 全部完成同步才发送ack优点:选取新leader时,容忍n台节点故障,需要n+1个副本缺点:延迟高kafka选取的是第二种2 ISR采用第二种方案后,有如下场景,leader收到数据,所有的follower都开始同步数据,但是有一个follower由于故障迟迟不能与leader进行同步,那么leader就要一直等待为了解决这个问题,lead

2020-08-22 23:44:27 22

原创 kafka学习五-生产者分区策略

发送消息的时候把消息封装成一个ProducerRecord对象,ProducerRecord有如下几个构造函数public ProducerRecord(String topic, Integer partition, K key, V value) { this(topic, partition, (Long)null, key, value, (Iterable)null);}public ProducerRecord(String topic, K key, V value) {..

2020-08-22 23:41:41 14

原创 mysql学习一-事务隔离级别

目录1 几个概念1.1 脏读1.2 不可重复读1.3幻读2 事务隔离级别3操作演示3.1 读未提交3.2 读已提交3.3 可重复读3.3.1 可重复读解决脏读、不可重复读3.3.2 幻读问题4 MVCC机制4.1 InnoDB存储引擎MVCC的实现策略4.2 dml操作对版本号的影响4.2.1 insert操作4.2.2 delete操作4.2.3 update操作...

2020-08-14 21:27:16 16

原创 jvm学习三-MAT内存分析工具的使用

目录1 模拟内存溢出程序1.1 jvm配置1.2 测试代码2 MAT工具进行内存分析2.1 大纲介绍2.2 Histogram视图介绍2.3 Leak Suspects视图介绍2.4 Dominator Tree1 模拟内存溢出程序1.1 jvm配置-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./logs/gc.log -Xms32m -Xmx32m -XX:MetaspaceSize=32m -XX.

2020-08-05 23:29:17 75

原创 jvm学习二-垃圾收集器

目录1 新生代垃圾收集器1.1 Serial收集器1.2 ParNew收集器1.3 Parallel Scavenge收集器2 老年代收集器2.1 Serial Old收集器2.2 Parallel Old收集器2.3 CMS收集器3 G1收集器3.1 特点3.2 过程3.3 相关jvm参数4 配置垃圾收集器类型jvm垃圾收集器整体可以分为三大类,新生代垃圾收集器、老年代垃圾收集器、全局垃圾收集器1 新生代垃圾收集器1.1 Serial收.

2020-08-04 23:03:51 33

原创 jvm学习一-垃圾回收算法

1 复制算法:新生代(MinorGC)复制->清空->互换。复制:当伊甸区满的时候会触发第一次gc,把还活着的对象拷贝到from区,当eden区再次触发gc的时候会扫描eden和from两个区进行垃圾回收,经过这次,回收还存活的对象进入to区或者老年代(年龄>=15)。同时把这些对象年龄+1清空:然后清空eden和from区的对象,互换:from区变为to区,to区变为from区新生代采用复制算法的原因是新生代的对象大都是朝生夕死,需要复制的对象占少数。优点整体复

2020-08-03 23:54:11 33

原创 kafka学习四-工作流程及文件存储

1 kafka工作流程kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的topic是逻辑上的概念,而partition是物理上的概念,每个partition对应一个log文件,该log文件中存储的就是producer生产的数据。producer生产的数据会被不断追加到log文件的末端,且每条数据都有自己的offsetoffset是一个long型的数字,通过这个offset可以确定一条在该partition下的唯一消息。在partition下是保证有序的

2020-08-02 21:41:24 18

原创 kafka学习三-启动配置

1 配置文件修改1.1 修改server.properties主要是下面几个配置# broker全局唯一编号,不能重复。集群部署的时候只需要保证brokerId不一样就行broker.id=0# 删除topic功能delete.topic.enable=true# kafka运行数据存放路径。注意,这里不是日志,是数据log.dirs=/opt/software/kafka-2.11/data# 连接zk地址zookeeper.connect=192.168.249.201:218

2020-08-02 21:13:25 38

原创 kafka学习二-kafka基础架构

kafka基础架构图如下1 生产者生产者负责向某个topic发送消息,发消息的时候可以指定分区2 topictopic包含多个partition,每个partition又有leader和follower,leader和follower在不同的broker上。创建topic的时候副本数不能大于broker个数3 消费者和消费者组消费者组负责消费某个topic的消息如果分区数多于消费者个数,那么存在一个消费者消费多个分区的数据。如果分区数等于消费者个数,那么每个消费者消费一个分区

2020-08-02 21:10:50 24

原创 kafka学习一-kafka消费模式

1 点对点模式消息生产者把消息发送到Queue中,然后消费者从Queue中取出并且消费消息。消息被消费后Queue中不再存储,所以一个消息只可以被一个消费者消费。2 发布订阅模式生产者把消息发布到topic中,同时有多个消费者订阅该topic。和点对点不同,该消息会被所有的消费者消费发布订阅有两种2.1 消费者主动拉取消息好处是消费者消费速度可以由消费者来确定。缺点是需要建立一个长轮询,不断的问消息,比较浪费资源。2.2 队列主动推送消息消费速度由队列决定。但是下游消费

2020-08-02 21:07:14 26

原创 数据结构和算法九-二分查找算法

1 算法简介二分查找思路比较简单,对于一个有序数组,先比价目标元素和中间元素,如果比中间元素小则在左半部分查找;如果比中间元素大则在右半部分查找。2 代码实现public class BinarySearch { public Integer search(Integer[] arrs, int num) { return binarySearch(arrs, 0, arrs.length - 1, num); } private Integer b...

2020-08-02 12:43:37 24

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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