Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Coudy Hou
JavaGuide
提交
e267aa2c
J
JavaGuide
项目概览
Coudy Hou
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
e267aa2c
编写于
4月 16, 2019
作者:
S
SnailClimb
提交者:
GitHub
4月 16, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into patch-7
上级
18b13cfc
87c96d6e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
42 addition
and
29 deletion
+42
-29
docs/java/Basis/Arrays,CollectionsCommonMethods.md
docs/java/Basis/Arrays,CollectionsCommonMethods.md
+23
-20
docs/java/Java基础知识.md
docs/java/Java基础知识.md
+17
-7
docs/system-design/framework/ZooKeeper.md
docs/system-design/framework/ZooKeeper.md
+2
-2
未找到文件。
docs/java/Basis/Arrays,CollectionsCommonMethods.md
浏览文件 @
e267aa2c
...
...
@@ -54,12 +54,12 @@ void rotate(List list, int distance)//旋转。当distance为正数时,将list
Collections
.
reverse
(
arrayList
);
System
.
out
.
println
(
"Collections.reverse(arrayList):"
);
System
.
out
.
println
(
arrayList
);
Collections
.
rotate
(
arrayList
,
4
);
System
.
out
.
println
(
"Collections.rotate(arrayList, 4):"
);
System
.
out
.
println
(
arrayList
);
// void sort(List list),按自然排序的升序排序
Collections
.
sort
(
arrayList
);
System
.
out
.
println
(
"Collections.sort(arrayList):"
);
...
...
@@ -69,7 +69,7 @@ void rotate(List list, int distance)//旋转。当distance为正数时,将list
Collections
.
shuffle
(
arrayList
);
System
.
out
.
println
(
"Collections.shuffle(arrayList):"
);
System
.
out
.
println
(
arrayList
);
// void swap(List list, int i , int j),交换两个索引位置的元素
Collections
.
swap
(
arrayList
,
2
,
5
);
System
.
out
.
println
(
"Collections.swap(arrayList, 2, 5):"
);
...
...
@@ -93,7 +93,7 @@ void rotate(List list, int distance)//旋转。当distance为正数时,将list
int
binarySearch
(
List
list
,
Object
key
)
//对List进行二分查找,返回索引,注意List必须是有序的
int
max
(
Collection
coll
)
//根据元素的自然顺序,返回最大的元素。 类比int min(Collection coll)
int
max
(
Collection
coll
,
Comparator
c
)
//根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)
void
fill
(
List
list
,
Object
obj
)
//用指定的元素代替指定list中的所有元素。
void
fill
(
List
list
,
Object
obj
)
//用指定的元素代替指定list中的所有元素。
int
frequency
(
Collection
c
,
Object
o
)
//统计元素出现次数
int
indexOfSubList
(
List
list
,
List
target
)
//统计target在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target).
boolean
replaceAll
(
List
list
,
Object
oldVal
,
Object
newVal
),
用新元素替换旧元素
...
...
@@ -152,9 +152,9 @@ Collections提供了多个`synchronizedXxx()`方法·,该方法可以将指定
```
java
synchronizedCollection
(
Collection
<
T
>
c
)
//返回指定 collection 支持的同步(线程安全的)collection。
synchronizedList
(
List
<
T
>
list
)
//返回指定列表支持的同步(线程安全的)List。
synchronizedList
(
List
<
T
>
list
)
//返回指定列表支持的同步(线程安全的)List。
synchronizedMap
(
Map
<
K
,
V
>
m
)
//返回由指定映射支持的同步(线程安全的)Map。
synchronizedSet
(
Set
<
T
>
s
)
//返回指定 set 支持的同步(线程安全的)set。
synchronizedSet
(
Set
<
T
>
s
)
//返回指定 set 支持的同步(线程安全的)set。
```
### Collections还可以设置不可变集合,提供了如下三类方法:
...
...
@@ -226,6 +226,7 @@ unmodifiableXxx(): 返回指定集合对象的不可变视图,此处的集合
6.
转字符串 :
`toString()`
7.
复制:
`copyOf()`
### 排序 : `sort()`
```
java
...
...
@@ -251,7 +252,7 @@ unmodifiableXxx(): 返回指定集合对象的不可变视图,此处的集合
System
.
out
.
println
();
int
c
[]
=
{
1
,
3
,
2
,
7
,
6
,
5
,
4
,
9
};
// parallelSort(int[] a) 按照数字顺序排列指定的数组。同sort方法一样也有按范围的排序
// parallelSort(int[] a) 按照数字顺序排列指定的数组
(并行的)
。同sort方法一样也有按范围的排序
Arrays
.
parallelSort
(
c
);
System
.
out
.
println
(
"Arrays.parallelSort(c):"
);
for
(
int
i
:
c
)
{
...
...
@@ -285,6 +286,9 @@ System.out.println(Arrays.toString(strs));//[abcdeag, abcdefg, abcdehg]
```
java
// *************查找 binarySearch()****************
char
[]
e
=
{
'a'
,
'f'
,
'b'
,
'c'
,
'e'
,
'A'
,
'C'
,
'B'
};
// 排序后再进行二分查找,否则找不到
Arrays
.
sort
(
e
);
System
.
out
.
println
(
"Arrays.sort(e)"
+
Arrays
.
toString
(
e
));
System
.
out
.
println
(
"Arrays.binarySearch(e, 'c'):"
);
int
s
=
Arrays
.
binarySearch
(
e
,
'c'
);
System
.
out
.
println
(
"字符c在数组的位置:"
+
s
);
...
...
@@ -293,12 +297,12 @@ System.out.println(Arrays.toString(strs));//[abcdeag, abcdefg, abcdehg]
### 比较: `equals()`
```
java
// *************比较 equals****************
char
[]
e
=
{
'a'
,
'f'
,
'b'
,
'c'
,
'e'
,
'A'
,
'C'
,
'B'
};
// *************比较 equals****************
char
[]
e
=
{
'a'
,
'f'
,
'b'
,
'c'
,
'e'
,
'A'
,
'C'
,
'B'
};
char
[]
f
=
{
'a'
,
'f'
,
'b'
,
'c'
,
'e'
,
'A'
,
'C'
,
'B'
};
/*
* 元素数量相同,并且相同位置的元素相同。 另外,如果两个数组引用都是null,则它们被认为是相等的 。
*/
* 元素数量相同,并且相同位置的元素相同。 另外,如果两个数组引用都是null,则它们被认为是相等的 。
*/
// 输出true
System
.
out
.
println
(
"Arrays.equals(e, f):"
+
Arrays
.
equals
(
e
,
f
));
```
...
...
@@ -345,12 +349,12 @@ System.out.println(Arrays.toString(strs));//[abcdeag, abcdefg, abcdehg]
### 转字符串 `toString()`
```
java
// *************转字符串 toString()****************
/*
* 返回指定数组的内容的字符串表示形式。
*/
char
[]
k
=
{
'a'
,
'f'
,
'b'
,
'c'
,
'e'
,
'A'
,
'C'
,
'B'
};
System
.
out
.
println
(
Arrays
.
toString
(
k
));
// [a, f, b, c, e, A, C, B]
// *************转字符串 toString()****************
/*
* 返回指定数组的内容的字符串表示形式。
*/
char
[]
k
=
{
'a'
,
'f'
,
'b'
,
'c'
,
'e'
,
'A'
,
'C'
,
'B'
};
System
.
out
.
println
(
Arrays
.
toString
(
k
));
// [a, f, b, c, e, A, C, B]
```
### 复制 `copyOf()`
...
...
@@ -358,7 +362,7 @@ System.out.println(Arrays.toString(strs));//[abcdeag, abcdefg, abcdehg]
```
java
// *************复制 copy****************
// copyOf 方法实现数组复制,h为数组,6为复制的长度
int
[]
h
=
{
1
,
2
,
3
,
3
,
3
,
3
,
6
,
6
,
6
,
};
int
[]
h
=
{
1
,
2
,
3
,
3
,
3
,
3
,
6
,
6
,
6
,
};
int
i
[]
=
Arrays
.
copyOf
(
h
,
6
);
System
.
out
.
println
(
"Arrays.copyOf(h, 6);:"
);
// 输出结果:123333
...
...
@@ -377,4 +381,3 @@ System.out.println(Arrays.toString(strs));//[abcdeag, abcdefg, abcdehg]
// 换行
System
.
out
.
println
();
```
docs/java/Java基础知识.md
浏览文件 @
e267aa2c
...
...
@@ -50,7 +50,7 @@
-
[
33 Java序列化中如果有些字段不想进行序列化 怎么办
](
#33-java序列化中如果有些字段不想进行序列化-怎么办
)
-
[
34 获取用键盘输入常用的的两种方法
](
#34-获取用键盘输入常用的的两种方法
)
-
[
参考
](
#参考
)
-
[
公众号
](
#公众号
)
<!-- /MarkdownTOC -->
...
...
@@ -233,7 +233,7 @@ String 中的对象是不可变的,也就可以理解为常量,线程安全
由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
## 15. 在 Java 中定义一个不做事且没有参数的构造方法的作用
Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
## 16. import java和javax有什么区别?
...
...
@@ -338,12 +338,9 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返
### 为什么要有 hashCode
**我们先以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode:**
当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用
`equals()`
方法来检查 hashcode 相等的对象是否真的相同。如果两者相同,HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自我的Java启蒙书《Head first java》第二版)。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。
**我们以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode:**
当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用 equals()方法来检查 hashcode 相等的对象是否真的相同。如果两者相同,HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自我的Java启蒙书《Head first java》第二版)。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。
通过我们可以看出:
`hashCode()`
的作用就是
**获取哈希码**
,也称为散列码;它实际上是返回一个int整数。这个
**哈希码的作用**
是确定该对象在哈希表中的索引位置。
**`hashCode() `在散列表中才有用,在其它情况下没用。**
在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
### hashCode()与equals()的相关规定
...
...
@@ -353,6 +350,8 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返
4.
**因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖**
5.
hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)
推荐阅读:
[
Java hashCode() 和 equals()的若干问题解答
](
https://www.cnblogs.com/skywang12345/p/3324958.html
)
## 28. 为什么Java中只有值传递?
...
...
@@ -473,3 +472,13 @@ String s = input.readLine();
-
https://stackoverflow.com/questions/1906445/what-is-the-difference-between-jdk-and-jre
-
https://www.educba.com/oracle-vs-openjdk/
-
https://stackoverflow.com/questions/22358071/differences-between-oracle-jdk-and-openjdk?answertab=active#tab-top
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:**
由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本
[
公众号
](
#公众号
)
后台回复
**"Java面试突击"**
即可免费领取!
**Java工程师必备学习资源:**
一些Java工程师常用学习资源公众号后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334
)
\ No newline at end of file
docs/system-design/framework/ZooKeeper.md
浏览文件 @
e267aa2c
...
...
@@ -165,8 +165,8 @@ ZAB协议包括两种基本的模式,分别是 **崩溃恢复和消息广播**
关于
**ZAB 协议&Paxos算法**
需要讲和理解的东西太多了,说实话,笔主到现在不太清楚这俩兄弟的具体原理和实现过程。推荐阅读下面两篇文章:
-
[
图解 Paxos 一致性协议
](
http://
blog.xiaohansong.com/2016/09/30/Pa
xos/
)
-
[
Zookeeper ZAB 协议分析
](
http
://blog.xiaohansong.com/2016/08/25/zab/
)
-
[
图解 Paxos 一致性协议
](
http://
codemacro.com/2014/10/15/explain-po
xos/
)
-
[
Zookeeper ZAB 协议分析
](
http
s://dbaplus.cn/news-141-1875-1.html
)
关于如何使用 zookeeper 实现分布式锁,可以查看下面这篇文章:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录