笔记
研究一下 jdk的 动态代理 和cgcib 代理 在看hibernate的 增删改查 功能底层的session如何实现的
可串行化——SERIALIZABLE
事务的最高级别,在每个读的数据行上,加上锁,使之不可能相互冲突,因此,会导致大量的超时现象
MySQL默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行
mysql提供多种索引类型供选择:普通索引,唯一索引,主键
dubbo服务与zookeeper服务注册中心
https://blog.csdn.net/wrs120/article/details/79980434
zookeeper的cp原则 和eureka 的ap原则
https://blog.csdn.net/paincupid/article/details/80610441
ssm 整合
https://www.cnblogs.com/zyw-205520/p/4771253.html;https://github.com/liyifeng1994/ssm
开源自研rpc
https://gitee.com/a1234567891/koalas-rpc
在线上生产环境中 JVM的 Xms 和Xmx 设置成一样大小,避免在GC后调整堆大小时带来的额外压力
至多有两个子节点的树称为二叉树
hashmap讲解比较好:https://baijiahao.baidu.com/s?id=1618550070727689060&wfr=spider&for=pc
红黑树属于平衡二叉树
redis的集群
https://www.cnblogs.com/yingchen/p/6763524.html
redis集群官方推荐
集群中主从节点中主节点挂了,会进行主节点从新选举,在从节点中找到一个即使当挂的主节点在恢复服务,那么它也会作为现在主节点的从节点。
redis cluster的特点,它是去中心化,每个节点都是对等的,连接哪个节点都可以获取和设置数据。
数据库涉及与 优化
1.数据类型越小越好 2.尽量避免null 因为占用存储空间还造成索引失效
3.decimal用户存储精确的小数 4.单表数据过大的话可是使用分区
5.避免使用select * 会浪费io 内存和cpu
6.数据量超大的时候 b-tree 索引就不起作用了(10Tb)选择分区处理(表分区)
7.分库,分表,分区 可解决大数据量
mysql支持的索引类型
B-tree(默认) 和 hash
B-tree(是默认索引) 特点:
1.值有顺序 适合查找范围数据
hash索引:
数据是无序的
索引类型:
普通索引: 没有唯一性的基本索引
唯一索引:有唯一性但是可以为空
主键索引:唯一不能为空
mysql的数据结构使用:
。。。。。。。。。。。。。。
数据库的分库分表;
单表数据超过千万就要考虑分表
代理分片:mycat 使用的是hash算法(应用于数据库之间)
客户端分片:shardingjdbc
分表的路由规则:取余,hash分片(先哈希在与分片取模)
sql执行流程 客户端发送语句到服务器 ===》服务器检查缓存===》服务器进行sql解析 预处理 在经优化器生成对应的执行计划 ===》根据执行计划调用存储引擎的api(不同引擎)==》结果返回客户端
show full processlist 查看每个链接的状态
innodb定义存储过程
drop procedure if exists insert_many_rows;
delimiter
create procedure insert_many_rows (In loops INT)
Begin
DECLARE v1 INT;
SET v1 = loops;
WHILE v1 >0 DO
INSERT INTO test_table values(null,0,'aa','bb');
SET v1 = v1 -1;
END WHILE;
END;
delimiter;
mybatis 中调用语法 call 存储过程名
dubbo:
dubbo配置可以基于xml也可以基于perporties 推荐使用xml ,二者不能并存xml优先生效
dubbo在2.5.7后可以使用注解类似于springboot的方式配置(与xml完全解耦)
dubbo底层基于netty,mima 实现的nio非阻塞流,避免开启更多的线程,减少性能开销。
可以通过 on throw 进行服务的降级,mock进行服务降级
dubbo的一些特性:
可以设置接口缓存,有3中缓存策略;不但可以通过中间件连接还可以通过直连连接远程服务;
dubbo协议:(单一长连接和nio异步通信)适合小数据量高并发的服务调用,消费者大于提供者的情况;
hessian协议:适合传输数据量大且提供者大于消费者的场景;
穿透防火墙(内网与外网)通信 :适合http协议;
RMI协议:采用阻塞式短连接和jdk序列化方式;
zookeeper特点:
最终一致性
当dubbo的提供者和消费者只在启动的时候向zookeeper发布,和订阅服务,当提供者出现异常情况(断电,下线),可以自动剔除提供者服务,
然后基于长连接把提供者列表推送给服务消费者,消费者基于负载均衡算法(默认随机负载均衡randombalance)调用提供者
参考:https://www.cnblogs.com/syp172654682/p/8964068.html
OSI的7层网络协议
|-------------------------------------------------------------------------------------------|
|数据单元 | 分层 | 介绍 |
|-------------------------------------------------------------------------------------------|
|数据(data) |第7层:应用层 |上层应用 例如:http ftp dns 协议等 |
| |-----------------------------------------------------------------------|
| |6层:表示层 |数据压缩,编码 加密等 |
| |-----------------------------------------------------------------------|
| |5层:回话层 |会话协议,例如socks,pptp等 |
|-------------------|-------------------|---------------------------------------------------|
|数据段(segment) |4层:传输层 |传输控制相关的功能,tcp所在层 |
|-------------------------------------------------------------------------------------------|
|数据包(packet) |3层:网络层 |地址分配及设备间的路由传输功能,是ip所在层 |
|-------------------|-------------------|---------------------------------------------------|
|数据帧(frame) |2层:数据链路层 |点对点直连crc等功能,mac码所在层 |
|-------------------------------------------------------------------------------------------|
比特(bit) |1层:物理层 |具体的电器连接功能,比如以太网,无线网卡wifi802.11 |
---------------------------------------------------------------------------------------------
nio的核心组成部分
Channels(渠道) Buffers Selectors(选择器)
选择器允许单线程处理多个渠道,如果应用开了多个连接,但每个连接的流量都很低,使用selector就会很方便。
区别于传统的io,服务端为每个客户端提供一个线程,nio是多路复用。
Nio:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有i/o请求时才启动一个线程进行处理。
特点:非阻塞,单线程处理多任务。
Bio:一个连接一个线程,客户端有连接请求时服务器端就要启动一个线程进行处理,线程开销大。
AIO:一个有效请求一个线程,客户端的i/o是由os先完成了在通知服务器应用去启动线程进行处理。