不懂问题的总结与学习 在郑州遇到的 (mysql 问题,数组,链表。。。。等问题)

Mysql 的事务
原子性:一个事务中所有的操作,要么全部完成,要么全部不完成,不会再中间某个环节,事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务没有执行过一样
一致性:在事务开始开始之前和事务结束以后,数据库完整性没有破坏,这表示写入的资料必须完全一致
隔离性:数据库允许多个并发事务同时对其进行读写和修改,隔离就可以防止多个事务并发执行由于交叉执行而导致数据不一致的问题
持久性:事务处理结束后,对数据的修改就是永久的
注:Mysql 在命令行的默认设置下,事务都是自动提交的,即执行sql 语句后就会马上执行commit 操作。
隔离性引出来的四种隔离级别
读取未提交:在该隔离级别中。所有事务都可以看到其他未提交事务的执行结果,本隔离级别很少用于实际应用他的性能不如其他级别好多少。所以也被称为脏读。
读取以提交:这个是大多数数据库系统默认隔离级别(比如Sql Server , Oracle),但是mysql 的默认是可重复度。满足了隔离得简单定义:一个事务只能看见已经提交事务所做得改变,这种隔离级别也支持所谓得不可重复度,因为同一事务得其他实例在该实例处理其间可能会有新得commit ,所以同一select 可能不同返回结果。
可重复读:mysql 默认事务隔离级别,确保同一个事务得多个实例在并发读取数据时,会看到同样得数据行,不过可能会引起另一个问题幻读。简单得说,幻读值当用户读取某一范围得数据行时,另一个事务在该范围内插入了数据,当用户在访问得时候会有新得数据就出现了幻读。不过Innodb 和falcon 存储通过多版本引入了并发控制(mvcc)解决了这个问题。
可串行化:这是最高得隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。就是每个都加上共享锁,在这个级别,可能导致大量得超时现象和锁竞争。
四种隔离级别容易出现的问题
在这里插入图片描述
Mysql 索引
一,单例索引:一个索引只包含单个列,但一个表中可以有多个单例索引。
1,普通索引:mysql 中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,就是为了查询的快一点。
2,唯一索引:索引列中的值必须是唯一的,但是允许为空值
3,主键索引:是一种特殊的唯一索引,不允许有空值(主键约束,就是主键索引)
主键索引和唯一索引的区别?
1,主键是一种约束,唯一索引是一种索引,两者在本质是不同的
2,主键创建后一定包含一个唯一性索引,唯一索引并不一定就是主键
3,唯一性索引列允许空值,而主键列不允许为空值
4,主键索引在创建时,已经默认为非空值+唯一索引了。
5,一个表最多只能创建一个主键索引,但可以创建多个唯一索引
6,主键更适合那些不容易更改的唯一标识,自增,身份证号
7,主键可以被其他表引用为外键,而唯一索引不能
二,组合索引
在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合,例如,这里由id,name,age3 个字段构成的索引,索引行就按id/name/age 的顺序存放,索引可以索引下面字段组合(id,name,age) 或者(id,name) 或者(id)如果要查询的字段不构成索引最左面的前缀,那么就不会是用索引,比如age 或者(name,age)组合就不会使用索引查询。
三全文索引
全文索引,只有在Myisam 引擎上才能使用,只能在char,varchar,text 类型字段上才能用全文索引,介绍了要求。就是在一堆文字中通过某个关键字等,找到该字段的所属记录行。

数据库 B-Tree 介绍
介绍:
B+Tree 是在B-Tree 基础上一种优化,使其适合实现存储索引结构,InnoDb 存储引擎就是用B+tree实现其索引结构
B+tree 相对于B-Tree 有几点不同
1,非叶子节点只存储值信息
2,所有叶子节点之间都有一个链指针
3,数据记录都存放在叶子节点中
说明:
1,通常在B+tree 上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点
2,而且所有叶子节点(数据节点)之间是一种链式环结构
3,因此可以对B+tree 进行两种查找运算:
3.1 一种是对于主键的范围查找和分页查找
3.2 另一种是从根节点开始,进行随机查找
聚集索引 辅助索引
辅助索引的叶子子节点并不包含行记录的全部数据,而是存储相对于行数据的聚集索引键,即主键。当通过辅助索引来查询数据时,Innodb 存储引擎会遍历辅助索引找到主键,然后再通过主键再聚集索引中找到完整的行记录。

