动态
开发
什么是JUC
JUC 简介JUC 就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。 进程与线程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 ...
开发
Golang的环境搭建与第一个程序
下载Golang 下载:下载地址 配置环境变量 GOROOT: GO 的安装根路径,当安装好 golang 之后默认就给配置好了,默认应该是在C:\Program Files\Go。可以将 GOROOT 理解为 JAVA_HOME。 GOPATH:项目的工作路径,从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录: $HOME/go,但如果需要,可以为所有项目设置其他位置。 Path:添加 GO 的/bin 路径,%GOROOT%\bin 目录结构一个 Go 语言项目的工作目录一般包含以下三个子目录: src 目录:放置项目和库的源文件 pkg 目 ...
开发
垃圾回收算法与垃圾回收器
垃圾回收算法1、可达性分析 从GC Roots的对象作为起始点,从这些节点出发所走过的路径称为引用链。 当一个对象到 GC Roots 没有任何引用链相连的时候说明对象不可用,很显然 object5 相关的引用已经没用了。 从根节点出发看能不能到某个节点,如果不能达到的话说明对象不可用,看图可知 object5、object6、object7 都不可用。 2、引用计数算法 如果不小心直接把 Obj1-reference 和 Obj2-reference 设置为 null。 则在 Java 堆当中的两块内存依然保持着互相引用无法回收。无法解决循环引用的情况 3、标记清除算法原理 当堆中的有效内 ...
开发
理解JVM
JVM 简介JVM 是Java Virtual Machine(Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入 Java 语言虚拟机后,Java 语言在不同平台上运行时不需要重新编译。Java 语言使用 Java 虚拟机屏蔽了与具体平台相关的信息,使得 Java 语言编译程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 Java 虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。 Java 虚拟机本质上就是一个程序,当它在命令行上启 ...
开发
Mycat实现跨库,读写分离和主从切换
跨库 join全局表系统中基本都会存在数据字典信息,如数据分类信息、项目的配置信息等。这些字典数据最大的特点就是数据量不大并且很少会被改变。同时绝大多数的业务场景都会涉及到字典表的操作。 因此为了避免频繁的跨库 join 操作,结合冗余数据思想,可以考虑把这些字典信息在每一个分库中都存在一份。 mycat 在进行 join 操作时,当业务表与全局表进行聚合会优先选择相同分片的全局表,从而避免跨库 join 操作。在进行数据插入时,会把数据同时插入到所有分片的全局表中。 修改schema.xml 1<table name="tb_global" dataNode=&qu ...
开发
MyCat的配置与数据分片
MyCat 下载官网:Mycat 数据库中间件 源码下载:点我直接下载 配置启动参数首先运行一下MycatStartup 然后配置 1234#环境变量-DMYCAT_HOME=D:\My\project\Mycat-Server\src\main#设置堆外内存大小:当使用mycat对非分片查询时,会把所有的数据查询出来,然后把这部分数据放在堆外内存中-XX:MaxDirectMemorySize=512M 在 Mycat 有核心三个配置文件,分别为:sever.xml、schema.xml、rule.xml sever.xml:是 Mycat 服务器参数调整和用户 ...
开发
MySQL数据分片
简介当前微服务架构非常流行,很多都会采用微服务架构对其系统进行拆分。 而虽然产生了多个微服务,但因为其用户量和数据量的问题,很有可能仍然使用的是同一个数据库。但是随着用户量和数据量增加,就会出现很多影响数据库性能的因素,如:数据存储量、IO 瓶颈、访问量瓶颈等。此时就需要将数据进行拆分,从一个库拆分成多个库。 水平切分为了解决垂直拆分出现的问题,可以使用水平拆分继续横向扩展,首先,可以如果当前数据库的容量没有问题的话,可以对读写极其频繁且数据量超大的表进行分表操作。由一张表拆分出多张表。 在一个库中,拆分出多张表,每张表存储不同的数据,这样对于其操作效率会有明显的提升。而且因为处于同一个库中 ...
开发
使用Docker搭建MySQL主从复制和主主复制
Mysql 复制架构数据拓展 热备份:数据库在运行的过程中,对数据进行备份操作。相对的,还有冷备份,冷备份需要停机,然后对数据进行备份操作。 多活:所谓的多活,就是让数据库机器节点会存在多个,避免单点情况的出现。 故障切换:当一台数据库物理机出现异常状况时,可以自动的切换到其他物理机上。 读写分离:当存在存在多台数据库物理机,将读写操作分别交给不同的机器完成。 负载均衡:假设当存在多台数据库物理机接收读请求时,多个请求会均匀的分配到不同的机器上,避免大量请求压在某一台机器上。 常见架构没有百分百的完美架构,只有适合的架构 理解 mysql 的分库分表,先了解 mysql 的架构设计 在 my ...
开发
MySQL关联查询、子查询和排序优化
关联查询优化现有如下两张表 下面开始 explain 分析 可通过EXPLANIN查看SQL语句的执行计划,EXPLANIN分析的第一行的表即是驱动表 left join1EXPLAIN SELECT SQL_NO_CACHE * FROM class LEFT JOIN book ON class.card = book.card; 结论:type 类型为 All,并且 class 为驱动表;book 为被驱动表,并且 Extra 里面有 where 字段,where 在哪里,索引就在哪里加。 进行索引优化的时候:被驱动表添加索引 添加索引优化 12ALTER TABLE book ...
开发
MySQL中SQL语句和索引的优化
最左法则如果索引了多列,要遵守最左前缀法则。 最左前缀法则指的是查询从索引的最左前列开始并且不跳过索引中的列。 过滤条件要使用索引必须按照索引建立时的顺序,依次满足,一旦跳过某个字段,索引后面的字段都无法被使用。 有如下三个索引,顺序为 age、 deptId、 name 测试查询结构如下: 函数 使用模糊匹配like 时:前缀匹配可以触发索引,后缀匹配不能触发索引 新增name索引进行测试 测试结果 where 后面加函数查询:索引完全失效(select 后面可以加) LEFT(emp.name,3) 代表使用LEFT函数返回最左边的三个字符串,也就是名字前三位为 abc ...