![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 96
一颗小陨石
除非我不想赢,不然没人能让我输
展开
-
RocketMQ源码分析——消息发送的核心原理与高可用
文章目录一、DefaultMQProducer1.1 消息发送方式1.1.1 同步发送1.1.2 异步发送1.1.3 批量发送1.1.4 单向发送1.1.5 自定义负载策略1.2 核心属性二、Producer 启动2.1 创建`MQClientInstance`实例2.2 注册Producer 到MQClientInstance2.3 启动MQClientInstance三、消息发送消息对象 Message3.1 消息校验3.2 获取 topic 信息3.2.1 从 NameServer 拉取路由3.3原创 2021-12-19 11:06:51 · 1033 阅读 · 1 评论 -
JAVA线程的六个状态和转换关系
java 的线程状态共有6种,在Thread.State枚举中定义:public enum State { /** * 创建后尚未启动的线程 */ NEW, /** * 可能正在执行,也可能正在等操作系统分配执行时间 */ RUNNABLE, /** * 阻塞状态 * 在等待获取一个排它锁。调用了Object.wai原创 2020-09-05 12:12:36 · 533 阅读 · 0 评论 -
HashMap浅析和LinkeHashMap
HashMap解析无序的数据结构为数组(Node数组)+链表+红黑树(jdk8开始)非线程安全的键值允许为null一个key对应唯一的value查询和删除都很快能达到O(1)的平均时间复杂度默认容量16扩容因子0.75,,当键值对的数量大于 16 * 0.75 = 12 时,就会触发扩容。链表长度大于8时转为红黑树,长度小于8时,红黑树转...原创 2020-03-30 23:10:33 · 263 阅读 · 0 评论 -
Unsafe类学习
UnsafeUnfase为我们提供了访问底层的机制,仅供java核心类库使用。因此普通用户程序无法直接获取其实例,且unsafe的构造方法为私有的,但是我们可以通过反射获取。1.获取unsafeUnsafe有一个getUnsafe()方法可以获取实例: @CallerSensitive public static Unsafe getUnsafe() { Clas...原创 2020-03-23 22:45:22 · 270 阅读 · 0 评论 -
java创建对象的6个方式
创建对象的6个方式:public class NewObject { public static void main(String[] args) throws InstantiationException, IllegalAccessException { NewObject newObject = new NewObject(); //1.反射构造器...原创 2020-03-23 22:31:07 · 97 阅读 · 0 评论 -
JVM笔记(五)类加载机制、类加载器和双亲委派机制
一、概述1.1 含义jvm将class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。这个过程就是jvm的类加载机制。二、类加载时机生命周期从被加载到虚拟机内存开始到卸载出内存,共经历如下7个阶段:加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initia...原创 2020-03-19 19:12:55 · 698 阅读 · 0 评论 -
JVM笔记《四》七个常见的垃圾收集器
目录垃圾收集器一、 Serial (新生代)二、 ParNew(新生代)三、 Parallel Scavenge(新生代)相关参数四、 Parallel Old(老年代)五、 Serial Old(老年代)六、 CMS(老年代)运作过程缺点总结七、 Garbage First(G1)几个问题运行过程特色和优点:缺点(与CMS比)垃圾收集器一、 Serial (新生代)1.单线程(收集期间需要...原创 2020-03-15 20:05:23 · 489 阅读 · 0 评论 -
JVM笔记(三)垃圾收集算法以及HotSpot的算法实现(安全点、记忆集与卡表、写屏障、三色标记等)
目录一、垃圾收集算法1.1 堆的布局1.2 GC类型1.2.1 Minor GC流程1.2.2 分配担保1.3 内存分配策略二、垃圾收集算法2.1 标记-清除算法2.2 标记-复制算法2.3 标记-整理算法三、HotSpot的算法细节实现3.1 根节点枚举3.2 安全点如何在垃圾收集时让所有线程跑到最近的安全点停顿下来3.3 安全区域原理3.4 记忆集与卡表3.4.1 记忆集的实现卡表3.5 写屏...原创 2020-03-15 19:56:10 · 2160 阅读 · 0 评论 -
JVM笔记(二)对象的生死与java的四大引用
目录一、对象的生死1.1 引用计数法1.2 可达性分析法可作为GC Roots的对象:1.3 引用整体架构强引用软引用软引用用途弱引用WeakHashMap虚引用1.4 对象的自我拯救1.5 方法区的回收垃圾回收,我们首先要判断一个对象是否是垃圾,即这个对象是否已经不再被使用到。一、对象的生死1.1 引用计数法在对象中添加一个引用计数器,如果一个地方引用了它,则计数器+1,相应的一个引用失...原创 2020-03-15 19:44:18 · 294 阅读 · 0 评论 -
伪共享问题
伪共享问题缓存是由缓存行组成的,通常是64字节组成。一个java的long类型是8字节,因此一个缓存行中可以存放8个long类型的变量。缓存每次更新都从主存读取连续的64个字节,即一个缓存行。因此如果访问一个long类型的数组时,数组中的一个值被加载到缓存,其余7个也会被加载到缓存。此时也就会出现相应的问题:如:有一个单独的long类型变量x,还有另一个单独的long类型变量y,当加载...原创 2020-03-15 19:37:45 · 661 阅读 · 0 评论 -
《算法4》红黑树原理实现---笔记
前面讲了AVL平衡树的实现https://blog.csdn.net/weixin_43696529/article/details/104701374,但由于AVL是高度平衡的树(高度差小于等于1),而红黑树是根据颜色来不严格的实现平衡,因此在插入和删除节点时,红黑树的调整次数较少,尤其是在大量数据面前时,红黑树的效率会更高。一、定义介绍首先我们需要知道什么是2-节点,什么是3-节点。2-...原创 2020-03-07 17:21:18 · 520 阅读 · 2 评论 -
AVL树的原理讲解-------java实现
前面讲到了二叉查找树,虽然能够很好的应用于大多数的场景,但是他们在最坏情况下性能还是很差的,如二叉查找树最坏情况下是一颗高度为N的树,显然不利于查找。因此我们需要让查找树保持一种平衡,如二叉查找树最优情况的状态一样。一、AVL树基础AVL树是一颗保持平衡的二叉查找树,保证了树的深度为O(logN)。其每个节点的左子树和右子树的高度都最多相差1上图就是一颗AVL树,其任意节点的左孩子和右孩...原创 2020-03-06 18:12:39 · 321 阅读 · 2 评论 -
二叉查找树(BST)---java实现
一、定义二叉查找树(BST)是一颗二叉树,其每个节点的值都比左孩子的任意节点大,比右孩子的任意节点小。二、数据结构public class BinarySearchTree<T extends Comparable<? super T>> { private TreeNode<T> root; public BinarySearchT...原创 2020-03-06 15:38:13 · 233 阅读 · 0 评论 -
顺序查找和二分查找----java实现
一、基于无序链表的顺序查找没啥讲的,就是顺序找。/** * 顺序查找(基于无序链表) * 未命中和命中都需要N次比较 * 命中最坏需要N次比较 * @author MaoLin Wang * @date 2020/3/118:01 */public class SequentialSearchST<Key, Value> { /** * 首节点 ...原创 2020-03-05 22:44:37 · 149 阅读 · 0 评论 -
《算法4》索引优先队列笔记-----java实现
一、前言前面已经讲了优先队列的实现,https://blog.csdn.net/weixin_43696529/article/details/104672731,但是其很明显有一个缺点,那就是无法直接访问已经在队列中的元素,更新或是删除它们,在Dijistra算法中就非常需要此性质,因此要解决此问题就需用到索引优先队列二、索引优先队列数据结构讲解索引优先队列使用一个int[] pq数组作为...原创 2020-03-05 20:31:22 · 810 阅读 · 0 评论 -
优先队列(堆)以及堆排序-------java实现
实现优先队列的基本数据结构是使用二叉堆一、二叉堆二叉堆即用一颗完全二叉树(底层元素从左向右填入)。如果所示,因此我们可以使用一个数组来表示二叉堆,而不使用链表:0 1 2 3 4 5 6 7 8 9 10 A B C D E F G H I可以发现,对于任意节点 i...原创 2020-03-05 14:36:30 · 1093 阅读 · 0 评论 -
《算法第四版》---union-find并查集笔记
union-find主要用于解决动态连通性的问题,如下图:对于输入的一系列整数对p,q,表示p和q是相连的,在将整数对输入完毕后,我们就可以从该图中获取该图的连通性,如任意两个节点是否相连,共有几个连通分量。如上图可看出共有两个连通分量:0-5-6-1-2-7,8-3-4-9union-find算法API如下: //初始化count个顶点 public UF(int count)...原创 2020-03-04 15:04:47 · 317 阅读 · 0 评论 -
《算法4》无向图和有向图的有关问题详解(DFS,BFS,环,拓扑排序,连通性和强连通性)
本文仅作为《算法》第四版图的相关知识的个人笔记。几个概念:1.连通图:从任意一个顶点都存在一条路径到达另一个任意顶点。非连通图由若干连通图组成,都是极大连通子图。2.树是一个无环连通图。连通图的生成树是其一个子图,拥有图的所有顶点。3.二分图一种能够将所有节点分为两部分的图。简单的说,如果按双色上色,二分图的任意两个相邻的顶点的颜色不同。4. 两个顶点通过一条边连接,称为相邻的。顶点...原创 2020-03-08 19:02:29 · 2005 阅读 · 0 评论 -
LeetCode68题——旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5-&...原创 2020-02-11 00:50:51 · 194 阅读 · 0 评论 -
java并发编程之ReentrantLock和读写锁ReentrantReadWriteLock
在前文https://blog.csdn.net/weixin_43696529/article/details/104129483已经对Lock、Condition以及AQS相关进行了介绍,接下来就要讲一讲Lock接口的几个实现类:ReentrantLock、ReentrantReadWriteLock及其内部类ReadLock和WriteLock。本文中带△△的标注代表前文已讲过,不详述。首...原创 2020-02-07 17:09:38 · 926 阅读 · 0 评论 -
显示锁Lock、Condition接口、LockSupport以及AQS(同步队列、条件等待队列)详解
一、显式锁synchronized关键字是java内置的语言特性,使用synchronized关键字会隐式的获取锁,在获取锁的线程执行执行完任务或是执行过程中发生异常时会自动释放锁。但为什么还需要Lock呢?如,目前绝大多数的业务场景基本都是读多写少,如读写比例为10:1,倘若使用synchronized,若有一个线程在读,则因为其的独占性,其他的线程都只能等待,造成大量的资源浪费,但Lock...原创 2020-02-04 13:12:29 · 587 阅读 · 0 评论 -
java多线程之CAS操作AtomicXXX原子操作类,ABA问题以及原子更新字段类详解
原子操作是什么原子操作即不可被中断(分割)的一个或一系列操作,如对于A,B两个操作,如果一个线程操作A,若另一个线程执行B操作时,要么将B执行到结束,要么完全不让B执行,此时对于A和B来说,就是原子的。悲观锁和乐观锁如synchronized就是悲观锁,解决多线程并发问题,以保证事务的完整性。其是基于阻塞的锁机制,如果有一个线程拥有锁后,访问该资源的其他线程就需要阻塞等待,直到获得锁的线程释...原创 2020-01-29 23:32:03 · 560 阅读 · 0 评论 -
java多线程之Callable+Future+FutureTask原理详解和简单使用
一、Runnable和CallabkeRunnable是一个接口,只声明了一个run()方法,此方法为void类型,所以只能执行无返回值的任务。public interface Runnable { public abstract void run();}Callable是java.util.concurrent包下的一个接口,提供了一个call()方法:@Functional...原创 2020-01-27 23:32:31 · 1566 阅读 · 3 评论 -
java并发编程之CountDownLatch,CyclicBarrier和Semaphore
一、CountDownLatchCountDownLatch能够让一个线程在等待其他线程全部完成各自任务后再执行。而CountDownLatch是通过计数器来实现的,计数器的初始值即为任务的总数。举个例子,如,同学聚会结束回家,每个人都要回各自的家,此时计数器的初始值为参加聚会的总人数,而每个人都是一个线程,每个同学到家后,都需要调用countDown方法,对计数器减一,表示完成回家的任务,当...原创 2020-01-24 16:54:37 · 240 阅读 · 0 评论 -
mavon-editor+springboot+fdfs上传文件
一、安装mavon直接npm install下就可以了,然后在main.js引入:import mavonEditor from 'mavon-editor'Vue.use(mavonEditor)二、页面使用 <mavon-editor v-show="!articleModal" id="editor" v-model="v...原创 2019-12-01 10:53:43 · 522 阅读 · 0 评论 -
使用fastjson转json字符串时值为null的字段丢失
记一次使用fastjson转字符串出现的问题 @Transactional(rollbackFor = Exception.class) public ResultEnum add(Map<String, String> addMap) { .................... List<Map<S...原创 2019-11-04 17:46:32 · 6175 阅读 · 2 评论 -
List集合的交集,差集,和并集
1.交集: @Test public void testRemove(){ List<String> list=new ArrayList<>(); list.add("1"); list.add("2") ; list.add("19"); ...原创 2019-11-04 17:26:47 · 3327 阅读 · 2 评论 -
[转载] JVM原理
转载一篇写的不错的JVM原理https://blog.csdn.net/know9163/article/details/80574488转载 2020-01-28 10:29:59 · 122 阅读 · 0 评论 -
使用ant-design-vue+FastDFS实现文件上传
一、上传页面代码 <div class="clearfix"> <a-upload :action="action" listType="picture-card" :fileList="fileList" @change="handleUpl...原创 2019-10-24 17:15:06 · 1390 阅读 · 0 评论 -
Feign获取异常信息的解决办法
最近在使用Feign调用时,出现了异常,原本使用的是fallback,直接返回了自定义的结果@Override public Result findUserNameById(String id) { return new Result(false, StatusCode.ERROR,"啊哦,用户客户端出现了异常"); }但是无法获取具体的异常信息解决:将f...原创 2019-10-20 13:55:39 · 10352 阅读 · 0 评论 -
Feign请求拦截器attributes为null的解决办法
参考以下文章:https://www.jianshu.com/p/f30892335057原创 2019-10-20 13:40:24 · 2502 阅读 · 0 评论 -
使用RabbitMQ同步ES数据
借助rabbitMQ,当文章发布、修改、删除时发送一条消息,消息数据为文章id,搜索服务编写监听器接收消息,保存新的数据。一、文章微服务添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring...原创 2019-10-20 13:25:58 · 3895 阅读 · 0 评论 -
后端封装分类树形实现
0.加载分类的树形节点0.1 创建接口/** * @author MaoLin Wang * @date 2019/9/2910:20 */public interface CategoryTreeData<T> { String getId(); String getParentId(); void setChildren(List<T&g...原创 2019-10-14 21:04:52 · 531 阅读 · 0 评论