Java线程池
...
同步器
同步器同步器整体架构 六个同步器 ReentrantLock Semaphore CyclicBarrier CountDownLatch Phaser Exchager ReentrantLock和Synchronized异同相同点: 临界区保护(提供锁/解锁的能力) 可重入 都提供线程间的协作 Synchronized基于Monitor,monitor提供Object.wait(),Object.notify() ReentrantLock基于AQS,提供Condition Object,提供await(), signal()等方法 提供锁升级的逻辑 Synchronized:偏向锁->轻量级锁->重量级锁 ReentrantLock:CAS竞争->休眠+排队竞争 都提供等待队列 Synchronized:monitor:entryList,waitList ReentrantLock:CLH队列 区别点: 基于AQS vs 基于Monitor Java生态 vs...
偏向锁_轻量级锁_重量级锁
高并发场景(EntrySet、偏向锁、轻量级锁、重量级锁)考虑大量线程竞争一个用户实现的synchronized 块,如图: 在高并发场景,竞争非常激烈。而作为语言的设计者,不能假设synchronized 的块可以迅速完成。图中很多线程竞争一个同步块,按照之前的设计,这个时候这些线程会优先考虑自旋锁。因为同步块需要10ms ,因此多数线程拿不到自旋锁。考虑到CPU执行速度非常快,每10ms 才有一个线程拿到锁。而1ms 可以执行数以10万-百万计的CAS操作。因此这样是非常不划算的: 自旋锁消耗大量计算能力(CPU资源) 大量线程进入WaitSet 这时JVM的解决方案是增加一个EntrySet。如图: 图中线程先用自旋锁竞争进入EntrySet,竞争进入EntrySet只需要少量的cas操作。 如果像图中那样用链表实现EntrySet,新线程进入EntrySet只需要两条指令,第一步创建一个节点,指向EntrySet的第一个元素。第二步,用cas操作将EntrySet的尾部指向新的节点。...
数据库架构
数据库架构如何设计一个数据库? 从如下模块出发: 为什么要使用索引?对于数据量大的表而言,查询某一条如果进行全表扫描无疑非常慢,所以需要使用索引。 通过关键信息快速定位 什么样的信息能成为索引主键、唯一键、普通键等 索引的数据结构 建立二叉树进行二分查找 建立B-Tree结构进行查找 建立B+-Tree结构进行查找 建立Hash结构进行查找 MySQL使用B+-Tree进行索引
稀疏-密集索引与搜索引擎
...
慢查询sql
如何定位并优化慢SQL查询1. 根据慢日志定位慢查询sql使用SQL命令查询慢日志设置1SHOW VARIABLES LIKE '%QUERY%'; 最后两个变量slow_query_log和slow_query_log_file即和慢日志有关,第一个变量控制是否开启慢日志,第二个变量定义慢日志存储位置。 超过long_query_time时间等查询会被记录在慢日志中。 开启慢查询命令打开慢查询: 1SET GLOBAL slow_query_log = ON; 设置慢查询时间: 1SET GLOBAL long_query_time = 1; 直接使用命令设置数据库重启后会还原,想要永久需要到my.cnf配置文件中去设置。 使用sql命令查询慢日志状态1SHOW STATUS like '%slow_queries%'; Slow_queries显示慢查询记录条数。 2. 使用explain等工具分析sql在命令前加explian即可分析 例如: 1EXPLAIN SELECT `name` FROM...
事务
事务事务四大特性 原子性 一致性 隔离性 持久性 事务隔离级别查询隔离级别: 1select @@tx_isolation 设置当前session的隔离级别为 读未提交 1set session transaction isolation level read uncommitted...
关键语法
关键语法GROUP BY根据给定数据列的每个成员对查询结果分组统计,最终得到分组汇总表 满足 : select子句中对列名必须为分组列或者列函数 列函数对于group by子句定义的每个组返回一个结果 案例:表结构: 一张表: 1234-- 查询所有同学的学号、选课数、总成绩select tudent_id,count(course_id),sum(score)from scoregroup by tudent_id 多张表: 12345678-- 查询所有同学的学号、姓名、选课数、总成绩select s.tudent_id,stu.student_name,count(s.course_id),sum(s.score)from score s student stuwhere s.student_id = stu.student_idgroup by s.tudent_id HAVING 通常与GROUP BY子句一起使用 WHERE过滤行,HAVING过滤组 出现在同一sql中的顺序:WHERE->GROUP...
OSI七层网络协议模型
OSI七层网络协议模型 第一层 物理层解决两台物理机之间的交互问题,传递比特流。 主要定义了物理设备的标准 如 网线的类型、光纤的接口类型、各种传输介质的传输速率等。 将比特流转化为电流强弱进行传输,到达目的后再转化为数据流。 第二层 数据链路层第一层有错传、数据传输不完整等可能,数据链路层定义了如何格式化数据以进行传输,以及控制如何对物理介质进行访问,通常还提供错误检测和纠错,以确保数据传输的可靠性。 本层将比特数据组成了帧,交换机工作在这一层,对帧解码同时转发到对应方。 第三层 网络层将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接送方,网络层通过综合考虑发送优先权,网络拥塞程度,服务质量以及可选路由的花费来决定传输的最佳路径。 路由器工作在此层,此层数据称为数据包,主要关注IP协议。 第四层...
TCPIP四层协议模型
TCP/IP四层协议模型