自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(343)
  • 资源 (3)
  • 收藏
  • 关注

原创 kafka分区重分配详解

​ 当集群中的一个节点突然宕机下线时,如果节点上的分区是单副本的,那么这些分区就变得不可用,在节点恢复前,相应的数据也就处于丢失状态;如果节点上的分区是多副本的,那么位于这个节点上的leader副本的角色会转交到集群中的其他follower副本中。总而言之,这个节点上的分区副本都已经处于功能失效状态。kafka并不会将这些失效的副本自动地迁移到集群中剩余的可用broker节点上。如果放任不管则不仅影响整个集群的均衡负载,还会影响整体服务的可用性和可靠性。​ 当要对集群中的一个节点进行有计划的下线操作时

2021-11-28 12:45:57 3905

原创 kafka-configs.sh配置管理

​ kafka-configs.sh脚本是专门用来对配置进行操作的,这里的操作是指在运行状态下修改原有的配置,如此可以达到动态变更的目的。​ kafka-configs.sh脚本使用entity-type参数来指定操作配置的类型,并且使用entity-name参数来指定操作配置的名称。entity-type的释义entity-name的释义主题类型的配置,取值为topics指定主题的名称broker类型的配置,取值为brokers指定brokerId值,即broker中br

2021-11-27 10:42:44 2533

原创 kafka-topics.sh脚本详解

通过脚本进行主题的管理,包括:创建主题、查看主题、修改主题、删除主题等操作。内部是靠kafka.admin.TopicCommand接收参数运行。[xuhaixing@xhx151 ~]$ kafka-topics.sh --helpThis tool helps to create, delete, describe, or change a topic.Option Description

2021-11-27 10:22:29 4331

原创 kafka消费者停止2天offset元信息丢失

背景:因下游服务还没做好,所以下游服务暂时停机了,上游一直往kafka发送消息,打算下游上线时能直接接上停机前的位置,于是把topic的retention.ms设置成了2周,保证log不过期,过了两天想查看下topic堆积情况(怎么查看可看另一篇文章),结果根据group查不到分区与消费者绑定关系了,offset信息就也不存在了[xuhaixing@xhx151 kafka_2.13-2.7.0]$ kafka-consumer-groups.sh --bootstrap-server http://19

2021-11-21 11:51:28 2179

原创 某个broker节点未启动造成无法选举leader

问题描述:topic都是多分区,多副本,broker节点关闭后,由于某些情况,某个节点无法启动,其他节点都启动后,topic或部分分区仍不可用,造成无法选举leader1. 创建topictopic:topic-demo02 3分区,3副本[xuhaixing@xhx151 cluster]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --create --topic topic-demo02 --replicatio

2021-11-20 16:53:57 1045

原创 FutureTask源码解析

Future设计模式属性 private volatile int state; //当前任务状态 private static final int NEW = 0; //定义的状态常量 private static final int COMPLETING = 1; private static final int NORMAL = 2; private static final int EXCEPTIONAL = 3;

2021-03-10 22:54:43 119

原创 leetcode 25 Reverse Nodes in k-Group

给一个链表,每k个节点一组进行反转,输出反转后的链表hard难度,但突破点很好找,具体解体思路,看下面代码中每行注释public class LC25 { public static void main(String[] args) { ListNode listNode = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5, null)

2020-11-11 23:09:18 215

原创 343. Integer Break

把一个整数拆分成至少两个正整数的和,要求拆分后的整数的乘积最大。Example 1:Input: 2Output: 1Explanation: 2 = 1 + 1, 1 × 1 = 1.Example 2:Input: 10Output: 36Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.动态规划数值大的依赖于数值小的,所以找到状态转移公式很重要。bp[i] = Math.max(j * bp[i - j], j *(i - j))cla

2020-05-13 23:10:04 246

原创 leetcode64. Minimum Path Sum

给一个非负数二维数组,从左上到右下,最短的路径只能向右或者向下走Example:Input:[ [1,3,1], [1,5,1], [4,2,1]]Output: 7Explanation: Because the path 1→3→1→1→1 minimizes the sum.动态规划这里面存在一个问题,要想求出下一步的最短距离,必须求出上一步的最短距离边界:mins[0][0] = grid[0][0]状态转移公式3个:grid[0]那一排,依赖于左侧grid

2020-05-12 22:54:51 216

原创 leetcode 120. Triangle

给一个三角形,寻找一个从顶到底的最小的路径和,只能是临近的数字的和[ [2], [3,4], [6,5,7], [4,1,8,3]]The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).解题思路动态规划每一层都依赖于上一层按照从上到下,从右到左的顺序,一层一层的求开一个int[] f = new int[triangle.size()];这么大的空间重复利用就可以了cl

2020-05-11 23:11:25 272

原创 leetcode5.Longest Palindromic Substring

