随笔分类 - 常见面试题
摘要:Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。 如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。 为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。 尽量避免在压力较大的主库上增加从库 Mas
        阅读全文
                
摘要:进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序
        阅读全文
                
摘要:线程的 6 种状态 就像生物从出生到长大、最终死亡的过程一样,线程也有自己的生命周期,在 Java 中线程的生命周期中一共有 6 种状态。 new(新创建) Runnable(可运行) Blocked(被阻塞) Waiting(等待) Timed Waiting(计时等待) Terminated(被
        阅读全文
                
摘要:使用过 Redis 做异步队列么,你是怎么用的? 一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。不但客户端的 CPU 能降下来,Redis 的 QPS 也降下来了。 如果对方追问可不可以不用 sleep 呢?
        阅读全文
                
摘要:主从复制的作用 读写分离: master写、 slave读,提高服务器的读写负载能力 负载均衡: 基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量 故障恢复:当master
        阅读全文
                
摘要:微服务系统的监控主要包含以下三个方面: Logging 就是记录系统行为的离散事件,例如,服务在处理某个请求时打印的错误日志,我们可以将这些日志信息记录到 ElasticSearch 或是其他存储中,然后通过 Kibana 或是其他工具来分析这些日志了解服务的行为和状态。大多数情况下,日志记录的数据
        阅读全文
                
摘要:方法区的演进 在jdk1.6及之前,在永久代,静态变量存放在永久代上。 jdk1.7,有永久代,但已经逐步“去永久代”,字符串常量池丶静态变量移除,保存在堆中。 在jdk1.8后没有永久代,类型信息丶字段丶常量保存在本地内存的元空间,但字符串常量池丶静态变量还在堆中。 永久代为什么要被元空间替换? 
        阅读全文
                
摘要:简单的整理了一下配置中心的基本概念,主要是为了方便记住,没啥营养。 什么是配置中心 配置中心将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。应用自身既不需要去添加管理配置接口,也不需要自己去实现配置的持久化,更不需要引入“定时任务”以便降低运维成本。总得来说,配
        阅读全文
                
摘要:Java 7 版本的 ConcurrentHashMap 我们首先来看一下 Java 7 版本中的 ConcurrentHashMap 的结构示意图: 从图中我们可以看出,在 ConcurrentHashMap 内部进行了 Segment 分段,Segment 继承了 ReentrantLock,可
        阅读全文
                
摘要:ConcurrentHashMap 和 Hashtable 的区别? 出现的版本不同 我们先从表面的、显而易见的出现时间来分析。Hashtable 在 JDK1.0 的时候就存在了,并在 JDK1.2 版本中实现了 Map 接口,成为了集合框架的一员。而 ConcurrentHashMap 则是在 
        阅读全文
                
摘要:1.TreeMap的特点 概念: TreeMap是一个双列集合,是Map的子类。底层由红黑树结构构成。 特点: 元素中键不能重复 元素会按照大小顺序排序 2.TreeMap的数据结构 2.1二叉查找树 2.1.1二叉查找树的定义 特点: 	1.若左子树不空,则左子树上所有结点的值均小于它的根结点的
        阅读全文
                
摘要:在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据由链表改为了存在红黑树中,以加快检索速度。 有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿? 最主要的一点是: 在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等
        阅读全文
                
摘要:扩容机制 1.什么时候才需要扩容 在首次调用put方法的时候,初始化数组table 当HashMap中的元素个数超过数组大小(数组长度)*loadFactor(负载因子)时,就会进行数组扩容,loadFactor的默认值(DEFAULT_LOAD_FACTOR)是0.75,这是一个折中的取值。也就是
        阅读全文
                
摘要:说明: 1.loadFactor加载因子,是用来衡量 HashMap 满的程度,表示HashMap的疏密程度,影响hash操作到同一个数组位置的概率,计算HashMap的实时加载因子的方法为:size/capacity,而不是占用桶的数量去除以capacity。capacity 是桶的数量,也就是 
        阅读全文
                
摘要:如果创建HashMap对象时,输入的数组长度是10,不是2的幂,HashMap通过一通位移运算和或运算得到的肯定是2的幂次数,并且是离那个数最近的数字。 源代码如下: //创建HashMap集合的对象,指定数组长度是10,不是2的幂 HashMap hashMap = new HashMap(10)
        阅读全文
                
摘要:HashMap构造方法还可以指定集合的初始化容量大小: HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。 根据上述讲解我们已经知道,当向HashMap中添加一个元素的时候,需要根据key的hash值,去确定其在数组中
        阅读全文
                
摘要:class常量池和运行时常量池的区别 class常量池 一个java源文件的类,接口,编译后会产生一个字节码文件。而Java中的字节码需要数据支持,通常这种数据会很大以至于不能直接存到字节码里,换一种方式,可以存到常量池中,这个字节码包含了指向常量池的引用。在动态链接的时候会用到运行时常量池。可以包
        阅读全文
                
摘要:堆空间为什么要分代 经研究,不同对象的生命周期不同。70%-90%的对象都是临时对象。其实不分代完全可以,分代的唯一理由就是优化GC性能,如果没有分代,那所有的对象都在一块,就如同把一个学校的人都关在一个教室。GC的时候要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而很多对象都是朝生夕死的,如
        阅读全文
                
摘要:优先级队列的概念 队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,在这种情况下,我们的数据结构应该提供两个最基本的操作:一个是返回最高优先级对象,一个是添加新的对象。 这种数据结构就是优先级队列(Priority Que
        阅读全文
                
摘要:ConcurrentSkipListMap基础介绍 很明显它底层是以跳表为基础结构的map集合,并且同时支持并发操作,大家应该都知道支持并发最出名的map应该是ConcurrentHashMap,那么它相比于ConcurrentHashMap有什么优点呢?通过前面学习我们知道跳表是一个有序的链表,而
        阅读全文
                

 浙公网安备 33010602011771号
浙公网安备 33010602011771号