keep hunger, keep young.

  1. 数据库基础

    数据库作为底层存储组件,在日常开发中非常重要,这篇文章主要记录了 MySql 相关知识点。

    2019/10/08

  2. 消息中间件

    消息队列已经逐渐成为企业应用系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,当前用的比较多的消息中间件有 RabbitMQ、RocketMQ、ActiveMQ、Kafka等。

    2019/09/25

  3. Dubbo 基础

    Apache Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

    2019/09/20

  4. HashMap 介绍

    Map 作为 java 中按 key-value 方式存储的集合框架,使用非常广泛。本文记录一下最常用的 HashMap 及 线程安全的 ConcurrentHashMap 相关的知识点。

    2019/09/01

  5. Spring Boot 基础

    Spring Boot 项目可通过将@SpringBootApplication标注的类作为primarySource传入SpringApplication.run(primarySource, args)方法并执行该方法的方式启动。 近日梳理了相关的知识,故在此记录一下。

    2019/08/13

  6. ArrayBlockingQueue(线程安全的阻塞有界队列)

    ArrayBlockingQueue 内部是通过数组来实现的。使用 putIndex 来表示入队元素下标,用 takeIndex 来表示出队元素下标,count 变量表示队列中元素的数量。通过 ReentrantLock 类型的 lock 变量加锁来保证入队、出队、删除元素、统计数量时线程安全性。另外和 LinkedBlockingQueue 一样使用 notEmpty、notFull 条件变量来进行出、入队的同步。具体看一下类图结构:

    2019/05/29

  7. LinkedBlockingQueue(线程安全的阻塞有界队列)

    LinkedBlockingQueue的内部是通过单向链表实现的,使用头(head)、尾(last)节点来进行出队和入队操作。出队是通过一个ReentrantLock实例(takeLock)来控制同时只能有一个线程可以从队列头部获取元素,入队通过另一个ReentrantLock实例(putLock)来控制同时只能有一个线程可以从队尾插入元素。同时内部还维护了一个初始值为0的原子变量(AtomicInteger)count,用来记录队列元素的个数,同时通过capacity记录队列的容量。另外还包含两个条件变量notEmpty和notFull,notEmpty对应的条件队列用来存放因执行出队(take)操作但队列为空而被阻塞的线程,notFull对应的条件队列用来存放因执行入队(put)操作但队列已满而被阻塞的线程,以此实现了一个生产消费模型。类图结构如下:

    2019/05/24

  8. ConcurrentLinkedQueue(线程安全的非阻塞无界队列)

    ConcurrentLinkedQueue内部使用单向链表数据结构来保存队列元素,每个元素被包装成一个Node节点。队列是靠头(head)、尾(tail)节点来维护的,创建队列时头、尾节点指向一个item为null的哨兵节点。head和tail使用volatile修饰来保证内存可见性和有序性,替换头、尾节点的casHead(Node cmp, Node val)、casTail(Node cmp, Node val)方法使用非阻塞CAS算法保证原子性。Node节点中的item和next也是如此。类图结构如下:

    2019/05/23

  9. 读写锁ReentrantReadWriteLock

    读多写少的场景下,ReentrantLock就有点力不从心了,所以ReentrantReadWriteLock应运而生。ReentrantReadWriteLock采用读写分离的策略,允许多个线程同时获取读锁。内部维护了一个ReadLock和一个WriteLock,它们依赖Sync实现具体的功能。而Sync类继承自AQS,并且也提供了公平和非公平的实现。ReentrantReadWriteLock通过state的高16位表示读状态,也就是获取到读锁的次数;低16位表示获取到写锁的可重入次数。类图结构如下:

    2019/05/21

  10. 独占锁ReentrantLock

    ReentrantLock是可重入的独占锁,内部通过Sync(继承AQS)提供了NonfairSync非公平锁和FairSync公平锁的实现。state状态值表示线程获取该锁的可重入次数,在默认情况下,state的值为0表示当前锁没有被任何线程持有,类图结构如图:

    2019/05/20

好记性不如烂笔头

常见框架的学习和使用

Java之根基,Java程序员必学


spring-boot相关示例代码

0 0

some arithmetic examples from daily learning.

0 0