诺浅
从事JAVA工作多年,致力于通过自己的理解,用最通俗易懂的语言描述清楚那些晦涩难懂的概念。
展开
-
Nginx自动探活后端服务状态自动转发,nginx_upstream_check_module的使用
nginx对后端节点健康检查的方式主要有3种官网地址:http://nginx.org/cn/docs/http/ng … proxy_next_upstream严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问。原创 2023-08-31 10:55:47 · 2421 阅读 · 0 评论 -
TCP的沾包与拆包及基于Netty的解决方案
缘起笔者最近在研究java NIO的那些事,说到NIO就不得不说Netty。Netty的诞生大大简化了JAVA NIO的开发,在此之前,部分公司可能会使用MINA或者自己封装NIO。但实际上如果不是对NIO非常精通的人,自己封装NIO会有很多这样那样的问题,况且NIO本身就有一部分BUG,如果不能很好的避开这些BUG,这是很致命的。现存的RPC框架比如阿里的dubbo,内部也应用了Netty,这...原创 2019-02-19 17:43:17 · 1553 阅读 · 1 评论 -
Netty线程模型(Netty的高性能原理探秘)
缘起日前在看netty的工作原理,对netty的线程模型很是不能理解,查阅了诸多资料,终于有了一些眉目。特此记录,已被查阅。阅读对象netty是基于java Nio的封装,所以需要读者对java NIO有一定的了解,篇幅所限,本文不会对NIO再做详述,有需要的读者可以查看JAVA BIO,NIO,AIO详解(附代码实现)以及Netty的简介Netty的线程模型说netty的线程模型之前,...原创 2019-08-17 19:55:19 · 1377 阅读 · 0 评论 -
Kafka架构的艺术-谈谈KAFKA的架构以及这种架构的优势
Kafka各组件Broker(一个kafka节点)每个kafka节点称为一个Broker,一个服务器上可以部署一个或者多个kafka的节点(示例图中只部署了一个),然后这些节点连接到注册中心上,就形成了一个kafka的集群。Topic即主题,在kafka中消息是分类型的,比如用户行为日志类型,支付订单类型,结算数据类型等,不同类别的消息在生产的时候可以指定发送到不同的Topic里。一个...原创 2019-07-19 11:28:53 · 7474 阅读 · 1 评论 -
Kafka入门-基础操作命令-常用命令
主题操作创建主题使用以下命令创建一个叫作 my-topic 的主题,主题包含 8 个分区,每个分区拥有两个副本。kafka-topics.sh --zookeeper zoo1.example.com:2181/kafka-cluster --create--topic my-topic --replication-factor 2 --partitions 8Created topic...原创 2019-07-24 16:23:31 · 1046 阅读 · 0 评论 -
Kafka深入-kafka如何调优
配置参数调优broker配置num.recovery.threads.per.data.dir对于如下 3 种情况,Kafka 会使用可配置的线程池来处理日志片段:服务器正常启动,用于打开每个分区的日志片段;服务器崩溃后重启,用于检查和截短每个分区的日志片段;服务器正常关闭,用于关闭日志片段。默认情况下,每个日志目录只使用一个线程。因为这些线程只是在服务器启动和关闭时会用到,所以...原创 2019-07-19 14:36:54 · 7172 阅读 · 0 评论 -
SpringCloud OpenFeign Demo
项目结构如下其中API中主要放置了需要暴露的接口,service则通过RequestMapping的方式提供了一些Controller。在client中,通过feign的方式来调用这些controller。主POM<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XML原创 2021-01-18 23:44:34 · 1323 阅读 · 0 评论 -
SpringBoot与SpringCloud的版本对应详细版
缘起初学spring cloud的朋友可能不知道,其实SpringBoot与SpringCloud需要版本对应,否则可能会造成很多意料之外的错误,比如eureka注册了结果找不到服务类啊,比如某些jar导入不进来啊,等等这些错误。下面列出来springBoot和spring cloud的版本对应关系,需要配套使用,才不会出现各种奇怪的错误。关于maven仓库的版本列表spring-cloud...原创 2019-04-18 11:50:50 · 159177 阅读 · 13 评论 -
feign的超时时间设置
feign: client: config: default: connect-timeout: 5000 read-timeout: 20000原创 2020-04-24 11:12:57 · 3423 阅读 · 0 评论 -
SpringCloud到底是什么
什么是微服务在介绍Spring Cloud之前,读者有必要了解一下什么是微服务。而要了解什么是微服务又要了解什么时候SOA。关于什么是SOA可以看笔者的这篇文章:https://blog.csdn.net/qq32933432/article/details/87195037简单来说什么是微服务:微服务是一种架构模式,叫微服务架构更合理,就是把一个系统中的各个功能点都拆开为一个个的小应用然后单...原创 2019-05-07 11:56:50 · 29363 阅读 · 8 评论 -
SpringBoot Feign文件上传
写在前面Feign 文件上传,与普通的远程调用会有所不同,注意了。客户端<feign-form.version>3.0.3</feign-form.version><!-- 文件上传 --><dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <原创 2020-08-11 22:19:58 · 1555 阅读 · 0 评论 -
maven根据不同的环境打包不同的配置文件
缘起我们在做项目的时候经常会遇到有多个环境每个环境的配置不一样的问题,比如我们的生产环境的数据库和测试环境的数据库肯定不会一样,我们每次在本机测试的时候可能配置的URL是测试环境的,要打生产war包的时候又需要把配置改成生产的,来回很容易出错,那么有没有什么简单的办法呢?有的,首先需要你的项目中有使用maven.使用maven插件打包不同的配置文件首先我们需要在pom.xml进行如下配置定...原创 2019-09-20 16:12:17 · 1068 阅读 · 0 评论 -
Maven使用手册
设置HTTP代理http://fhd001.iteye.com/blog/1097305maven的依赖范围http://www.cnblogs.com/beiyeren/archive/2013/02/03/2891124.html配置maven的镜像http://blog.csdn.net/xun_2008/article/details/16916801maven的生命周期和插件http://原创 2016-08-02 17:47:15 · 554 阅读 · 0 评论 -
Maven的settings.xml文件结构之Servers,Mirror和Repository
缘起在maven的配置文件settings.xml中,有Servers节点,Mirror节点和Repository节点,一个典型的settings.xml配置如下<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" ...原创 2020-02-22 10:53:03 · 8762 阅读 · 0 评论 -
maven错误解决:编码GBK的不可映射字符
在pom.xml的/project/build/plugins/下的编译插件声明中加入下面的配置<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</sour原创 2017-01-20 10:33:08 · 1012 阅读 · 0 评论 -
Zookeeper选举算法
写在前面什么是Poxos算法Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递的一致性算法。这个算法被认为是类似算法中最有效的。Poxos算法有什么用Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。Poxos算法推导内容较多,本文不做探讨,可以看这篇文章Zookeeper中关于Poxos算法的应用其实严格来说zookeeper中的选举算法并不是Poxos算法,可以算作是原创 2020-08-23 17:46:29 · 965 阅读 · 1 评论 -
Zookeeper脑裂问题以及为什么推荐奇数节点讲解
什么是Poxos算法Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递的一致性算法。这个算法被认为是类似算法中最有效的。Poxos算法有什么用Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。Poxos算法推导内容较多,本文不做探讨,可以看这篇文章zookeeper...原创 2019-07-17 22:46:14 · 1936 阅读 · 0 评论 -
RabbitMQ消息的可靠性投递
缘起在项目中使用RabbitMQ时,我们可能会遇到这样的问题:如一个订单系统当用户付款成功时我们往消息中间件添加一条记录期望消息消费者修改订单状态,但是最终实际订单状态并没有被修改成功。遇到这种问题我们排查的思路如下:1.消息是否已经成功发送到消息中间件2.消息是否有丢失的情况 消息是否已经被消费成功在生产环境下是不容许出现消息投递/消费错误的情况的,因为这可能会对企业产生巨大的损失,本...原创 2020-04-24 11:11:08 · 857 阅读 · 0 评论 -
RabbitMQ入门Demo,基于springboot
缘起前面几章我们基本了解了RabbitMQ的基本概念,以及RabbitMQ是如何保证消息的可靠性的,那么本章开始,将真正用java代码去连接使用一些RabbitMQ,通过阅读本章内容,你会明白如何在java springboot的项目中使用RabbitMQ。阅读人群项目采用springboot搭建,所以你对springboot需要有一个基本的了解,并且我们假设已经在你的服务器或本机安装了Ra...原创 2020-04-24 11:11:42 · 487 阅读 · 0 评论 -
RabbitMQ基本概念介绍
什么是RabbitMQ在了解什么是RabbitMQ之前有必要先说说amqpAMQPAMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。它可以使对应的客户端(client)与对应的消息中间件(broker)进行交...原创 2020-04-23 11:41:51 · 1021 阅读 · 0 评论 -
红黑树的旋转与变色
缘起在此之前,笔者写过一篇关于TreeMap工作原理的简单解析,其中限于当时知识和时间有限,暂没有解析关于树的旋转和变色等操作。后来笔者查询了一部分资料也参考了很多文章,终于弄清楚变色和旋转是如何工作的。本文主要详解一下红黑树的变色和旋转是如何工作的。为什么红黑树要旋转和变色这需要从红黑树的特效说起,红黑树发明之初就定义了以下5个特性,因为这几个特性,使得红黑树成为一个相对平衡的二叉树,也就...原创 2019-01-27 22:55:23 · 9550 阅读 · 13 评论 -
ConcurrentHashMap源码简单分析
为什么说是简单分析首先我们来探讨一个问题,学习源码是为了什么?对,就是面试,说其他的都是假的,什么提高性能,我想问一个ConcurrentHashMap你能提高多少性能? 那么既然是面试,我们应该记住更多的东西,而如果在一个ConcurrentHashMap上耗费大量的精力很显然是有点划不来的,我们应该先了解各大概,等到自己有足够的时间的时候再来详细了解。从PUT方法说起先看put方法的源码public V put(K key, V value) { return putVal(key, v原创 2020-07-27 23:15:14 · 334 阅读 · 0 评论 -
一致性Hash及其原理、Hash环
转载的主要愿意是因为本文通俗易懂,以防后面找不到,故转载。原文:http://www.zsythink.net/archives/1182原创 2018-05-05 20:16:42 · 6249 阅读 · 0 评论 -
Java数据结构-Hashmap
内部结构图实现原理HashMap内部维护着一个Entry类型的数组,默认大小16:Entry<K,V>[] table,这个Entry对象包含key,value,next,hash四个属性,key和value即是你map.put(Key,Value)的key和value,hash是使用key经过算法得出的一个hash值,当我们通过get方法取值的时候即是比较的key的hash值。而next保存的是下原创 2016-11-02 21:59:16 · 951 阅读 · 0 评论 -
Java数据结构-ArrayList
内部结构图实现原理ArrayList内部维护一个Object[],Object初始化大小是10,add或remove方法实际上是对数组元素的添加或者删除,由于添加和删除的时候涉及数组元素的复制和移动,所以添加删除教慢而定位下标教快。常用方法源码add(E)public boolean add(E e) { ensureCapacityInternal(size + 1); //判断原创 2016-11-02 15:05:06 · 513 阅读 · 0 评论 -
Java代码实现一致性Hash算法(这可能是java中最简单的一致性Hash算法实现方式)
缘起关于一致性hash算法的原理,本文不做概述。本文说的是如何在java中实现一致性Hash算法。代码package com.bxoon.test;import java.util.*;/** * 一致性Hash * @author zhongguangxi */public class ConsistenceHash { // 物理节点集合 private...原创 2019-07-07 10:02:23 · 1095 阅读 · 0 评论 -
深度优先与广度优先Java实现代码示例
在编程生活中,我们总会遇见树性结构 而当我们需要遍历所有节点的时候有两种遍历算法,1.深度优先,2.广度优先1.深度优先(DFS)英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。对于上面的例子来说深度优先遍历的结果就是:A,B,D,E,I,C,F,G,H.(假设先走子节点的的左侧) 深...原创 2018-05-05 19:40:34 · 610 阅读 · 0 评论 -
Java 雪花算法生成器及其原理解析
package com.dongbawen.hppa.support.utils; /** * Twitter_Snowflake<br> * SnowFlake的结构如下(每部分用-分开):<br> * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 00000000000...原创 2019-12-02 14:07:34 · 1378 阅读 · 0 评论 -
常见限流算法
常见限流算法有以下几种,每一种都有他的优缺点计数器算法滑动窗口算法漏桶算法令牌桶算法计数器算法计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。此算法在单机还是分布式环境下实现都非常简单,使用redis的incr原子自增性和线程安全即可轻松实现。优点:实现简单缺点1:无法应对短时高并发,如果我在单位时间1s内的前10ms,已经通过了100个请求,那后面的990ms,只能眼巴巴的把请求拒绝,我们把这种现象称为“突刺现象”。原创 2020-11-30 17:58:17 · 1494 阅读 · 0 评论 -
Java数据结构-TreeMap
内部结构图 通常称之为红黑树(平衡二叉树)(红黑树(平衡二叉树)是一种特殊的排序二叉树)实现原理由于红黑树过于复杂,下诉实现原理只是排序二叉树的原理,红黑树以此类似。 TreeMap内部维护着一个Entry<K,V>对象,该对象包含五个属性,K key; 调用put方法的时候传的keyV value; 调用put方法的时候传的原创 2016-11-03 10:23:16 · 1953 阅读 · 0 评论 -
Java数据结构-LinkedHashmap
内部结构图实现原理其实如果不看图中的横向引用而只看竖向引用的话,LinkedHashMap和HashMap是差不多的,关于HashMap的结构可以查看http://blog.csdn.net/qq32933432/article/details/53013393 LinkedHashMap内部维护的Entry比HashMap中维护的Entry多了两个属性Entry<K,V> before, aft原创 2016-11-02 23:04:00 · 1306 阅读 · 0 评论 -
jdk8之HashMap resize方法详解(深入讲解为什么1.8中扩容后的元素新位置为原位置+原数组长度)
缘起在此之前,笔者对HashMap的工作原理进行过简单的解析, jdk8中的HashMap相对于jdk7有比较大的更新,本文主要是对改动后的resize()方法进行详细解析。看本文需要一定的HashMap基础,如果没有基础的同学建议先看笔者的另一篇文章resize()方法的作用resize()方法会在HashMap的键值对达到“阈值”后进行数组扩容,而扩容时会调用resize()方法,此外,...原创 2019-01-27 18:45:18 · 15887 阅读 · 9 评论 -
Java数据结构-LinkedList
内部结构图实现原理LinkedList内部维护着一个Node<E>,其中E为你的类型,Node<E>包含着3个属性E item(类型),Node<E> next(下一个元素),Node<E> prev(上一个元素),每个Node都持有上一个和下一个元素的引用(链表和链尾除外),所以是一个引用链表的结构。 这种结构在取值的时候由于要算引用,所以比较慢,但是在添加和删除的时候只要把对应的引用替换就可以原创 2016-11-02 15:31:08 · 580 阅读 · 0 评论 -
JDK1.8以前的HashMap扩容导致的死循环问题
先看扩容源码void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; // 循环数组 for (Entry<K,V> e : table) { // 循环链表 while(null != e) { Entry<K,V> next = e.next; if (rehash) { e.hash原创 2020-10-19 17:24:07 · 801 阅读 · 0 评论 -
基于JAVA的冒泡排序DEMO
public static void main(String[] args) { int[] a = new int[]{2, 1, 6, 7, 8, 5, 3, 5}; for (int i = 0; i < a.length; i++) { //外层循环控制排序趟数 for (int j = 0...原创 2018-05-05 20:57:56 · 395 阅读 · 0 评论 -
Docker相关概念介绍
什么是DockerDocker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker起源Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于g...原创 2020-04-24 11:12:20 · 623 阅读 · 0 评论 -
CentOS 7,8安装Docker、DockerCompose
安装依赖包sudo yum install -y yum-utils device-mapper-persistent-data lvm2 设置阿里云镜像源sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装 Docker-CEsudo yum install docker-ce报错centos8默认使用podman代替docker,所原创 2020-09-21 11:13:10 · 499 阅读 · 0 评论 -
一文说清楚Dockerfile 中VOLUME到底有什么用?
写在开头相信大部分人对docker run -v这个参数都比较熟悉,无非就是把宿主机目录和容器目录做映射,以便于容器中的某些文件可以直接保存在宿主机上,实现容器被删除之后数据还在,比如我们把mysql装在容器中,肯定不能说容器被删mysql所有的数据也都不在了。第二个作用是也可以用来实现多容器共享同一份文件。但如果玩过dockerfile的话就知道dockerfile还有个VOLUME指令,如FROM centos:latestRUN groupadd -r redis && use原创 2021-10-25 00:25:21 · 26190 阅读 · 11 评论 -
CenterOS8 Docker安装ES+Kibana
安装Dockerhttps://bxoon.blog.csdn.net/article/details/108705232安装esElasticSearch 和 Kibana版本需对应安装,版本不一致可能会出现问题拉取镜像docker pull elasticsearch:7.2.0启动镜像docker run -d -p 9200:9200 -p 9300:9300 --name es -e "discovery.type=single-node" elasticsearch:7.2.0原创 2020-09-21 17:40:53 · 677 阅读 · 0 评论 -
Docker入门-常用命令
前言关于什么是docker,以及docker有什么优势等请自行百度,本文章假定你已经了解docker的基本概念Docker安装https://blog.csdn.net/lin521lh/article/details/78355433基本命令启动:systemctl start docker停止:systemctl stop docker重启:systemctl restart d...原创 2019-06-13 15:47:01 · 521 阅读 · 0 评论