Skip to content

Commit 15e7c2f

Browse files
committed
2 parents a15497e + d48618e commit 15e7c2f

7 files changed

+67
-43
lines changed

Java相关/ArrayList.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class ArrayList<E> extends AbstractList<E>
8585
}
8686

8787
/**
88-
*默认构造函数,其默认初始容量为10
88+
*默认构造函数,DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
8989
*/
9090
public ArrayList() {
9191
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

Java相关/Java基础知识.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979

8080
这几个是Java中很基本很基本的东西,但是我相信一定还有很多人搞不清楚!为什么呢?因为我们大多数时候在使用现成的编译工具以及环境的时候,并没有去考虑这些东西。
8181

82-
**JDK:** 顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。
82+
**JDK:** JDK(Java Development Kit)顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。
8383

8484
**JRE:** 普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。
8585

@@ -107,7 +107,7 @@ Java 中引入了虚拟机的概念,即在机器和编译程序之间加入了
107107

108108
**Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。**
109109

110-
> 解释性语言:解释型语言,是在运行的时候将程序翻译成机器语言。解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,效率比较低。——百度百科
110+
> 解释型语言:解释型语言,是在运行的时候将程序翻译成机器语言。解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,效率比较低。——百度百科
111111
112112
## 5. Java和C++的区别
113113

Java相关/这几道Java集合框架面试题几乎必问.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ static int hash(int h) {
217217
ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。
218218

219219
- **底层数据结构:** JDK1.7的 ConcurrentHashMap 底层采用 **分段的数组+链表** 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 **数组+链表** 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的;
220-
- **实现线程安全的方式(重要):** ① **在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,竞争会越来越激烈效率越低。
220+
- **实现线程安全的方式(重要):** ① **在JDK1.7的时候,ConcurrentHashMap(分段锁)** 对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。 **到了 JDK1.8 的时候已经摒弃了Segment的概念,而是直接用 Node 数组+链表+红黑树的数据结构来实现,并发控制使用 synchronized 和 CAS 来操作。(JDK1.6以后 对 synchronized锁做了很多优化)** 整个看起来就像是优化过且线程安全的 HashMap,虽然在JDK1.8中还能看到 Segment 的数据结构,但是已经简化了属性,只是为了兼容旧版本;② **Hashtable(同一把锁)** :使用 synchronized 来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。
221221

222222
**两者的对比图:**
223223

README.md

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
> 工作一年以上的小伙伴可以加这个交流群,群内有免费公开课,现在加入就送Java架构师进阶系列电子书籍:[![QQ群](https://img.shields.io/badge/QQ%E7%BE%A4-959442351-blue.svg)](https://jq.qq.com/?_wv=1027&k=5tjF8vk).
2-
>
3-
> **【强烈推荐,最后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,强烈推荐!
42
53
为了优化大家的阅读体验,我重新进行了排版,并且增加了较为详细的目录供大家参考!如果有老哥对操作系统比较重要的知识总结过的话,欢迎找我哦!如果想学 SpringBoot 的话,推荐笔主的另外一个仓库[springboot-integration-examples](https://github.com/Snailclimb/springboot-integration-examples)
64

其他/个人阅读书籍清单.md

+3
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@
7575
- :thumbsup: [《重构_改善既有代码的设计》](https://book.douban.com/subject/4262627/)
7676

7777
豆瓣 9.1 分,重构书籍的开山鼻祖。
78+
> ### linux操作系统相关
79+
- :thumbsup:[<<unix环境编程>>](https://book.douban.com/subject/25900403/) :thumbsup: [<<unix网络编程>>](https://book.douban.com/subject/1500149/)
7880
81+
对于理解linux操作系统原理非常有用,同时可以打好个人的基本功力,面试中很多公司也会问到linux知识。
7982
> ### 课外书籍
8083
8184
《技术奇点》 :thumbsup:《追风筝的人》 :thumbsup:《穆斯林的葬礼》 :thumbsup:《三体》 《人工智能——李开复》

操作系统/后端程序员必备的Linux基础知识.md

+53-30
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,31 @@
1+
<!-- MarkdownTOC -->
2+
3+
- [一 从认识操作系统开始](#一-从认识操作系统开始)
4+
- [1.1 操作系统简介](#11-操作系统简介)
5+
- [1.2 操作系统简单分类](#12-操作系统简单分类)
6+
- [二 初探Linux](#二-初探linux)
7+
- [2.1 Linux简介](#21-linux简介)
8+
- [2.2 Linux诞生简介](#22-linux诞生简介)
9+
- [2.3 Linux的分类](#23-linux的分类)
10+
- [三 Linux文件系统概览](#三-linux文件系统概览)
11+
- [3.1 Linux文件系统简介](#31-linux文件系统简介)
12+
- [3.2 文件类型与目录结构](#32-文件类型与目录结构)
13+
- [四 Linux基本命令](#四-linux基本命令)
14+
- [4.1 目录切换命令](#41-目录切换命令)
15+
- [4.2 目录的操作命令(增删改查)](#42-目录的操作命令增删改查)
16+
- [4.3 文件的操作命令(增删改查)](#43-文件的操作命令增删改查)
17+
- [4.4 压缩文件的操作命令](#44-压缩文件的操作命令)
18+
- [4.5 Linux的权限命令](#45-linux的权限命令)
19+
- [4.6 Linux 用户管理](#46-linux-用户管理)
20+
- [4.7 Linux系统用户组的管理](#47-linux系统用户组的管理)
21+
- [4.8 其他常用命令](#48-其他常用命令)
22+
23+
<!-- /MarkdownTOC -->
124

225
> 学习Linux之前,我们先来简单的认识一下操作系统。
326
427
## 一 从认识操作系统开始
5-
### 1.1 操作系统简介
28+
### 1.1 操作系统简介
629

730
我通过以下四点介绍什么操作系统:
831

@@ -12,7 +35,7 @@
1235
- **操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。**
1336

1437
![操作系统分内核与外壳](https://user-gold-cdn.xitu.io/2018/7/3/1645ee3dc5cf626e?w=862&h=637&f=png&s=23899)
15-
### 1.2 操作系统简单分类
38+
### 1.2 操作系统简单分类
1639

1740
1. **Windows:** 目前最流行的个人桌面操作系统 ,不做多的介绍,大家都清楚。
1841
2. **Unix:** 最早的多用户、多任务操作系统 .按照操作系统的分类,属于分时操作系统。Unix 大多被用在服务器、工作站,现在也有用在个人计算机上。它在创建互联网、计算机网络或客户端/服务器模型方面发挥着非常重要的作用。
@@ -22,7 +45,7 @@
2245
![Linux](https://user-gold-cdn.xitu.io/2018/7/3/1645eeb8e843f29d?w=426&h=240&f=png&s=32650)
2346

2447

25-
## 初探Linux
48+
## 二 初探Linux
2649

2750
### 2.1 Linux简介
2851

@@ -33,7 +56,7 @@
3356

3457
![Linux](https://user-gold-cdn.xitu.io/2018/7/3/1645ef0a5a4f137f?w=270&h=376&f=png&s=193487)
3558

36-
### 2.2 Linux诞生简介
59+
### 2.2 Linux诞生简介
3760

3861
- 1991年,芬兰的业余计算机爱好者Linus Torvalds编写了一款类似Minix的系统(基于微内核架构的类Unix操作系统)被ftp管理员命名为Linux 加入到自由软件基金的GNU计划中;
3962
- Linux以一只可爱的企鹅作为标志,象征着敢作敢为、热爱生活。
@@ -48,7 +71,7 @@
4871
![Linux发行版本](https://user-gold-cdn.xitu.io/2018/7/3/1645efa7048fd018?w=548&h=274&f=png&s=99213)
4972

5073

51-
## Linux文件系统概览
74+
## 三 Linux文件系统概览
5275

5376
### 3.1 Linux文件系统简介
5477

@@ -75,31 +98,31 @@ Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是
7598
- **/usr :** 用于存放系统应用程序;
7699
- **/opt:** 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
77100
- **/proc:** 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
78-
- **/root:** 超级用户(系统管理员)的主目录(特权阶级^o^);
79-
- **/sbin:** 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
80-
- **/dev:** 用于存放设备文件;
81-
- **/mnt:** 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
82-
- **/boot:** 存放用于系统引导时使用的各种文件;
101+
- **/root:** 超级用户(系统管理员)的主目录(特权阶级^o^);
102+
- **/sbin:** 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
103+
- **/dev:** 用于存放设备文件;
104+
- **/mnt:** 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
105+
- **/boot:** 存放用于系统引导时使用的各种文件;
83106
- **/lib :** 存放着和系统运行相关的库文件 ;
84-
- **/tmp:** 用于存放各种临时文件,是公用的临时文件存储点;
85-
- **/var:** 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
86-
- **/lost+found:** 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。
107+
- **/tmp:** 用于存放各种临时文件,是公用的临时文件存储点;
108+
- **/var:** 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
109+
- **/lost+found:** 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。
87110

88111

89-
## Linux基本命令
112+
## 四 Linux基本命令
90113

91114
下面只是给出了一些比较常用的命令。推荐一个Linux命令快查网站,非常不错,大家如果遗忘某些命令或者对某些命令不理解都可以在这里得到解决。
92115

93116
Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
94117
### 4.1 目录切换命令
95118

96-
- **`cd usr`** 切换到该目录下usr目录
97-
- **`cd ..(或cd../)`** 切换到上一层目录
98-
- **`cd /`** 切换到系统根目录
99-
- **`cd ~`** 切换到用户主目录
100-
- **`cd -`** 切换到上一个所在目录
119+
- **`cd usr`** 切换到该目录下usr目录
120+
- **`cd ..(或cd../)`** 切换到上一层目录
121+
- **`cd /`** 切换到系统根目录
122+
- **`cd ~`** 切换到用户主目录
123+
- **`cd -`** 切换到上一个所在目录
101124

102-
### 4.2 目录的操作命令增删改查
125+
### 4.2 目录的操作命令(增删改查)
103126

104127
1. **`mkdir 目录名称`** 增加目录
105128
2. **`ls或者ll`**(ll是ls -l的缩写,ll命令以看到该目录下的所有目录和文件的详细信息):查看目录信息
@@ -114,35 +137,35 @@ Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
114137

115138
4. **`mv 目录名称 新目录名称`** 修改目录的名称(改)
116139

117-
注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作。mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。后面会介绍到mv命令的另一个用法。
140+
注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作。mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。后面会介绍到mv命令的另一个用法。
118141
5. **`mv 目录名称 目录的新位置`** 移动目录的位置---剪切(改)
119142

120143
注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
121144
6. **`cp -r 目录名称 目录拷贝的目标位置`** 拷贝目录(改),-r代表递归拷贝
122145

123-
注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归
146+
注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归
124147
7. **`rm [-rf] 目录`:** 删除目录(删)
125148

126-
注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用`rm -rf` 目录/文件/压缩包
149+
注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用`rm -rf` 目录/文件/压缩包
127150

128151

129-
### 4.3 文件的操作命令增删改查
152+
### 4.3 文件的操作命令(增删改查)
130153

131154
1. **`touch 文件名称`:** 文件的创建(增)
132155
2. **`cat/more/less/tail 文件名称`** 文件的查看(查)
133-
- **`cat`** 只能显示最后一屏内容
134-
- **`more`** 可以显示百分比,回车可以向下一行, 空格可以向下一页,q可以退出查看
135-
- **`less`** 可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看
156+
- **`cat`** 查看显示文件内容
157+
- **`more`** 可以显示百分比,回车可以向下一行, 空格可以向下一页,q可以退出查看
158+
- **`less`** 可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看
136159
- **`tail-10`** 查看文件的后10行,Ctrl+C结束
137160

138-
注意:命令 tail -f 文件 可以对某个文件进行动态监控,例如tomcat的日志文件, 会随着程序的运行,日志会变化,可以使用tail -f catalina-2016-11-11.log 监控件的变化
161+
注意:命令 tail -f 文件 可以对某个文件进行动态监控,例如tomcat的日志文件, 会随着程序的运行,日志会变化,可以使用tail -f catalina-2016-11-11.log 监控件的变化
139162
3. **`vim 文件`** 修改文件的内容(改)
140163

141164
vim编辑器是Linux中的强大组件,是vi编辑器的加强版,vim编辑器的命令和快捷方式有很多,但此处不一一阐述,大家也无需研究的很透彻,使用vim编辑修改文件的方式基本会使用就可以了。
142165

143166
**在实际开发中,使用vim编辑器主要作用就是修改配置文件,下面是一般步骤:**
144167

145-
vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存。)
168+
vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存。)
146169
4. **`rm -rf 文件`** 删除文件(删)
147170

148171
同目录删除:熟记 `rm -rf` 文件 即可
@@ -183,7 +206,7 @@ Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.g
183206

184207
### 4.5 Linux的权限命令
185208

186-
操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在Linux中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。通过 **`ls -l`** 命令我们可以 查看某个目录下的文件或目录的权限
209+
操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在Linux中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。通过 **`ls -l`** 命令我们可以 查看某个目录下的文件或目录的权限
187210

188211
示例:在随意某个目录下`ls -l`
189212

0 commit comments

Comments
 (0)