Skip to content

Commit 51d0b32

Browse files
committed
update notes
1 parent 5c4e1e1 commit 51d0b32

9 files changed

Lines changed: 443 additions & 341 deletions

File tree

JavaKnowledge/.DS_Store

0 Bytes
Binary file not shown.

JavaKnowledge/JVM垃圾回收机制.md

Lines changed: 114 additions & 77 deletions
Large diffs are not rendered by default.

JavaKnowledge/JVM架构.md

Lines changed: 85 additions & 52 deletions
Large diffs are not rendered by default.

JavaKnowledge/MVC与MVP及MVVM.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ MVC 分层同时也简化了分组开发。不同的开发人员可同时开发
1515

1616
- 优点
1717
- 耦合性低
18-
- 重用性高
19-
- 可维护性高
20-
- 有利软件工程化管理
21-
18+
- 重用性高
19+
- 可维护性高
20+
- 有利软件工程化管理
21+
2222
- 缺点
2323
- 没有明确的定义
2424
- 视图与控制器间的过于紧密的连接
@@ -34,7 +34,7 @@ MVP
3434
所有的交互都发生在`Presenter`内部,而在`MVC``View`会直接从`Model`中读取数据而不是通过`Controller`
3535
`MVC`里,`View`是可以直接访问`Model`的!从而,`View`里会包含`Model`信息,不可避免的还要包括一些业务逻辑。
3636
`MVC`模型里,更关注的`Model`的不变,而同时有多个对`Model`的不同显示及`View`。所以,在`MVC`模型里,`Model`不依赖于`View`,但是`View`是依赖于`Model`的。
37-
不仅如此,因为有一些业务逻辑在`View`里实现了,导致要更改`View`也是比较困难的,至少那些业务逻辑是无法重用的。
37+
不仅如此,因为有一些业务逻辑在`View`里实现了,导致要更改`View`也是比较困难的,至少那些业务逻辑是无法重用的。
3838

