From e3c63b6637f4a95981c4a6b54286667daab01c06 Mon Sep 17 00:00:00 2001 From: Yutong Wang Date: Mon, 17 Sep 2018 21:50:19 -0700 Subject: [PATCH 1/6] Simplify House Robber solution --- notes/Leetcode 题解.md | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/notes/Leetcode 题解.md b/notes/Leetcode 题解.md index 04a751c7..2d6b2d5f 100644 --- a/notes/Leetcode 题解.md +++ b/notes/Leetcode 题解.md @@ -2415,27 +2415,19 @@ public int climbStairs(int n) { 定义 dp 数组用来存储最大的抢劫量,其中 dp[i] 表示抢到第 i 个住户时的最大抢劫量。 由于不能抢劫邻近住户,因此如果抢劫了第 i 个住户那么只能抢劫 i - 2 或者 i - 3 的住户,所以 - -

+dp[i] = max(dp[i-1], dp[i-2] + nums[i])
```java public int rob(int[] nums) { - int n = nums.length; - if (n == 0) { - return 0; - } - if (n == 1) { - return nums[0]; - } - int pre3 = 0, pre2 = 0, pre1 = 0; - for (int i = 0; i < n; i++) { - int cur = Math.max(pre2, pre3) + nums[i]; - pre3 = pre2; + int pre2 = 0, pre1 = 0; + for (int i = 0; i < nums.length; i++) { + int cur = Math.max(pre2 + nums[i], pre1); pre2 = pre1; pre1 = cur; } - return Math.max(pre1, pre2); + return pre1; } + ``` **强盗在环形街区抢劫** @@ -2443,7 +2435,7 @@ public int rob(int[] nums) { [213. House Robber II (Medium)](https://leetcode.com/problems/house-robber-ii/description/) ```java -public int rob(int[] nums) { +public int rob(int[] nums) { if (nums == null || nums.length == 0) { return 0; } @@ -2454,15 +2446,14 @@ public int rob(int[] nums) { return Math.max(rob(nums, 0, n - 2), rob(nums, 1, n - 1)); } -private int rob(int[] nums, int first, int last) { - int pre3 = 0, pre2 = 0, pre1 = 0; +private int rob(int[] nums, int first, int last) { + int pre2 = 0, pre1 = 0; for (int i = first; i <= last; i++) { - int cur = Math.max(pre3, pre2) + nums[i]; - pre3 = pre2; + int cur = Math.max(pre1, pre2 + nums[i]); pre2 = pre1; pre1 = cur; } - return Math.max(pre2, pre1); + return pre1; } ``` From 497812bd4232da65e88b9e7628a0e7de5abb3030 Mon Sep 17 00:00:00 2001 From: Yutong Wang Date: Mon, 17 Sep 2018 23:40:06 -0700 Subject: [PATCH 2/6] Fix a bug in the Minimum Path Sum solution Check boundary --- notes/Leetcode 题解.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notes/Leetcode 题解.md b/notes/Leetcode 题解.md index 2d6b2d5f..d09ff18d 100644 --- a/notes/Leetcode 题解.md +++ b/notes/Leetcode 题解.md @@ -2505,9 +2505,9 @@ public int minPathSum(int[][] grid) { for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i == 0) { - dp[j] = dp[j - 1]; + if (j>0) dp[j] = dp[j - 1]; } else { - dp[j] = Math.min(dp[j - 1], dp[j]); + if (j>0) dp[j] = Math.min(dp[j - 1], dp[j]); } dp[j] += grid[i][j]; } From 177a4325950ebebbfcc69c9c9a41d31ddba091d3 Mon Sep 17 00:00:00 2001 From: Jingui Ren <1198980993@qq.com> Date: Tue, 18 Sep 2018 10:31:09 +0000 Subject: [PATCH 3/6] =?UTF-8?q?mask=E8=AE=A1=E7=AE=97=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当mask = 11011000的时候,mask |= mask >> 2这个时候的值应该为11111110 --- notes/Java 容器.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 容器.md b/notes/Java 容器.md index 84189928..e42a42f0 100644 --- a/notes/Java 容器.md +++ b/notes/Java 容器.md @@ -738,7 +738,7 @@ HashMap 构造函数允许用户传入的容量不是 2 的 n 次方,因为它 ``` mask |= mask >> 1 11011000 -mask |= mask >> 2 11111100 +mask |= mask >> 2 11111110 mask |= mask >> 4 11111111 ``` From 642411cdc62dde62b7e9bfbc583a3cd3624e9633 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 19 Sep 2018 12:56:03 +0800 Subject: [PATCH 4/6] auto commit --- notes/Java 基础.md | 11 +++---- notes/Java 容器.md | 2 +- notes/Leetcode 题解.md | 28 ++++++------------ notes/MySQL.md | 2 +- notes/剑指 offer 题解.md | 6 ++-- notes/数据库系统原理.md | 12 ++++---- notes/算法.md | 6 ++-- notes/系统设计基础.md | 5 ++++ notes/缓存.md | 4 ++- notes/计算机操作系统.md | 2 +- notes/设计模式.md | 7 +++-- pics/70fa1f83-dae7-456d-b94b-ce28963b2ba1.png | Bin 0 -> 17408 bytes 12 files changed, 43 insertions(+), 42 deletions(-) create mode 100644 pics/70fa1f83-dae7-456d-b94b-ce28963b2ba1.png diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 9da25851..eb3572cd 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -216,7 +216,7 @@ System.out.println(s3 == s4); // true ```java String s5 = "bbb"; String s6 = "bbb"; -System.out.println(s4 == s5); // true +System.out.println(s5 == s6); // true ``` 在 Java 7 之前,String Pool 被放在运行时常量池中,它属于永久代。而在 Java 7,String Pool 被移到堆中。这是因为永久代的空间有限,在大量使用字符串的场景下会导致 OutOfMemoryError 错误。 @@ -226,9 +226,9 @@ System.out.println(s4 == s5); // true ## new String("abc") -使用这种方式一共会创建两个字符串对象(前提是 String Poll 中还没有 "abc" 字符串对象)。 +使用这种方式一共会创建两个字符串对象(前提是 String Pool 中还没有 "abc" 字符串对象)。 -- "abc" 属于字符串字面量,因此编译时期会在 String Poll 中创建一个字符串对象,指向这个 "abc" 字符串字面量; +- "abc" 属于字符串字面量,因此编译时期会在 String Pool 中创建一个字符串对象,指向这个 "abc" 字符串字面量; - 而使用 new 的方式会在堆中创建一个字符串对象。 创建一个测试类,其 main 方法中使用这种方式来创建字符串对象。 @@ -267,7 +267,7 @@ Constant pool: // ... ``` -在 Constant Poll 中,#19 存储这字符串字面量 "abc",#3 是 String Poll 的字符串对象,它指向 #19 这个字符串字面量。在 main 方法中,0: 行使用 new #2 在堆中创建一个字符串对象,并且使用 ldc #3 将 String Poll 中的字符串对象作为 String 构造函数的参数。 +在 Constant Pool 中,#19 存储这字符串字面量 "abc",#3 是 String Pool 的字符串对象,它指向 #19 这个字符串字面量。在 main 方法中,0: 行使用 new #2 在堆中创建一个字符串对象,并且使用 ldc #3 将 String Pool 中的字符串对象作为 String 构造函数的参数。 以下是 String 构造函数的源码,可以看到,在将一个字符串对象作为另一个字符串对象的构造函数参数时,并不会完全复制 value 数组内容,而是都会指向同一个 value 数组。 @@ -368,10 +368,11 @@ short s1 = 1; // s1 = s1 + 1; ``` -但是使用 += 运算符可以执行隐式类型转换。 +但是使用 += 或者 ++ 运算符可以执行隐式类型转换。 ```java s1 += 1; +// s1++; ``` 上面的语句相当于将 s1 + 1 的计算结果进行了向下转型: diff --git a/notes/Java 容器.md b/notes/Java 容器.md index 84189928..e42a42f0 100644 --- a/notes/Java 容器.md +++ b/notes/Java 容器.md @@ -738,7 +738,7 @@ HashMap 构造函数允许用户传入的容量不是 2 的 n 次方,因为它 ``` mask |= mask >> 1 11011000 -mask |= mask >> 2 11111100 +mask |= mask >> 2 11111110 mask |= mask >> 4 11111111 ``` diff --git a/notes/Leetcode 题解.md b/notes/Leetcode 题解.md index 04a751c7..def70c60 100644 --- a/notes/Leetcode 题解.md +++ b/notes/Leetcode 题解.md @@ -2420,21 +2420,13 @@ public int climbStairs(int n) { ```java public int rob(int[] nums) { - int n = nums.length; - if (n == 0) { - return 0; - } - if (n == 1) { - return nums[0]; - } - int pre3 = 0, pre2 = 0, pre1 = 0; - for (int i = 0; i < n; i++) { - int cur = Math.max(pre2, pre3) + nums[i]; - pre3 = pre2; + int pre2 = 0, pre1 = 0; + for (int i = 0; i < nums.length; i++) { + int cur = Math.max(pre2 + nums[i], pre1); pre2 = pre1; pre1 = cur; } - return Math.max(pre1, pre2); + return pre1; } ``` @@ -2443,7 +2435,7 @@ public int rob(int[] nums) { [213. House Robber II (Medium)](https://leetcode.com/problems/house-robber-ii/description/) ```java -public int rob(int[] nums) { +public int rob(int[] nums) { if (nums == null || nums.length == 0) { return 0; } @@ -2454,15 +2446,14 @@ public int rob(int[] nums) { return Math.max(rob(nums, 0, n - 2), rob(nums, 1, n - 1)); } -private int rob(int[] nums, int first, int last) { - int pre3 = 0, pre2 = 0, pre1 = 0; +private int rob(int[] nums, int first, int last) { + int pre2 = 0, pre1 = 0; for (int i = first; i <= last; i++) { - int cur = Math.max(pre3, pre2) + nums[i]; - pre3 = pre2; + int cur = Math.max(pre1, pre2 + nums[i]); pre2 = pre1; pre1 = cur; } - return Math.max(pre2, pre1); + return pre1; } ``` @@ -7063,4 +7054,3 @@ public int[] countBits(int num) { - 何海涛, 软件工程师. 剑指 Offer: 名企面试官精讲典型编程题[M]. 电子工业出版社, 2014. - 《编程之美》小组. 编程之美[M]. 电子工业出版社, 2008. - 左程云. 程序员代码面试指南[M]. 电子工业出版社, 2015. - diff --git a/notes/MySQL.md b/notes/MySQL.md index 2c5d8935..f5479685 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -374,7 +374,7 @@ MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 时间戳转换为日期,并提 ### 2. 连接 -可以将原来的连接分解成多个单表连接查询,然后在用户程序中进行连接。 +可以将原来的连接分解成多个单表查询,然后在用户程序中进行连接。 ### 3. ID 唯一性 diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index 2c8f2822..e1a87b5b 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -1154,11 +1154,11 @@ public ListNode FindKthToTail(ListNode head, int k) { ## 解题思路 -使用双指针,一个指针 fast 每次移动两个节点,一个指针 slow 每次移动一个节点。因为存在环,所以两个指针必定相遇在环中的某个节点上。假设相遇点在下图的 z1 位置,此时 fast 移动的节点数为 x+2y+z,slow 为 x+y,由于 fast 速度比 slow 快一倍,因此 x+2y+z=2(x+y),得到 x=z。 +使用双指针,一个指针 fast 每次移动两个节点,一个指针 slow 每次移动一个节点。因为存在环,所以两个指针必定相遇在环中的某个节点上。假设相遇点在下图的 y6 位置,此时 fast 移动的节点数为 x+2y+z,slow 为 x+y,由于 fast 速度比 slow 快一倍,因此 x+2y+z=2(x+y),得到 x=z。 在相遇点,slow 要到环的入口点还需要移动 z 个节点,如果让 fast 重新从头开始移动,并且速度变为每次移动一个节点,那么它到环入口点还需要移动 x 个节点。在上面已经推导出 x=z,因此 fast 和 slow 将在环入口点相遇。 -

+

```java public ListNode EntryNodeOfLoop(ListNode pHead) { @@ -1559,7 +1559,7 @@ public ArrayList> Print(TreeNode pRoot) { 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。 -例如,下图是后序遍历序列 3,1,2 所对应的二叉搜索树。 +例如,下图是后序遍历序列 1,3,2 所对应的二叉搜索树。

diff --git a/notes/数据库系统原理.md b/notes/数据库系统原理.md index 1bcd2533..1ce774fa 100644 --- a/notes/数据库系统原理.md +++ b/notes/数据库系统原理.md @@ -294,12 +294,12 @@ SELECT ... FOR UPDATE; ---- -| 隔离级别 | 脏读 | 不可重复读 | 幻影读 | -| :---: | :---: | :---:| :---: | -| 未提交读 | √ | √ | √ | -| 提交读 | × | √ | √ | -| 可重复读 | × | × | √ | -| 可串行化 | × | × | × | +| 隔离级别 | 脏读 | 不可重复读 | 幻影读 | 加锁读 | +| :---: | :---: | :---:| :---: | :---: | +| 未提交读 | √ | √ | √ | × | +| 提交读 | × | √ | √ | × | +| 可重复读 | × | × | √ | × | +| 可串行化 | × | × | × | √ | # 五、多版本并发控制 diff --git a/notes/算法.md b/notes/算法.md index cb83830b..1bc0690a 100644 --- a/notes/算法.md +++ b/notes/算法.md @@ -459,7 +459,7 @@ public abstract class MergeSort> extends Sort { 将一个大数组分成两个小数组去求解。 -因为每次都将问题对半分成两个子问题,而这种对半分的算法复杂度一般为 O(NlogN),因此该归并排序方法的时间复杂度也为 O(NlogN)。 +因为每次都将问题对半分成两个子问题,这种对半分的算法复杂度一般为 O(NlogN)。 ```java public class Up2DownMergeSort> extends MergeSort { @@ -617,7 +617,7 @@ public class ThreeWayQuickSort> extends QuickSort { 可以利用这个特性找出数组的第 k 个元素。 -该算法是线性级别的,因为每次能将数组二分,那么比较的总次数为 (N+N/2+N/4+..),直到找到第 k 个元素,这个和显然小于 2N。 +该算法是线性级别的,假设每次能将数组二分,那么比较的总次数为 (N+N/2+N/4+..),直到找到第 k 个元素,这个和显然小于 2N。 ```java public T select(T[] nums, int k) { @@ -2292,7 +2292,7 @@ from H1 to H3 可以将每种字符转换成二进制编码,例如将 a 转换为 00,b 转换为 01,c 转换为 10,d 转换为 11。这是最简单的一种编码方式,没有考虑各个字符的权值(出现频率)。而哈夫曼编码采用了贪心策略,使出现频率最高的字符的编码最短,从而保证整体的编码长度最短。 -首先生成一颗哈夫曼树,每次生成过程中选取频率最少的两个节点,生成一个新节点作为它们的父节点,并且新节点的频率为两个节点的和。选取频率最少的原因是,生成过程使得先选取的节点在树的最底层,那么需要的编码长度更长,频率更少可以使得总编码长度更少。 +首先生成一颗哈夫曼树,每次生成过程中选取频率最少的两个节点,生成一个新节点作为它们的父节点,并且新节点的频率为两个节点的和。选取频率最少的原因是,生成过程使得先选取的节点位于树的更低层,那么需要的编码长度更长,频率更少可以使得总编码长度更少。 生成编码时,从根节点出发,向左遍历则添加二进制位 0,向右则添加二进制位 1,直到遍历到叶子节点,叶子节点代表的字符的编码就是这个路径编码。 diff --git a/notes/系统设计基础.md b/notes/系统设计基础.md index 4a961140..ffa5de70 100644 --- a/notes/系统设计基础.md +++ b/notes/系统设计基础.md @@ -4,6 +4,7 @@ * [三、扩展性](#三扩展性) * [四、可用性](#四可用性) * [五、安全性](#五安全性) +* [参考资料](#参考资料) @@ -102,3 +103,7 @@ # 五、安全性 要求系统的应对各种攻击手段时能够有可靠的应对措施。 + +# 参考资料 + +- 大型网站技术架构:核心原理与案例分析 diff --git a/notes/缓存.md b/notes/缓存.md index 8f7449bf..07a9e866 100644 --- a/notes/缓存.md +++ b/notes/缓存.md @@ -99,7 +99,7 @@ public class LRU implements Iterable { if (map.size() > maxSize) { Node toRemove = removeTail(); - map.remove(toRemove); + map.remove(toRemove.k); } } @@ -114,6 +114,7 @@ public class LRU implements Iterable { private void appendHead(Node node) { node.next = head.next; + node.next.pre = node; node.pre = head; head.next = node; } @@ -122,6 +123,7 @@ public class LRU implements Iterable { private Node removeTail() { Node node = tail.pre; tail.pre = node.pre; + node.pre.next = tail; return node; } diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index e6c462a6..c0c4364e 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -1038,7 +1038,7 @@ gcc -o hello hello.c ## 静态链接 -静态连接器以一组可重定向目标文件为输入,生成一个完全链接的可执行目标文件作为输出。链接器主要完成以下两个任务: +静态链接器以一组可重定向目标文件为输入,生成一个完全链接的可执行目标文件作为输出。链接器主要完成以下两个任务: - 符号解析:每个符号对应于一个函数、一个全局变量或一个静态变量,符号解析的目的是将每个符号引用与一个符号定义关联起来。 - 重定位:链接器通过把每个符号定义与一个内存位置关联起来,然后修改所有对这些符号的引用,使得它们指向这个内存位置。 diff --git a/notes/设计模式.md b/notes/设计模式.md index d44d0e33..c177ff92 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -177,7 +177,7 @@ public class Singleton { #### Ⅵ 枚举实现 - ```java +```java public enum Singleton { INSTANCE; @@ -217,7 +217,7 @@ public enum Singleton { } } } - ``` +``` 该实现在多次序列化再进行反序列化之后,不会得到多个实例。而其它实现,为了保证不会出现反序列化之后出现多个实例,需要使用 transient 修饰所有字段,并且实现序列化和反序列化的方法。 @@ -276,6 +276,7 @@ public class ConcreteProduct2 implements Product { ```java public class Client { + public static void main(String[] args) { int type = 1; Product product; @@ -295,6 +296,7 @@ public class Client { ```java public class SimpleFactory { + public Product createProduct(int type) { if (type == 1) { return new ConcreteProduct1(); @@ -308,6 +310,7 @@ public class SimpleFactory { ```java public class Client { + public static void main(String[] args) { SimpleFactory simpleFactory = new SimpleFactory(); Product product = simpleFactory.createProduct(1); diff --git a/pics/70fa1f83-dae7-456d-b94b-ce28963b2ba1.png b/pics/70fa1f83-dae7-456d-b94b-ce28963b2ba1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d28e99622f41e6d1d67f1d1d4f94cef7505530b GIT binary patch literal 17408 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 literal 0 HcmV?d00001 From c7ce8a05a515d203582e5313b95509685c68492c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=99=BA=E6=85=A7?= Date: Wed, 19 Sep 2018 15:54:20 +0800 Subject: [PATCH 5/6] =?UTF-8?q?[BUG=5FFIX]=20=E4=BF=AE=E6=94=B9=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E9=94=99=E8=AF=AF=EF=BC=8C=E4=BA=8B=E5=8A=A1=E7=89=B9?= =?UTF-8?q?=E6=80=A7=E4=B8=BA=20ACID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/分布式.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/notes/分布式.md b/notes/分布式.md index a39ae35e..d2b2f974 100644 --- a/notes/分布式.md +++ b/notes/分布式.md @@ -99,7 +99,7 @@ Zookeeper 提供了一种树形结构级的命名空间,/app1/p_1 节点的父 # 二、分布式事务 -指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。 +指事务的操作位于不同的节点上,需要保证事务的 ACID 特性。 例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。 @@ -335,4 +335,5 @@ Raft 也是分布式一致性协议,主要是用来竞选主节点。 - [What is CAP theorem in distributed database system?](http://www.colooshiki.com/index.php/2017/04/20/what-is-cap-theorem-in-distributed-database-system/) - [NEAT ALGORITHMS - PAXOS](http://harry.me/blog/2014/12/27/neat-algorithms-paxos/) - [Paxos By Example](https://angus.nyc/2012/paxos-by-example/) +- [ACID](https://en.wikipedia.org/wiki/ACID_(computer_science)) From 9aa420219f83fb941cb91c8304dcb4a5ba0aa331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= Date: Thu, 20 Sep 2018 00:12:26 +0800 Subject: [PATCH 6/6] Update README.md --- README.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ded19a67..116e2a4b 100644 --- a/README.md +++ b/README.md @@ -208,25 +208,28 @@ Power by [logomakr](https://logomakr.com/). 感谢以下人员对本仓库做出的贡献,当然不仅仅只有这些贡献者,这里就不一一列举了。如果你希望被添加到这个名单中,并且提交过 Issue 或者 PR,请与笔者联系。 - + - + - + - + - + - + - + + + + #### License