数据库
1,B树与B+树区别
1,B树每个节点存ID与其他数据字段,B非叶子结点,只存ID,叶子结点存完整数据
好处:每个层级B+树,可以存储更多的额数据,层级更少,更扁平,查询效率更高
2,B+树,叶子结点之间通过指针前后关联,B树叶子结点数据之间没有关联关系
(B+树的叶子节点之间是由双向指针相连的)
B+更好与针对范围查找和排序
2,数据库锁
行锁
又可以细分,记录锁/间隙锁/临键锁
- 行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了
- 两个事务不能锁同一个索引
1,又称记录锁,对主键和唯一索引进行加锁,
2,间隙锁
加锁范围是一个或几个区间的数据,不包含操作记录本身,为不存的记录加锁,防止产生幻读
比如数据库中有1,5,9三条数据,更新id=5的数据,那么有4个区间
-无穷大-1,1-5, 5-9,9+无穷大,锁住的是这四个区间,避免其他事物往这四个区间加锁
解决rr级别下,部门幻读问题。
3,临键锁
理解为行锁+间隙锁组合
与间隙锁区别:加锁范围是一个或几个区间的数据,包含操作当前记录本身
举一个例子:更新id > 10的数据,进行范围更新,
rr级别下默认情况下使用临键锁加行锁,根据不同情况调整,记录锁,间隙锁,表锁
具体场景
唯一索引,记录锁
无索引,表锁
唯一列,等值查询,数据不存在,间隙锁,如表中存在2,9两个数据,查询id=5的数据,会锁住2,9这个区间
非唯一索引等值查询...
临键锁,更新id>=100的数据,表中存在100,110,锁住100-110,110到+无穷大
Mysql学习(二)-- 事务和锁_行锁和事务-CSDN博客
TPS
服务端每秒处理的查询数量,针对后端,可以理解为每秒数据库的查询次数
QPS
服务端每秒处理的事务数
一个接口为例,包含业务逻辑,调用第三方,数据库查询三个步骤,那秒完成这N个三个步骤数量
一个事务是指一个客户机向服务器发送一起完整的 开始 start 请求,内部各种ACID 事务属性的 并发数据操作, 最后 提交一个commit操作结束整个Transaction的过程。
架构设计内容分享(一):什么是QPS,TPS,RT?_qps tps-CSDN博客
分布式事务
百度安全验证
2PC 3PC TCC seata
RPC VS http 区别
1,RPC长链接
2,协议,RPC不依赖具体协议可以是TCP UDP,http基于http协议
3,数据格式,RPC通过二进制传输,更高效序列化和反序列化,如Protocol、Buffers、Thrift。http使用文本格式传输,JSON/xml,传输占用更多的宽带和时间。
- 速度来看,RPC要比http更快,虽然底层都是TCP,但是http协议的信息往往比较臃肿
- 难度来看,RPC实现较为复杂,http相对比较简单
- 灵活性来看,http更胜一筹,因为它不关心实现细节,跨平台、跨语言因此,两者都有不同的
使用场景
- 如果对效率要求更高,并且开发过程使用统一的技术栈,那么用RPC还是不错的。
- 如果需要更加灵活,跨语言、跨平台,显然http更合适
https://www.cnblogs.com/helloworldmybokeyuan/p/11626833.html
【每日一问】RPC 调用和 HTTP 调用的区别_rpc调用和http调用的区别-CSDN博客
线程池
单个接口介绍
1,Executor(I) void execute(Runnable command) 2,ExecutorService(I) <T> Future<T> submit(Callable<T> task); Future<?> submit(Runnable task); <T> Future<T> submit(Runnable task, T result);
3,AbstractExecutorService(abs class)
4,ThreadPoolExecutor(class)
继承关系
1,ExecutorService extends Executor
2,AbstractExecutorService implements ExecutorService
实现ExecutorService submit方法,最终调用的还是Executor中execute()方法
3,ThreadPoolExecutor extends AbstractExecutorService
实现Executor中execute方法
execute和submit的区别_submit和execute-CSDN博客