3939
![image](https://github.com/CharonChui/Pictures/blob/master/is-activity-god-the-mvp-architecture-10-638.jpg?raw=true)
4040

@@ -56,8 +56,8 @@ MVP
5656

5757
- 缺点
5858
由于对视图的渲染放在了`Presenter`中,所以视图和`Presenter`的交互会过于频繁。还有一点需要明白,如果`Presenter`过多地渲染了视图,
59-
往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么`Presenter`也需要变更了。
60-
比如说,原本用来呈现`Html`的`Presenter`现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。
59+
往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么`Presenter`也需要变更了。
60+
比如说,原本用来呈现`Html``Presenter`现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。
6161

6262
MVVM
6363
---
@@ -66,9 +66,11 @@ MVVM是Model-View-ViewModel的简写。
6666

6767
![](https://raw.githubusercontent.com/CharonChui/Pictures/master/MVVM.png)
6868

69-
MVVM模式将Presener改名为View Model,基本上与MVP模式完全一致,同样是以VM为核心,但是不同于MVP,MVVM采用了数据双向绑定的方案,替代了繁琐复杂的DOM操作。该模型中,View与VM保持同步,View绑定到VM的属性上,如果VM数据发生变化,通过数据绑定的方式,View会自动更新视图;VM同样也暴露出Model中的数据。
69+
MVVM模式将Presener改名为View Model,基本上与MVP模式完全一致,同样是以VM为核心,但是不同于MVP,MVVM采用了数据双向绑定的方案,替代了繁琐复杂的DOM操作。
70+
该模型中,View与VM保持同步,View绑定到VM的属性上,如果VM数据发生变化,通过数据绑定的方式,View会自动更新视图;VM同样也暴露出Model中的数据。
7071

71-
看起来MVVM很好的解决了MVC和MVP的不足,但是由于数据和视图的双向绑定,导致出现问题时不太好定位来源,有可能数据问题导致,也有可能业务逻辑中对视图属性的修改导致。如果项目中打算用MVVM的话可以考虑使用官方的架构组件ViewModel、LiveData、DataBinding去实现MVVM
72+
看起来MVVM很好的解决了MVC和MVP的不足,但是由于数据和视图的双向绑定,导致出现问题时不太好定位来源,有可能数据问题导致,也有可能业务逻辑中对视图
73+
属性的修改导致。如果项目中打算用MVVM的话可以考虑使用官方的架构组件ViewModel、LiveData、DataBinding去实现MVVM
7274

7375

7476

@@ -83,4 +85,4 @@ MVVM模式将Presener改名为View Model,基本上与MVP模式完全一致,
8385
- 邮箱 :charon.chui@gmail.com
8486
- Good Luck!
8587

86-
88+

JavaKnowledge/Top-K问题.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,28 @@ Top-K问题
2121

2222
- 局部淘汰法
2323

24-
该方法与排序方法类似,用一个容器保存前`10000`个数,然后将剩余的所有数字逐一与容器内的最小数字相比,如果所有后续的元素都比容器内的`10000`个数还小,那么容器内这个`10000`个数就是最大`10000`个数。如果某一后续元素比容器内最小数字大,则删掉容器内最小元素,并将该元素插入容器,最后遍历完这`1`亿个数,得到的结果容器中保存的数即为最终结果了。此时的时间复杂度为`O(n+m^2)`,其中`m`为容器的大小,即`10000`
24+
该方法与排序方法类似,用一个容器保存前`10000`个数,然后将剩余的所有数字逐一与容器内的最小数字相比,如果所有后续的元素都比容器内的`10000`个数还小,
25+
那么容器内这个`10000`个数就是最大`10000`个数。如果某一后续元素比容器内最小数字大,则删掉容器内最小元素,并将该元素插入容器,最后遍历完这`1`
26+
亿个数,得到的结果容器中保存的数即为最终结果了。此时的时间复杂度为`O(n+m^2)`,其中`m`为容器的大小,即`10000`
2527

2628
- 分治法
2729

28-
`1`亿个数据分成`100`份,每份`100`万个数据,找到每份数据中最大的`10000`个,最后在剩下的`100*10000`个数据里面找出最大的`10000`个。如果`100`万数据选择足够理想,那么可以过滤掉`1`亿数据里面`99%`的数据。`100`万个数据里面查找最大的`10000`个数据的方法如下:用快速排序的方法,将数据分为`2`堆,如果大的那堆个数`N`大于`10000`个,继续对大堆快速排序一次分成`2`堆,如果大的那堆个数`N`大于`10000`个,继续对大堆快速排序一次分成`2`堆,如果大堆个数`N`小于`10000`个,就在小的那堆里面快速排序一次,找第`10000-n`大的数字;递归以上过程,就可以找到第`10000`大的数。一共需要101次这样的比较。
30+
`1`亿个数据分成`100`份,每份`100`万个数据,找到每份数据中最大的`10000`个,最后在剩下的`100*10000`个数据里面找出最大的`10000`个。
31+
如果`100`万数据选择足够理想,那么可以过滤掉`1`亿数据里面`99%`的数据。`100`万个数据里面查找最大的`10000`个数据的方法如下:
32+
用快速排序的方法,将数据分为`2`堆,如果大的那堆个数`N`大于`10000`个,继续对大堆快速排序一次分成`2`堆,如果大的那堆个数`N`大于`10000`个,
33+
继续对大堆快速排序一次分成`2`堆,如果大堆个数`N`小于`10000`个,就在小的那堆里面快速排序一次,找第`10000-n`大的数字;递归以上过程,就可
34+
以找到第`10000`大的数。一共需要101次这样的比较。
2935

3036
- `Hash`
3137

32-
如果这`1`亿个书里面有很多重复的数,先通过`Hash`法,把这`1`亿个数字去重复,这样如果重复率很高的话,会减少很大的内存用量,从而缩小运算空间,然后通过分治法或最小堆法查找最大的`10000`个数。
38+
如果这`1`亿个数里面有很多重复的数,先通过`Hash`法,把这`1`亿个数字去重复,这样如果重复率很高的话,会减少很大的内存用量,从而缩小运算空间,
39+
然后通过分治法或最小堆法查找最大的`10000`个数。
3340

3441
- 最小堆
3542

36-
首先读入前`10000`个数来创建大小为`10000`的最小堆,建堆的时间复杂度为`O(mlogm)``m`为数组的大小即为`10000`),然后遍历后续的数字,并于堆顶(最小)数字进行比较。如果比最小的数小,则继续读取后续数字;如果比堆顶数字大,则替换堆顶元素并重新调整堆为最小堆。整个过程直至`1`亿个数全部遍历完为止。然后按照中序遍历的方式输出当前堆中的所有`10000`个数字。该算法的时间复杂度为`O(nmlogm)`,空间复杂度是10000(常数)。
43+
首先读入前`10000`个数来创建大小为`10000`的最小堆,建堆的时间复杂度为`O(mlogm)``m`为数组的大小即为`10000`),然后遍历后续的数字,
44+
并于堆顶(最小)数字进行比较。如果比最小的数小,则继续读取后续数字;如果比堆顶数字大,则替换堆顶元素并重新调整堆为最小堆。整个过程直至`1`亿
45+
个数全部遍历完为止。然后按照中序遍历的方式输出当前堆中的所有`10000`个数字。该算法的时间复杂度为`O(nmlogm)`,空间复杂度是10000(常数)。
3746

