操作系统-IO 操作系统 架构 内核程序: 操作系统中, 可以访问所有硬件设备, 如网卡、内存设备等的一些特殊的高权限的系统程序,用户程序: 只能有限的访问部分内存空间, 对硬件设备没有访问权限的低权限的应用程序或系统程序 获取数据流程: 当我们需要读取一条数据的时候, 首先需要发请求告诉内核, 我需要什么数据, 等内核准备好数据之后, 再从内核空间拷贝到用户空间 数据准备: 等待内核准备数据 数据拷贝: 数据 2023-04-18 操作系统 > IO #IO #零拷贝 #IO 多路复用 #mmap
网络相关-TCP/HTTP/HTTPS 网络传输模型 TCP/IP数据包 每个分层中, 都会对所发送的数据附加一个首部, 在这个首部中包含了该层必要的信息, 如发送的目标地址以及协议相关信息. 通常, 为协议提供的信息为包首部, 所要发送的内容为数据. 在下一层的角度看, 从上一层收到的包全部都被认为是本层的数据 网络中传输的数据包由两部分组成:一部分是协议所要用到的首部, 另一部分是上一层传过来的数据. 首部的结构由协议的具 2023-04-11 网络 #HTTP #TCP #UDP
Spring-源码相关 ApplicationContext的公共接口1234# ApplicationContext的公共接口,定义寄存器和扫描方法AnnotationConfigRegistry void register(Class<?>... annotatedClasses); void scan(String... basePackages); AnnotationConfigApplicat 2023-04-10 源码 > Spring #源码 #Spring
MyBatis源码流程 自动扫描123456789101112131415161718192021222324252627282930313233343536373839404142434445MybatisAutoConfiguration(@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)) - MapperScannerRegist 2023-04-10 源码 > MyBatis #MyBatis #源码
JVM-内存相关 JVM 内存相关知识 内存分配 指针碰撞(CAS 来解决并发问题) 空闲列表(连续的内存区域) 逃逸分析 在方法体中创建对象,如果该对象被方法体其他变量引用到,叫方法逃逸,被外部线程访问到叫线程逃逸 优化点: 同步消除:如果一个对象被逃逸分析发现只能被一个线程所访问,那对于这个对象的操作可以不同步 栈上分配:如果确定一个对象不会逃逸出线程之外,那让这个对象在栈上分配内存将会是一个很不错的 2023-03-27 Java > JVM #JVM
JVM-内存相关 偏向锁 如果不存在线程竞争的一个线程获得了锁,那么锁就进入偏向状态,此时Mark Word的结构变为偏向锁结构,锁对象的锁标志位(lock)被改为01,偏向标志位(biased_lock)被改为1,然后线程的ID记录在锁对象的Mark Word中(使用CAS操作完成)。以后该线程获取锁时判断一下线程ID和标志位,就可以直接进入同步块,连CAS操作都不需要,这样就省去了大量有关锁申请的操作,从而也就 2023-03-27 Java > JVM #JVM
分布式系统一致性算法 - Raft 简介 Raft是用于管理复制日志的共识算法. 它产生的结果等效于 multi-Paxos, 它的效率与Paxos相同, 但其结构与Paxos不同. 这使Raft比Paxos更易于理解, 并且为构建实用系统提供了更好的基础. 为了增强可理解性, Raft分离了共识的关键要素, 例如领导人选举, 日志复制和安全性, 并强制实施了更高程度的一致性以减少必须考虑的状态数. 一项用户研究的结果表明, 与Pa 2020-12-06 分布式 > 一致性算法 #Raft #一致性 #CAP
Kafka 知识汇总 简介 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列, 可以处理大量的数据, 并使您能够将消息从一个端点传递到另一个端点. Kafka适合离线和在线消息消费. Kafka消息保留在磁盘上, 并在群集内复制以防止数据丢失. Kafka构建在ZooKeeper同步服务之上. 它与Apache Storm和Spark非常好地集成, 用于实时流式数据分析. Kafka 2020-02-16 中间件 > Kafka #Kafka
Redis 知识汇总 简介 Redis 是一款基于内存的数据库, 即 NoSQL. 采用单线程模型, 但是能10w 的并发. 底层使用 IO 多路复用模型(Java 中的 NIO, 即在进行 IO 是, 线程不阻塞可以处理其他事). 常用的数据结构: String, List(可用作队列), Set, ZSet(sorted set有序集合), Hash 持久化两种方式: RDB(快照) 和 AOF(日志追加) 2020-02-15 中间件 > Redis #Redis
从根儿上理解 MySQL - 索引总结 前提 上一篇我们已经知道了 Innodb 的页的数据结构和组成. 可以简介为下图所示 根据主键查询是在 Page Directory中进行二分搜索确定该数据所在的槽, 然后通过该槽偏移量确定页, 往后遍历查找数据 但是这是主键查询, 索引的原理也相同 ps: 基础直接跳过 索引 在之前我们了解的主键查询是通过主键进行排序. 那么我们索引是利用我们的索引字段充当主键 下面其实就是主键索引, 又称 2020-01-30 中间件 > MySql #MySql