Java8特性 Lambda表达式函数式编程简介 函数式编程(英语:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。其中,λ演算(lambda calculus)为该语言最重要的基础。而且,λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。(摘自Wikipedia) 面向对象编程是对数据进行抽象;函数式 2020-08-13 Java > 基础 #Java
Integer小细节 IntegerIntegerCache在Java中,创建的对象会存储在堆内存,·IntegerCache·主要用来做缓存,减少内存的重复消耗。但是IntegerCache缓存的数据范围在-128到127之间。可以通过 -XX:AutoBoxCacheMax=high 来指定这个缓冲池的大小,JVM通过 java.lang.IntegerCache.high 系统属性来存储该值,IntegerCac 2020-08-06 Java > 基础 #Java
TreeMap源码分析 简介TreeMap底层通过红黑树实现,在查询性能上能达到O(logn),由于使用红黑树结构进行存储,所以TreeMap的元素都是有序的。同时,这也是一个非线程安全的Map,无法在并发环境下使用。 TreeMap继承自AbstractMap,该类Map接口的抽象实现。实现了 NavigableMap、Cloneable和 Serializable接口。其中NavigableMap继承自SortedM 2020-08-05 Java > 集合 #Java #数据结构 #红黑树
HashMap源码分析 概述 Java中对于Map数据结构,提供了java.util.Map接口,该接口下主要有四个常见的实现类,分别是: HashMap:根据key.hashCode计算存储位置,能在$O(1)$完成查询,但是遍历顺序是不确定的,HashMap最多存储一个键为null,允许多条entry的值为null。HashMap非线程安全。 HashTable:线程安全的Map,常用方法全部通过synchron 2020-08-02 Java > 集合 #Java #数据结构
LinkedList源码分析 简介LinkedList底层采用双向链表结构实现,所以在存储元素功能上,并不需要扩容机制,但是需要额外的空间存储指针,头插和尾插的时间复杂度为O(1),指定位置插入的时间复杂度为O(n),LinkedList是非线程安全的集合。 public class LinkedList<E> extends AbstractSequentialList<E> impl 2020-08-01 Java > 集合 #Java #数据结构
ArrayList源码分析 简介ArrayList是List接口的实现类,其底层通过数组实现。当空间不够会通过内部的扩容机制进行扩容。时间复杂度与数组类似,ArrayList是非线程安全的集合,在并发环境下使用会产生错误。 public class ArrayList<E> extends AbstractList<E> implements List<E>, Random 2020-07-30 Java > 集合 #Java #数据结构
缓存更新策略总结 Cache Aside具体逻辑如下: 写策略:更DB数据,再删除cache数据 读策略: cache hit:直接返回命中数据。 cache miss:从数据库中读取,然后将数据写入cache,并返回。 适用场景: 适合读多写少的场景,不适合写多的场景。 Read/Write Through具体逻辑如下: Read Through:写入时先查询cache是否hit,hit直 2020-07-25 中间件 > Redis
Redis内存优化 查看内存使用情况 info memory used_memory:701520 redis分配器分配的内存量,也就是实际存储数据的内润使用总量 used_memory_human:685.08K 以可读格式返回redis使用的内存总量 used_memory_rss:664584 从操作系统角 2020-07-20 中间件 > Redis