3847

3948
解决`Top K`问题有两种思路:

JavaKnowledge/Vim使用教程.md

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,23 @@ Vim使用教程
1818
- `i` 进入`insert`模式
1919
- `a(append)` 在光标后进行插入,直接进入`insert`模式
2020
- `o(open a line below)` 在当前行后插入一个新行,直接进入`insert`模式
21-
- `I` 从改行的最前面开始编辑
22-
- `A` 从改行的最后面开始编辑
21+
- `I` 从该行的最前面开始编辑
22+
- `A` 从该行的最后面开始编辑
2323
- `cw` 替换从光标位置开始到该单词结束位置的所有字符,直接进入`Insert`模式
2424

25+
在VIM中,有相当一部分命令可以扩展为3部分:
26+
27+
- 开头的部分是一个数字,代表重复次数;
28+
- 中间的部分是命令;
29+
- 最后的部分,代表命令的对象。
30+
31+
比如,命令3de中,3表示执行3次,d是删除命令,e表示从当前位置到单词的末尾。整条命令的意思就是,从当前位置向后,删除3个单词。类似的,命令3ce表示从当前位置向后,删除三个单词,然后进入编辑模式。
32+
33+
可以看到,命令组合的前两个部分比较简单,但第三个部分也就是命令对象,技巧就比较多了。所以接下来,我就与你详细介绍下到底有哪些命令对象可以使用。
34+
35+
其实,对命令对象并没有一个完整的分类。但我根据经验,将其总结为光标移动命令和文本对象两种。
36+
37+
第一种是光标移动命令。比如,$命令是移动光标到本行末尾,那么d$就表示删除到本行末尾;再比如,4}表示向下移动4个由空行隔开的段落,那么d4}就是删除这4个段落。
2538

2639
移动光标
2740
---
@@ -36,7 +49,8 @@ Vim使用教程
3649
- `$` $光标移动当前行尾
3750
- `0` 数字0光标移动当前行首
3851

39-
- `e` 移动到单词结束位置
52+
- `e` 向右移动一个单词
53+
- `w` 向右移动一个单词,与e的区别是w是把光标放到下一个单词的开头,而e是把光标放到这一个单词的结尾。
4054
- `b` 移动到单词开始位置
4155
- `:59` 移动到59行
4256
- `#l` 移动光标到该行第#个字的位置,如`5l`
@@ -96,7 +110,7 @@ Vim使用教程
96110
- `>>` 当前行缩进
97111
- `#>>` 当前光标下n行缩进
98112
- `<<` 当前行缩出
99-
- `>>` 当前光标下n行缩出
113+
- `#<<` 当前光标下n行缩出
100114

101115
- `: set nu` 会在文件每一行前面显示行号
102116
- `:wq` 保存并退出

0 commit comments

Comments
 (0)