- 博客(6)
- 收藏
- 关注
原创 MAT使用教程
MAT使用教程 参考: 利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露 简单示例 1.构建一个内存泄漏场景 class Solution { public static void main(String[] args) { Vector v = new Vector(10); while (true) { Object o = new Object(); v.add(o);
2021-04-29 18:03:31
1970
原创 关于Redis
关于Redis1.为什么用缓存?2.单线程?3.Redis的数据结构 1.为什么用缓存? 使用缓存主要原因: 1.高性能:查DB比较慢,读缓存更快,提高系统性能 2.高并发: mysql 单机支撑到 2000QPS 也开始容易报警,缓存走内存,内存天然支持高并发,单机支撑的并发量轻松一秒几万十几万 2.单线程? Redis优化成了多线程?实际只是对io操作的优化。 Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程。 多线程的优化只涉及io,参考NIO模型,而内存还是基于单线
2021-04-29 14:31:32
131
原创 幂等问题
幂等:就是指多接口的多次调用所产生的结果和只调用一次是一致的。 参考: 分布式系统—幂等性设计 场景 1.业务上比如支付两次,重复扣款,重复插入数据等 2.消息队列中重复消费 3.web接口上失败重试 http协议幂等性 幂等:get、put、delete 非幂等:post 常见保证幂等的手段 1.MVCC(乐观锁) 带条件更新,判断是否是期待的版本号 2.唯一索引(RabbitMQ、数据库) 3.悲观锁 4.select+insert 先查询一下是否执行过,再进行更新(核心高并发不要用这种方式) 5.状态
2021-04-27 17:15:19
143
原创 消息队列MQ
1.为什么使用消息队列 解耦:IM会话状态信息/班表消息(具体场景说明),有许多应用需要这个状态消息,上游应用不应该维护需要给哪些应用发送这些信息,采用发送消息的方式进行解耦。 异步:短信、邮件通知等场景(非必须),A需要调用BCD三个接口写库,使用消息就不必等3个接口都写完(耗时从A+B+C+D减少为A+消息发送延时) 削峰:高峰期系统拉取请求不会因为请求量高而挂掉(积压消息处理) 2.消息队列缺点 1.MQ挂了怎么办?消息高可用? 2.重复消费?消息丢失?消息顺序性? 3.数据一致性 3.高可用 典型的
2021-04-27 13:13:31
140
原创 Java知识点
可达性算法 引用计数 VS 可达性分析 引用计数:无法解决循环引用 可达性分析: GC Root扫描,finalize只会被执行一次 关于finalize: https://stackoverflow.com/questions/158174/why-would-you-ever-implement-finalize https://stackoverflow.com/questions/52879761/should-java-9-cleaner-be-preferred-to-finalization
2021-04-26 18:21:23
126
原创 学习资料收集
分布式系统公开课 http://nil.csail.mit.edu/6.824/2020/index.html mapReduce翻译文献:https://www.cnblogs.com/fuzhe1989/p/3413457.html NIO http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 计算机基础知识 《深入理解计算机系统》 《java并发编程实战》http://itmyhome.com/java-concurrent-programming-combat/
2021-04-15 17:31:24
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