- 博客(15)
- 收藏
- 关注
原创 主从架构下的Redis高可用
什么是主从复制?主从复制是指将一台主服务器的数据,通过传输链路(网络或管道等)复制到其他从服务器的过程。前者称为主节点(master),后者称为从节点(slave)。主从复制有什么好处?读写分离:这种架构下可以用来实现读写分离。主节点进行写操作,从节点进行读操作,可以提高服务器的负载能力,同时可以灵活应对需求的各种变化,在需要时添加或减少从节点,从而最大限度的充分利用资源。 负载均...
2020-03-23 09:22:44 227
原创 分布式-全局ID生成
为什么存在全局ID这个问题?在分布式环境下,数据库是可以拆分(sharding)的,一张表的自增机制(比如MySQL)只能保证该表唯一,在数据合并到历史库,迁移或查询,如果出现id冲突无异于噩梦。那么业界有哪些方案呢?UUID 首先,UUID有以下几部分组成: 当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,...
2020-03-21 15:58:35 99
原创 java并发-线程池
线程池几乎是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。使用线程池的好处主要有以下3点:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理型。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调用...
2020-03-20 16:39:30 80
原创 浅谈分布式锁
当分布式锁的产生原因:首先是正确性的需要。对于有依赖关系的调用链,在不加锁的前提下,有可能出现本来应该后来调用的反倒被先调用了(有可能是网络的原因或者io等待等),这就导致了结果的不可预测性。其次是效率问题,使用分布式锁可以避免不同节点重复相同的工作,从而节省了计算的资源。常见的分布式锁的实现方式:Mysql Zookeeper Redis如何实现:基于Mysql实现分布...
2020-03-19 23:18:08 123
原创 大佬-java
Address:https://github.com/AobingJava/JavaFamilyhttps://github.com/nullbull/architect-awesomehttps://github.com/frank-lam/fullstack-tutorialhttps://github.com/CyC2018/CS-Notes
2020-03-19 15:11:01 187
原创 java并发-锁
队列同步器同步队列 同步器依赖内部的同步队列来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成一个Node并将器加入到同步队列中,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。 独占式同步状态释放与获取 在获取同步状态时,同步器维护一个同步队列,获取状态失败的线程都会被加入到队列中并在队列中进行自旋;移出...
2020-03-18 10:30:24 79
原创 java并发-底层实现原理
java基础知识:volatile是如何保证可见性的呢?有volatile修饰的共享变量在进行写操作的时候,会在前面多出一条lock前缀的指令,而lock前缀的指令在多核处理器下会引发两件事情:①将当前处理器的缓存行的数据写会到系统内存中②这个写会操作会使在其他CPU里缓存了该内存地址的数据无效。 所以在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议...
2020-03-16 18:08:57 152
原创 当遇到多个构造器参数时可以考虑使用构建器
假设有一个场景,对于一个类在构建时,其中的一些成员变量需要进行初始化(当然可能会有默认的值)。我们假设这个类中的成员变量有一些是必须在初始化的时候进行赋值的,还有一些是可选的,解决方案有以下几种: 重叠构造器:提供一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个构造器有两个可选参数,以此类推,最后一个构造器包含所有的可选参数,例子如下: /** * @author Li...
2018-09-16 18:05:36 198
原创 关于正则表达式
之前也学过一些正则表达式, 常见的正则能看懂,也会用。今天想来进行一下系统的整理, 对正则表达式复习巩固一下。* 匹配前面的子表达式零次或多次。+ 匹配前面的子表达式一次或多次。? 匹配前面的子表达式零次或一次。{n} n是一个非负数, 表示匹配确定的n次。{n,} n是...
2018-05-13 10:25:15 116
原创 操作系统--死锁
大家知道,所谓死锁,是指多个进程(或线程)在运行过程中因争夺资源而造成的一种僵局,当进程(或线程)处于这种僵局状态时,若无外力作用,他们都将无法在向前推进。死锁原因: (1)竞争资源 (2)进程间推进顺序非法 产生死锁的必要条件:死锁的产生有四个必要条件:互斥条件:指进程对所分配到的资源进行排他性使用,即在一段时间内某资源只由一个进程占用请求和保持条件: 指进程已经保持了至少一个资源,但有...
2018-04-16 16:55:20 101
原创 操作系统篇-基本特征
操作系统的基本特征有四个:并发、共享、虚拟和异步。其中并发特性是操作系统最重要的特征,其他三个特征都是以并发特性为前提的。并发性并行与并发:并行与并发是既相似又有区别的概念。并行性是指两个或多个事件在同一时刻发生; 而并发性是两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到...
2018-04-12 20:29:13 444
原创 深入理解jvm虚拟机-对象的创建过程
对象的创建过程在语言层面上,创建对象(例如克隆、反序列化)只是一个new关键字而已,但对于虚拟机来说,会进行一系列的操作(不包括数组和Class对象):当虚拟机遇到一条new指令时,会去常量池中检查是否有这个类的符号引用 若常量池中没有这个类的符号引用,那么这个类还没有被定义,直接抛ClassNotFoundException; 若是有符号引用, 那么进行下一步操作。 检查这个符号引用代...
2018-04-08 20:19:59 181
原创 深入理解jvm虚拟机-判断对象是否存活
引用计数算法: 给对象中添加一个引用计数器, 每当有一个地方引用它时, 该对象中的引用计数器就加1; 当引用失效时, 计 数器就减1。当引用计数器的数值为0 时, 就表示该对象是不可能在使用的, 就可交给GC回收。 但是主流的java虚拟机里没有使用引用计数算法来管理内存。其中最主要的原因是很难解决对象之间相互循环引用的问题。可达性...
2018-03-07 10:30:20 138
原创 关于二分查找的一些认识
关于二分查找的一些认识 本次对二分查找进行一次系统的整理, 二分查找是建立在原始的序列有序的基础上的。 对于二分查找的熟练应用,是面试必须掌握的最基础的算法。下就关于二分查找写一些自己的认识。1. 该算法返回原始序列中关键字第一次出现的位置(假如要查找的关键字有重复), 如果没有重复, 则返回它的位置 2. 该算法没有进行那么多的注释, 与上面的不同点在于返回关键字...
2018-03-01 12:48:24 264
原创 初来乍到学习web.xml元素配置
1. <display-name> 定义了该WEB应用的名字2. <context-param> 声明该WEB应用范围内的Servlet上下文初始化参数3. <param-name> 参数的名称4. <param-value> 参数值5. <filter></filte...
2018-02-22 15:38:02 161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人