Vi与Vim快速入门
前言本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。
简介Vi是Linux系统内置的文本编辑器
Vim可以看做Vi的升级版本,具有程序编辑功能,可以主动设置以字体的颜色辨别语法正确性,方便程序设计。拥有代码补全,编译错误跳转等方便编程的等丰富功能。
模式三种模式Vi和Vim有三种常用模式
正常模式
当我们用vim或者vi打开一个文档时,默认进入的模式。在这个模式下,我们可以用方向键移动光标,可用【删除字符】或者【删除整行】来处理档案内容,也可以用【复制】,【粘贴】来处理文件数据
插入模式
按下i,I,o,O,a,A,r,R任何一个键可以进入插入模式,一般来说按i就可以了
命令行模式
正常模式下输入:可以进入命令行模式。使用相关命令,可以完成【读取】,【存盘】,【替换】,【离开】,【显示行号】等操作。
模式切换
在终端下,我们可以使用vi xxx 或vim xxx进入相应编辑器的正常模式浏览文件
在正常模式下,我们可以输入i或上面提到的任何一个字母进入插入模式进行文本编辑
在插入模式下,我们可以按esc键退出插入模式
在正常模式下,我们可以输入:或者/进入 ...
MySQL数据库锁机制
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
概述锁机制,是处理并发场景下保持数据一致性的使用的机制。我们要清楚一点,锁机制一般都是对于并发事务而言的,下面说到阻塞,一般是多事务操纵数据库时发生的
在MySQL数据库中,按照功能性来分,又可以分为:共享锁和排他锁
按照锁的粒度分类可以分为:全局锁,表级锁,行级锁
共享锁和排他锁不论是表级锁还是行级锁,都存在共享锁(Share Lock,S 锁)和排他锁(Exclusive Lock,X 锁)这两类:
共享锁(S 锁):又称读锁,事务在读取记录的时候获取共享锁,允许多个事务同时获取(锁兼容)。
排他锁(X 锁):又称写锁/独占锁,事务在修改记录的时候获取排他锁,不允许多个事务同时获取。如果一个记录已经被加了排他锁,那其他事务不能再对这条事务加任何类型的锁(锁不兼容)。
排他锁与任何的锁都不兼容,共享锁仅和共享锁兼容。(读读兼容,读写冲突,写写冲突)
S 锁
X ...
MySQL数据库InnoDB引擎
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
逻辑存储结构
表空间Tablespace(ibd文件):一个MySQL数据库实例可以有多个表空间,用于存储记录,索引等数据
段Segment:分为数据段(Leaf Node segment)、索引段(Non-leaf node segment、回滚段(Rollback segment),InnoDB是索引组织表,数据段是B+树的叶子节点。段用于管理多个Extent(区)
区Extent:表空间单元结构,每个区大小为1M。默认情况下,InnoDB的存储引擎页大小为16K,即一个区一共有64个连续的页
页Page:InnoDB引擎磁盘管理的最小单元,每个页默认为16K。为了保持页的连续性,InnoDB引擎每次从磁盘申请4-5个区。
行Row:InnoDB引擎数据是按照行存放的。
DB_TRX_ID:每次对于记录进行改动时,都会把对应的事务ID赋值给DB_TRX_ID隐藏列
DB ...
MySQL数据库引擎
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
MySQL体系结构
连接层:最上层是一些客户端和链接服务,主要完成一些类型连接处理,授权认证,及相关的安全方案。服务器也会为安全接入的每一个客户端验证它具有的操作权限
服务层:第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现。如过程,函数等
引擎层:存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能。这样我们可以根据自己的需要,来选取合适的存储引擎。
存储层:主要是将数据存储在文件系统之上,并完成存储引擎的交互
存储引擎简介概述存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的(也就是说一个数据库不同的表可以用不同的存储引擎),所以存储引擎也可以被称为表引擎。
操作1. ...
Go中循环变量问题
ISSUE在之前一次工作中,我遇到了一个go的循环变量作用域问题,当时困扰了我很久,在此记录一下。具体情况请看下面的代码
12345678910import "fmt"var arr []*intfunc main() { for i := 0; i < 10; i++ { arr = append(arr, &i) } for _, val := range arr { fmt.Println(*val) }}
理论上,我们希望得到的是arr={0,1,2,3,4,5,6,7,8,9},但是实际上我们得到的是arr={9,9,9,9,9,9,9,9,9,9}
这是因为go使用for i:=0创建的循环变量i从始至终都是一个实例,而不是每次都创建新实例,这就导致了在循环体中&i从始至终都是同一个地址,然后不断被覆盖(循环时,arr={1},arr={2,2},arr={3,3,3}… ...
MySQL数据库SQL优化
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
插入数据普通插入:
采用批量插入(一次插入的数据不建议超过1000条)
手动提交事务
主键顺序插入
大批量插入:如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令插入。其实就是导入数据文件
1234567# 客户端连接服务端时,加上参数 --local-infilemysql --local-infile -u root -p# 设置全局参数local_infile为1,开启从本地加载文件导入数据的开关set global local_infile = 1;select @@local_infile; # 执行load指令将准备好的数据,加载到表结构中,指定表,数据分割符,行分割符load data local infile '/root/sql1.log' into table 't ...
MySQL数据库事务
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
事务简介事务是一组操作的集合,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务操作有两种方式去手动控制事务。当事务成功,我们提交事务;当事务出现异常,回滚事务
操作方式一查看/设置事务提交方式
1234-- 查看事务提交方式SELECT @@AUTOCOMMIT;-- 设置事务提交方式,1为自动提交,0为手动提交,该设置只对当前会话有效SET @@AUTOCOMMIT = 0;-- 提交事务COMMIT;
提交事务12-- 提交事务COMMIT;回滚事务12-- 回滚事务ROLLBACK;
操作方式二开启事务
123START TRANSACTION-- 或者BEGIN TRANSACTION;
提交事务
1COMMIT;
回滚事务
1ROLLBACK;
操作实例
12345start transaction;select ...
MySQL数据库索引
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库索引视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识的部分内容,仅用于个人技术归档和技术分享。
索引定义索引是帮助MySQL高效获取数据的数据结构(有序)
例如:
无索引时全局扫描
有索引使二叉搜索(排序)树
优缺点
优点:
提高查询效率
提高排序效率
缺点:
索引列要占用磁盘空间
提高了查询效率,但是降低了增删改的效率
总结:空间换时间,优大于劣
索引结构MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引,主要的索引有:
索引结构
描述
B+Tree
最常见的索引类型,大部分引擎都支持B+树索引
Hash
底层数据结构是用哈希表实现,只有精确匹配索引列的查询才有效,不支持范围查询
R-Tree(空间索引)
空间索引是 MyISAM 引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-Text(全文索引)
是一种通过建立倒排索引,快速匹配文档的方式,类似于 Lucene, Solr, ES
存储引擎支持情 ...
Docker入门指南
前言
本教程是基于Docker官方指南文档翻译修改的。如需更深入的理解,请参阅官方原文。若在翻译过程中有任何错误,请联系我进行指正。
在本文中所涉及到的命令行代码部分,我使用了$指示符。若要直接复制代码,请自行删除$符号。
本教程是为Docker初学者准备的,适合那些对Docker还不太熟悉的朋友。若您已经对Docker有一定的了解和经验,本教程可能会过于基础。
概述Docker简介Docker 是一个用于开发、交付和运行应用程序的开放平台。 Docker 使您能够将应用程序与基础架构分开,以便 您可以快速交付软件。使用 Docker,您可以管理您的基础架构,以与管理应用程序相同的方式。通过利用 Docker 的 快速传送、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行代码之间的延迟。
学习流程本博客就基于Docker官方教程,手把手地教你使用Docker,你将在本指南中学习和执行的一些操作包括:
构建和运行一个镜像
使用Docker Hub分享镜像
使用带一个数据库的多个容器部署Docker 应用、
使用Docker Compose运行应用
在你着手学习这个 ...
Prometheus的自身监控
Awesome Prometheus AlertsAwesome Prometheus Alerts是一个收集了各种Prometheus告警规则的开源项目,我们可以参考里面的规则来定制我们的自己项目的监控告警规则
Awesome Prometheus Alerts中收录28条关于Prometheus的自身监控告警规则,让我们一起来看看吧
28条Prometheus自身监控告警规则1. Prometheus作业丢失Prometheus job missing
一个Prometheus作业消失了
12345678- alert: PrometheusJobMissing expr: absent(up{job="prometheus"}) for: 0m labels: severity: warning annotations: summary: Prometheus job missing (instance {{ $labels.instance }}) description: ...