public class Foo
{
// SimpleDateFormat is not thread-safe, so give one to each thread
private static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>(){
@Override
protected SimpleDateFormat initialValue()
{
return new SimpleDateFormat("yyyyMMdd HHmm");
}
};
public String formatIt(Date date)
{
return formatter.get().format(date);
}
} private static final ThreadLocal<Map<String, String>> MAPPING = ThreadLocal.withInitial(HashMap::new);
public static void doBefore(Client client) {
MAPPING.get().put(A, B);
}
public static void doAfter(ClientInfoV3 clientInfoV3) {
MAPPING.get().get(A);
}
- GC区域
- GC算法和分代回收设计
- 垃圾回收器分类
- G1垃圾回收器
- G1参数设置
- java类加载机制
- jvm命令使用
- 从实际案例聊聊Java应用的GC优化
- young gc 和 full gc 频繁,调大新生代,young gc 回收时间 = 扫描 + 复制,复制的变少,young gc 回收次数变少,且回收时间不会长。young gc 次数少,相应的full gc 也会变少。
- 请求高峰发生gc,可用性下降
- CMSMaxAbortablePrecleanTime 调大,abortable preclean Time 会进行young gc,减少remark 的对象
- full gc 频繁,老年代不够,动态扩容引起
- java8 去除了老年代,引入元空间
- G1 参数
- 问题定位经验
- Best Practice For Code Review
- 如何做好的design
- 分布式锁的几种实现方式
- 一致性hash
- 基于bool表达式的广告索引
- 实验平台设计
- 广告索引
- bool 表达式,索引的量级最大的时候就是广告的数量
- 更新索引的一致性
- 用一个时间戳,大于某个时间戳的才更新过来
- 重启机子的时候
- redis 双写
- 美团高可用系统
- 限流
- 熔断
- 压测
- 什么是 TCP 拆、粘包?如何解决?
- 设置定长消息,例如每个报文的大小固定长度为200字节
- 通过特殊字符,例如通过回车换行进行分割
- 将消息分为消息头和消息体,消息头包含消息总长度
- Netty线程模型
- redis-pipeline
- redis-String-vs-Hash
- 缓存穿透问题
- 在启动的时候放很少的流量进来,权重 + 启动时间
- 提前建连接池,预热服务
- 分库分表
- SQL 调优
- 美团点评分布式ID生成系统
- LruCache在美团DSP系统中的应用演进
- 双向链表 + hash
- 应用
- 用来存广告数据 adId
- 演化1:引入LruCache
- 演化2:因为折中全量更新而引入时效清退机制
- 演化3:因为锁的问题进行hash分片
- 演化4:零拷贝技术
- MySQL索引背后的数据结构及算法原理
- LRU原理
- 分布式事务
- trie 树
- 批量接口通用方案.