返回最长回文串Example 1:Input: "babad"Output: "bab"Note: "aba" is also a valid answer.Example 2:Input: "cbbd"Output: "bb"解题思路:定义下标i,j,boolean dp[i][j]动态规划思想:要求大的,先求小的边界:dp[i][j] = truei ==j 单个字符一定为truestr[i] == str[j]&&j-i ==1 两个挨着的字符相等

2020-05-10 22:39:06 181

原创 mysql8.0主从搭建

mysql版本 8.0.19 docker与非docker配置修改一样1. 主节点[xuhaixing@xhx151 ~]$ docker run --name mysql-master1 --privileged=true -v /opt/module/docker/mysql/master1:/var/lib/mysql -p 3307:3306 -d -e MYSQL_ROOT_PA...

2020-03-27 21:13:34 656

原创 mysql单机安装-centos

进入官网https://dev.mysql.com/downloads/,选择MySQL Yum Repository,下载合适自己系统的版本 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm安装 sudo rpm -ihv mysql80-community-release-el7-3.noar...

2020-03-27 21:11:07 203

原创 limit优化

limit优化limit 100000,20的意思是扫描满足条件的100020行,扔掉前面的100000行,返回最后20行。所以偏移量越大,查询性能越差。举例:默认全表扫描加入order by field, field必须有索引​ type变成了index记录上次的最大id,用id做范围查询嵌套查询也是一种方法总结:先找出第一条符合条件的i...

2020-03-23 12:24:04 1727

原创 Spring后置处理器

1. BeanPostProcessorpublic interface BeanPostProcessor { @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Nullabl...

2020-03-15 21:44:28 517

原创 kafka生产者实例配置参数

KafkaProducer中有三个参数是必填的:bootstrap.servers: 指定生产者客户端连接kafka集群所需的broker地址列表,格式为host1:port1,host2:port2,可以设置一个或多个。这里并非需要所有的broker地址,因为生产者会从给定的broker里寻找其它的broker。key.serializer和value.serializer:broker接收...

2020-03-14 16:42:44 4335

原创 kafka生产者原理分析

生产者客户端整体架构:​ 整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和Sender线程(发送线程)。在主线程中由KafkaProducer创建消息,然后通过可能的拦截器、序列化器和分区器的作用之后缓存到消息累加器(RecordAccumulator,也称为消息收集器)中。Sender线程负责从RecordAccumulator中获取消息并将其发送到kafka中。​ Rec...

2020-03-14 16:29:29 464

原创 为什么HashMap的容量要是2的幂

看一下HashMap的get()方法 public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; } final Node<K,V> getNode(int hash, Object k...

2020-03-10 22:33:01 333

原创 为什么计算hashcode用31*

String的hashcode()方法 public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.len...

2020-03-10 22:19:44 258

原创 Semaphore源码解析

1. 构造函数 public Semaphore(int permits) { sync = new NonfairSync(permits); } public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync(permits) : new NonfairS...

2020-03-08 16:37:36 141

原创 CyclicBarrier源码解析

1. 先看一下构造函数public CyclicBarrier(int parties, Runnable barrierAction) { if (parties <= 0) throw new IllegalArgumentException(); this.parties = parties; this.count = parties; this.ba...

2020-03-07 22:28:31 168

原创 CountDownLatch源码解析

1. 首先看一下CountDownLatch的构造函数 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count); }然后看一下Sync类,...

2020-03-07 21:11:21 159

原创 cpu100%问题定位

cpu100%问题定位程序中写一个死循环 thread = new Thread(() -> { while (true) { } }); thread.start();top -c显示进程运行详细列表键入P可以按照cpu使用率排序可以用top -p pid定位到当前进程按H,切换到线程,这时显示的是一个进程的线程信息表,这时左上角显示的Thread...

2020-03-07 13:52:39 668

原创 OutOfMemory问题定位

