文章 62
浏览 15135
一条SQL在MySQL中是如何执行的

一条SQL在MySQL中是如何执行的

MySQL的内部组件结构 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 连接器 我们知道由于MySQL是开源的,他有非常多种类的客户端:navicat,mysql front,jdbc,SQLyog等非常丰富的客户端,这些客户端要向mysql发起通信都必须先跟Server端建立通信连接,而建立连接的工作就是有连接器完成的。 第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的: [root@192 ~]# mysql -h host[数据库地址] -u root[用户] -p root[密码] -P 3306 连接命令中的 mysql 是客户端工具,用来跟服务端建立连接。在完成经典的 TCP 握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的.....

领域驱动开发相关规范经验

领域驱动开发相关规范经验

领域驱动开发相关规范 1. 包命名规范 controller包:用户界面层 service包:承接来自用户界面层的请求,属于应用服务层;服务类以 AppService为后缀 task包:定时任务相关的包,属于应用服务层,即定时任务的业务逻辑依旧交割各领域完成。 security包:安全相关的包,属于应用服务层。 aop包:完成某个应用逻辑的AOP,属于应用服务层。 dto包:按领域放,如果是涉及多个领域,则可直接放在根目录 <领域名> domain包:领域层 <领域名>: service:领域服务类,大部分以Service为后缀,少部分可以更贴切其业务逻辑/职责来命名,如manager、scheduler、balancer、validator impl:如果sevice只有一两个就不要分impl包了 entity:实体包 vo包:valueObject类 common包:领域的常量类、工具类;如果常量类、工具类仅在领域内使用,或者只受这个领域管理,则可以放在领域在。 dto包:用于domain层可接收的数据传输类,也可直接使用controller传输进来的.......

协同过滤算法

协同过滤算法

协同过滤算法 协同过滤算法是一种基于用户或者物品的相似度来推荐相关商品的方法,它可以有效地解决商城系统中的信息过载问题。协同过滤算法的实践主要包括以下几个步骤: 数据收集和预处理。这一步需要从商城系统中获取用户的行为数据,如浏览、购买、评价等,然后进行一些必要的清洗和转换,以便后续的分析和计算。 相似度计算。这一步需要根据用户或者物品的特征或者行为,采用合适的相似度度量方法,如余弦相似度、皮尔逊相关系数、Jaccard指数等,来计算用户之间或者物品之间的相似度矩阵。 推荐生成。这一步需要根据相似度矩阵和用户的历史行为,采用合适的推荐策略,如基于邻域的方法、基于模型的方法、基于矩阵分解的方法等,来生成针对每个用户的个性化推荐列表。 推荐评估和优化。这一步需要根据一些评价指标,如准确率、召回率、覆盖率、多样性等,来评估推荐系统的效果,并根据反馈信息和业务需求,进行一些参数调整和算法优化,以提高推荐系统的性能和用户满意度。 余弦相似度算法 余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。 余弦相....

hashMap的扩容原理

hashMap的扩容原理

HashMap的扩容机制 hashMap扩容: 扩容就是重新计算容量,向hashMap不停的添加元素,当hashMap无法装载新的元素,对象将需要扩大数组容量,以便装入更多的元素。 haspMap扩容跟数据迁移具有很大的关联,我们先用图解的方式来说明数据迁移. 进行扩容前先介绍一些hahMap源码的变量 Node<K,V> loHead = null, loTail = null; //低位链表的头尾结点 Node<K,V> hiHead = null, hiTail = null; //高位链表的头尾结点 Node<K,V> next; //next指针 指向下一个元素 迁移前: 这里将其设置为长度为 8,扩容临界点 8 * 0.75 = 6 主要是为了画图 (hashMap默认容量是16) 以下讲解都是基于数组容量为 8 讲解的,流程都是一样的. 从图可知,发生了扩容并且是2的次方,并且 A,B,C两元素新的位置刚好是原数组位置的索引位置,D,E,F刚好在原数组位置索引 + 8 即原数组位置索引+数组容量。是不是真的是这样呢??,这时需要看源....

