Skip to content

Commit 42119f5

Browse files
committed
[docs update]partial content improvement
1 parent 46b48e2 commit 42119f5

File tree

10 files changed

+58
-28
lines changed

10 files changed

+58
-28
lines changed

README.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818

1919
</div>
2020

21-
> 1. **面试专版**:准备面试的小伙伴可以考虑面试专版:[《Java 面试指北 》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html) (质量很高,专为面试打造,配合 JavaGuide 食用)。
22-
> 1. **知识星球**:专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 [JavaGuide 知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看星球的详细介绍,一定一定一定确定自己真的需要再加入,一定一定要看完详细介绍之后再加我)。
23-
> 1. **学习建议** :有水平的面试官都是顺着项目经历挖掘问题。一定不要死记硬背技术八股文!
24-
> 1. **转载须知**:以下所有文章如非文首说明为转载皆为我(Guide)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
21+
> - **面试专版**:准备 Java 面试的小伙伴可以考虑面试专版:**[《Java 面试指北 》](./zhuanlan/java-mian-shi-zhi-bei.md)** (质量很高,专为面试打造,配合 JavaGuide 食用)。
22+
> - **知识星球**:专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 **[JavaGuide 知识星球](./about-the-author/zhishixingqiu-two-years.md)**(点击链接即可查看星球的详细介绍,一定确定自己真的需要再加入)。
23+
> - **使用建议** :有水平的面试官都是顺着项目经历挖掘技术问题。一定不要死记硬背技术八股文!详细的学习建议请参考:[JavaGuide 使用建议](./javaguide/use-suggestion.md)
24+
> - **求个Star**:如果觉得 JavaGuide 的内容对你有帮助的话,还请点个免费的 Star,这是对我最大的鼓励,感谢各位一起同行,共勉!Github 地址:[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)
25+
> - **转载须知**:以下所有文章如非文首说明为转载皆为 JavaGuide 原创,转载请在文首注明出处。如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
2526
2627
<div align="center">
2728
<img src="https://oss.javaguide.cn/github/javaguide/gongzhonghaoxuanchuan.png" style="margin: 0 auto;" />

docs/cs-basics/algorithms/10-classical-sorting-algorithms.md

+7-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ tag:
2424

