Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
CS-Notes
提交
73bb201a
C
CS-Notes
项目概览
wushizhenking
/
CS-Notes
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CS-Notes
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
73bb201a
编写于
4月 05, 2018
作者:
C
CyC2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
auto commit
上级
87550052
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
43 addition
and
20 deletion
+43
-20
notes/Leetcode 题解.md
notes/Leetcode 题解.md
+27
-0
notes/SQL.md
notes/SQL.md
+11
-13
notes/一致性协议.md
notes/一致性协议.md
+2
-2
notes/分布式问题分析.md
notes/分布式问题分析.md
+1
-1
notes/数据库系统原理.md
notes/数据库系统原理.md
+0
-4
notes/正则表达式.md
notes/正则表达式.md
+2
-0
未找到文件。
notes/Leetcode 题解.md
浏览文件 @
73bb201a
...
@@ -4231,6 +4231,33 @@ public ListNode deleteDuplicates(ListNode head) {
...
@@ -4231,6 +4231,33 @@ public ListNode deleteDuplicates(ListNode head) {
}
}
```
```
**删除链表的倒数第 n 个节点**
[
Leetcode : 19. Remove Nth Node From End of List (Medium)
](
https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/
)
```
html
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
```
```
java
public
ListNode
removeNthFromEnd
(
ListNode
head
,
int
n
)
{
ListNode
newHead
=
new
ListNode
(-
1
);
newHead
.
next
=
head
;
ListNode
fast
=
newHead
;
while
(
n
--
>
0
)
{
fast
=
fast
.
next
;
}
ListNode
slow
=
newHead
;
while
(
fast
.
next
!=
null
)
{
fast
=
fast
.
next
;
slow
=
slow
.
next
;
}
slow
.
next
=
slow
.
next
.
next
;
return
newHead
.
next
;
}
```
**交换链表中的相邻结点**
**交换链表中的相邻结点**
[
Leetcode : 24. Swap Nodes in Pairs (Medium)
](
https://leetcode.com/problems/swap-nodes-in-pairs/description/
)
[
Leetcode : 24. Swap Nodes in Pairs (Medium)
](
https://leetcode.com/problems/swap-nodes-in-pairs/description/
)
...
...
notes/SQL.md
浏览文件 @
73bb201a
...
@@ -330,7 +330,7 @@ FROM mytable
...
@@ -330,7 +330,7 @@ FROM mytable
可以对同一分组数据使用汇总函数进行处理,例如求分组数据的平均值等。
可以对同一分组数据使用汇总函数进行处理,例如求分组数据的平均值等。
指定的分组字段除了能
让数组
按该字段进行分组,也可以按该字段进行排序,例如按 col 字段排序并分组数据:
指定的分组字段除了能按该字段进行分组,也可以按该字段进行排序,例如按 col 字段排序并分组数据:
```
sql
```
sql
SELECT
col
,
COUNT
(
*
)
AS
num
SELECT
col
,
COUNT
(
*
)
AS
num
...
@@ -338,29 +338,29 @@ FROM mytable
...
@@ -338,29 +338,29 @@ FROM mytable
GROUP
BY
col
;
GROUP
BY
col
;
```
```
WHERE 过滤行,HAVING 过滤分组。行过滤应当先与分组过滤;
GROUP BY 是按照分组字段进行排序,ORDER BY 也可以以汇总字段来进行排序。
```
sql
```
sql
SELECT
col
,
COUNT
(
*
)
AS
num
SELECT
col
,
COUNT
(
*
)
AS
num
FROM
mytable
FROM
mytable
WHERE
col
>
2
GROUP
BY
col
GROUP
BY
col
HAVING
COUNT
(
*
)
>=
2
;
ORDER
BY
num
;
```
```
GROUP BY 的排序结果为分组字段,而 ORDER BY 也可以以聚集字段来进行排序。
WHERE 过滤行,HAVING 过滤分组。行过滤应当先与分组过滤;
```
sql
```
sql
SELECT
col
,
COUNT
(
*
)
AS
num
SELECT
col
,
COUNT
(
*
)
AS
num
FROM
mytable
FROM
mytable
WHERE
col
>
2
GROUP
BY
col
GROUP
BY
col
ORDER
BY
num
;
HAVING
COUNT
(
*
)
>=
2
;
```
```
分组规定:
分组规定:
1.
GROUP BY 子句出现在 WHERE 子句之后,ORDER BY 子句之前;
1.
GROUP BY 子句出现在 WHERE 子句之后,ORDER BY 子句之前;
2.
除了汇总
计算语句的
字段外,SELECT 语句中的每一字段都必须在 GROUP BY 子句中给出;
2.
除了汇总字段外,SELECT 语句中的每一字段都必须在 GROUP BY 子句中给出;
3.
NULL 的行会单独分为一组;
3.
NULL 的行会单独分为一组;
4.
大多数 SQL 实现不支持 GROUP BY 列具有可变长度的数据类型。
4.
大多数 SQL 实现不支持 GROUP BY 列具有可变长度的数据类型。
...
@@ -374,7 +374,7 @@ ORDER BY num;
...
@@ -374,7 +374,7 @@ ORDER BY num;
SELECT
*
SELECT
*
FROM
mytable1
FROM
mytable1
WHERE
col1
IN
(
SELECT
col2
WHERE
col1
IN
(
SELECT
col2
FROM
mytable2
);
FROM
mytable2
);
```
```
下面的语句可以检索出客户的订单数量,子查询语句会对第一个查询检索出的每个客户执行一次:
下面的语句可以检索出客户的订单数量,子查询语句会对第一个查询检索出的每个客户执行一次:
...
@@ -390,7 +390,7 @@ ORDER BY cust_name;
...
@@ -390,7 +390,7 @@ ORDER BY cust_name;
# 十五、连接
# 十五、连接
连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 W
here
。
连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 W
HERE
。
连接可以替换子查询,并且比子查询的效率一般会更快。
连接可以替换子查询,并且比子查询的效率一般会更快。
...
@@ -463,8 +463,8 @@ from employee natural join department;
...
@@ -463,8 +463,8 @@ from employee natural join department;
```
sql
```
sql
select
Customers
.
cust_id
,
Orders
.
order_num
select
Customers
.
cust_id
,
Orders
.
order_num
from
Customers
left
outer
join
Orders
from
Customers
left
outer
join
Orders
on
Customers
.
cust_id
=
Orders
.
curt_id
;
on
Customers
.
cust_id
=
Orders
.
curt_id
;
```
```
如果需要统计顾客的订单数,使用聚集函数。
如果需要统计顾客的订单数,使用聚集函数。
...
@@ -522,9 +522,7 @@ WHERE col5 = val;
...
@@ -522,9 +522,7 @@ WHERE col5 = val;
## 使用存储过程的好处
## 使用存储过程的好处
1.
代码封装,保证了一定的安全性;
1.
代码封装,保证了一定的安全性;
2.
代码复用;
2.
代码复用;
3.
由于是预先编译,因此具有很高的性能。
3.
由于是预先编译,因此具有很高的性能。
## 创建存储过程
## 创建存储过程
...
...
notes/一致性协议.md
浏览文件 @
73bb201a
...
@@ -58,7 +58,7 @@ Two-phase Commit(2PC)。
...
@@ -58,7 +58,7 @@ Two-phase Commit(2PC)。
<div
align=
"center"
>
<img
src=
"../pics//3f5bba4b-7813-4aea-b578-970c7e3f6bf3.jpg"
/>
</div><br>
<div
align=
"center"
>
<img
src=
"../pics//3f5bba4b-7813-4aea-b578-970c7e3f6bf3.jpg"
/>
</div><br>
如果 Acceptor 接
受
到一个提议请求,包含的提议为 [n2, v2],并且之前已经接收过提议 [n1, v1]。如果 n1 > n2,那么就丢弃该提议请求;否则,发送提议响应,该提议响应包含之前已经接收过的提议 [n1, v1],设置当前接收到的提议为 [n2, v2],并且保证以后不会再接受序号小于 n2 的提议。
如果 Acceptor 接
收
到一个提议请求,包含的提议为 [n2, v2],并且之前已经接收过提议 [n1, v1]。如果 n1 > n2,那么就丢弃该提议请求;否则,发送提议响应,该提议响应包含之前已经接收过的提议 [n1, v1],设置当前接收到的提议为 [n2, v2],并且保证以后不会再接受序号小于 n2 的提议。
如下图,Acceptor Z 收到 Proposer A 发来的 [n=2, v=8] 的提议请求,由于之前已经接收过 [n=4, v=5] 的提议,并且 n > 2,因此就抛弃该提议请求;Acceptor X 收到 Proposer B 发来的 [n=4, v=5] 的提议请求,因为之前接收到的提议为 [n=2, v=8],并且 2 <= 4,因此就发送 [n=2, v=8] 的提议响应,设置当前接收到的提议为 [n=4, v=5],并且保证以后不会再接受序号小于 4 的提议。Acceptor Y 类似。
如下图,Acceptor Z 收到 Proposer A 发来的 [n=2, v=8] 的提议请求,由于之前已经接收过 [n=4, v=5] 的提议,并且 n > 2,因此就抛弃该提议请求;Acceptor X 收到 Proposer B 发来的 [n=4, v=5] 的提议请求,因为之前接收到的提议为 [n=2, v=8],并且 2 <= 4,因此就发送 [n=2, v=8] 的提议响应,设置当前接收到的提议为 [n=4, v=5],并且保证以后不会再接受序号小于 4 的提议。Acceptor Y 类似。
...
@@ -66,7 +66,7 @@ Two-phase Commit(2PC)。
...
@@ -66,7 +66,7 @@ Two-phase Commit(2PC)。
当一个 Proposer 接收到超过一半 Acceptor 的提议响应时,就可以发送接受请求。
当一个 Proposer 接收到超过一半 Acceptor 的提议响应时,就可以发送接受请求。
Proposer A 接
受
到两个提议响应之后,就发送 [n=2, v=8] 接受请求。该接受请求会被所有 Acceptor 丢弃,因为此时所有 Acceptor 都保证不接受序号小于 4 的提议。
Proposer A 接
收
到两个提议响应之后,就发送 [n=2, v=8] 接受请求。该接受请求会被所有 Acceptor 丢弃,因为此时所有 Acceptor 都保证不接受序号小于 4 的提议。
Proposer B 过后也收到了两个提议响应,因此也开始发送接受请求。需要注意的是,接受请求的 v 需要取它收到的最大 v 值,也就是 8。因此它发送 [n=4, v=8] 的接受请求。
Proposer B 过后也收到了两个提议响应,因此也开始发送接受请求。需要注意的是,接受请求的 v 需要取它收到的最大 v 值,也就是 8。因此它发送 [n=4, v=8] 的接受请求。
...
...
notes/分布式问题分析.md
浏览文件 @
73bb201a
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
#### 2.1 消息处理模型
#### 2.1 消息处理模型
(一)
点对点
(一)
消息队列
<div
align=
"center"
>
<img
src=
"../pics//96b63e13-e2d8-4ddb-9aa1-a38959ca96e5.jpg"
width=
"700"
/>
</div><br>
<div
align=
"center"
>
<img
src=
"../pics//96b63e13-e2d8-4ddb-9aa1-a38959ca96e5.jpg"
width=
"700"
/>
</div><br>
...
...
notes/数据库系统原理.md
浏览文件 @
73bb201a
...
@@ -311,8 +311,6 @@ InnoDB 的 MVCC 使用到的快照存储在 Undo 日志中,该日志通过回
...
@@ -311,8 +311,6 @@ InnoDB 的 MVCC 使用到的快照存储在 Undo 日志中,该日志通过回
## 快照读与当前读
## 快照读与当前读
快照读读指的是而当前读指的是
### 1. 当前读
### 1. 当前读
读取最新的数据。
读取最新的数据。
...
@@ -335,8 +333,6 @@ update ;
...
@@ -335,8 +333,6 @@ update ;
delete
;
delete
;
```
```
# 六、Next-Key Locks
# 六、Next-Key Locks
Next-Key Locks 也是 MySQL 的 InnoDB 存储引擎的一种锁实现。MVCC 不能解决幻读的问题,Next-Key Locks 就是为了解决这个问题而存在的。在可重复读隔离级别下,MVCC + Next-Key Locks,就可以防止幻读的出现。
Next-Key Locks 也是 MySQL 的 InnoDB 存储引擎的一种锁实现。MVCC 不能解决幻读的问题,Next-Key Locks 就是为了解决这个问题而存在的。在可重复读隔离级别下,MVCC + Next-Key Locks,就可以防止幻读的出现。
...
...
notes/正则表达式.md
浏览文件 @
73bb201a
...
@@ -206,6 +206,8 @@ a.+c
...
@@ -206,6 +206,8 @@ a.+c
**|**
是或元字符,它把左边和右边所有的部分都看成单独的两个部分,两个部分只要有一个匹配就行。
**|**
是或元字符,它把左边和右边所有的部分都看成单独的两个部分,两个部分只要有一个匹配就行。
**正则表达式**
```
```
(19|20)\d{2}
(19|20)\d{2}
```
```
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录