Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
清新范er
JavaGuide
提交
15e7c2f4
J
JavaGuide
项目概览
清新范er
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
15e7c2f4
编写于
12月 30, 2018
作者:
S
Snailclimb
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
https://github.com/Snailclimb/Java_Guide
上级
a15497ed
d48618e9
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
39 addition
and
15 deletion
+39
-15
Java相关/ArrayList.md
Java相关/ArrayList.md
+1
-1
Java相关/Java基础知识.md
Java相关/Java基础知识.md
+2
-2
Java相关/这几道Java集合框架面试题几乎必问.md
Java相关/这几道Java集合框架面试题几乎必问.md
+1
-1
README.md
README.md
+0
-2
其他/个人阅读书籍清单.md
其他/个人阅读书籍清单.md
+3
-0
操作系统/后端程序员必备的Linux基础知识.md
操作系统/后端程序员必备的Linux基础知识.md
+26
-3
数据存储/MySQL.md
数据存储/MySQL.md
+6
-6
未找到文件。
Java相关/ArrayList.md
浏览文件 @
15e7c2f4
...
@@ -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
;
...
...
Java相关/Java基础知识.md
浏览文件 @
15e7c2f4
...
@@ -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++的区别
...
...
Java相关/这几道Java集合框架面试题几乎必问.md
浏览文件 @
15e7c2f4
...
@@ -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,竞争会越来越激烈效率越低。
**两者的对比图:**
**两者的对比图:**
...
...
README.md
浏览文件 @
15e7c2f4
> 工作一年以上的小伙伴可以加这个交流群,群内有免费公开课,现在加入就送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
)
。
...
...
其他/个人阅读书籍清单.md
浏览文件 @
15e7c2f4
...
@@ -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:《三体》 《人工智能——李开复》
...
...
操作系统/后端程序员必备的Linux基础知识.md
浏览文件 @
15e7c2f4
<!-- 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之前,我们先来简单的认识一下操作系统。
...
@@ -99,7 +122,7 @@ Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
...
@@ -99,7 +122,7 @@ Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
-
**`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命令以看到该目录下的所有目录和文件的详细信息):查看目录信息
...
@@ -126,11 +149,11 @@ Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
...
@@ -126,11 +149,11 @@ Linux命令大全:[http://man.linuxde.net/](http://man.linuxde.net/)
注意: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结束
...
...
数据存储/MySQL.md
浏览文件 @
15e7c2f4
...
@@ -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隔离级别.**
事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MV
VC(多版本并发控制),通过保存修改的旧版本信息
来支持并发一致性读和回滚等特性。
事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MV
CC(多版本并发控制),通过行的创建时间和行的过期时间
来支持并发一致性读和回滚等特性。
详细内容可以参考:
[
可能是最漂亮的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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录