- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 CompletableFuture 使用详解
1、 runAsync 和 supplyAsync方法CompletableFuture 提供了四个静态方法来创建一个异步操作。public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)public static <U>
2020-09-25 14:46:05
159
原创 Redis与MongoDB区别
MongoDB 更类似 MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,支持多种类型的数据结构,可用作数据库,高速缓存和消息队列代理。1、内存管理机制Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其.
2020-08-31 17:32:46
171
原创 邀请码生成器
package sourcecode;import java.util.Random;/** * 邀请码生成器 算法原理: 1) 获取id: 134567 2) 使用自定义进制转为:8VML 3) 转为字符串,并在后面加'O'字符:8VMLO * 4)在后面随机产生若干个随机数字字符:8VMLOD * 转为自定义进制后就不会出现O这个字符,然后在后面加个'O',这样就能确定唯一性。...
2020-08-31 17:21:28
2607
原创 MongoDB空间定位(点)与距离检索
MongoDB空间定位(点)与距离检索测试数据:db.mapinfo.insert({"address": "南京 禄口国际机场", "tags": ['A'], "location": {"type": "Point", "coordinates": [118.783799, 31.979234]}})db.mapinfo.insert({"address": "南京 浦口公园", "tags": ['B'], "location": {"type": "Point", "coordinates.
2020-08-31 17:21:01
730
原创 3-Java中如何创建线程
Runnable和Thread实现多线程的区别Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 可以避免由于Java的单继承特性而带来的局限; 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的; ...
2019-09-03 10:40:03
85
原创 14-ThreadLocal类详细剖析
ThreadLocal类详细剖析对ThreadLocal的理解JDK中的源码是这样描述ThreadLocal的:This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (...
2019-09-02 17:46:37
101
原创 Java集合框架
Java集合框架概述Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。Java集合类的整体框架如下:从上图中可以看出,集合类主要分为两大...
2019-08-30 15:08:07
88
原创 TreeMap源码分析解读
基础结构 static final class Entry<K,V> implements Map.Entry<K,V> { K key; V value; Entry<K,V> left; // 左孩子 Entry<K,V> right; // 右孩子 ...
2019-08-30 15:07:56
88
原创 LinkedList源码分析解读
基础结构 private static class Node<E> { E item; // 当前值 Node<E> next; // 前置节点 Node<E> prev; // 后置节点 Node(Node<E> prev, E element, Node<E&...
2019-08-30 15:07:47
92
原创 红黑树源码分析解读
红黑树的介绍红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black)。红黑树的特性:(1) 每个节点...
2019-08-30 15:07:39
198
原创 HashSet源码分析解读
HashSetHashSet概述HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet的实现public class HashSet<E> extends AbstractSet<E> implements Set<E>, ...
2019-08-30 15:07:28
72
原创 HashMap源码分析解读
HashMapHashMap概述HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。public class HashMap<K,V> extends Abst...
2019-08-30 15:07:20
77
原创 Vector源码分析详解
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ protected Object[] elementData; protected int ele...
2019-08-30 15:07:05
89
原创 如何设计一个百万级用户的抽奖系统?
1、抽奖系统的背景引入本文给大家分享一个之前经历过的抽奖系统的流量削峰架构的设计方案。抽奖、抢红包、秒杀,这类系统其实都有一些共同的特点,那就是在某个时间点会瞬间涌入大量的人来点击系统,给系统造成瞬间高于平时百倍、千倍甚至几十万倍的流量压力。比如抽奖,有一种场景:某个网站或者APP规定好了在某个时间点,所有人都可以参与抽奖,那么可能百万级的用户会蹲守在那个时间点,到时间大家一起参与这个抽奖。抢...
2019-08-30 15:06:24
194
原创 Hashtable源码分析详解
HashtableHashtable简介和HashMap一样,Hashtable也是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。Hashtable的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null(为null时将抛...
2019-08-30 11:02:12
85
原创 一个简单的抽奖算法
通过随机数的区间分布实现一个抽奖算法。接受一个包含奖品中奖概率的list,返回中奖的奖品。先定义一个抽象奖品类。public class AbstractPrize { private double probability; // 中奖概率 private int prizeNum; // 奖品数量(暂时没用到) private String prizeName; // 奖品名...
2019-08-30 10:59:40
362
原创 二叉树的深搜和广搜
二叉树是计算机中一个重要的数据结构,在这里主要谈一下二叉树的深度优先搜索(DFS)和广度优先搜索(BFS)。所谓DFS,就是沿着树的深度一直往下,一直到达一个叶子节点,然后再返回遍历剩余的节点。根据树的性质,树结构不存在环,因此遍历的时候不需要标记。如果在遍历一个图的时候,因为图中有环的存在,因此需要标记访问过的节点,以防止程序进入死循环。言归正传,树的DFS有三种方式,分别为:前序遍历,中序...
2019-08-30 10:31:42
706
原创 AQS详解
AQS是AbstractQueuedSynchronizer的简称。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,如下图所示。AQS为一系列同步器依赖于一个单独的原子变量(state)的同步器提供了一个非常有用的基础。子类们必须定义改变state变量的protected方法,这些方法定义了state是如何被获取或释放的。鉴于此,本类中的其他方法执行所有的排队和阻塞机制。子类...
2019-08-22 16:14:35
195
原创 CAS初识
一、CAS概念与原理 CAS,全称Compare And Swap(比较与交换),解决多线程并行情况下使用锁造成性能损耗的一种机制。 实现思想 CAS(V, A, B),V为内存地址、A为预期原值,B为新值。如果内存地址的值与预期原值相匹配,那么将该位置值更新为新值。否则,说明已经被其他线程更新,处理器不做任何操作;无论哪种情况,它都会在 CAS 指令之前返回该位置的值。而我...
2019-08-21 18:00:54
143
原创 Redis 的过期策略都有哪些?手写一下 LRU 代码实现?
面试题redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?面试官心理分析如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责?常见的有两个问题:往 redis 写入的数据怎么没了?可能有同学会遇到,在生产环境的 redis 经常会丢掉一些数据,...
2019-08-21 17:55:56
203
原创 LinkedHashMap源码解读
LinkedHashMapLinkedHashMap简介public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedH...
2019-08-20 17:32:04
87
原创 LinkedHashSet源码分析解读
LinkedHashSetLinkedHashSet概述LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。注意,此实现不是线程安全的。LinkedHashSet的实现public class Linke...
2019-08-20 12:42:43
94
原创 TreeSet源码分析详解
TreeSetTreeSet简介java.lang.Object ↳ java.util.AbstractCollection<E> ↳ java.util.AbstractSet<E> ↳ java.util.TreeSet<E>public class TreeSet...
2019-08-20 10:42:21
113
原创 easypoi结合spring-boot使用
1、 在pom.xml中加入依赖<!--excel操作--><dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>3.3.0...
2019-08-20 10:35:29
873
原创 HashMap、LinkedHashMap、TreeMap区别使用场景
1. HashMap中k的值没有顺序,常用来做统计。2.LinkedHashMap吧。它内部有一个链表,保持Key插入的顺序。迭代的时候,也是按照插入顺序迭代,而且迭代比HashMap快。3. TreeMap的顺序是Key的自然顺序(如整数从小到大),也可以指定比较函数。但不是插入的顺序。4.Hashtable与 HashMap类似,它继承自Dictionary类、不同的是:它不允许记...
2019-08-20 10:34:51
954
原创 ArrayList源码分析解读
概述ArrayList是Java一个很常用的集合类,它相当于一个动态数组,内部的数组大小可以根据元素实际情况自动分配,也可以自己分配大小。在使用ArrayList的时候,应注意ArrayList并不是线程安全的,如果需要多线程并发操作应当使用CopyOnWriteArrayList(读远大于写的情况),或者使用Collections工具类的synchronizedList方法将其包装。下...
2019-08-20 10:20:54
107
001-Oracle基础
2013-06-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人