2525
![十大排序算法](https://oss.javaguide.cn/github/javaguide/cs-basics/sorting-algorithms/sort1.png)
2626

27+
上图存在错误:
28+
29+
1. 插入排序的最好时间复杂度为 O(n) 而不是 O(n^2) 。
30+
2.
31+
2732
**图片名词解释:**
2833

2934
- **n**:数据规模
@@ -397,7 +402,7 @@ public static void quickSort(int[] array, int low, int high) {
397402

398403
- **稳定性**:不稳定
399404
- **时间复杂度**:最佳:O(nlogn), 最差:O(nlogn),平均:O(nlogn)
400-
- **空间复杂度**:O(nlogn)
405+
- **空间复杂度**:O(logn)
401406

402407
## 堆排序 (Heap Sort)
403408

@@ -649,7 +654,7 @@ public static List<Integer> bucketSort(List<Integer> arr, int bucket_size) {
649654

650655
- **稳定性**:稳定
651656
- **时间复杂度**:最佳:`O(n+k)` 最差:`O(n²)` 平均:`O(n+k)`
652-
- **空间复杂度**`O(k)`
657+
- **空间复杂度**`O(n+k)`
653658

654659
## 基数排序 (Radix Sort)
655660

docs/database/redis/redis-persistence.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ AOF 校验机制是 Redis 在启动时对 AOF 文件进行检查,以判断文
173173

174174
**RDB 比 AOF 优秀的地方**
175175

176-
- RDB 文件存储的内容是经过压缩的二进制数据, 保存着某个时间点的数据集,文件很小,适合做数据的备份,灾难恢复。AOF 文件存储的是每一次写命令,类似于 MySQL 的 binlog 日志,通常会必 RDB 文件大很多。当 AOF 变得太大时,Redis 能够在后台自动重写 AOF。新的 AOF 文件和原有的 AOF 文件所保存的数据库状态一样,但体积更小。不过, Redis 7.0 版本之前,如果在重写期间有写入命令,AOF 可能会使用大量内存,重写期间到达的所有写入命令都会写入磁盘两次。
176+
- RDB 文件存储的内容是经过压缩的二进制数据, 保存着某个时间点的数据集,文件很小,适合做数据的备份,灾难恢复。AOF 文件存储的是每一次写命令,类似于 MySQL 的 binlog 日志,通常会比 RDB 文件大很多。当 AOF 变得太大时,Redis 能够在后台自动重写 AOF。新的 AOF 文件和原有的 AOF 文件所保存的数据库状态一样,但体积更小。不过, Redis 7.0 版本之前,如果在重写期间有写入命令,AOF 可能会使用大量内存,重写期间到达的所有写入命令都会写入磁盘两次。
177177
- 使用 RDB 文件恢复数据,直接解析还原数据即可,不需要一条一条地执行命令,速度非常快。而 AOF 则需要依次执行每个写命令,速度非常慢。也就是说,与 AOF 相比,恢复大数据集的时候,RDB 速度更快。
178178

179179
**AOF 比 RDB 优秀的地方**

docs/database/redis/redis-questions-01.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,13 @@ null
147147

148148
**List 实现消息队列功能太简单,像消息确认机制等功能还需要我们自己实现,最要命的是没有广播机制,消息也只能被消费一次。**
149149

150-
**Redis 2.0 引入了 发布订阅 (pub/sub) 解决了 List 实现消息队列没有广播机制的问题。**
150+
**Redis 2.0 引入了发布订阅 (pub/sub) 功能,解决了 List 实现消息队列没有广播机制的问题。**
151+
152+
![Redis 发布订阅 (pub/sub) 功能](https://oss.javaguide.cn/github/javaguide/database/redis/redis-pub-sub.png)
151153

152154
pub/sub 中引入了一个概念叫 **channel(频道)**,发布订阅机制的实现就是基于这个 channel 来做的。
153155

154-
pub/sub 涉及发布者和订阅者(也叫消费者)两个角色:
156+
pub/sub 涉及发布者(Publisher)和订阅者(Subscriber,也叫消费者)两个角色:
155157

156158
- 发布者通过 `PUBLISH` 投递消息给指定 channel。
157159
- 订阅者通过`SUBSCRIBE`订阅它关心的 channel。并且,订阅者可以订阅一个或者多个 channel。

docs/home.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ title: JavaGuide(Java学习&&面试指南)
77

88
- **面试专版**:准备 Java 面试的小伙伴可以考虑面试专版:**[《Java 面试指北 》](./zhuanlan/java-mian-shi-zhi-bei.md)** (质量很高,专为面试打造,配合 JavaGuide 食用)。
99
- **知识星球**:专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 **[JavaGuide 知识星球](./about-the-author/zhishixingqiu-two-years.md)**(点击链接即可查看星球的详细介绍,一定确定自己真的需要再加入)。
10-
- **学习建议** :有水平的面试官都是顺着项目经历挖掘问题。一定不要死记硬背技术八股文!
11-
- **转载须知**:以下所有文章如非文首说明为转载皆为 JavaGuide 原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
10+
- **使用建议** :有水平的面试官都是顺着项目经历挖掘技术问题。一定不要死记硬背技术八股文!详细的学习建议请参考:[JavaGuide 使用建议](./javaguide/use-suggestion.md)
11+
- **求个Star**:如果觉得 JavaGuide 的内容对你有帮助的话,还请点个免费的 Star,这是对我最大的鼓励,感谢各位一起同行,共勉!Github 地址:[https://github.com/Snailclimb/JavaGuide](https://github.com/Snailclimb/JavaGuide)
12+
- **转载须知**:以下所有文章如非文首说明为转载皆为 JavaGuide 原创,转载请在文首注明出处。如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
1213

1314
:::
1415

docs/java/basis/java-basic-questions-01.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ head:
2222
2. 面向对象(封装,继承,多态);
2323
3. 平台无关性( Java 虚拟机实现平台无关性);
2424
4. 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
25-
5. 可靠性;
26-
6. 安全性;
27-
7. 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);
28-
8. 编译与解释并存;
25+
5. 可靠性(具备异常处理和自动内存管理机制);
26+
6. 安全性(Java 语言本身的设计就提供了多重安全防护机制如访问权限修饰符、限制程序直接访问操作系统资源);
27+
7. 高效性(通过 Just In Time 编译器等技术的优化,Java 语言的运行效率还是非常不错的);
28+
8. 支持网络编程并且很方便;
29+
9. 编译与解释并存;
30+
10. ......
2931

3032
> **🐛 修正(参见:[issue#544](https://github.com/Snailclimb/JavaGuide/issues/544)**:C++11 开始(2011 年的时候),C++就引入了多线程库,在 windows、linux、macos 都可以使用`std::thread``std::async`来创建线程。参考链接:http://www.cplusplus.com/reference/thread/thread/?kw=thread
3133

docs/java/basis/syntactic-sugar.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Java 中最常用的语法糖主要有泛型、变长参数、条件编译、自
4646

4747
在开始之前先科普下,Java 中的`switch`自身原本就支持基本类型。比如`int``char`等。对于`int`类型,直接进行数值的比较。对于`char`类型则是比较其 ascii 码。所以,对于编译器来说,`switch`中其实只能使用整型,任何类型的比较都要转换成整型。比如`byte``short``char`(ascii 码是整型)以及`int`
4848

49-
那么接下来看下`switch``String`得支持,有以下代码:
49+
那么接下来看下`switch``String`的支持,有以下代码:
5050

5151
```java
5252
public class switchDemoString {

docs/java/collection/arraylist-source-code.md

+29-8
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,39 @@ public class ArrayList<E> extends AbstractList<E>
2323
- `ArrayList` 实现了 **`Cloneable` 接口** ,即覆盖了函数`clone()`,能被克隆。
2424
- `ArrayList` 实现了 `java.io.Serializable`接口,这意味着`ArrayList`支持序列化,能通过序列化去传输。
2525

26-
### Arraylist 和 Vector 的区别?
26+
### ArrayList 和 Vector 的区别?(了解即可)
2727

28-
1. `ArrayList``List` 的主要实现类,底层使用 `Object[ ]`存储,适用于频繁的查找工作,线程不安全 ;
29-
2. `Vector``List` 的古老实现类,底层使用 `Object[ ]`存储,线程安全的。
28+
- `ArrayList``List` 的主要实现类,底层使用 `Object[]`存储,适用于频繁的查找工作,线程不安全 。
29+
- `Vector``List` 的古老实现类,底层使用`Object[]` 存储,线程安全。
30+
31+
### ArrayList 可以添加 null 值吗?
32+
33+
`ArrayList` 中可以存储任何类型的对象,包括 `null` 值。不过,不建议向`ArrayList` 中添加 `null` 值, `null` 值无意义,会让代码难以维护比如忘记做判空处理就会导致空指针异常。
34+
35+
示例代码:
36+
37+
```java
38+
ArrayList<String> listOfStrings = new ArrayList<>();
39+
listOfStrings.add(null);
40+
listOfStrings.add("java");
41+
System.out.println(listOfStrings);
42+
```
43+
44+
输出:
45+
46+
```
47+
[null, java]
48+
```
3049

3150
### Arraylist 与 LinkedList 区别?
3251

33-
1. **是否保证线程安全:** `ArrayList``LinkedList` 都是不同步的,也就是不保证线程安全;
34-
2. **底层数据结构:** `Arraylist` 底层使用的是 **`Object` 数组**`LinkedList` 底层使用的是 **双向链表** 数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环。注意双向链表和双向循环链表的区别,下面有介绍到!)
35-
3. **插入和删除是否受元素位置的影响:****`ArrayList` 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。** 比如:执行`add(E e)`方法的时候, `ArrayList` 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是 O(1)。但是如果要在指定位置 i 插入和删除元素的话(`add(int index, E element)`)时间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。 ② **`LinkedList` 采用链表存储,所以对于`add(E e)`方法的插入,删除元素时间复杂度不受元素位置的影响,近似 O(1),如果是要在指定位置`i`插入和删除元素的话(`(add(int index, E element)`) 时间复杂度近似为`o(n))`因为需要先移动到指定位置再插入。**
36-
4. **是否支持快速随机访问:** `LinkedList` 不支持高效的随机元素访问,而 `ArrayList` 支持。快速随机访问就是通过元素的序号快速获取元素对象(对应于`get(int index)`方法)。
37-
5. **内存空间占用:** `ArrayList` 的空 间浪费主要体现在在 list 列表的结尾会预留一定的容量空间,而 `LinkedList` 的空间花费则体现在它的每一个元素都需要消耗比 `ArrayList` 更多的空间(因为要存放直接后继和直接前驱以及数据)。
52+
- **是否保证线程安全:** `ArrayList``LinkedList` 都是不同步的,也就是不保证线程安全;
53+
- **底层数据结构:** `ArrayList` 底层使用的是 **`Object` 数组**`LinkedList` 底层使用的是 **双向链表** 数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环。注意双向链表和双向循环链表的区别,下面有介绍到!)
54+
- **插入和删除是否受元素位置的影响:**
55+
- `ArrayList` 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。 比如:执行`add(E e)`方法的时候, `ArrayList` 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是 O(1)。但是如果要在指定位置 i 插入和删除元素的话(`add(int index, E element)`),时间复杂度就为 O(n)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。
56+
- `LinkedList` 采用链表存储,所以在头尾插入或者删除元素不受元素位置的影响(`add(E e)``addFirst(E e)``addLast(E e)``removeFirst()``removeLast()`),时间复杂度为 O(1),如果是要在指定位置 `i` 插入和删除元素的话(`add(int index, E element)``remove(Object o)`,`remove(int index)`), 时间复杂度为 O(n) ,因为需要先移动到指定位置再插入和删除。
57+
- **是否支持快速随机访问:** `LinkedList` 不支持高效的随机元素访问,而 `ArrayList`(实现了 `RandomAccess` 接口) 支持。快速随机访问就是通过元素的序号快速获取元素对象(对应于`get(int index)`方法)。
58+
- **内存空间占用:** `ArrayList` 的空间浪费主要体现在在 list 列表的结尾会预留一定的容量空间,而 LinkedList 的空间花费则体现在它的每一个元素都需要消耗比 ArrayList 更多的空间(因为要存放直接后继和直接前驱以及数据)。
3859

3960
## ArrayList 核心源码解读
4061

docs/javaguide/use-suggestion.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: 食用建议
2+
title: 使用建议
33
category: 走近项目
44
icon: star
55
---

docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ Spring Boot 只是简化了配置,如果你需要构建 MVC 架构的 Web 程
129129

130130
Spring 时代我们一般通过 XML 文件来配置 Bean,后来开发人员觉得 XML 文件来配置不太好,于是 SpringBoot 注解配置就慢慢开始流行起来。
131131

132-
相关阅读:
132+
相关阅读:
133133

134134
- [IoC 源码阅读](https://javadoop.com/post/spring-ioc)
135135
- [面试被问了几百遍的 IoC 和 AOP ,还在傻傻搞不清楚?](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247486938&idx=1&sn=c99ef0233f39a5ffc1b98c81e02dfcd4&chksm=cea24211f9d5cb07fa901183ba4d96187820713a72387788408040822ffb2ed575d28e953ce7&token=1736772241&lang=zh_CN#rd)
@@ -320,8 +320,6 @@ public Person personPrototype() {
320320

321321
### Bean 的生命周期了解么?
322322

323-
> 下面的内容整理自:<https://yemengying.com/2016/07/14/spring-bean-life-cycle/> ,除了这篇文章,再推荐一篇很不错的文章:<https://www.cnblogs.com/zrtqsk/p/3735273.html>
324-
325323
- Bean 容器找到配置文件中 Spring Bean 的定义。
326324
- Bean 容器利用 Java Reflection API 创建一个 Bean 的实例。
327325
- 如果涉及到一些属性值 利用 `set()`方法设置一些属性值。

0 commit comments

Comments
 (0)