Skip to content
Merged
32 changes: 15 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
| Ⅰ | Ⅱ | Ⅲ | Ⅳ | Ⅴ | Ⅵ | Ⅶ | Ⅷ | Ⅸ | Ⅹ |
| :--------: | :---------: | :---------: | :---------: | :---------: | :---------:| :---------: | :-------: | :-------:| :------:|
| 算法[:pencil2:](#算法-pencil2) | 操作系统[:computer:](#操作系统-computer)|网络[:cloud:](#网络-cloud) | 面向对象[:couple:](#面向对象-couple) |数据库[:floppy_disk:](#数据库-floppy_disk)| Java [:coffee:](#java-coffee)| 系统设计[:bulb:](#系统设计-bulb)| 工具[:hammer:](#工具-hammer)| 编码实践[:speak_no_evil:](#编码实践-speak_no_evil)| 后记[:memo:](#后记-memo) |
| 算法[:pencil2:](#pencil2-算法) | 操作系统[:computer:](#computer-操作系统)|网络[:cloud:](#cloud-网络) | 面向对象[:couple:](#couple-面向对象) |数据库[:floppy_disk:](#floppy_disk-数据库)| Java [:coffee:](#coffee-java)| 系统设计[:bulb:](#bulb-系统设计)| 工具[:hammer:](#hammer-工具)| 编码实践[:speak_no_evil:](#speak_no_evil-编码实践)| 后记[:memo:](#memo-后记) |

<br>
<div align="center">
Expand All @@ -11,7 +11,7 @@

<!-- [![](https://img.shields.io/badge/>-gitter-blue.svg)](https://gitter.im/CyC2018-Interview-Notebook/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link) [![](https://img.shields.io/badge/_-gitbook-4ab8a1.svg)](https://legacy.gitbook.com/book/cyc2018/interview-notebook/details) -->

## 算法 :pencil2:
## :pencil2: 算法

- [剑指 Offer 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/剑指%20offer%20题解.md)

Expand All @@ -25,7 +25,7 @@

排序、并查集、栈和队列、红黑树、散列表。

## 操作系统 :computer:
## :computer: 操作系统

- [计算机操作系统](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机操作系统.md)

Expand All @@ -35,7 +35,7 @@

基本实现原理以及基本操作。

## 网络 :cloud:
## :cloud: 网络

- [计算机网络](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机网络.md)

Expand All @@ -49,7 +49,7 @@

I/O 模型、I/O 多路复用。

## 面向对象 :couple:
## :couple: 面向对象

- [设计模式](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/设计模式.md)

Expand All @@ -59,7 +59,7 @@

三大原则(继承、封装、多态)、类图、设计原则。

## 数据库 :floppy_disk:
## :floppy_disk: 数据库

- [数据库系统原理](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/数据库系统原理.md)

Expand All @@ -81,7 +81,7 @@

五种数据类型、字典和跳跃表数据结构、使用场景、和 Memcache 的比较、淘汰策略、持久化、文件事件的 Reactor 模式、复制。

## Java :coffee:
## :coffee: Java

- [Java 基础](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20基础.md)

Expand All @@ -103,7 +103,7 @@

NIO 的原理以及实例。

## 系统设计 :bulb:
## :bulb: 系统设计

- [系统设计基础](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/系统设计基础.md)

Expand All @@ -129,7 +129,7 @@

消息处理模型、使用场景、可靠性

## 工具 :hammer:
## :hammer: 工具

- [Git](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Git.md)

Expand All @@ -147,7 +147,7 @@

构建工具的基本概念、主流构建工具介绍。

## 编码实践 :speak_no_evil:
## :speak_no_evil: 编码实践

- [重构](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/重构.md)

Expand All @@ -161,7 +161,7 @@

Google 开源项目的代码风格规范。

## 后记 :memo:
## :memo: 后记

### About

Expand Down Expand Up @@ -195,12 +195,6 @@

笔者将自己实现文档转换功能提取出来,方便大家在需要将本地 Markdown 上传到 Github,或者制作项目 README 文档时生成目录时使用:[GFM-Converter](https://github.com/CyC2018/GFM-Converter)。

### License

在对本作品进行演绎时,请署名并以相同方式共享。

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a>

### Statement

本仓库不参与商业行为,不向读者收取任何费用。(This repository is not engaging in business activities, and does not charge readers any fee.)
Expand Down Expand Up @@ -235,5 +229,9 @@ Power by [logomakr](https://logomakr.com/).
<img src="other/10072416.jpg" width="50px">
</a>

### License

在对本作品进行演绎时,请署名并以相同方式共享。

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a>

11 changes: 6 additions & 5 deletions notes/Docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,15 @@ Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程

## 启动速度

启动虚拟机需要启动虚拟机的操作系统,再启动相应的应用,这个过程会非常慢
启动虚拟机需要启动虚拟机的操作系统,再启动应用,这个过程非常慢

而启动 Docker 相当于启动宿主操作系统上的一个进程。

## 占用资源

虚拟机是一个完整的操作系统,需要占用大量的磁盘空间、内存和 CPU,一台机器只能开启几十个的虚拟机。
虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU,一台机器只能开启几十个的虚拟机。

而 Docker 只是一个进程,只需要将应用以及相应的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。
而 Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。

参考资料:

Expand All @@ -58,7 +58,7 @@ Docker 使用分层技术和镜像,使得应用可以更容易复用重复部

## 更容易扩展

可以使用基础镜像进一步扩展得到新的镜像,并且官方和开源社区提供了大量的镜像,通过扩展这些镜像得到我们想要的镜像非常容易
可以使用基础镜像进一步扩展得到新的镜像,并且官方和开源社区提供了大量的镜像,通过扩展这些镜像可以非常容易得到我们想要的镜像

参考资料:

Expand Down Expand Up @@ -91,7 +91,7 @@ Docker 轻量级的特点使得它很适合用于部署、维护、组合微服

镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。

在构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。
构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。

<div align="center"> <img src="../pics//docker-filesystems-busyboxrw.png"/> </div><br>

Expand All @@ -100,3 +100,4 @@ Docker 轻量级的特点使得它很适合用于部署、维护、组合微服
- [How to Create Docker Container using Dockerfile](https://linoxide.com/linux-how-to/dockerfile-create-docker-container/)
- [理解 Docker(2):Docker 镜像](http://www.cnblogs.com/sammyliu/p/5877964.html)


2 changes: 1 addition & 1 deletion notes/Java 基础.md
Original file line number Diff line number Diff line change
Expand Up @@ -707,7 +707,7 @@ public class EqualExample {

## hashCode()

hasCode() 返回散列值,而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价。
hashCode() 返回散列值,而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价。

在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证等价的两个对象散列值也相等。

Expand Down
7 changes: 2 additions & 5 deletions notes/Java 并发.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,7 @@ public static void main(String[] args) {
mt.start();
}
```
## 三种实现方式的比较
- 实现Runnable接又可以避免Java单继承特性而带来的局限;增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;适合多个相同程序代码的线程区处理同一资源的情况。
- 继承Thread类和实现Runnable方法启动线 程都是使用start方法,然后JVM虚拟机将此线程放到就绪队列中,如果有处理机可用, 则执行run方法。
- 实现Callable接又要实现call方法,并且线 程执行完毕后会有返回值。其他的两种都是 重写run方法,没有返回值。

## 实现接口 VS 继承 Thread

实现接口会更好一些,因为:
Expand Down Expand Up @@ -1023,7 +1020,7 @@ ForkJoinPool 实现了工作窃取算法来提高 CPU 的利用率。每个线

如果多个线程对同一个共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致的。

以下代码演示了 1000 个线程同时对 cnt 执行自增操作,操作结束之后它的值为 997 而不是 1000。
以下代码演示了 1000 个线程同时对 cnt 执行自增操作,操作结束之后它的值有可能小于 1000。

```java
public class ThreadUnsafeExample {
Expand Down
9 changes: 4 additions & 5 deletions notes/Leetcode 题解.md
Original file line number Diff line number Diff line change
Expand Up @@ -3602,7 +3602,7 @@ public int countPrimes(int n) {

```java
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a% b);
return b == 0 ? a : gcd(b, a % b);
}
```

Expand Down Expand Up @@ -3673,7 +3673,7 @@ public String convertToBase7(int num) {
}
```

Java 中 static String toString(int num, int radix) 可以将一个整数转换为 redix 进制表示的字符串。
Java 中 static String toString(int num, int radix) 可以将一个整数转换为 radix 进制表示的字符串。

```java
public String convertToBase7(int num) {
Expand Down Expand Up @@ -6403,7 +6403,6 @@ public int maxChunksToSorted(int[] arr) {
}
```


## 图

### 二分图
Expand Down Expand Up @@ -6620,6 +6619,7 @@ public int[] findRedundantConnection(int[][] edges) {
}

private class UF {

private int[] id;

UF(int N) {
Expand Down Expand Up @@ -6665,7 +6665,7 @@ x ^ x = 0 x & x = x x | x = x
```

- 利用 x ^ 1s = \~x 的特点,可以将位级表示翻转;利用 x ^ x = 0 的特点,可以将三个数中重复的两个数去除,只留下另一个数。
- 利用 x & 0s = 0 和 x & 1s = x 的特点,可以实现掩码操作。一个数 num 与 mask :00111100 进行位与操作,只保留 num 中与 mask 的 1 部分相对应的位。
- 利用 x & 0s = 0 和 x & 1s = x 的特点,可以实现掩码操作。一个数 num 与 mask:00111100 进行位与操作,只保留 num 中与 mask 的 1 部分相对应的位。
- 利用 x | 0s = x 和 x | 1s = 1s 的特点,可以实现设值操作。一个数 num 与 mask:00111100 进行位或操作,将 num 中与 mask 的 1 部分相对应的位都设置为 1。

位与运算技巧:
Expand Down Expand Up @@ -6910,7 +6910,6 @@ public boolean isPowerOfFour(int num) {
}
```


**判断一个数的位级表示是否不会出现连续的 0 和 1**

[693. Binary Number with Alternating Bits (Easy)](https://leetcode.com/problems/binary-number-with-alternating-bits/description/)
Expand Down
Loading