上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: ACK是为了告诉客户端传来的数据已经接收无误。 传回SYN是为了告诉客户端,服务端响应的是客户端发送的报文 阅读全文
posted @ 2025-06-03 13:50 kuki' 阅读(13) 评论(0) 推荐(0)
摘要: 第一次握手服务端未收到SYN报文 服务端不会进行任何的动作, 而客户端由于一段时间内没有收到服务端发来的确认报文 等待一段时间后会重新发送SYN报文, 如果仍然没有回应,会重复这个过程,直到发送次数超过最大重传次数限制 就会 返回连接建立失败。 第二次握手:客户端未收到服务端响应的SYN+ACK报文 阅读全文
posted @ 2025-06-03 13:33 kuki' 阅读(43) 评论(0) 推荐(0)
摘要: (没用)三次握手可建立一个可靠的连接,目的是 确保双方都知道对方已准备好通信, 并同步双方的序列号,从而保证数据包的顺序性和完整性。 为什么TCP握手不能是两次? 防止服务器一直等 防止客户端已经失效的连接请求又传送到了服务器。 第一种情况:举例:网络传输是有延时的 假如 客户端发起了SYN的第一次 阅读全文
posted @ 2025-06-03 12:51 kuki' 阅读(30) 评论(0) 推荐(0)
摘要: SYN是TCP协议中用来建立连接的标志位,(Synchronize Sequence Numbers)同步序列编号。 SYN不仅确保了序列号的同步,使得后续的数据能有序传输, 还防止旧的报文段被误认为是新连接。 阅读全文
posted @ 2025-06-03 10:54 kuki' 阅读(73) 评论(0) 推荐(0)
摘要: 简介:TCP(传输控制协议)的三次握手机制是一种用于 在两个TCP主机之间 建立一个可靠连接的过程。 这个机制确保了两端的通信是同步的, 并且在数据传输开始前,双方都准备好了进行通信 双方一开始都是Close, 第一次握手(之后客户端进入SYS_SENT, 服务器进入listen) (介绍)客户端发 阅读全文
posted @ 2025-06-02 18:38 kuki' 阅读(15) 评论(0) 推荐(0)
摘要: UDP在传输数据之前不需要先建立连接,在接收到UDP报文后,不需要确认,提供不可靠交付。 总结就是以下4点。 不保证消息交付:不确认,不重传,无超时 不保证交付顺序:不设置 包 序号,不重排,不会发生队首阻塞。 不跟踪连接状态:不必建立连接或重启状态机 不进行拥塞控制:不内置客户端或网络反馈机制 阅读全文
posted @ 2025-06-02 18:10 kuki' 阅读(63) 评论(0) 推荐(0)
摘要: 反射允许Java在运行时检查和操作 类的方法和字段。 通过反射,可以动态地获取类的字段、方法、构造方法等信息, 并在运行时调用方法或访问字段。 比如创建一个对象是通过new关键字来实现的: Person person = new Person(); Person类的信息在编译时就确定了, 那假如在编 阅读全文
posted @ 2025-05-31 17:22 kuki' 阅读(24) 评论(0) 推荐(0)
摘要: TCP是面向连接的,而UDP是无连接的 类型 TCP UDP 是否面向连接 是 否 传输可靠性 可靠 不可靠 传输形式 字节流 数据段报文 传输效率 慢 快 所需资源 多 少 应用场景 文件传输、邮件传输 即时通讯,域名转换 首部字节 20-60 8个字节 在数据传输开始之前,TCP需要先建立连接, 阅读全文
posted @ 2025-05-31 16:36 kuki' 阅读(16) 评论(0) 推荐(0)
摘要: IP协议(Internet Protocol) 用于在计算机网络之间传输数据包 它定义了数据包的格式和处理规则,确保数据能从一个设备传输到另一个设备,可能跨越多个中间网络设备(如路由器)。 IP协议有哪些作用 寻址 每个连接到网络的设备都有一个唯一的IP地址。 IP协议使用这些地址来标识数据包的源地 阅读全文
posted @ 2025-05-31 16:20 kuki' 阅读(70) 评论(0) 推荐(0)
摘要: 幻读是指在同一个事务中,多次执行相同的 范围查询 ,结果却不同。 这种现象通常发生在其他事务在两次查询之间插入或删除了符合当前查询条件的数据。 如何避免幻读? MySQL在可重复读隔离级别下,通过MVCC和临键锁可以在一定程度上避免幻读。 比如说在查询时显示加锁,利用临键锁锁定查询范围,防止其他事务 阅读全文
posted @ 2025-05-31 15:52 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: 隔离级别定义了一个事务可能受其他事务影响的程度,MySQL支持四种隔离级别,分别是读未提交、读已提交、可重复读和串行化。 读未提交会出现脏读 读已提交会出现不可重复读。 可重复读是InnoDB默认的隔离级别,可以避免脏读和不可重复读,但会出现幻读。 通过MVCC和临键锁,能够防止大多数并发问题 串行 阅读全文
posted @ 2025-05-31 15:37 kuki' 阅读(22) 评论(0) 推荐(0)
摘要: 原子性 ACID中的原子性主要通过Undo Log来实现 持久性 持久性通过Redo Log来实现 隔离性 隔离性由MVCC和锁机制来实现 一致性 一致性由其他三大特性共同保证 详细说说如何保证原子性 事务对数据进行修改前,会记录一份快照到Undo Log 如果事务中有任何一步执行失败,系统会读取U 阅读全文
posted @ 2025-05-31 14:50 kuki' 阅读(26) 评论(0) 推荐(0)
摘要: 事务是一条或多条SQL语句组成的执行单元。 四个特性分别是原子性、一致性、隔离性和持久性。 原子性 原子性保证事务中的操作要么全部执行、要么全部失败 一致性 一致性保证数据从事务开始前的一个一致状态转移到结束后的另外一个一致状态。 隔离性 隔离性保证并发事务之间互不干扰。 持久性 持久性保证事务提交 阅读全文
posted @ 2025-05-31 11:54 kuki' 阅读(16) 评论(0) 推荐(0)
摘要: Spring默认为单例模式的原因是 资源节约 单例模式可以避免重复创建对象,节省了系统资源。 单例的Bean对象保存在容器中,可以被多个线程共享,而不需要每次都创建新的实例。 提升性能 由于Bean实例可复用,减少了对象创建和垃圾回收的频率,提高了系统的整体性能。 统一管理生命周期 Spring容器 阅读全文
posted @ 2025-05-31 11:41 kuki' 阅读(38) 评论(0) 推荐(0)
摘要: TCP连接的断开过程-被概括为四次挥手。 双方一开始都是Established状态 第一次挥手:(客户端进入Fin_wait_1状态) 客户端向服务器发送一个FIN 结束报文,(表示客户端没有数据要发送了,但仍然可以接收数据,) FIN=1 序列号seq = u 第二次挥手:(服务端发完进入clos 阅读全文
posted @ 2025-05-27 19:41 kuki' 阅读(32) 评论(0) 推荐(0)
摘要: 索引下推指,MySQL把where条件尽可能下推到索引扫描阶段,在存储引擎层提前过滤掉不符合条件的记录。 当查询条件包含索引列但未完成匹配时,ICP会在存储引擎层过滤非索引列条件,以减少回表次数。 在有索引下推时: 数据库 在索引本身 就判断一部分 WHERE 条件; 只有满足条件的行才“回表”,大 阅读全文
posted @ 2025-05-27 17:44 kuki' 阅读(23) 评论(0) 推荐(0)
摘要: 最左前缀原则指的是:MySQL使用联合索引时,必须从最左边的字段开始匹配,才能命中索引。 范围查询后的列还能用索引吗? 范围查询只能应用于最左前缀的最后一列。范围查询之后的列无法使用索引。 select * from table where a = 1 and b > 2 and c = 3; -- 阅读全文
posted @ 2025-05-27 17:30 kuki' 阅读(54) 评论(0) 推荐(0)
摘要: 覆盖索引指的是:查询所需的字段全部在索引中,不需要回表,从索引页就能直接返回结果。 可以将高频查询的字段(如where条件和select列)组合为联合索引,实现覆盖索引。 阅读全文
posted @ 2025-05-27 17:09 kuki' 阅读(8) 评论(0) 推荐(0)
摘要: 联合索引就是把多个字段放在一个索引里,遵守“最左前缀”原则,只有从第一个字段开始连接使用,索引才会生效。 联合索引按字段顺序构建B+树。例如(age,name) 索引会优先按照age排序,age相同则按照name排序,若两者都相同则按主键排序,确保叶子节点无重复索引项。 创建(A,B,C) 联合索引 阅读全文
posted @ 2025-05-27 16:56 kuki' 阅读(34) 评论(0) 推荐(0)
摘要: 当使用非聚簇索引进行查询时,MySQL需要先通过非聚簇索引找到主键值, 然后再根据主键值回到聚簇索引中查找完整数据行,这个过程称为回表。 回表的代价是什么? 回表通常需要访问额外的数据页,如果数据不在内存中,还需要从磁盘读取,增加I/O开销。 可通过覆盖索引或联合索引来避免回表。 什么情况下会触发回 阅读全文
posted @ 2025-05-27 16:28 kuki' 阅读(27) 评论(0) 推荐(0)
摘要: 聚簇索引 聚簇索引的叶子节点存储了完整的数据行,数据和索引是在一起的。 InnoDB的主键索引就是聚簇索引,叶子节点不仅存储了主键值,还存储了其他列的值。因此按照主键进行查询的速度会非常快。 每个表只能有一个聚簇索引,通常由主键定义。如果没有显式指定主键,InnoDB会隐式创建一个隐藏的主键索引ro 阅读全文
posted @ 2025-05-27 16:00 kuki' 阅读(25) 评论(0) 推荐(0)
摘要: B+树索引支持范围查询、有序扫描,是InnoDB的默认索引结构。 Hash索引只支持等值查找,速度快但功能弱,常见于Memory引擎。 阅读全文
posted @ 2025-05-27 15:21 kuki' 阅读(15) 评论(0) 推荐(0)
摘要: B+树相比B树有3个显著优势: B树的每个节点既存储键值,又存储数据和指针,导致单节点存储的键值数量较少。 B树的范围查询需要通过中序遍历逐层回溯; 而B+树的叶子节点通过双向链表顺序连接,范围查询只需要定位起始点后顺序遍历链表即可,没有回溯开销。 B树的数据可能存储在任意节点 假如目标数据恰好位于 阅读全文
posted @ 2025-05-27 15:15 kuki' 阅读(17) 评论(0) 推荐(0)
摘要: 一棵B+树能存多少数据,取决于分支因子和高度。 在InnoDB中,页的默认大小为16KB,当主键为bigInt时,3层B+树通常可以存储约2000万条数据。 阅读全文
posted @ 2025-05-27 14:56 kuki' 阅读(15) 评论(0) 推荐(0)
摘要: 因为B+树是一种高度平衡的多路查找树,能有效降低磁盘的IO次数,并且支持有序遍历和范围查询。 查询性能非常高,其结构也适合MySQL按照页为单位在磁盘上查询。 像其他选项,比如说哈希表不支持范围查询,二叉树层级太深,B树不方便范围扫描,最终选择了B+树。 再换一种回答: 相比哈希表:B+树支持范围查 阅读全文
posted @ 2025-05-27 14:49 kuki' 阅读(13) 评论(0) 推荐(0)
摘要: 简版:比如索引列使用了函数,使用了通配符开头的模糊查询,联合索引不满足最左前缀原则,或者使用or的时候部分字段无索引 对索引列使用函数或表达式 like模糊查询以通配符开头会导致索引失效 联合索引违反了最左前缀原则,索引会失效 阅读全文
posted @ 2025-05-27 14:30 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: 选择合适的字段 频繁出现在where,join,order by, group by中的字段。 优先选择区分度高的字段,比如用户id,手机号等唯一值多的,而不是性别、状态等区分度极低的字段(实在需要, 考虑联合索引) 控制索引的数量,避免过度索引 每个索引都要占用存储空间,单表的索引数量不建议超过5 阅读全文
posted @ 2025-05-27 13:16 kuki' 阅读(42) 评论(0) 推荐(0)
摘要: 全文索引是MySQL一种优化文本数据检索的特殊类型索引,适用于char,varchar和text等字段。 建表时通过 fulltext(title,body)来定义。通过 MATCH(col1, col2) AGAINST('keyword') 进行检索 默认按照降序返回结果,支持布尔模式查询。 底 阅读全文
posted @ 2025-05-27 12:55 kuki' 阅读(23) 评论(0) 推荐(0)
摘要: 普通索引仅用于加速查询,不限制字段值的唯一性。适用于高频写入的字段,范围查询的字段。 唯一索引强制字段值的唯一性, 插入或更新时会触发唯一性检查; 适用于业务唯一性约束的字段、防止数据重复插入的字段 阅读全文
posted @ 2025-05-27 12:45 kuki' 阅读(10) 评论(0) 推荐(0)
摘要: 主键索引=唯一索引+非空。 每个表只能有一个主键索引,但可以有多个唯一索引。 主键索引不允许插入Null值,尝试插入NULL会报错, 唯一索引允许插入多个NULL值。 阅读全文
posted @ 2025-05-27 12:00 kuki' 阅读(11) 评论(0) 推荐(0)
摘要: 主键索引用于唯一标识表中的每条记录,其列值必须唯一且非空。 创建主键时,MySQL会自动生成对应的唯一索引。 每个表只能有一个主键索引,一般是表中的自增id字段。 阅读全文
posted @ 2025-05-27 11:58 kuki' 阅读(13) 评论(0) 推荐(0)
摘要: 从功能上分类的话有 主键索引 唯一索引 全文索引 从数据结构上分类的话 B+树索引 哈希索引 从存储内容上分类的话 聚簇索引 非聚簇索引 阅读全文
posted @ 2025-05-23 23:11 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: 索引就像一本书的目录,能让MySQL快速定位数据,避免全表扫描。 一般是B+树 结构,查找效率是O(log n),比从头到尾扫一遍数据要快得多 除了查的快,索引还能加速排序,分组,连接等操作。 可以通过create index创建索引,比如: create index idx_name on stu 阅读全文
posted @ 2025-05-23 23:04 kuki' 阅读(14) 评论(0) 推荐(0)
摘要: 从高而低的效率排序是sytem,const,eq_ref, range, index和ALL。 一般情况下,建议type值达到const,eq_ref 或ref,因为这些类型表明查询使用了索引,效率较高。 如果是范围查询,range类型也是可以接受的。 ALL类型表示全表扫描,性能最差,不可接受。 阅读全文
posted @ 2025-05-23 22:56 kuki' 阅读(22) 评论(0) 推荐(0)
摘要: explain是MySQL提供的一个用于查看SQL执行计划的工具,可以帮助我们分析查询语句的性能问题。 explain一共有10来个输出参数 id select_type table type possible_keys keys ken_len ref rows extra 比如说type=ALL 阅读全文
posted @ 2025-05-23 21:53 kuki' 阅读(11) 评论(0) 推荐(0)
摘要: 联合索引最重要一条是遵守最左前缀原则,就是查询条件需要从索引的最左侧字段开始。 阅读全文
posted @ 2025-05-23 21:26 kuki' 阅读(12) 评论(0) 推荐(0)
摘要: 引发原因 上传文件过大,没有正确处理,导致一下子撑爆了内存,程序直接崩溃了。 导出堆转储文件进行分析 第一步,使用jmap命令手动生成Heap Dump文件: jmap -dump:format=b,file=heap.hprof <pid> 第二步,使用MAT、Jprofiler等工具分析,查看内 阅读全文
posted @ 2025-05-23 21:10 kuki' 阅读(13) 评论(0) 推荐(0)
摘要: 覆盖索引的核心是 查询所需的字段都在同一个索引里。 这样MySQL就不需要回表,直接从索引中返回结果。 实际使用中,优先考虑把where和select涉及的字段一起建联合索引。 通过explain观察结果是否有using index,确认命中索引。 阅读全文
posted @ 2025-05-23 15:16 kuki' 阅读(11) 评论(0) 推荐(0)
摘要: 总述 尽可能少地扫描、尽快的返回结果。 常见做法,加索引,比如说使用覆盖索引、让联合索引遵守最左前缀原则等。 阅读全文
posted @ 2025-05-23 11:39 kuki' 阅读(8) 评论(0) 推荐(0)
摘要: 编辑MySQL的配置文件 my.cnf, 设置slow_quey_log参数为1. 然后重启MySQL就行。 或者通过set global命令动态设置 set global slow_query_log = 'ON'; set global slow_query_log_file = '/var/l 阅读全文
posted @ 2025-05-23 11:24 kuki' 阅读(11) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 ··· 9 下一页