数据结构(二)-数组
参考文献
数据结构与算法之美-王争
算法第四版
数组
数组(Array)是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据.
线性表: 数据排列成像一条线一样的结构.每个线性表上的数据最多只有前和后两个防线.
连续的内存空间和相同类型的数据.
随机访问
在计算机科学中,随机访问是指能够随机访问给定元素集中的任何项目的功能。
随机访问也称为直接访问。
数组下标都是从0开始的
数组的元素是不能删除的,只能覆盖
寻址公式
1a[i]_address = base_address + i * data_type_size
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410 ...
数据结构(一)-位运算
参考文献
位运算
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920 ...
MySQL(二十)-字符集和比较规则
参考文献
高性能MySQL(第三版)
MySQL是怎样运行的
字符集和比较规则
字符集是指一种二进制编码到某类字符符号的映射.
比较规则是指一组用于某个字符集的排序规则.
MySQL有很多的选项用于控制字符集.这些选项和字符集很容易混淆,一定要记住:只有基于字符的值才真正的"有"字符集的概念.对于其他类型的值,字符集只是一个设置,指定用哪一种字符集来做比较或者其他操作.基于字符的值能存放在某列中,查询的字符串中,表达式的计算结果中或者某个用户变量中,等等.
MySQL的设置可以分为两类:
创建对象时的默认值;
在服务器和客户端通信时的设置;
一些重要的字符集
ASCII字符集:共收录128个字符集,包括空格,标点符号,数字,大小写字母和一些不可见字符.
ISO 8859-1字符集: 共收录256个字符,它在ASCII字符集的基础上又扩充了128个西欧常用字符.ISO 8859-1字符集也可以使用一个字节来进行编码(这个字符集也有一个别名Latin1)
GB2312字符集: 这个字符集同时又兼容ASCII字符集,所以在编码方式上显得有些奇怪: 如果该字 ...
MySQL(十九)-分区
参考文献
高性能MySQL(第三版)
分区
MySQL在创建表时使用PARTITION BY子句定义每个分区存放的数据.在执行查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就无需扫描所有分区,只需要查找包含需要数据的分区就可以了.
在下面的场景中,分区可以起到非常大的作用:
表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据.
分区表的数据更容易维护.例如,想批量删除大量数据可以使用清除整个分区的方式,另外,还可以对一个独立分区进行优化,检查,修复等操作.
分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备.
可以使用分区表来避免某些特殊的瓶颈,例如InnoDB的单个索引的互斥访问,ext3文件系统的inode锁竞争等.
如果需要,还可以备份和恢复独立的分区,这在非常大的数据集的场景下效果非常好.
分区表本身也有一些限制
一个表最多只能有1024分区.
在MySQL5.1中,分区表达式必须是整数,或者是返回整数的表达式.在MySQL5.5中,某些场景中可以直接是用列来进行分区.
如果分区字段中有主 ...
MySQL(十八)-排序
参考文献
高性能MySQL(第三版)
MySQL实战45讲
排序
MySQL有两种方式可以生成有序的结果:通过排序操作或者按索引顺序扫描;
若EXPLAIN出来的type列的值为"index",则说明MySQL使用了索引扫描来做排序.
扫描索引本身是很快的,因为只需要从一条索引记录移动到紧接着的下一条记录.但如果索引不能覆盖查询所需要的全部列,那就不得不每扫描一条索引记录都回表查询一次对应的行.这基本都是随机I/O,因此按索引顺序读取数据的速度通常要比顺序地全表扫描慢,尤其是在I/O密集型的工作负载时.
只有当索引的列顺序和ORDER BY子句的顺序完全一致,并且所有列的排序方向(倒序或正序)一样时,MySQL才能够使用索引来对接过做排序.
如果查询需要关联多张表,则只有当ORDER BY子句引用的字段全部为第一个表时,才能使用索引做排序.
ORDER BY子句和查找性查询的限制是一样的:需要满足索引的最左前缀的原则,否则MySQL都需要执行排序操作,而无法利用索引排序.
有一种情况下ORDER BY子句可以不满足索引的最左前缀的要求 ...
MySQL-慢查询
参考文献
高性能MySQL(第三版)
MySQL实战45讲
MySQL技术内幕 InnoDB存储引擎
慢查询
慢查询日志(slow query log)
慢查询日志可以帮助定位存在问题的SQL语句,从而进行SQL语句层面的优化.在MySQL启动时,设置一个阈值,将运行超过这个值的所有SQL语句都会记录到慢查询日志文件中.该阈值可以通过参数long_query_time来设置,默认值为10,单位为秒.
1234567891011121314151617181920212223mysql> show variables like 'long_query_time';+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set (0.01 sec)mysql> show variab ...
MySQL(十七)-查询优化
参考文献
高性能MySQL(第三版)
MySQL实战45讲
MySQL查询语句的执行流程
大体来说,MySQL可分为服务层和存储引擎层两部分
Server层包括连接器,查询缓存,分析器,优化器,执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期,时间,数字和加密函数等)
而在存储引擎层负责的数据存储和提取.其架构模式是插件式的,支持InnoDB,MyISAM,Memory等多个存储引擎.现在最常用的存储引擎是InnoDB,它是从MySQL5.5.5版本看是称为默认存储引擎.
MySQL通信协议
MySQL客户端和服务端之间的通信协议是半双工的,这意味着,在任何一个时刻,要么是由服务器向客户端发送数据,要么是有客户端向服务器发送数据,这两个动作不能同时发生,所以我们无法将一个消息切成小块独立来发送.
这种协议让MySQL通信简单快速,但是也从很多地方限制了MySQL.一个明显的限制是,没办法进行流量控制.一旦一段开始发送消息,另外一端要接收完整个消息才能响应它.
客户端用一个单独的数据包将查询传给服务器.这也是为什么当查询的语句很长的时候 ...
RabbitMQ-基础理论
参考文献
https://blog.csdn.net/unique_perfect/article/details/109380996
amqp.0-10
AMQP
引言-AMQP
RabbitMQ是基于AMQP协议,erlang语言开发,是部署最广泛的开源,消息中间件,是最受欢迎的开源消息中间件之一.
AMQP 协议AMQP(advanced message queuing protocol)在2003年时被提出,最早用于解决金融领不同平台之间的消息传递交互问题.顾名思义,AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议).这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式.这使得实现了AMQP的provider天然性就是跨平台的.
AMQP Model:
举例说明
如果我们拿电子邮件系统做个类比,我们会发现AMQP的概念并不激进:
AMQP消息类似于电子邮件消息.
消息队列类似于邮箱.
3.消费者类似于获取和删除电子邮件的邮件客户机.
交易所类似于MTA(邮件传输代理), ...
SpringBoot-整合Activiti7
参考文献
Acitvit6 User Guide
环境配置
框架版本
SpringBoot 2.5.7
SpringCloud 2020.0.3
activiti 7.1.0.M6
flyway 8.0.5
mysql 8.0.27
依赖信息
build.gradle配置(修改后的)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697buildscript { ext { springBootVersion = '2.5.7' springCloudVersion = '2020.0.3' activitiVersion = "7.1 ...
SpringBoot-整合Logback
参考文献
SpringBoot配合logback达到日志切割管理通用配置
Logback and Spring Boot’s new springProperty lookup mechanism not working
基础知识
日志等级
1The value of the level attribute admitting one of the case-insensitive string values TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF.
日志级别由低到高TRACE, DEBUG, INFO, WARN, ERROR
遇到的问题
Logback and Spring Boot’s new springProperty lookup mechanism not working(springProperty不起作用)
Logback配置
Spring Boot官方文档指出,根据不同的日志系统,可以按照如下的日志配置
文件名就能够被正确加载,如下:
Logback :logback-spring.xml ...