内存溢出定位程序加入启动参数-Xms30M -Xmx30M -XX:+HeapDumpOnOutOfMemoryError加入下面代码 while (true) { //0.5M byte[] chars = new byte[1024 * 512]; list.add(chars); Thread.sleep(1500); }OOM时会打印java_pid...

2020-03-07 13:49:16 621

原创 redis分布式锁原理

以redisson为例 RLock lock = redissonClient.getLock(key); lock.lock(timeoutSecond, TimeUnit.SECONDS);原则:1.自己加的锁自己释放,2.锁到期了业务没执行完还需续期1. 加锁时执行lua脚本 "if (redis.call('exists', KEYS[1])...

2020-02-26 18:37:38 282

原创 HotSpot的算法实现

枚举根节点​ 由于目前的主流Java虚拟机使用的都是准确式GC,当执行系统停顿下来后,并不需要一个不漏地检查完所有执行上下文和全局的引用位置,虚拟机应当是有办法直接得知哪些地方存放着对象引用。​ 在HotSpot的实现中,是使用一组称为OopMap的数据结构来达到这个目的的,在类加载完成的时候,HotSpot就把对象内什么偏移量上是什么类型的数据计算出来,在JIT编译过程中,也会在特定的位置记...

2020-02-08 12:31:37 432

原创 垃圾收集算法

标记-清除算法​ Mark-Sweep​ 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。​ 由两个不足:效率问题标记和清除两个过程的效率都不高空间问题标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。复制算法​ 为了解决效率问题,一种称为...

2020-02-08 12:24:13 125 1

原创 回收方法区

​ 主要回收两部分内容:废弃的常量和无用的类。​ 回收废弃常量:与回收Java堆中的对象非常类似。以常量池中字面量的回收为例,假如一个字符串"abc"已经进入了常量池中,但是当前系统没有任何一个String对象是叫做"abc"的,换句话说,就是没有任何String对象引用常量池中的"abc"常量,也没有其他地方引用了这个字面量,如果这时发生内存回收,而且必要的话,这个"abc"常量就会被系统清理...

2020-02-08 12:14:11 200

原创 引用类型

强引用​ 强引用就是指在程序代码之中普遍存在的,类似"Object obj=new Object()"这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。软引用​ 软引用是用来描述一些还有用但并非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK 1.2...

2020-02-08 12:06:30 124

原创 判断对象是否存活

引用计数法​ 互相引用会无法回收可达性分析法​ 通过一系列的GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。​ 可作为GC Roots的对象:虚拟机栈(栈帧中本地变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对...

2020-02-08 11:53:53 127

原创 对象的访问定位

​ 建立对象是为了使用对象,Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和指针两种。​ 1. 如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为...

2020-02-08 11:44:13 113

原创 对象的内存布局

​ 在HotSpot虚拟机中对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对其填充(Padding)​对象头​ 对象头包括三部分第一部分Mark Word,用于存储对象自身的运行时数据,哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳。这部分数据在长度为32位和64位的虚拟机中分别为32bit和64bi...

2020-02-08 11:36:20 117

原创 对象的创建过程

虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须执行相应的类加载过程。类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存的大小在类加载完成后便可完全确定。内存分配又有两种方式:指针碰撞(Bump the Pointer)和空闲列表(Free List)。选...

2020-02-08 11:28:47 173

原创 运行时数据区

程序计数器​ Program Counter Register​ 在虚拟机概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。​ 线程私有,此区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。​ 如果线程正在执行的是一个java方法,这个计...

2020-02-08 10:53:53 103

原创 Executors

1. 介绍线程池工厂,在实际生产环境中,线程的数量必须得到控制,盲目的大量创建线程对系统性能是有伤害的。2. 主要方法2.1 newFixedThreadPool()​ 该方法返回一个固定线程数量的线程池,该线程池中的线程数量始终不变,当有一个新的任务提交时,线程池中若有空闲线程,则立即执行,若没有,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。线程数固定...

2020-02-07 12:28:17 512

原创 阻塞队列介绍

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2)支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放...

2020-02-07 12:10:55 215

原创 CyclicBarrier

1. 介绍​ 它可以实现线程间的计数等待,并且可以循环计数。每凑齐一批后又可以继续重新计数。2. 构造函数public CyclicBarrier(int parties);public CyclicBarrier(int parties, Runnable barrierAction);3. 示例集合完毕会执行回调方法,任务完成也会再执行一个回调方法。public class T...

2020-02-07 11:32:21 139

原创 CountDownLatch

1. 介绍通常用来控制线程的等待,可以理解为一个倒计数工具。它可以让一个线程等待直到倒计数结束,再开始执行。计数只能减,不能增。2. 构造函数public CountDownLatch(int count);接收一个整数作为参数,即当前计数器的计数个数3. 案例主线程在CountDownLatch上等待,所有任务完成后,主线程方能继续执行。public class Test01 {...

2020-02-07 11:22:32 102

原创 Semaphore

1.介绍信号量为多线程协作提供了更为强大的控制方法。广义上说信号量是对锁的扩展,可以指定多个线程同时访问某一资源。2. 构造方法 public Semaphore(int permits) { sync = new NonfairSync(permits); } public Semaphore(int permits, boolean fair) ...

2020-02-07 11:17:48 90

原创 CAS原理

​ compareAndSet()方法调用简称为CAS。JDK文档对该方法的说明如下:如果当前状态值等于预期值,则以原子方式将同步状态设置为给定的更新值。此操作具有volatile读和写的内存语义。​ 编译器不会对volatile读与volatile读后面的任意内存操作重排序;编译器不会对volatile写与volatile写前面的任意内存操作重排序。组合这两个条件,意味着为了同时实现volat...

2020-02-07 11:09:27 125

springcloud jar包转war包 demo

eureka,zuul,springclod jar转 war 自己做的示例,放到tomcat中运行,博客地址 http://blog.csdn.net/u012326462/article/details/79055652

2018-01-14

JSP页面的基本结构——求圆面积周长预习报告

JSP页面的基本结构——求圆面积周长预习报告,哈哈哈哈,欢迎大家下载,预习报告。

2015-12-28

JSP页面的基本结构——求圆面积周长

实验报告jsp,求院的周长和面积

2015-12-28

空空如也

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

TA关注的人

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