自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java代码重构tip

重复代码的提炼嵌套条件分支的优化1)使用卫语句将不满足某些条件的情况放在方法前面,并及时跳出方法,以免对后面的判断造成影响2)条件分支合并消除过长参数列表将多个参数封装成对象提取常量替换魔数和字符串常量让类提供应该提供的方法。我们应该让这个类做它该做的事情,而不应该让我们替它做拆分冗长的类恰到好处使用设计模式

2023-06-30 12:28:10 64

原创 HashMap源码分析持续更新中

HashMap底层是数组 + 链表数组的下标是由key做hash寻址之后的值put方法hash优化(h = key.hashCode()) ^ (h >>> 16)用key的高16位跟低16位做异或运算,使结果同时包含高位和低位的特征,更加分散数据数组寻址数组长度都是2的整数次方(n - 1) & hash <==> hash % n数...

2020-03-22 23:24:11 159

原创 ThreadLocal源码分析

ThreadLocalThreadLocal、ThreadLocalMap、Thread、EntryThread 持有 ThreadLocalMapThreadLocalMap 内部存储是 Entry[]Entry[] 初始长度 16, 使用长度超过1/2时扩容Entry[]的索引是 ThreadLocal的 hashcode & (len-1)为初始值,如果已经被占用,则往后循...

2020-03-20 22:27:53 258

原创 线上服务器一小时一次fullGc排查

现状: -Xms:8G -Xmx:8G -Xmn:2G下面是gc日志输出的配置:CommandLine flags: -XX:CMSInitiatingOccupancyFraction=75 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/logs/Heap...

2020-02-17 13:59:46 695

原创 zookeeper相关

zk的使用场景如下:分布式协调:zk经典用法。A系统发送个请求到mq,然后B消息消费之后处理了。那A系统如何知道B系统的处理结果?用zk就可以实现分布式系统之间的协调工作。A系统发送请求之后可以在zk上对某个节点的值注册个监听器,一旦B系统处理完了就修改zk那个节点的值,A立马就可以收到通知,完美解决。分布式锁:对某一个数据连续发出两个修改操作,两台机器同时收到了请求,但是只能一台机器先执...

2019-08-06 18:10:58 123

原创 JVM第五周:G1垃圾回收相关

G1垃圾回收器堆内存分为了多个大小相等的region,最多2048个新生代和老年代只是逻辑上的概念可以设置预期的圾回收时间region是动态划分,按需分配。region归属是动态变化的,同一个可能是老年代、新生代、大对象区-XX:+UseG1GC 指定G1回收-XX:G1HeapRegionSize 指定region个数-XX:G1NewSizePercent 指定新生代占比-X...

2019-08-06 18:09:29 180

原创 JVM第三周:G1回收器之前的GC相关

1、youngGC15次还存活2、同一批相同年龄的对象大于 50%,大于这批年龄的对象进入 老年区3、大对象,超过XX:PretenureSizeThreshold设置,直接进入老年区4、youngGC存活对象大于suvivor,整体到老年区5、youngGC之前的老年代空间担保规则1)老年代可用空间 > 新生代所有对象总和 2)老年代可用空间 < 新生代所有对象总和 ...

2019-07-17 11:43:04 232

原创 JVM第二周

本周的作业非常简单,希望每个人按照案例里分析的那个过程,把你手头负责的系统的核心业务流程简化、抽象以及梳理出来,看看你们线上的真实负载情况,每秒钟多少请求?然后根据你们的核心业务流程,看看每秒钟你负责的系统对内存使用的压力有多大?接着你再思考一下,就你的系统内存使用压力之下,目前你们线上机器是多大的堆内存?新生代多大?老年代多大?如果没设置,可以自行百度默认的内存大小。然后分析一下,目前的这个内...

2019-07-13 17:27:19 109

原创 第一周JVM原理

