提交 15e7c2f4 编写于 作者: S Snailclimb

Merge branch 'master' of https://github.com/Snailclimb/Java_Guide

...@@ -85,7 +85,7 @@ public class ArrayList<E> extends AbstractList<E> ...@@ -85,7 +85,7 @@ public class ArrayList<E> extends AbstractList<E>
} }
/** /**
*默认构造函数,其默认初始容量为10 *默认构造函数,DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
*/ */
public ArrayList() { public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
......
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
这几个是Java中很基本很基本的东西,但是我相信一定还有很多人搞不清楚!为什么呢?因为我们大多数时候在使用现成的编译工具以及环境的时候,并没有去考虑这些东西。 这几个是Java中很基本很基本的东西,但是我相信一定还有很多人搞不清楚!为什么呢?因为我们大多数时候在使用现成的编译工具以及环境的时候,并没有去考虑这些东西。
**JDK:** 顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。 **JDK:** JDK(Java Development Kit)顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。
**JRE:** 普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。 **JRE:** 普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。
...@@ -107,7 +107,7 @@ Java 中引入了虚拟机的概念,即在机器和编译程序之间加入了 ...@@ -107,7 +107,7 @@ Java 中引入了虚拟机的概念,即在机器和编译程序之间加入了
**Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。** **Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。**
> 解释语言:解释型语言,是在运行的时候将程序翻译成机器语言。解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,效率比较低。——百度百科 > 解释语言:解释型语言,是在运行的时候将程序翻译成机器语言。解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,效率比较低。——百度百科
## 5. Java和C++的区别 ## 5. Java和C++的区别
......
...@@ -217,7 +217,7 @@ static int hash(int h) { ...@@ -217,7 +217,7 @@ static int hash(int h) {
ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。 ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。
- **底层数据结构:** JDK1.7的 ConcurrentHashMap 底层采用 **分段的数组+链表** 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 **数组+链表** 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的; - **底层数据结构:** JDK1.7的 ConcurrentHashMap 底层采用 **分段的数组+链表** 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 **数组+链表** 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的;
- **实现线程安全的方式(重要):****在JDK1.7的时候,ConcurrentHashMap(分段锁)** 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。(默认分配16个Segment,比Hashtable效率提高16倍。) **到了 JDK1.8 的时候已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。(JDK1.6以后 对 synchronized锁做了很多优化)** 整个看起来就像是优化过且线程安全的 HashMap,虽然在JDK1.8中还能看到 Segment 的数据结构,但是已经简化了属性,只是为了兼容旧版本;② **Hashtable(同一把锁)** :使用 synchronized 来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。 - **实现线程安全的方式(重要):****在JDK1.7的时候,ConcurrentHashMap(分段锁)** 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。 **到了 JDK1.8 的时候已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。(JDK1.6以后 对 synchronized锁做了很多优化)** 整个看起来就像是优化过且线程安全的 HashMap,虽然在JDK1.8中还能看到 Segment 的数据结构,但是已经简化了属性,只是为了兼容旧版本;② **Hashtable(同一把锁)** :使用 synchronized 来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。
**两者的对比图:** **两者的对比图:**
......
> 工作一年以上的小伙伴可以加这个交流群,群内有免费公开课,现在加入就送Java架构师进阶系列电子书籍:[![QQ群](https://img.shields.io/badge/QQ%E7%BE%A4-959442351-blue.svg)](https://jq.qq.com/?_wv=1027&k=5tjF8vk). > 工作一年以上的小伙伴可以加这个交流群,群内有免费公开课,现在加入就送Java架构师进阶系列电子书籍:[![QQ群](https://img.shields.io/badge/QQ%E7%BE%A4-959442351-blue.svg)](https://jq.qq.com/?_wv=1027&k=5tjF8vk).
>
> **【强烈推荐,最后3天】** 阿里云双12正在做活动啦,两折,需要的不要错过!新人专属(老用户如果不想错过阿里云年底这波福利的话,可以用别人身份证再注册一个阿里云账号),活动地址:[https://m.aliyun.com/act/team1212?spm=5176.8142029.1139928.2.90ee6d3e7cFdsl#/](https://m.aliyun.com/act/team1212?params=N.TD4MOG6m2w) 。1核1G云服务器1年CPU100%不限性能仅需277,3年仅需708,强烈推荐!
为了优化大家的阅读体验,我重新进行了排版,并且增加了较为详细的目录供大家参考!如果有老哥对操作系统比较重要的知识总结过的话,欢迎找我哦!如果想学 SpringBoot 的话,推荐笔主的另外一个仓库[springboot-integration-examples](https://github.com/Snailclimb/springboot-integration-examples) 为了优化大家的阅读体验,我重新进行了排版,并且增加了较为详细的目录供大家参考!如果有老哥对操作系统比较重要的知识总结过的话,欢迎找我哦!如果想学 SpringBoot 的话,推荐笔主的另外一个仓库[springboot-integration-examples](https://github.com/Snailclimb/springboot-integration-examples)
......
...@@ -75,7 +75,10 @@ ...@@ -75,7 +75,10 @@
- :thumbsup: [《重构_改善既有代码的设计》](https://book.douban.com/subject/4262627/) - :thumbsup: [《重构_改善既有代码的设计》](https://book.douban.com/subject/4262627/)
豆瓣 9.1 分,重构书籍的开山鼻祖。 豆瓣 9.1 分,重构书籍的开山鼻祖。
> ### linux操作系统相关
- :thumbsup:[<<unix环境编程>>](https://book.douban.com/subject/25900403/) :thumbsup: [<<unix网络编程>>](https://book.douban.com/subject/1500149/)
对于理解linux操作系统原理非常有用,同时可以打好个人的基本功力,面试中很多公司也会问到linux知识。
> ### 课外书籍 > ### 课外书籍
《技术奇点》 :thumbsup:《追风筝的人》 :thumbsup:《穆斯林的葬礼》 :thumbsup:《三体》 《人工智能——李开复》 《技术奇点》 :thumbsup:《追风筝的人》 :thumbsup:《穆斯林的葬礼》 :thumbsup:《三体》 《人工智能——李开复》
......
<!-- MarkdownTOC -->
- [一 从认识操作系统开始](#一-从认识操作系统开始)
- [1.1 操作系统简介](#11-操作系统简介)
- [1.2 操作系统简单分类](#12-操作系统简单分类)
- [二 初探Linux](#二-初探linux)
- [2.1 Linux简介](#21-linux简介)
- [2.2 Linux诞生简介](#22-linux诞生简介)
- [2.3 Linux的分类](#23-linux的分类)
- [三 Linux文件系统概览](#三-linux文件系统概览)
- [3.1 Linux文件系统简介](#31-linux文件系统简介)
- [3.2 文件类型与目录结构](#32-文件类型与目录结构)
- [四 Linux基本命令](#四-linux基本命令)
- [4.1 目录切换命令](#41-目录切换命令)
- [4.2 目录的操作命令(增删改查)](#42-目录的操作命令增删改查)
- [4.3 文件的操作命令(增删改查)](#43-文件的操作命令增删改查)
- [4.4 压缩文件的操作命令](#44-压缩文件的操作命令)
- [4.5 Linux的权限命令](#45-linux的权限命令)
- [4.6 Linux 用户管理](#46-linux-用户管理)
- [4.7 Linux系统用户组的管理](#47-linux系统用户组的管理)
- [4.8 其他常用命令](#48-其他常用命令)
<!-- /MarkdownTOC -->
> 学习Linux之前,我们先来简单的认识一下操作系统。 > 学习Linux之前,我们先来简单的认识一下操作系统。
## 一 从认识操作系统开始 ## 一 从认识操作系统开始
### 1.1 操作系统简介 ### 1.1 操作系统简介
我通过以下四点介绍什么操作系统: 我通过以下四点介绍什么操作系统:
...@@ -12,7 +35,7 @@ ...@@ -12,7 +35,7 @@
- **操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。** - **操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。**
![操作系统分内核与外壳](https://user-gold-cdn.xitu.io/2018/7/3/1645ee3dc5cf626e?w=862&h=637&f=png&s=23899) ![操作系统分内核与外壳](https://user-gold-cdn.xitu.io/2018/7/3/1645ee3dc5cf626e?w=862&h=637&f=png&s=23899)
### 1.2 操作系统简单分类 ### 1.2 操作系统简单分类
1. **Windows:** 目前最流行的个人桌面操作系统 ,不做多的介绍,大家都清楚。 1. **Windows:** 目前最流行的个人桌面操作系统 ,不做多的介绍,大家都清楚。
2. **Unix:** 最早的多用户、多任务操作系统 .按照操作系统的分类,属于分时操作系统。Unix 大多被用在服务器、工作站,现在也有用在个人计算机上。它在创建互联网、计算机网络或客户端/服务器模型方面发挥着非常重要的作用。 2. **Unix:** 最早的多用户、多任务操作系统 .按照操作系统的分类,属于分时操作系统。Unix 大多被用在服务器、工作站,现在也有用在个人计算机上。它在创建互联网、计算机网络或客户端/服务器模型方面发挥着非常重要的作用。
...@@ -22,7 +45,7 @@ ...@@ -22,7 +45,7 @@
![Linux](https://user-gold-cdn.xitu.io/2018/7/3/1645eeb8e843f29d?w=426&h=240&f=png&s=32650) ![Linux](https://user-gold-cdn.xitu.io/2018/7/3/1645eeb8e843f29d?w=426&h=240&f=png&s=32650)
## 二 初探Linux ## 二 初探Linux
### 2.1 Linux简介 ### 2.1 Linux简介
...@@ -33,7 +56,7 @@ ...@@ -33,7 +56,7 @@
![Linux](https://user-gold-cdn.xitu.io/2018/7/3/1645ef0a5a4f137f?w=270&h=376&f=png&s=193487) ![Linux](https://user-gold-cdn.xitu.io/2018/7/3/1645ef0a5a4f137f?w=270&h=376&f=png&s=193487)
### 2.2 Linux诞生简介 ### 2.2 Linux诞生简介
- 1991年,芬兰的业余计算机爱好者Linus Torvalds编写了一款类似Minix的系统(基于微内核架构的类Unix操作系统)被ftp管理员命名为Linux 加入到自由软件基金的GNU计划中; - 1991年,芬兰的业余计算机爱好者Linus Torvalds编写了一款类似Minix的系统(基于微内核架构的类Unix操作系统)被ftp管理员命名为Linux 加入到自由软件基金的GNU计划中;
- Linux以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。 - Linux以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。
...@@ -48,7 +71,7 @@ ...@@ -48,7 +71,7 @@
![Linux发行版本](https://user-gold-cdn.xitu.io/2018/7/3/1645efa7048fd018?w=548&h=274&f=png&s=99213) ![Linux发行版本](https://user-gold-cdn.xitu.io/2018/7/3/1645efa7048fd018?w=548&h=274&f=png&s=99213)
## 三 Linux文件系统概览 ## 三 Linux文件系统概览
### 3.1 Linux文件系统简介 ### 3.1 Linux文件系统简介
...@@ -75,31 +98,31 @@ Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是 ...@@ -75,31 +98,31 @@ Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是
- **/usr :** 用于存放系统应用程序; - **/usr :** 用于存放系统应用程序;
- **/opt:** 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里; - **/opt:** 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
- **/proc:** 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息; - **/proc:** 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
- **/root:** 超级用户(系统管理员)的主目录(特权阶级^o^); - **/root:** 超级用户(系统管理员)的主目录(特权阶级^o^);
- **/sbin:** 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等; - **/sbin:** 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
- **/dev:** 用于存放设备文件; - **/dev:** 用于存放设备文件;
- **/mnt:** 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统; - **/mnt:** 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
- **/boot:** 存放用于系统引导时使用的各种文件; - **/boot:** 存放用于系统引导时使用的各种文件;
- **/lib :** 存放着和系统运行相关的库文件 ; - **/lib :** 存放着和系统运行相关的库文件 ;
- **/tmp:** 用于存放各种临时文件,是公用的临时文件存储点; - **/tmp:** 用于存放各种临时文件,是公用的临时文件存储点;
- **/var:** 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等; - **/var:** 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
- **/lost+found:** 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。 - **/lost+found:** 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。
## 四 Linux基本命令 ## 四 Linux基本命令
下面只是给出了一些比较常用的命令。推荐一个Linux命令快查网站,非常不错,大家如果遗忘某些命令或者对某些命令不理解都可以在这里得到解决。 下面只是给出了一些比较常用的命令。推荐一个Linux命令快查网站,非常不错,大家如果遗忘某些命令或者对某些命令不理解都可以在这里得到解决。
Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/) Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
### 4.1 目录切换命令 ### 4.1 目录切换命令
- **`cd usr`:** 切换到该目录下usr目录 - **`cd usr`:** 切换到该目录下usr目录
- **`cd ..(或cd../)`:** 切换到上一层目录 - **`cd ..(或cd../)`:** 切换到上一层目录
- **`cd /`:** 切换到系统根目录 - **`cd /`:** 切换到系统根目录
- **`cd ~`:** 切换到用户主目录 - **`cd ~`:** 切换到用户主目录
- **`cd -`:** 切换到上一个所在目录 - **`cd -`:** 切换到上一个所在目录
### 4.2 目录的操作命令(增删改查) ### 4.2 目录的操作命令(增删改查)
1. **`mkdir 目录名称`:** 增加目录 1. **`mkdir 目录名称`:** 增加目录
2. **`ls或者ll`**(ll是ls -l的缩写,ll命令以看到该目录下的所有目录和文件的详细信息):查看目录信息 2. **`ls或者ll`**(ll是ls -l的缩写,ll命令以看到该目录下的所有目录和文件的详细信息):查看目录信息
...@@ -114,35 +137,35 @@ Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/) ...@@ -114,35 +137,35 @@ Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
4. **`mv 目录名称 新目录名称`:** 修改目录的名称(改) 4. **`mv 目录名称 新目录名称`:** 修改目录的名称(改)
注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作。mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。后面会介绍到mv命令的另一个用法。 注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作。mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。后面会介绍到mv命令的另一个用法。
5. **`mv 目录名称 目录的新位置`:** 移动目录的位置---剪切(改) 5. **`mv 目录名称 目录的新位置`:** 移动目录的位置---剪切(改)
注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。 注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
6. **`cp -r 目录名称 目录拷贝的目标位置`:** 拷贝目录(改),-r代表递归拷贝 6. **`cp -r 目录名称 目录拷贝的目标位置`:** 拷贝目录(改),-r代表递归拷贝
注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归 注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归
7. **`rm [-rf] 目录`:** 删除目录(删) 7. **`rm [-rf] 目录`:** 删除目录(删)
注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用`rm -rf` 目录/文件/压缩包 注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用`rm -rf` 目录/文件/压缩包
### 4.3 文件的操作命令(增删改查) ### 4.3 文件的操作命令(增删改查)
1. **`touch 文件名称`:** 文件的创建(增) 1. **`touch 文件名称`:** 文件的创建(增)
2. **`cat/more/less/tail 文件名称`** 文件的查看(查) 2. **`cat/more/less/tail 文件名称`** 文件的查看(查)
- **`cat`:** 只能显示最后一屏内容 - **`cat`:** 查看显示文件内容
- **`more`:** 可以显示百分比,回车可以向下一行, 空格可以向下一页,q可以退出查看 - **`more`:** 可以显示百分比,回车可以向下一行, 空格可以向下一页,q可以退出查看
- **`less`:** 可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看 - **`less`:** 可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看
- **`tail-10` :** 查看文件的后10行,Ctrl+C结束 - **`tail-10` :** 查看文件的后10行,Ctrl+C结束
注意:命令 tail -f 文件 可以对某个文件进行动态监控,例如tomcat的日志文件, 会随着程序的运行,日志会变化,可以使用tail -f catalina-2016-11-11.log 监控 文 件的变化 注意:命令 tail -f 文件 可以对某个文件进行动态监控,例如tomcat的日志文件, 会随着程序的运行,日志会变化,可以使用tail -f catalina-2016-11-11.log 监控 文 件的变化
3. **`vim 文件`:** 修改文件的内容(改) 3. **`vim 文件`:** 修改文件的内容(改)
vim编辑器是Linux中的强大组件,是vi编辑器的加强版,vim编辑器的命令和快捷方式有很多,但此处不一一阐述,大家也无需研究的很透彻,使用vim编辑修改文件的方式基本会使用就可以了。 vim编辑器是Linux中的强大组件,是vi编辑器的加强版,vim编辑器的命令和快捷方式有很多,但此处不一一阐述,大家也无需研究的很透彻,使用vim编辑修改文件的方式基本会使用就可以了。
**在实际开发中,使用vim编辑器主要作用就是修改配置文件,下面是一般步骤:** **在实际开发中,使用vim编辑器主要作用就是修改配置文件,下面是一般步骤:**
vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存。) vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存。)
4. **`rm -rf 文件`:** 删除文件(删) 4. **`rm -rf 文件`:** 删除文件(删)
同目录删除:熟记 `rm -rf` 文件 即可 同目录删除:熟记 `rm -rf` 文件 即可
...@@ -183,7 +206,7 @@ Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.g ...@@ -183,7 +206,7 @@ Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.g
### 4.5 Linux的权限命令 ### 4.5 Linux的权限命令
操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在Linux中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。通过 **`ls -l`** 命令我们可以 查看某个目录下的文件或目录的权限 操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在Linux中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。通过 **`ls -l`** 命令我们可以 查看某个目录下的文件或目录的权限
示例:在随意某个目录下`ls -l` 示例:在随意某个目录下`ls -l`
......
...@@ -87,20 +87,20 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去 ...@@ -87,20 +87,20 @@ Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去
![事务的特性](https://user-gold-cdn.xitu.io/2018/5/20/1637b08b98619455?w=312&h=305&f=png&s=22430) ![事务的特性](https://user-gold-cdn.xitu.io/2018/5/20/1637b08b98619455?w=312&h=305&f=png&s=22430)
1. **原子性:** 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 1. **原子性:** 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2. **一致性:** 执行事务前后,数据保持一致; 2. **一致性:** 执行事务前后,数据库从一个一致性状态转换到另一个一致性状态。
3. **隔离性:** 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的; 3. **隔离性:** 并发访问数据库时,一个用户的事物不被其他事务所干扰,各并发事务之间数据库是独立的;
4. **持久性:** 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库 发生故障也不应该对其有任何影响。 4. **持久性:** 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库 发生故障也不应该对其有任何影响。
**为了达到上述事务特性,数据库定义了几种不同的事务隔离级别:** **为了达到上述事务特性,数据库定义了几种不同的事务隔离级别:**
- **READ_UNCOMMITTED(未授权读取):** 最低的隔离级别,允许读取尚未提交的数据变更,**可能会导致脏读、幻读或不可重复读** - **READ_UNCOMMITTED(未提交读):** 最低的隔离级别,允许读取尚未提交的数据变更,**可能会导致脏读、幻读或不可重复读**
- **READ_COMMITTED(授权读取):** 允许读取并发事务已经提交的数据,**可以阻止脏读,但是幻读或不可重复读仍有可能发生** - **READ_COMMITTED(提交读):** 允许读取并发事务已经提交的数据,**可以阻止脏读,但是幻读或不可重复读仍有可能发生**
- **REPEATABLE_READ(可重复读):** 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,**可以阻止脏读和不可重复读,但幻读仍有可能发生。** - **REPEATABLE_READ(可重复读):** 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,**可以阻止脏读和不可重复读,但幻读仍有可能发生。**
- **SERIALIZABLE(串行):** 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,**该级别可以防止脏读、不可重复读以及幻读**。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 - **SERIALIZABLE(串行):** 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,**该级别可以防止脏读、不可重复读以及幻读**。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
这里需要注意的是:**Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别.** 这里需要注意的是:**Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别.**
事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVVC(多版本并发控制),通过保存修改的旧版本信息来支持并发一致性读和回滚等特性。 事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVCC(多版本并发控制),通过行的创建时间和行的过期时间来支持并发一致性读和回滚等特性。
详细内容可以参考: [可能是最漂亮的Spring事务管理详解](https://blog.csdn.net/qq_34337272/article/details/80394121) 详细内容可以参考: [可能是最漂亮的Spring事务管理详解](https://blog.csdn.net/qq_34337272/article/details/80394121)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册