JavaSocket 网络编程之 UDP UDP 协议是一种面向无连接的传输层协议,其为应用程序提供了一种无需建立连接就可以发送封装的IP 数据报的方法,即面向无连接。UDP协议会把数据打包发送给目标地址,这个数据包能不能发送给目标地址就不管了。UDP的主要特点是传输效率高,对实时性要求较高的数据传输场合比较适用。
RocketMQ 顺序消息和事务消息及其原理 使用消息中间件时,首先要了解各类型mq消息中间件的优势和劣势,根据自己项目的实际情况,结合各消息中间件特性,取长避短。本篇博文讲解了RocketMQ 的两大重要特性:顺序消息、事务消息。
MySQL 之多版本并发控制 MVCC 在每一次进行普通 select 操作前,都会生成一个 ReadView只在第一次进行普通 select 操作前生成一个 ReadView,之后的查询操作都重复使用这个 ReadView 就好了。MVCC(多版本并发控制)解决的问题① 读写之间阻塞的问题。通过 MVCC 可以让读写相互不阻塞,即读不阻塞写,写不阻塞读,可以提升事务并发处理能力。② 降低了死锁的概率。因为 MVCC 采用了乐观锁的方式,读取数据时并不需要加锁,对于写操作,也只锁定必要的行。③ 解决快照读的问题。
多维度梳理 MySQL 锁 在数据库中,除传统的计算资源(如 CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库非常重要,且复杂。并发事务访问同一记录的情况,大致分为:读-读、写-写、读-写。
并发事务下,不同隔离级别可能出现的问题 对于MySQL而言,幻读是事务在插入事先检测不存在的记录时,发现这条数据已经存在了,无法支撑后续的插入操作。举例:对于两个事务A、B,事务A读取了一个字段,然后事务B 更新了该字段,之后事务A再次读取同一个字段,值就不同了,这种情况就是不可重复读。,事务A 在读到一条数据后,此时事务B对该数据进行修改并提交,那么事务A再读该数据,读到的还是原来的内容。,在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。以下示例,事务A已经提交成功,但是事务B回滚了,最终 no=1 的数据没有任何变化。
理解MySQL的日志 redo、undo、binlog 在 InnoDB 中,事务中的 delete 操作实际上并不是真正的删除掉数据行,而是一种 Delete Mark 操作,在记录上标识 Delete_Bit,而不删除记录,真正的删除是后台 purge线程去完成。比如,一个事务在修改当前一个页中某几条记录,同时还有其他事务在对同一个页中另几条记录进行修改,所以为保证不影响其他事务正在进行的工作,不能将一个页回滚到事务开始的样子。在执行事务的过程中,每执行一条语句,可能会产生多条redo日志,且这些redo日志是按照产生的顺序写入磁盘的,也就是。
MySQL 优化思路篇 show profile 是MySQL 提供用来分析当前会话中的SQL做了什么、执行的资源消耗情况的工具,用于SQL调优优化。参数定义【慢】的阈值,帮助我们定位执行慢的SQL语句,收集慢查询语句,再通过分析工具对慢查询日志进行分析。如果再 show profile 诊断结果中出现了以上四种结果中的一条,则SQL语句需要优化。由于开启慢查询日志,会或多或少带来一定的性能影响,周期性的波动,可能是双十一,促销活动等,可以通过。值的 SQL,会被记录到慢查询日志中。,并保存最近15次的运行结果。
从 Hash索引、二叉树、B-Tree 与 B+Tree 对比看索引结构选择 数据结构可以说是程序员常用,但大部分人不知其所以然的知识点,本文将对Hash、二叉搜索树、平衡二叉树、B-Tree、B+Tree几种数据做一下梳理和总结。
从InnoDB索引的数据结构,去理解索引 该篇我们都是基于 InnoDB 存储引擎的大前提下讨论的,如文中未明确指出存储引擎,一律说的是 InnoDB.要知道. 按照物理实现方式,可以将索引划分为聚簇索引和非聚簇索引(也称为二级索引辅助索引。
自定义 spring-boot-starter 暴露钩子 / MyService类的监听类,用来实现监听者模式这里监听 ContextRefreshedEvent 节点,在服务启动的 ContextRefreshedEvent 节点,将所有 实现 MyServiceListener 接口的实现类,加到 MyServiceImpl 业务实现类。import com。
关于 Nginx 的哪些事 权重轮询(Weighted Round Robin):在轮询策略的基础上,指定每个后端服务器的轮询几率,权重值越高的服务器被选择的可能性就越大。基于URL的限流方式,适用于限制某些频繁访问的URL,或者限制对某些重要接口的请求频率,以保护服务器资源或者控制某些URL的使用。通过动静分离,可以将动态请求交给专门的动态服务器处理,而静态请求则可以由更高效的静态服务器处理,从而提高整体的处理性能和响应速度。基于URL的限流,可以有效地控制每个URL的请求频率和请求数,有助于保护服务器的性能和防止滥用。
Linux 之 shell 脚本 定义变量: 变量=值,示例:A=100# 撤销变量: unset 变量, 示例:unset A# 声明静态变量:readonly 变量。注意:静态变量不能 unset。示例:# 把变量提升为全局环境变量,可供其他shell程序使用。定义变量的规则① 变量名称可以由字母、数字和下划线组成,但不能以数字开头。等号两侧不能有空格。变量名称一般习惯为大写。预定义变量,就是 shell 脚本设计者事先已经定义好的变量,可以直接在shell脚本中使用。
复习 Linux 常用命令 2 top 指令是常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的接口,帮助我们去查看系统执行时的进程、线程和系统参数的信息。当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推。当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推。当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推。
Redis系列 2- Redis 的持久化 RDB 文件用于保存和还原 Redis 服务器中,所有的键值对数据。save命令由服务器进程直接执行保存操作,所以该命令 会阻塞服务器。bgsave命令 由子进程执行保存操作,所以该命令 不会阻塞服务器。服务器状态中会保存所有用 save 选项设置的保存条件,当任意一个保存条件被满足时,服务器会自动执行 bgsave 命令。RDB 文件是一个经过压缩的二进制文件,由多个部分组成。对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。
Docker-基础命令 我们把应用程序和配置依赖,打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出。2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出。
线程系列 7 - JUC高并发容器类 JUC高并发容器是基于非阻塞算法(或者无锁编程算法)实现的容器类,无锁编程算法主要通过 CAS(保障操作的原子性) + Volatile(保障变量内存的可见性)组合实现。① 开销较小:不需要在内核态和用户态之间切换进程。② 读写不互斥:只有写操作需要使用基于CAS机制的乐观锁,读读操作之间可以不用互斥。JUC包中提供了List、Set、Queue、Map各种类型的高并发容器。ListJUC包中的高并发List主要有CopyOnWriteArrayList,对应的基础容器为ArrayList。
线程系列 4 - synchronized 和线程间的通信 线程系列 4 - synchronized 和线程间的通信1、关于内置锁 和 synchronized1.1、三种内置锁对比1.2、关于 synchronized1.2.1、synchronized 的使用1.2.1、synchronized 的执行过程2、线程间的通信2.1、对象的 wait() 方法2.2、对象的 notify() 方法2.3、线程通信的要点2.4、线程通信示例3、synchronized 八锁现象3.1、Lock13.2、Lock23.3、Lock33.4、Lock43.5、Lock5