二分之查找算法原理
1,如果待查序列为空,那么就返回-1,并退出算法;这表示查找不到目标元素
2,如果待查询序列不为空,则将它的中间元素与查找的目标元素进行匹配,看它们是否相等。
3,如果相等,则返回该中间元素的索引,并退出算法;此时就查找成功。
4,如果不相等,就再比较这两个元素的大小
5,如果该中间元素大于目标元素,那么就将当前序列的前半部分作为新的待查序列
6,如果该中间元素小于目标元素,那么就将当前序列的后半部分作为新的待查序列。
二分之查找之所有快速,是因为它在匹配不成功的时候,每次都能排除剩余元素中一半的元素。因此可能包含目标元素的有效范围就收缩得很块,而不像顺序查找那样,每次仅能排除一个元素

数组和链表得区别?
数组:长度固定,可以存储基本类型,也可以存储引用类型
存储元素类型一致
数组可以在内存中连续存储多个元素得构造,在内存中得分配也是连续的
是通过数组得下标进行访问得,下标从0开始得
链表
通过一个链子把多个结点(元素)连接起来,由数据和地址组成得一个元素,节点本身必须有一个地址值(就是下一个元素得地址值)
优点: 链表是很常用得一种数据结构,不需要初始化容量,可以任意加减元素。
添加块,删除块
缺点:因为含有大量得指针域,占用空间较大,查找元素需要遍历链表来查找。

Git 的工作流
常见的工作流
集中式工作流
这种工作方式跟svn 类似,它只有一个master 分支,开发者会先把远程的仓库克隆到本地,之后的修改和提交都在本地操作,直到在某个合适的时间点将本地的代码合入到远程master 这种工作流适合小团队。
实例:
第一步:有人在服务器上创建好中央仓库,如果是新项目就初始化一个空仓库
第二步:所有人克隆中央仓库。
然后A开发功能,并在本地使用标准的Git 过程开发功能:编辑,暂存,提交

git status # 查看本地仓库的修改状态
git add # 暂存文件
git commit # 提交文件-(这些命令生成的是本地提交,以按自己需求反复操作多次,而不用担心中央仓库上有了什么操作。)
git push 别名 master  上传到中央仓库

二,功能开发工作流
这种工作流关注功能开发,不直接往master 提交代码保证它是稳定并且干净的,而是从master 拉取分支进行功能开发,团队成员根据分工拉取不同的功能分支来进行不同的功能开发,这样就可以隔离开每个人的工作。当功能开发完成后,会向master 分支发起 pull request 只有审核通过的代码才真正允许合入master。
应用例子例子
假如A 开发一个功能,在开发功能前,小红需要一个独立的分支,就用命令新建一个分支

git checkout -b marys-feature master

创建完按照原来的套路

git status # 查看本地仓库的修改状态
git add # 暂存文件
git commit # 提交文件-(这些命令生成的是本地提交,以按自己需求反复操作多次,而不用担心中央仓库上有了什么操作。)

然后,A去吃午饭前,先push 一次,这样可以方便地备份,如果和其它开发协作,也让他们可以看到小红的提交。

git push -u origin marys-feature

A吃完午饭回来,完成整个功能的开发,并合并到远程分支。

三,gitflow 工作流

该种工作流会相对复杂一点,适用于管理大型项目的发布和维护。
四,Foking 工作流
Foking 工作流常用于开源项目,它是一个公开的中央仓库,其他贡献者可以克隆这个仓库作为你自己的私有仓库,开源项目维护者可以直接往中央仓库push 代码
常用命令
命令

扫描二维码关注公众号,回复: 12745471 查看本文章

restful 风格的常用四种请求方式

1,get 请求会向数据库发索取数据的请求,从而来获取信息,其只是用来查询一下数据,不会修改,增加数据,不会影响资源的内容,无论进行多少次操作,结果都是一样的
2,put 请求是向服务器端发送数据的,从而改变信息,其用来修改数据的内容,但是不会增加数据的种类等,无论进行多少次,结果并没有不同
3,post 请求同put 请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,几乎所有的请求都是post 的
4,delete 请求是用来删除某一个资源的
post 主要作用在一个集合资源之上,而put 主要作用在一个具体资源之上的
一个url 地址,用于描述一个网络上的资源,而HTTP 中的GET,post,put,delete 就对应着对这个资源的查,改,增,删 操作。

猜你喜欢

转载自blog.csdn.net/m0_46937429/article/details/114947535