面试准备
LuckyToMeet-Dian叶
学习,学习。不断充电才可以不被时代淘汰
展开
-
面试准备 -- 学习 Executor 框架(上)
Executor框架还记得以前写线程的时候用如下代码://初级版中的战斗机new Thread(()-> System.out.println("12313")).start();//初级版new Thread(new Runnable() { @Override public void run() { System.out.println(""); }...原创 2019-03-20 19:49:55 · 216 阅读 · 0 评论 -
面试准备--原子类 LongAdder 详解
前面介绍了 AtomicInteger 后,就没有继续介绍 AtomicLong,因为这两个类基本是类似的,懂了第一个那第二个就不在话下了。根据前面学习过 AtomicInteger 代码,我们可以知道类内部有一个变量 value 专门保存当前得值。然后在增加或减少指定数值时,会不断 CAS 直到成功。那这样的话,value 作为一个热点值,会被频繁的修改。如果并发量低的情况下,CAS 失败的...原创 2019-04-24 19:32:37 · 324 阅读 · 0 评论 -
面试准备 -- AQS 独占锁ReentrantLock详解
上篇文章简述了 AQS 的提供的几个支持。今天,我们来学习 AQS 是如何实现独占锁功能的。说到独占锁,我们就会想到 synchronized 关键字,既可以锁方法,也可以使用锁住某一块代码,简直就是个万能锁。当然今天我们肯定不是讲它,而是讲 AQS 提供的独占功能的类 – ReentrantLock。我们先来看看上篇文章的两个锁的对比图:锁synchronizerLock...原创 2019-05-10 10:33:09 · 309 阅读 · 0 评论 -
面试准备 -- AQS 简述
面试中最常见的面试题可以说是 JUC 包下最核心的一个点 – AQS(也叫队列同步器)。AQS 全称叫 AbstractQueuedSynchronizer,是 JUC 包下一个核心类,该框架提供了一整套通用并发管理模板,为线程的同步态,线程间通信,线程队列管理提供了支持。AQS 提供的模板框架:但我们点击进去 AbstractQueuedSynchronizer 类时,发现大部分的方法都是...原创 2019-05-07 20:44:57 · 763 阅读 · 0 评论 -
面试准备 -- AQS 等待/通知机制
以前我们使用 Object 类提供的线程等待/通知机制,我们先来看看Condition 简介:Condition 接口可能在开发中很少遇到,但是这一点却十分重要,下面我们来看看 AQS 是如何实现等待/通知机制的根据上面代码,我们知道等待的方法是 await(),那我们先从该方法进行分析。await() 方法解析:public final void await() throws Inte...原创 2019-05-20 21:50:34 · 416 阅读 · 0 评论 -
Redis学习系列(一) -- 简单动态字符串概述
redis 为什么那么快!原创 2019-05-27 14:41:39 · 212 阅读 · 0 评论 -
Redis学习笔记(二) -- 持久化
以前学 Redis 只是停留在最简单的使用阶段,对其底层实现一点也不关心,甚至是配置文件的每个配置都不熟悉。o(︶︿︶)o 唉,近期开始恶补 Redis 的知识点,才发现不简单呀!今天先讲解一下 Redis 的持久化!为什么要持久化?我们知道 Redis 是内存数据库,单线程性能也超级强。但是在现在来说,数据才是一切,有数据的公司和没数据的公司是无法相比的。偏偏 Redis 是内存数据库,所...原创 2019-05-23 23:26:29 · 224 阅读 · 0 评论 -
面试准备-- zookeeper实现分布式锁
本章学习需要先安装 zookeeper。安装教程在另一篇博客:https://blog.csdn.net/weixin_41622183/article/details/90714190什么是分布式锁以前在项目较小时,单机即可处理很多业务。但随着用户增长,单机已经无法满足当今业务。解决方案可能是上集群,但是在多个 JVM 中都有同一个变量。假设多个请求分到不同的 JVM 中,都对变量进行修改...原创 2019-05-31 20:53:21 · 561 阅读 · 0 评论 -
面试准备 -- redis实现分布式锁
昨天,我们介绍了 zookeeper 实现分布式锁的原理和具体实现。今天,我们来学习使用 Redis 来做分布式锁。下面我们来简单实现一个分布式锁: public static void main(String[] args) { Jedis jedis = new Jedis("localhost"); //设置锁 Long result = ...原创 2019-06-01 13:56:56 · 4728 阅读 · 0 评论 -
面试准备-- ABA问题解决方案
上一篇文章我们介绍了原子类 AtomicInteger 我们知道了该类留下的一个逻辑漏洞–ABA 问题。AtomicStampedReference/AtomicMarkableReference原创 2019-04-23 16:43:48 · 496 阅读 · 0 评论 -
面试准备--线程池队列 SynchronousQueue 详解
今天介绍另一个线程池的阻塞队列–SynchronousQueue。该队列是在 jdk1.5 的时候出现,和前面写的 LinkedBlockingQueue 和 ArrayBlockingQueue 队列相比,SynchronousQueue 没有数据缓存的空间。我们先来看看类图:SynchronousQueue 特点:没有缓存数据,SynchronousQueue 队列中没有任何缓存的数...原创 2019-04-14 14:26:30 · 4440 阅读 · 1 评论 -
面试准备 -- 学习 java 线程池
java 线程池开发中我们经常使用的是各种框架,框架屏蔽了很多底层的东西,使得我们主要关注于业务。假设我们遇到一个业务:要返回图片和页面渲染后一起返回,如何优化?我们知道图片一般是很大的,而页面数据很小,而要等待两个组合后才返回,实在太慢了。这时我们会想到使用多线程进行优化。但是使用多线程也出现一个问题,假设并发量很大,我们频繁的创建和销毁线程,造成资源的消耗,不仅不能提高效率,还降低了。如何...原创 2019-03-16 19:22:09 · 181 阅读 · 0 评论 -
面试准备 -- 线程池队列LinkedBlockingQueue详解
前面学了 Executor 框架,线程池参数,以及基本线程池的使用,今天来学学面试问的核心 – 线程池中的队列队列。在聊聊 java 线程池一文中,简单介绍了几种常用的阻塞队列,但都是一笔带过,接下来的文章会着重讲线程池中的队列。由于线程池中使用的队列有多种,接下来会分多篇文章进行学习。LinkedBlockingQueue队列:首先我们先看看下图从上图我们可以很清楚的看到 LinkedB...原创 2019-03-25 16:01:06 · 3072 阅读 · 0 评论 -
面试准备 -- 四种线程池基本用法与解析
说线程池队列之前,还需要先知道如何构建线程池。JDK 已经为我们提供了创建线程池的工具类了,只需要我们调用即可。下面我们看看这个工具类提供的几种线程池:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool构建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等...原创 2019-03-22 19:17:17 · 247 阅读 · 0 评论 -
面试准备 -- 线程池队列LinkedTransferQueue详解
今天解析的这个队列可能比之前学习的队列都要难,知识点涉及到锁自旋,源代码中出现 CAS 操作也会较难理解。老样子,我们先看看类相关结构:看到 BlockingQueue,条件反射下大致知道有哪些方法了。这里接不过多的介绍了,我们来看看 TransferQueue 接口提供了哪些方法://该方法放入元素后,一定要被消费者消费后,线程才释放,否则会一直堵塞void transfer(E e)...原创 2019-04-04 20:15:38 · 558 阅读 · 0 评论 -
面试准备 -- 线程池队列LinkedBlockingDeque详解
上一篇文章我们介绍了 LinkedBlockingQueue 队列,我们知道 LinkedBlockingQueue 是一个无界先进先出的队列。今天我们来学习一个双端队列 – LinkedBlockingDeque,该队列可以在队首和队尾插入元素。这两种队列的底层都是基于链表实现。下面我们来看看 LinkedBlockingDeque 类的关系图:上一篇文章我们的就说过是接口方法是不断抽象出...原创 2019-03-28 21:27:22 · 1545 阅读 · 0 评论 -
面试准备--线程池队列 ArrayBlockingQueue 详解
前面介绍已经介绍了线程池的三种队列了,剩下要学习的队列已经没多少了,今天我们继续来学习一下另一个队列 ArrayBlockingQueue ,这个队列很简单,下面我们来看一下类图。我们先来知道 ArrayBlockingQueue 是 BlockingQueue 的实现类,那我们需要先看看 BlockingQueue 提供了哪些方法。public interface BlockingQue...原创 2019-04-12 15:20:40 · 1089 阅读 · 0 评论 -
面试准备--线程池队列 PriorityBlockingQueue 详解
最后一个线程池的阻塞队列了,写完这个线程池篇应该算是结束了。PriorityBlockingQueue 队列是 JDK1.5 的时候出来的一个阻塞队列。原创 2019-04-15 22:15:14 · 2295 阅读 · 0 评论 -
面试准备--原子类 AtomicInteger 详解
原子类也是 java 并发编程学习中不可或缺的一个部分了。很久没有看原子类的源码代码了,今天翻开原子类源码看一下。Compare-and-Swap我们知道,CAS 操作涉及到操作系统本地的调用(简称:平台相关),也就是我们点进代码上有个 native 关键字修饰的方法。下面,我们自己来实现一个简单的 CAS 方法。/** * @author Gentle * @date 2019/04...原创 2019-04-21 15:59:51 · 673 阅读 · 0 评论 -
面试准备 -- Redis 跳跃表
看了一下面经,发现具有问了 redis 的跳跃表,惊呆了,赶紧学习顺便写下这一篇文章!原创 2019-06-10 15:40:26 · 18928 阅读 · 5 评论