首页
学习
活动
专区
工具
TVP
发布

小灰灰

专栏作者
415
文章
717015
阅读量
77
订阅数
Java中两种分页遍历的使用姿势
在日常开发中,分页遍历迭代的场景可以说非常普遍了,比如扫表,每次捞100条数据,然后遍历这100条数据,依次执行某个业务逻辑;这100条执行完毕之后,再加载下一百条数据,直到扫描完毕
一灰灰blog
2021-03-02
9100
180918-JDK之Deflater压缩与Inflater解压
在实际的应用场景中,特别是对外传输数据时,将原始数据压缩之后丢出去,可以说是非常常见的一个case了,平常倒是没有直接使用JDK原生的压缩工具类,使用Protosutff和Kryo的机会较多,正好在实际的工作场景中遇到了,现在简单的看下使用姿势
一灰灰blog
2019-05-26
9180
SpringBoot应用篇之FactoryBean及代理实现SPI机制示例
FactoryBean在Spring中算是一个比较有意思的存在了,虽然在日常的业务开发中,基本上不怎么会用到,但在某些场景下,如果用得好,却可以实现很多有意思的东西
一灰灰blog
2019-05-26
6760
Spring之定时任务基本使用篇
文章链接:https://liuyueyi.github.io/hexblog/2018/08/01/180801-Spring之定时任务基本使用篇/
一灰灰blog
2018-08-07
4150
基于ForkJoin构建一个简单易用的并发组件
基于ForkJoin构建一个简单易用的并发组件 在实际的业务开发中,需要用到并发编程的知识,实际使用线程池来异步执行任务的场景并不是特别多,而且一般真的遇到了需要并发使用的时候,可能更加常见的就是直接实现Runnable/Callable接口,丢到Thread中执行了;或者更高级一点,定义一个线程池,扔进去执行;本片博文,将从另一个角度,借助JDK提供的ForkJoin,来设计一个简单易用的并发框架 I. 背景 实际项目中,使用并发的一个case就是商品详情页的展示了,一个详情页的展示,除了基本的商品数据之
一灰灰blog
2018-04-18
1.2K0
JDK容器学习之Queue:ConcurrentLinkedQueue
并发安全的链表队列 ConcurrentLinkedQueue 并发安全的链表队列,主要适用于多线程环境中;底层数据结构为链表,由于队列本身频繁的出队和进队,那么这个线程安全是如何保障 I. 数据结构 从命名可以基本推测底层数据结构应该是链表,结合源码看下具体的链表节点 private static class Node<E> { volatile E item; volatile Node<E> next; Node(E item) { UNSAFE.putOb
一灰灰blog
2018-02-06
5450
JDK容器学习之Queue:DelayQueue
延迟阻塞队列 DelayQueue 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞 延迟阻塞队列DelayQueue的底层是基于优先级队列PriorityQueue来实现的,因此研究延迟阻塞队列,更多的注意力应集中在以下两点 阻塞是如何实现的 应用场景是什么 I. 阻塞队列的实现逻辑 1. 限定 类的声明如下,要求队列中的元素必须继承 Delayed public class DelayQueue<E extends Del
一灰灰blog
2018-02-06
6770
JDK容器学习之Queue: ArrayBlockingQueue
基于数组阻塞队列 ArrayBlockingQueue 前面学习了基于数组的非阻塞双端队列ArrayDeque,其内部维护一个数组和指向队列头和队列尾索引的两个成员变量;本篇则探究下基于数组的阻塞队列是什么样的数据结构,又有什么特性,相较于ArrayDeque又有什么异同;然后就是使用场景了 I. 底层数据结构 先看内部成员变量定义, 和 ArrayDequeue相比,差别不大,一个数组,两个索引;此外多了一个锁和两个判定条件 /** The queued items */ final Object[]
一灰灰blog
2018-02-06
7140
JDK容器学习之Queue:LinkedBlockingQueue
基于链表阻塞队列LinkedBlockingQueue 基于链表的无边界阻塞队列,常用与线程池创建中作为任务缓冲队列使用 I. 底层数据结构 先看一下内部定义,与 ArrayBlockingQueue做一下对比,顺带看下这两者的区别及不同的应用场景 /** 队列的容量, or Integer.MAX_VALUE if none */ private final int capacity; /** 队列中实际的个数 */ private final AtomicInteger count = new At
一灰灰blog
2018-02-06
6960
JDK容器学习之LinkedHashMap(二):迭代遍历的实现方式
LinkedHashMap 如何保障有序的遍历 前一篇《JDK容器学习之LinkedHashMap (一):底层存储结构分析》 中介绍了LinkedHashMap继承自HashMap,且内部维护一个
一灰灰blog
2018-02-06
1.4K0
JDK容器学习之TreeMap (二) : 使用说明
TreeMap 使用说明 TreeMap 的底层数据结构为红黑树,主要是根据key进行排序,相比较于HashMap的数组+链表+红黑树的数据结构而言,两者的应用场景是有明显的区别的 1. TreeMap 的优点 1. 红黑树,先天支持排序 TreeMap 根绝key进行比较排序 支持自定义实现的比较器 key实现 Comparable 接口 HashMap 无排序功能 2. 存储空间少 Treemap 红黑树中一个节点对应一个kv对,没有冗余无效的Node节点 HashMap 的数组中,可能存在较多的空位
一灰灰blog
2018-02-06
1.2K0
JDK容器学习之Map: HashMap,TreeMap,LinkedHashMap对比小结
HashMap, TreeMap, LinkedHashMap 对比 1. 存储结构 HashMap 存储结构: 数组 + 链表 + 红黑树 LinkedHashMap 存储结构 和HashMap 相
一灰灰blog
2018-02-06
8210
JDK容器学习之ArrayList:底层存储和动态扩容
ArrayList 底层存储和动态扩容逻辑 ArrayList 作为最常用的容器之一,通常用来存储一系列的数据对象,O(1)级别的数据读写 I. 底层数据模型 查看源码,其内部定义的成员变量 // 默认数组容量 private static final int DEFAULT_CAPACITY = 10; // 静态成员,创建一个空的ArrayList时,内部数组实际使用这个 // 避免每次创建一个ArrayList对象,都要新创建一个对象数组 private static final Object[]
一灰灰blog
2018-02-06
8410
JDK容器学习之LinkedList:底层存储&读写逻辑
LinkedList的底层结构及读写逻辑 链表容器,通常适用于频繁的新增删除,遍历的方式访问数据元素的场景 LinkedList 底层数据结构为链表,非线程安全,本片博文则简单分析下增删改对链表的操作姿势,以及LinkedList的迭代实现 I. 数据结构 双向链表存储,内部保存表头和表尾对象,size用来记录List的长度 transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last
一灰灰blog
2018-02-06
5400
JDK容器学习之CopyOnWriteArrayList:线程安全保障机制
JDK容器学习之CopyOnWriteArrayList 列表容器常见的有 ArrayList和LinkedList,然而两者都是非线程安全的,若应用场景对线程安全有需求,则可以使用CopyOnWriteArrayList来代替传统的Vector I. 存储结构 先看下类中定义的成员变量, 一个数组和一个锁 /** The lock protecting all mutators */ final transient ReentrantLock lock = new ReentrantLock(); /
一灰灰blog
2018-02-06
5320
JDK容器学习之List: CopyOnWriteArrayList,ArrayList,LinkedList对比
列表 List, ArrayList, LinkedList, CopyOnWriteArrayList, Vector 简述 1. 列表划分为线程安全和线程非安全两类 线程安全: Vector, CopyOnWriteArrayList, Collections.synchronizedList() 线程非安全:ArrayList, LinkedList ---- 2. 底层存储 数组: ArrayList Vecotr CopyOnWriteArrayList 双向链表:LinkedList 通过
一灰灰blog
2018-02-06
7920
JDK容器学习之Queue: ArrayDeque
数组双端队列 ArrayDeque 双端队列,表示可以添加元素到(或删除,获取)队列头也可以添加元素到(或删除,获取)队列尾 1. 底层数据结构 类中定义成员变量,一个数组和两个int transie
一灰灰blog
2018-02-06
7080
JDK容器学习之HashMap (三) : 迭代器实现
HashMap 迭代器实现方式 java的容器类,实现Collection接口的都会实现迭代器方式,Map则有点特殊,它不实现Collection接口,它的迭代使用方式则主要借助Collection来实现 1. Map的遍历方式 对于List,Set,我们可以直接用 foreach 来实现遍历,而Map则不能直接这么用,通常Map的遍历方式有三种 Entry的遍历 for(Map.Entry entry: map.entrySet()) { // xxx } Key的遍历 for(Object key
一灰灰blog
2018-02-06
6860
JDK容器学习之HashMap (二) : 读写逻辑详解
Map读写实现逻辑说明 前一篇博文 JDK容器学习之HashMap (一) : 底层存储结构分析 分析了HashMap的底层存储数据结构 通过put(k,v)方法的分析,说明了为什么Map底层用数组进行存储,为什么Node内部有一个next节点,这篇则将集中在读写方法的具体实现上 本片博文将关注的重点: 通过key获取value的实现逻辑 新增一个kv对的实现逻辑 table 数组如何自动扩容 如何删除一个kv对(删除kv对之后,数组长度是否会缩水 ?) 1. 根据key索引 get(key) 作为m
一灰灰blog
2018-02-06
6950
JDK容器学习之TreeMap (一) : 底层数据结构
TreeMap 在日常的工作中,相比较与HashMap而言,TreeMap的使用会少很多,即使在某些场景,需要使用到排序的Map时,也更多的是选择 LinkedHashMap,那么这个TreeMap到底是个怎样的容器,又适用于什么样的应用场景呢? 1. 数据结构分析 分析数据结构,最好的方式无疑是google+baidu+源码了 1. 继承体系 看到源码第一眼,就会发现与HashMap不同的是 TreeMap 实现的是 NavigableMap, 而不是直接实现 Map public class Tre
一灰灰blog
2018-02-06
1.9K0
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档