摘要:
1、并发 BUG 的原因 可见性 一个线程对变量的改变,另一个线程能立刻看到。 CPU缓存导致的可见性问题。(volitale 关键字修饰,可以使修饰的变量值在当前线程修改后,对其他线程立刻可见) 原子性 一个或者多个操作在 CPU 执行的过场中不被中断的特效叫原子性。 CPU 能保证的原子操作是 阅读全文
摘要:
主要知识点: 1、数据结构的选择:数据量小选择数组和压缩列表,数据量大选择哈希表和跳表。数组和压缩列表都是在内存中分配一块地址连续的空间,非常紧凑。 哈希表一个桶数据量大时,会渐进式 rehash。哈希表中存的是 key 和 value 的指针。 2、多路复用模型:主线程接受网络、处理数据、fork 阅读全文
摘要:
各种框架的选型 1、注册中心选型 注册与发现有解决方案有两种: 1)、应用内注册与发现的方式,最典型的是 Eureka 注册中心。 Eureka 主要三个组件:Eureka Server 实现服务信息注册、存储、查询,Eureka Client 集成在服务端的注册中心 SDK,实现服务注册、反注册, 阅读全文
摘要:
1、代码事务中对数据库操作的顺序 最好是查询、删除、新增操作放在代码中事务的开始,将修改放在事务将要结束的地方。 因为修改涉及到对数据的加锁(间隙锁),所以为了尽量短时间的锁住数据,修改应该放在事务即将结束的位置。 2、创建对象的相关问题 之前是看了 JVM 课程,认为创建对象可以写为 User u 阅读全文
摘要:
1、多路复用 作用:一个通讯连接的基础上,可以同时进行多个请求响应处理。 由于上层应用协议的制定问题,很多传统服务不能支持多路复用,例如:http1.1,sqlserver 和 redis 等。有些服务提供批量处理,但是这些处理都是基于一个RPS(每秒请求数)下。 单路存在的问题:每个请求响应独占一 阅读全文
摘要:
1、G1 垃圾回收器 G1 能更少的 "Stop the World" ,能同时对新生代老年代进行垃圾回收。 G1 将 Java 堆内存拆分为多个大小相等的 Region,并且新生代和老年代只是逻辑上的概念。 最大的特点:设置一个垃圾回收的预期停顿时间。可以让 G1 垃圾回收器保证达到开发人员手动设 阅读全文
摘要:
1、快照读 快照读是基于 MVCC 和 undo log 来实现的,适用于简单 select 语句。 读已提交:一个事务内操作一条数据,可以查询到另一个已提交事务操作同一条数据的最新值。(Oracle 默认隔离级别) 可重复读:每个事务只关注自己事务开始查询到的数据值,无论事务查询同一条数据多少次, 阅读全文
摘要:
1、一次请求流程: 应用层:DNS、HTTP、HTTPS所在的层。经过应用层的封装,浏览器会将包交给下一层去完成,通过 socket 编程来实现。(HTTP 头:正文格式,正文长度,URL,POST 等) 先用 www.baidu.com 类似的域名发起请求,DNS/HTTPDNS 对域名进行解析, 阅读全文
摘要:
1、JVM: 内存模型(指令重排序、内存屏障)、逃逸分析(非逃逸优化:栈上分配、标量替换、禁止方法内联)、双亲委派机制、加载到卸载流程、GC 优化; 后期需要深入学习:反射、异常处理、虚拟机执行方法调用、编译(解释编译、即时编译)、方法内联、对象的内存布局。 2、MySQL: 阅读全文
摘要:
1、关于对象结合JVM 写功能代码时,尽量在一个方法里少创建对象,因为并发量高的时候,频繁的创建和销毁大量对象,会对 JVM 产生巨大压力,可能会崩溃。 2、关于 JVM 参数设置 在实际开发中,可以工具测试一个对象占多少内存,计算下并发量假如1000的时候,对象一共会占用多少内存。再结合新生代、老 阅读全文