RxLoaron's Blog

Stay Hungry,Stay Foolish

Bitmap 计数、布隆过滤器

通过一个 bit 位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身。
优势:
省空间、操作快、计算快、方便扩容
限制:
redis 中 bit 映射被限制在 512MB 之内,最大 2^32 位。

布隆过滤器(Bloom Filter)是一个高空间利用率的概率性数据结构,由二进制向量(即位数组)和一系列随机映射函数(即哈希函数)两部分组成。
使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(几个哈希函数得到几个哈希值)。
根据哈希值,在位数组中把对应下标的值置为 1。

HyperLogLog

命令 pfadd、pfcount、pfmerge
redis 集群最大槽数 16384?crc16 算法

GEO

单例模式

如何实现一个单例?
构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;
考虑对象创建时的线程安全问题;
考虑是否支持延迟加载;
考虑 getInstance() 性能是否高(是否加锁)。

单例模式存在的问题:
单例对 OOP 特性的支持不友好
单例会隐藏类之间的依赖关系
单例对代码的扩展性不友好
单例对代码的可测试性不友好
单例不支持有参数的构造函数

  1. 性能测试针对系统的性能指标,建立性能测试模型,制定性能测试方案,制定监控策略,在场景条件之下执行性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满足既定值。
    性能测试概念

基础

Java Classloader,动态代理,反射,字节码框架 ASM,CGLIB,设计模式,spring 核心基础

Java OOP 的局限性

静态化:类结构一旦定义,不容易被修改
侵入性扩展:通过继承和组合组织新的类结构

AOP 常用场景

统计场景:调用次数,执行次数,数据抽样,数值累加
安全场景:熔断,限流,认证授权,监控
性能场景:缓存 spring cache,超时控制

AOP 概念

Aspect,Join Point,Pointcut,Advice

AOP 设计模式

代理模式(静态代理、动态代理),判断模式(Predicate)

Java 内存模型

Java 内存模型规范了 JVM 如何提供按需禁用缓存和编译优化的方法。具体来说,这些方法包括 volatile、synchronized 和 final 三个关键字,以及六项 Happens-Before 规则。

Happens-Before 规则

前面一个操作的结果对后续操作是可见的
Happens-Before 约束了编译器的优化行为,虽允许编译器优化,但是要求编译器优化后一定遵守 Happens-Before 规则。

  1. 程序的顺序性规则
  2. volatile 变量规则
    对一个 volatile 变量的写操作, Happens-Before 于后续对这个 volatile 变量的读操作。
  3. 传递性
  4. 管程中锁的规则
    对一个锁的解锁 Happens-Before 于后续对这个锁的加锁。
  5. 线程 start() 规则
    主线程 A 启动子线程 B 后,子线程 B 能够看到主线程在启动子线程 B 前的操作。
  6. 线程 join() 规则
阅读全文 »
0%