Java线程池
...
数据库架构
数据库架构如何设计一个数据库? 从如下模块出发: 为什么要使用索引?对于数据量大的表而言,查询某一条如果进行全表扫描无疑非常慢,所以需要使用索引。 通过关键信息快速定位 什么样的信息能成为索引主键、唯一键、普通键等 索引的数据结构 建立二叉树进行二分查找 建立B-Tree结构进行查找 建立B+-Tree结构进行查找 建立Hash结构进行查找 MySQL使用B+-Tree进行索引
稀疏-密集索引与搜索引擎
...
偏向锁_轻量级锁_重量级锁
高并发场景(EntrySet、偏向锁、轻量级锁、重量级锁)考虑大量线程竞争一个用户实现的synchronized 块,如图: 在高并发场景,竞争非常激烈。而作为语言的设计者,不能假设synchronized 的块可以迅速完成。图中很多线程竞争一个同步块,按照之前的设计,这个时候这些线程会优先考虑自旋锁。因为同步块需要10ms ,因此多数线程拿不到自旋锁。考虑到CPU执行速度非常快,每10ms 才有一个线程拿到锁。而1ms 可以执行数以10万-百万计的CAS操作。因此这样是非常不划算的: 自旋锁消耗大量计算能力(CPU资源) 大量线程进入WaitSet 这时JVM的解决方案是增加一个EntrySet。如图: 图中线程先用自旋锁竞争进入EntrySet,竞争进入EntrySet只需要少量的cas操作。 如果像图中那样用链表实现EntrySet,新线程进入EntrySet只需要两条指令,第一步创建一个节点,指向EntrySet的第一个元素。第二步,用cas操作将EntrySet的尾部指向新的节点。...
慢查询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四层协议模型
TCP协议
TCP协议IP数据包不可靠,需要又他的上层协议即TCP协议进行控制传输控制协议——TCP 面向连接的,可靠的,基于字节流的传输层通信协议。 将应用层的数据流分割成报文段并发送给目标节点TCP层 数据包都有序号,对方收到则发送ACK确认,在规定时间内(RTT确认)未收到则重传 使用校验和来检验数据在传输过程中是否有误 TCP报头 TCP三次握手 为什么需要三次握手才能建立连接?为了初始化Sequence Number的初始值 首次握手隐患——SYN超时Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认 Server不断重试直至超时,Linux默认重试五次,从一秒开始每次等待时间翻倍,等待63秒(1+2+4+8+16+32)才断开连接。 风险可能会遭到SYN Flood攻击,不停发握手请求,Linux的保护措施是SYN队列满了后,通过tcp_syncokies参数回发SYN Cookie, 如果正常链接Client会回发SYN...