启动java程序,先加载指定的main方法的class文件到方法区,然后通过验证、准备、解析、初始化等阶段,通过字节码执行引擎执行字节码指令,每执行到一个需要使用的类时,就会去重复加载、验证、准备、解析、初始化等阶段,程序计数器用来记录线程执行到指令的位置,java虚拟机栈用来存放运行到的方法以及方法内的局部变量,方法运行完毕,出栈,堆内存用来存放实例化出来的对象。 ![在这里插入图片描述](...

2019-07-13 11:41:30 89

原创 二分查找

/** * Created by zhaoziyun on 2019/4/30. */public class BinarySearch { //二分非递归 public int search1(int[] arr, int data) { int min = 0; int max = arr.length - 1; int m...

2019-05-03 21:35:32 101

原创 堆排序

话不多说,直接上代码import java.util.Arrays;/** * Created by zhaoziyun on 2019/4/30. */public class HeapSort { public static void main(String[] args) { int[] arr = {0, 8, 2, 3, 9, 5, 6}; ...

2019-05-03 21:34:26 102

原创 TCP和UDP

TCP和UDP的区别(1)TCP面向连接;UDP面向无连接(2)TCP保证数据正确性;UDP可能丢包(3)TCP传输速度慢;UDP速度快(4)每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信(5)TCP对系统资源要求较多,UDP对系统资源要求较少。三次握手三次握手的目的是建立可靠的通信信道。确认自己与对方的发送与接收机能正常。TCP三次握手过程:...

2019-04-28 21:19:31 129

原创 HTTP和HTTPS协议

HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP协议特点无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,...

2019-04-27 22:23:05 137

原创 网络体系结构

OSI七层模型应用层:最靠近用户的层,为用户应用提供网络服务表示层:提供各种用于应用层数据编码和转换功能,确保一个系统的应用层发送的数据能被其他系统应用层识别。如果有需要,这层可以提供标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。会话层:负责建立、管理和终止表示层实体之间的通话会话。该层的通信由不同设备中的应用程...

2019-04-27 21:39:02 230

原创 CAS理解、优化及ABA问题

Atomic原子类,比如说AtomicInteger。他可以保证多线程并发安全的情况下,高性能的并发更新一个数值。我们来看下面的代码:多个线程需要对一个变量不停的累加1,比如说下面这段代码:大家看上面的代码,是不是很简单!多个线程可以并发的执行AtomicInteger的incrementAndGet()方法,意思就是给我把data的值累加1,接着返回累加后最新的值。实际上,Atomic...

2019-04-24 22:36:17 254

原创 对volatile的理解?

先上一张图java内存模型中,每个线程有自己的工作内存,同时还有一个共享的主内存。比如说有两个线程,他们的代码里都需要读取data这个变量的值,那么他们都会从主内存里加载data变量的值到自己的工作内存,然后才可以使用那个值。现在大家从图里看到,每个线程都把data这个变量的副本加载到了自己的工作内存里了,所以每个线程都可以读到data = 0这个值。这样,在线程代码运行的过程中,对da...

2019-04-24 13:17:21 150

原创 分库分表相关

单号构成:TIMESTAMP + ZOOKEEPER NODE NUMBER + SEQUENCE LOCAL + HASH(goupID/shopID)组成部分说明1.timestamp 32位unix时间戳,包含年月信息,用于分表2.zookeeper node number: 通过zookeeper获取唯一node number作为服务器ID,长度为8位(128)用于解决机器间相同时...

2019-04-23 22:41:05 145

原创 java并发包中的公平锁与非公平锁有啥区别

什么是非公平锁?如上图,现在线程1加了锁,然后线程2尝试加锁,失败后进入了等待队列,处于阻塞中。然后线程1释放了锁,准备来唤醒线程2重新尝试加锁。注意一点,此时线程2可还停留在等待队列里啊,还没开始尝试重新加锁呢!然而,不幸的事情发生了,这时半路杀出个程咬金,来了一个线程3!线程3突然尝试对ReentrantLock发起加锁操作,此时会发生什么事情?很简单!线程2还没来得及重新尝试加锁...

2019-04-22 22:51:47 602

原创 对AQS的理解

AQS?AQS的全称:AbstractQueuedSynchronizer,抽象队列同步器java并发包下很多API都是基于AQS来实现的加锁和释放锁等功能的,AQS是java并发包的基础类。ReentrantLock、ReentrantReadWriteLock底层都是基于AQS来实现的。看一下ReentrantLock和AQS之间的关系ReentrantLock内部包含了一个AQS对...

2019-04-22 10:54:07 799 2

原创 mysql基础知识

mysql基础知识数据库简介'''数据库的诞生: 人类在进化过程中,创造了数字、文字、符号等进行数据较多记录,但是随着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找称为一个重大难题。计算机诞生后,数据开始在计算机中存储并计算,并设计出了数据库系统数据库解决了的问题: 1、持久化存储 2、优化读写 3、保证数据的有效性为什么要...

2019-04-20 22:42:20 445

原创 es读写底层原理剖析

(1)es写数据过程客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)coordinating node,对document进行路由,将请求转发给对应的node(有primary shard)实际的node上的primary shard处理请求,然后将数据同步到replica nodecoordinating node,如果发现primar...

2019-03-19 22:25:42 420

原创 分布式搜索引擎的架构是怎么设计的(es是如何实现分布式的啊)?为啥是分布式的?

1231313

2019-03-14 23:18:51 832

原创 如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路

考察两点你有没有对某一个消息队列做过较为深入的原理的了解,或者从整体了解把握住一个mq的架构原理看看你的设计能力,给你一个常见的系统,就是消息队列系统,看看你能不能从全局把握一下整体架构设计,给出一些关键点出来剖析其实回答这类问题,说白了,起码不求你看过那技术的源码,起码你大概知道那个技术的基本原理,核心组成部分,基本架构构成,然后参照一些开源的技术把一个系统设计出来的思路说一下就好...

2019-03-12 20:45:24 803 1

原创 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?

分析关于这个事儿,我们一个一个来梳理吧,先假设一个场景,我们现在消费端出故障了,然后大量消息在mq里积压,现在事故了,慌了大量消息在mq里积压了几个小时了还没解决几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上很晚,10点多,11点多这个是我们真实遇到过的一个场景,确实是线上故障了,这个时候要不然就是修复consumer的问题,让他恢复消费速度,然后傻傻的等待几个小时消费完毕...

2019-03-12 20:24:52 1853 3

原创 如何保证队列消息顺序

如何保证队列消息顺序先看看顺序会错乱的俩场景rabbitmq:一个queue,多个consumer,这不明显乱了kafka:一个topic,一个partition,一个consumer,内部多线程,这不也明显乱了rabbitmq如何完全保证消息顺序kafka如何完全保证消息顺序...

2019-03-12 19:34:41 576

原创 如何进行消息队列的技术选型?

如何进行消息队列的技术选型?为什么要用消息队列解耦异步削峰消息队列的优点和缺点架构中引入mq可能存在的缺陷kafka、activeMq、rabbitMq、rocketMq都有什么优缺点综上所述,各种对比之后,我个人倾向于是:为什么要用消息队列期望回答:公司业务场景,有什么技术挑战,如果不用mq会很麻烦,用了以后有很多好处先说mq常见使用场景,比较核心的有3个:解耦、异步、削峰解耦非解耦...

2019-03-11 15:59:41 1403

原创 如何处理消息丢失的问题

如何处理消息丢失的问题?rabbitmq生产者弄丢了数据rabbitmq弄丢了数据消费端弄丢了数据kafka消费端弄丢了数据kafka弄丢了数据生产者会不会弄丢数据这个丢数据,mq一般分为两种,要么是mq自己弄丢了,要么是我们消费的时候弄丢了。咱们从rabbitmq和kafka分别来分析一下吧rabbitmq这种mq,一般来说都是承载公司的核心业务的,数据是绝对不能弄丢的rabbitmq生...

2019-03-10 21:24:33 425

原创 如何保证消息队列消息不被重复消费

如何保证消息队列消息不被重复消费?kafka消息重复消费场景如何保证消息重复消费后的幂等性kafka消息重复消费场景kafka实际上有个offset的概念,就是每个消息写进去,都有一个offset,代表他的序号,然后consumer消费了数据之后,每隔一段时间,会把自己消费过的消息的offset提交一下,代表我已经消费过了,下次我要是重启啥的,你就让我继续从上次消费到的offset来继续消费吧...

2019-03-10 17:30:08 1832 2

原创 引入消息队列之后如何保证其高可用性

引入消息队列之后如何保证其高可用性?rabbitMQ的高可用性rabbitmq有三种模式:kafka的高可用性rabbitMQ的高可用性RabbitMQ是比较有代表性的,因为是基于主从做高可用性的,我们就以他为例子讲解第一种MQ的高可用性怎么实现。rabbitmq有三种模式: 单机模式,普通集群模式,镜像集群模式单机模式 就是demo级别的,一般就是你本地启动了玩玩儿的,没...

2019-03-10 16:07:02 633 1

空空如也

空空如也

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

TA关注的人

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