Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ba53fa4
拼写错误修复
ipofss Jul 23, 2019
95530a8
拼写错误修复
ipofss Jul 23, 2019
787c319
fix:书写错误->Spring篇
yellowgg Jul 23, 2019
e4db22a
fix:书写错误->Git篇
yellowgg Jul 23, 2019
5c40599
Update SpringInterviewQuestions.md
wangxiaowu241 Jul 23, 2019
382fc23
拼写错误修复
ipofss Jul 24, 2019
229377c
加入提示语
ipofss Jul 24, 2019
a2b1e00
指向新链接
ipofss Jul 24, 2019
3d770ea
redis线程模型
Jul 25, 2019
ac3a10a
Merge pull request #1 from Snailclimb/master
keepal7 Jul 25, 2019
47776db
最长公共前缀题目数组检测函数修复
keepal7 Jul 25, 2019
45e24a8
最长公共前缀题目数组检测函数修复
keepal7 Jul 25, 2019
4ac1b32
Merge pull request #397 from vayci/master
Snailclimb Jul 25, 2019
6b1df97
Merge pull request #398 from ipofss/patch-1
Snailclimb Jul 25, 2019
4d00713
Merge pull request #399 from ipofss/patch-2
Snailclimb Jul 25, 2019
9ae6c3f
Merge pull request #400 from yellowgg/master
Snailclimb Jul 25, 2019
dd65486
Merge pull request #403 from ipofss/patch-3
Snailclimb Jul 25, 2019
5bf2a3f
Merge branch 'master' into master
Snailclimb Jul 25, 2019
a6f08f5
Merge pull request #402 from wangxiaowu241/master
Snailclimb Jul 25, 2019
526a0c4
Merge pull request #407 from ipofss/patch-4
Snailclimb Jul 25, 2019
8a86d75
Merge pull request #408 from ipofss/patch-5
Snailclimb Jul 25, 2019
f0201cd
Merge pull request #409 from YangAnLin/master
Snailclimb Jul 25, 2019
bb4630c
Merge pull request #410 from keepal7/master
Snailclimb Jul 25, 2019
d6ec462
Update README.md
Snailclimb Jul 25, 2019
d85fa99
Update MySQL.md
ipofss Jul 26, 2019
9af5efd
Update rabbitmq.md
Snailclimb Jul 27, 2019
b909702
Merge pull request #411 from ipofss/patch-1
Snailclimb Jul 27, 2019
e54ae79
Update MySQL.md
Snailclimb Jul 28, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,10 @@ Markdown 格式参考:[Github Markdown格式](https://guides.github.com/featur

<a href="https://github.com/fanofxiaofeng">
<img src="https://avatars0.githubusercontent.com/u/3983683?s=460&v=4" width="45px"></a>
<a href="https://github.com/dongzl">
<a href="https://github.com/fanchenggang">
<img src="https://avatars2.githubusercontent.com/u/8225921?s=460&v=4" width="45px">
</a>
<a href="https://github.com/ipofss">
<img src="https://avatars1.githubusercontent.com/u/5917359?s=460&v=4" width="45px"></a>
<a href="https://github.com/Gene1994">
<img src="https://avatars3.githubusercontent.com/u/24930369?s=460&v=4" width="45px">
Expand Down Expand Up @@ -339,4 +342,4 @@ Markdown 格式参考:[Github Markdown格式](https://guides.github.com/featur

**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。

![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)
![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)
26 changes: 15 additions & 11 deletions docs/dataStructures-algorithms/几道常见的子符串算法题.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,17 +135,21 @@ public class Main {

}

private static boolean checkStrs(String[] strs) {
if (strs != null) {
// 遍历strs检查元素值
for (int i = 0; i < strs.length; i++) {
if (strs[i] == null || strs[i].length() == 0) {
return false;
}
}
}
return true;
}
private static boolean chechStrs(String[] strs) {
boolean flag = false;
if (strs != null) {
// 遍历strs检查元素值
for (int i = 0; i < strs.length; i++) {
if (strs[i] != null && strs[i].length() != 0) {
flag = true;
} else {
flag = false;
break;
}
}
}
return flag;
}

// 测试
public static void main(String[] args) {
Expand Down
4 changes: 2 additions & 2 deletions docs/dataStructures-algorithms/数据结构.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且

### ArrayList 和 LinkedList 源码学习

- [ArrayList 源码学习](https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/ArrayList.md)
- [LinkedList 源码学习](https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/LinkedList.md)
- [ArrayList 源码学习](https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/ArrayList.md)
- [LinkedList 源码学习](https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/LinkedList.md)

### 推荐阅读

Expand Down
22 changes: 13 additions & 9 deletions docs/database/MySQL.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,13 @@

## 文字教程推荐

[MySQL 教程(菜鸟教程)](http://www.runoob.com/MySQL/MySQL-tutorial.html)
- [Github-MySQL入门教程(MySQL tutorial book)](https://github.com/jaywcjlove/mysql-tutorial) (从零开始学习MySQL,主要是面向MySQL数据库管理系统初学者)
- [官方教程](https://dev.mysql.com/doc/refman/5.7/)
- [MySQL 教程(菜鸟教程)](http://www.runoob.com/MySQL/MySQL-tutorial.html)

[MySQL教程(易百教程)](https://www.yiibai.com/MySQL/)
## 相关资源推荐

- [中国5级行政区域mysql库](https://github.com/kakuilan/china_area_mysql)

## 视频教程推荐

Expand Down Expand Up @@ -95,7 +99,7 @@ MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,
**两者的对比:**

1. **是否支持行级锁** : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
2. **是否支持事务和崩溃后的安全恢复: MyISAM** 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。但是**InnoDB** 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
2. **是否支持事务和崩溃后的安全恢复: MyISAM** 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。但是**InnoDB** 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
3. **是否支持外键:** MyISAM不支持,而InnoDB支持。
4. **是否支持MVCC** :仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 `READ COMMITTED` 和 `REPEATABLE READ` 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。推荐阅读:[MySQL-InnoDB-MVCC多版本并发控制](https://segmentfault.com/a/1190000012650596)
5. ......
Expand All @@ -104,7 +108,7 @@ MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,

> 不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的。在很多我们已知场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用。

一般情况下我们选择 InnoDB 都是没有问题的,但是某事情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。
一般情况下我们选择 InnoDB 都是没有问题的,但是某些情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。

### 字符集及校对规则

Expand Down Expand Up @@ -160,14 +164,14 @@ select sql_no_cache count(*) from usr;

![事物的特性](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/事务特性.png)

1. **原子性:** 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2. **一致性:** 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
3. **隔离性:** 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
4. **持久性:** 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
1. **原子性(Atomicity):** 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2. **一致性(Consistency):** 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
3. **隔离性(Isolation):** 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
4. **持久性(Durability):** 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

### 并发事务带来哪些问题?

在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对统一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。

- **脏读(Dirty read):** 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。
- **丢失修改(Lost to modify):** 指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。
Expand Down
15 changes: 15 additions & 0 deletions docs/database/Redis/Redis.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,21 @@

使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。

### redis 的线程模型

> 参考地址:https://www.javazhiyin.com/22943.html

redis 内部使用文件事件处理器 `file event handler`,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:

- 多个 socket
- IO 多路复用程序
- 文件事件分派器
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。


### redis 和 memcached 的区别

Expand Down
4 changes: 2 additions & 2 deletions docs/network/干货:计算机网络知识总结.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
#### <font color="#99CC33"> 分组(packet ):
因特网中传送的数据单元。由首部header和数据段组成。分组又称为包,首部可称为包头。
#### <font color="#99CC33"> 存储转发(store and forward ):
路由器收到一个分组,先存储下来,再检查气首部,查找转发表,按照首部中的目的地址,找到合适的接口转发出去。
路由器收到一个分组,先存储下来,再检查其首部,查找转发表,按照首部中的目的地址,找到合适的接口转发出去。
#### <font color="#99CC33"> 带宽(bandwidth):
在计算机网络中,表示在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。常用来表示网络的通信线路所能传送数据的能力。单位是“比特每秒”,记为b/s。
#### <font color="#99CC33"> 吞吐量(throughput ):
Expand Down Expand Up @@ -193,7 +193,7 @@

<font color="#999999">12,以太网的适配器具有过滤功能,它只接收单播帧,广播帧和多播帧。</font>

<font color="#999999">13,使用集线器可以在物理层扩展以太网(扩展后的以太网任然是一个网络)</font>
<font color="#999999">13,使用集线器可以在物理层扩展以太网(扩展后的以太网仍然是一个网络)</font>
### <font color="#003333">(3),最重要的知识点<font>
#### ① <font color="#999999">数据链路层的点对点信道和广播信道的特点,以及这两种信道所使用的协议(PPP协议以及CSMA/CD协议)的特点<font>
#### ② <font color="#999999">数据链路层的三个基本问题:**封装成帧**,**透明传输**,**差错检测**<font>
Expand Down
4 changes: 2 additions & 2 deletions docs/operating-system/Shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ echo $length #输出:5
echo $length2 #输出:5
# 输出数组第三个元素
echo ${array[2]} #输出:3
unset array[1]# 删除下表为1的元素也就是删除第二个元素
unset array[1]# 删除下标为1的元素也就是删除第二个元素
for i in ${array[@]};do echo $i ;done # 遍历数组,输出: 1 3 4 5
unset arr_number; # 删除数组中的所有元素
for i in ${array[@]};do echo $i ;done # 遍历数组,数组元素为空,没有任何输出内容
Expand All @@ -283,7 +283,7 @@ for i in ${array[@]};do echo $i ;done # 遍历数组,数组元素为空,没

![算数运算符](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-11-22/4937342.jpg)

我以加法运算符做一个简单的示例:
我以加法运算符做一个简单的示例(注意:不是单引号,是反引号)

```shell
#!/bin/bash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@

### 1.1 操作系统简介

我通过以下四点介绍什么操作系统
我通过以下四点介绍什么是操作系统

- **操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石;**
- **操作系统本质上是运行在计算机上的软件程序 ;**
Expand Down Expand Up @@ -193,7 +193,7 @@ Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.g

f:指定文件名

比如:加入test目录下有三个文件分别是:aaa.txt bbb.txt ccc.txt,如果我们要打包test目录并指定压缩后的压缩包名称为test.tar.gz可以使用命令:**`tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt`或:`tar -zcvf test.tar.gz /test/`**
比如:假如test目录下有三个文件分别是:aaa.txt bbb.txt ccc.txt,如果我们要打包test目录并指定压缩后的压缩包名称为test.tar.gz可以使用命令:**`tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt`或:`tar -zcvf test.tar.gz /test/`**


**2)解压压缩包:**
Expand Down
4 changes: 2 additions & 2 deletions docs/system-design/data-communication/rabbitmq.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ direct 类型常用在处理有优先级的任务,根据任务的优先级把

- RoutingKey 为一个点号“.”分隔的字符串(被点号“.”分隔开的每一段独立的字符串称为一个单词),如 “com.rabbitmq.client”、“java.util.concurrent”、“com.hidden.client”;
- BindingKey 和 RoutingKey 一样也是点号“.”分隔的字符串;
- BindingKey 中可以存在两种特殊字符串“*”和“#”,用于做模糊匹配,其中“.”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)。
- BindingKey 中可以存在两种特殊字符串“*”和“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)。

![topic 类型交换器](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-16/73843.jpg)

Expand Down Expand Up @@ -177,7 +177,7 @@ erlang 官网下载:[http://www.erlang.org/downloads](http://www.erlang.org/do

```shell
[root@SnailClimb local]#yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel
```
```

**5 进入erlang 安装包解压文件对 erlang 进行安装环境的配置**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ Spring 官网列出的 Spring 的 6 个特征:
![Spring主要模块](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/Spring主要模块.png)

- **Spring Core:** 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IoC 依赖注入功能。
- **Spring Aspects ** : 该模块为与AspectJ的集成提供支持。
- **Spring AOP** :提供了面向方面的编程实现
- **Spring Aspects** : 该模块为与AspectJ的集成提供支持。
- **Spring AOP** :提供了面向切面的编程实现
- **Spring JDBC** : Java数据库连接。
- **Spring JMS** :Java消息服务。
- **Spring ORM** : 用于支持Hibernate等ORM工具。
Expand Down Expand Up @@ -227,7 +227,7 @@ public OneService getService(status) {

我们一般使用 `@Autowired` 注解自动装配 bean,要想把类标识成可用于 `@Autowired` 注解自动装配的 bean 的类,采用以下注解可实现:

- `@Component` :通用的注解,可标注任意类为 `Spring` 组件。如果一个Bean不知道属于拿个层,可以使用`@Component` 注解标注。
- `@Component` :通用的注解,可标注任意类为 `Spring` 组件。如果一个Bean不知道属于哪个层,可以使用`@Component` 注解标注。
- `@Repository` : 对应持久层即 Dao 层,主要用于数据库相关操作。
- `@Service` : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao层。
- `@Controller` : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
Expand Down
2 changes: 1 addition & 1 deletion docs/tools/Git.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ Git 有三种状态,你的文件可能处于其中之一:
2. **已修改(modified)**:已修改表示修改了文件,但还没保存到数据库中。
3. **已暂存(staged)**:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由此引入 Git 项目的三个工作区域的概念:**Git 仓库(.git directoty) **、**工作目录(Working Directory)** 以及 **暂存区域(Staging Area)** 。
由此引入 Git 项目的三个工作区域的概念:**Git 仓库(.git directoty)**、**工作目录(Working Directory)** 以及 **暂存区域(Staging Area)** 。

<div align="center">
<img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3areas.png" width="500px"/>
Expand Down