自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Java 判断实体类属性是否为空工具类

/**判断对象是否为空@param obj@return*/public static Boolean isNotEmptyBean(Object obj) {Boolean flag = false;try {if (null != obj){ //得到类对象 Class<?> c = (Class<?>) obj.getClass(); //得到属性集合 Field[] fs = c.getDeclaredFields(); /

2021-08-30 11:39:17 2295

原创 synchronized锁的底层实现

在理解锁实现原理之前先了解一下java的对象头和Monitor,在JVM中,对象是分成三部分存在的:对象头、实例数据、对其填充实例数据和对其填充与synchronized无关。实例数据存放类的属性数据信息,包括父类的属性信息,如果是数组的实例部分还包括数组的长度,这部分内存按4字节对齐;对其填充不是必须部分,由于虚拟机要求对象起始地址必须的8字节的整数倍,对齐填充仅仅是为了使字节对齐。对象头是我们需要关注的重点,是synchronized 实现锁的基础,因为synchronized申请锁、上锁、释放锁都

2021-01-10 23:38:27 187

原创 RocketMq如何保证消息不丢失

可以从三个阶段进行分析Producer发送消息阶段Broker处理消息阶段Consumer消费消息阶段(1)、Producer 发送消息阶段涉及到Broker的网络通信,因此丢失消息的几率一定会有,那RocketMq在此阶段用了哪些手段保证消息不丢失呢?手段一:提供SYNC的发送消息方式,等待broker处理结果RocketMq提供了3种发送消息的模式,分别是:同步发送、异步发送、oneway发送同步发送:Producer 向broker 发送消息,阻塞当前线程等待broker响应发送结果

2021-01-06 20:13:29 1114

原创 Redis高可用-哨兵机制

哨兵机制的7个核心概念:1、哨兵如何知道redis主从信息启动时读取指定sentinel.conf 配置文件,记录哨兵的监测结果。配置文件中保存着主从集群中的master的信息,可以通过info命令,进行主从信息自动发现。2、什么是master主观下线?单个哨兵自身认为redis实例已经不能提供服务。检测机制:哨兵向redis发送ping请求,PONG、LOADING、MASTERDON这三种情况视为正常,其他回复均视为无效。3、什么是客观下线一定数量值的哨兵认为master已经下线称为客观下

2020-12-09 00:10:00 140

原创 Redis 主从复制

主从复制流程1、从服务器通过psync命令发送服务器已有的同步进度(同步源ID、同步进度offset)2、master收到请求,同步源为当前master,则根据偏移量同步3、同步源非当前master,则进入全量同步:master生成rdb,传输到salve,加载到slave内存。一、主从复制应用场景1)可以用来支持读写分离,slave 服务器设定为只读,可以用在数据安全的场景下。2)可以使用主从复制来避免master持久化造成的开销。master关闭持久化,slave配置为不定期保存或是启用AO

2020-12-06 23:18:47 87

原创 Nginx负载均衡的配置方案

负载均衡,可以解释为N台服务器平均分担负载,不会因为某台服务器负载高宕机和某台服务器闲置的情况,那么负载均衡的前提就是要2台以上的服务器才能实现。 Nginx负载均衡的配置方案: 1、轮询 轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器上。 2、最少连接 least_conn; Web请求会被转发到连接数最少的服务器上。 3、IP地址哈希ip_hash; 上述两种负载均衡方案中.

2020-12-06 22:45:43 233

原创 限流算法

计数器限流:计数器是一种比较简单的限流算法,用途广泛,在接口层面很多地方使用这种方式限流,在一段时间内,进行计数,与阈值进行比较,到了时间临界点,将计数器清0;将时间等分成固定时间窗,单个窗口请求限制数量,超过限制的请求被丢弃,未超过的允许通过滑动窗口算法:滑动窗口算法是将时间划分为多个区间,在每个区间内每有一次请求就将计数器加一维持一个时间窗口,占据多个区间;每经过一个区间的时间,则抛弃最老的一个区间,并纳入最新的一个区间;如果当前窗口内区间的请求计数总和超过了 限制数量,则本窗口内所有的请求都

2020-10-12 07:54:09 81

原创 HashMap的一些特性

HashMap 插入元素的思路:1、判断数组有没有元素,没有元素直接放2、判断Key是不说同一个,如果是替换value3、Key不是同一个,且数组有元素,判断是链表或者是树,如果是链表判断是否达到树的要求,没达到,挂链表,达到了变成树。4、key不是同一个且数组有元素,判断是树,挂到红黑树后面的节点。...

2020-09-29 19:39:36 294

原创 初级算法

//移动0public static void moveZeroes(int[] nums){int j=0;for(int i=0;i<nums.length;i++){ if(ums[i]!=0){ nums[j]=nums[i]; if(i!=j){ nums[i]=0; } j++ }}}//链表反转public static Node testNode(Node node){ Node prev=null w

2020-09-28 15:36:06 53

原创 一个简单的阻塞队列

import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class BlockQueue {

2020-09-25 07:49:25 83

原创 JDK实现简单缓存

package com.example.spring.cache.map;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class MapCache {// 设置、删除、获取private final stat

2020-09-10 07:54:36 551

原创 解决缓存一致性问题的几种方式

缓存一致性问题缓存的实时同步,这种数据同步是增量、主动、强一致性1、对数据库数据进行更新的时候淘汰缓存2、读取数据的时候更新缓存,为了避免缓存击穿带来的雪崩问题我们需要做同步处理,控制只有一个线程去读取数据然后更新到缓存,其他线程被阻塞等待3、设置缓存失效时间,假设更新缓存失败,这个缓存失效时间一到就会把缓存失效数据准时同步这种同步是增量、被动、准一致性对数据进行更新操作时在更新数据库后发送一个MQ消息(如果要保证数据不丢失,可以建立本地一个消息表在发送MQ失败后可以重试)缓存更新服务消费M

2020-09-09 08:05:27 2216

原创 ThreadLocal

ThreadLoad 是一个线程级别的变量,每个线程都有一个ThreadLocal ,在并发模式下是绝对安全的变量用法: ThreadLocal var=new ThreadLocal();会自动在每一个线程上创建一个副本,副本之间彼此独立,互不影响可以存储一些参数,方便在线程中多个方法使用,用来代替方法传参的做法...

2020-09-07 07:23:26 98

原创 内存屏障和CPU缓存

CPU缓存:为了提高程序运行的性能,CPU在很多方面对程序进行了优化例如:CPU高速缓存,尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存提高性能CPU多级缓存一级缓存是CPU第一层高速缓存,分为数据缓存和指令缓存。一般服务器CPU的一级缓存的容量在32–4096kb二级缓存由于一级缓存容量的限制,为了再次提高CPU的运算速度,在cpu外部放置高速存储器,即二级缓存三级缓存目前都是内置的。实际作用是L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算时处理器的性能。具有较大三级

2020-09-07 07:01:14 130

原创 线程状态

一张图解释线程状态:

2020-09-04 07:52:51 60

原创 java程序运行原理

首先分析jvm运行时数据区java源代码编译成classa文件,加载到jvm运行时数据区,数据区分为:方法区、堆内存,这些是线程共享的。线程独占的:虚拟机栈、本地方法栈、程序计数器。线程独占:每个线程都会有一个独立的空间,随线程生命周期而创建和销毁线程共享:所有线程都能访问随着GC创建或销毁;‘方法区:用来存储加载的类信息、常量、静态变量、编译后的代码等数据这是一个逻辑区划。具体实现根据不同虚拟机来实现堆内存还分为:老年代、新生代 JVM启动时创建,存放对象的实例。垃圾回收主要是管理堆内存虚拟

2020-09-04 07:46:15 130

原创 类加载机制

类生命周期1、加载:读取二进制内容2、验证:验证class文件格式规范、语义分析、引用验证、字节码验证3、准备:分配内存、设置static修饰的变量初始值4、解析:类、接口、字段、类方法等解析5、初始化:为静态变量赋值;执行静态代码块6、使用:创建实例对象7、卸载:从JVM方法区中卸载该Class所有的实例都被GC 加载该类的ClassLoader实例已经被GC类加载器:Bootstrap loader 核心类库加载器ExClassLoader 扩展类库加载器application

2020-08-30 22:36:42 47

原创 JVM 参数及调优

重新记录一下学习笔记吧JVM调优的基本概念:在调整性能时,jvm有三个组件:1、堆大小的调整2、垃圾收集器的调整3、JIT编译器大多数调优选项都与调整堆大小和选择合适的垃圾收集器有关,JIT编译器对性能也有很大影响,但很少需要使用较新版本的jvm进行调优,调优的目的是什么?1、响应性2、吞吐量常用的一些JVM参数:-xx:+AlwaysPreTouch jvm启动时分配内存,非使用时再分配-xx:ErrorFile=filename 崩溃日志–xx:+TraceClass

2020-08-30 21:53:24 206

空空如也

空空如也

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

TA关注的人

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