摘要:
为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。 ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的。 就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内 阅读全文
摘要:
我们都知道,HashMap在并发环境下使用可能出现问题,但是具体表现,以及为什么出现并发问题,可能并不是所有人都了解,这篇文章记录一下HashMap在多线程环境下可能出现的问题以及如何避免。 在分析HashMap的并发问题前,先简单了解HashMap的put和get基本操作是如何实现的。 1.Has 阅读全文
摘要:
1.线程的状态转换 线程的状态转换是线程控制的基础,下面这张图片非常直观的展示了线程的状态转换: 线程间的状态转换: 1. 新建(new):新创建了一个线程对象。2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程 阅读全文
摘要:
回顾这两个关键字前,先考虑一个问题: Static变量存储在JVM中的位置,或者说static变量是如何被加载的? JVM会把类的静态方法和静态变量在类加载的过程中读入方法区(Method Area),相当于常驻内存,如果一个方法或者变量声明为static,可以节约内存,不必要为每个对象实例化的时候 阅读全文
摘要:
关于Java传参时是引用传递还是值传递,是一个讨论比较多的话题,有说Java中只有值传递,也有些地方说引用传递和值传递都存在,本篇记录思考过程,不保证正确性, 感兴趣的同学一起讨论。 1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基 阅读全文
摘要:
我们知道Redis支持五种数据类型, 分别是字符串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架类似,不同数据类型的数据结构实也是不一样的。 1.Redis中的redisObject对象 Redis是使用C编写的,内部实现了一个struct结构体redisObj 阅读全文
摘要:
看一下API中关于Object的介绍: 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 那么Object中到底有哪些方法,各自有什么应用呢?这个问题也经常出现在面试中,如果平时没有关注,可能很难回答好,这里简单整理一下。 首先看一 阅读全文
摘要:
1.PID、TID的区分 uid是user id,即用户id,root用户的uid是0,0为最高权限,gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:~$ id bingyueuid=1000(bingyue) gid=1000(bingyue) gr 阅读全文
摘要:
一、数组、链表和哈希表结构 数据结构中有数组和链表来实现对数据的存储,这两者有不同的应用场景,数组的特点是:寻址容易,插入和删除困难;链表的特点是:寻址困难,插入和删除容易;哈希表的实现结合了这两点,哈希表的实现方式有多种,在HashMap中使用的是链地址法,也就是拉链法。 拉链法实际上是一种链表数 阅读全文
摘要:
前面学习了ArrayList的源码,数组是顺序存储结构,存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度小,为O(1),数组的特点是寻址容易,插入和删除困难。今天学习另外的一种常用数据结构LinkedList的实现,LinkedList使用链表作为存储结构,链表是线性存储 阅读全文
摘要:
1.关于ArrayList ArrayList直接继承AbstractList,实现了List、 RandomAccess、Cloneable、Serializable接口,为什么叫"ArrayList",因为ArrayList内部是用一个数组存储元素值,相当于一个可变大小的数组,也就是动态数组。 阅读全文
摘要:
结合项目里使用暴露出的问题,对并发较多的核心业务或者对请求失败敏感的业务场景不建议使用Dubbo, 如电商的购买行为,使用Dubbo最好阅读源码,熟悉相关机制,或者直接自己造轮子。 1.使用Dubbo踩过的坑 (1)Spring Cache在Service层对消费者不起作用原因是:Spring容器还 阅读全文
摘要:
1.JNI和Native方法 Java中,通过JNI(Java Native Interface,java本地接口)来实现本地化,访问操作系统底层,如系统硬件等。 JNI的实现就是在Java里声明方法,然后编写C/C++实现该方法,步骤: 编写带有native声明的方法的java类,得到.java文 阅读全文
摘要:
1.集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)几个部分。 2.Collection系列 画类图好麻烦,强烈推荐processon. 阅读全文
摘要:
1.Java内存模型 现在计算机普遍使用多处理器进行运算,并且为了解决计算机存储设备和处理器的运算速度之间巨大的差距,引入了高速缓存作为缓冲,缓存虽然能极大的提高性能,但是随之带来的缓存一致性的问题,例如,当多个处理器同时操作同一个内存地址,可能会导致各自的缓存数据不一致,由此产生冲突问题,内存模型 阅读全文