G1&ZGC垃圾收集器介绍

G1&ZGC垃圾收集器介绍

G1收集器(-XX:+UseG1GC) G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征. G1将Java堆划分为多个大小相等的独立区域( Region ),JVM目标是不超过 2048 个Region(JVM源码里TARGET_REGION_NUMBER 定义),实际可#### 以超过该值,但是不推荐。 一般Region大小等于堆大小除以2048,比如堆大小为4096M,则Region大小为2M,当然也可以用参数"-XX:G1HeapRegionSize"手动指定Region大 小,但是推荐默认的计算方式。 G1保留了年轻代和老年代的概念,但不再是物理隔阂了,它们都是(可以不连续)Region的集合。 默认年轻代对堆内存的占比是5%,如果堆大小为4096M,那么年轻代占据200MB左右的内存,对应大概是100个Region,可以通过“- XX:G1NewSizePercent”设置新生代初始占比,在系统运行中,JVM会不停的给年轻代增加更多的Region,但是最多....

JVM调优工具详解及调优实战

JVM调优工具详解及调优实战

前置启动程序 事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用 Jmap 此命令可以用来查看内存信息,实例个数以及占用内存大小 jmap -histo 14660 #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实例,执行过程中可能会触发一次full gc 打开log.txt,文件内容如下: num:序号 instances:实例数量 bytes:占用空间大小 class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][] 堆内存dump 1 jmap -dump:format=b,file=eureka.hprof 14660 也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来) 1. -XX:+HeapDumpOnOutOfMemoryError 2. -XX:HeapDumpPath=./ (路径) 示例代码: public class OOMTest { publ......

DataX 预研

DataX 预研

DataX 预研 预研背景 DataX是一个异构数据源离线同步工具。 现场使用 ADMA 调度 DataX 来进行数据同步,计划用 D-Dolphin 替代 ADMA,因此 D-Dolphin 也需要支持 DataX。 我们已经给D-Dolphin开发了Synchronous任务,与DataX相比,Synchronous任务支持的数据源类型比较少。 D-Dolphin原生已经支持DataX任务了,不过还比较简陋,因此需要对这个任务进行改进。 DataX 介绍 DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高效的数据同步功能。 项目地址:https://github.com/alibaba/DataX 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。如下图所示....

AQS

AQS

队列同步器 AQS 从 AQS 的类名称和修饰上来看,这是⼀个抽象类,所以从设计模式的⻆度来看同步器⼀定是基于【模版模式】来 设计的,使⽤者需要继承同步器,实现⾃定义同步器,并重写指定⽅法,随后将同步器组合在⾃定义的同步组件 中,并调⽤同步器的模版⽅法,⽽这些模版⽅法⼜回调⽤使⽤者重写的⽅法 我不想将上⾯的解释说的这么抽象,其实想理解上⾯这句话,我们只需要知道下⾯两个问题就好了 哪些是⾃定义同步器可重写的⽅法? 哪些是抽象同步器提供的模版⽅法? 同步器可重写的⽅法 同步器提供的可重写⽅法只有5个,这⼤⼤⽅便了锁的使⽤者: 表格⽅法描述中所说的 同步状态 就是上⽂提到的有 volatile 修饰的 state,所以我们在 重写 上⾯⼏个⽅法时,还 要通过同步器提供的下⾯三个⽅法(AQS 提供的)来获取或修改同步状态: ⽽独占式和共享式操作 state 变量的区别也就很简单了 同步器提供的模版⽅法 总结 AQS实现分析 有阻塞就需要排队,实现排队必然需要队列 CLH:Craig、Landin and Hagersten 队列,是⼀个单向链表,AQS中的队列是CLH变体的虚拟双向队列 队列中....

人民有信仰 民族有希望 国家有力量