令牌桶算法:以一定的速率发放令牌,同时令牌在桶中有一定buffer,RateLimiter的实现原理
2、一致性hash通过把数据和节点对2^32取模映射到一个环上,数据顺时针方向遇到的第一个节点作为宿主节点
3、为解决hash环上数据倾斜导致的特性退化,可以把节点映射为多个虚拟节点
精度丢失避免手段:转成整形后处理;使用Bigdecimal工具类(原理同前)
通过valueOf函数实现,当自动装箱的数据在IntegerCache缓冲区中时不用新建对象。
字符串底层由char[]实现,JVM定义字符串数组长度最大占两个字节,最长2^16-1=65535。
可变字符串对象,为避免字符串操作每次都要新建对象,引入的缓冲区,缓冲区容量可以动态扩容,线程安全(synchronized);
StringBuilder: 线程不安全,性能更佳,新版JDK的实现方式;
java中的泛型是伪泛型,只在编译期起作用,生成字节码文件后会被“擦除”。
泛型带来的三大问题:反射困境,类型爆炸,基本类型受歧视 - 封装类型。
原理:java源代码经过编译后生成字节码文件,反射通过全限定名拿到类的字节码文件,然后解析字节码找到类的方法和属性,装载到内存。
java擅长把简单的问题搞复杂,也擅长把复杂的问题搞简单,当面临复杂问题的时候,适当考虑设计模式。
里氏替换原则:任何基类出现的地方,一定可以用子类替代,是开放关闭原则的补充
创建模式:简单工厂(根据条件选择实现类),抽象工厂(定义一个抽象工厂,在抽象工厂的实现类中生产具体的实例),单例模式(创建全局唯一对象:饿汉模式,懒汉模式,双重锁实现,静态内部类,枚举)
动态代理(JDK动态代理:接口+反射 cglib动态代理:继承+字节码增强)
自适应hash索引:mysql通过监控发现热点数据,自动建立hash索引提高效率