Skip to content

Commit fbca6c1

Browse files
committed
docs: udpate LICENSE and notes
1 parent 742b190 commit fbca6c1

File tree

6 files changed

+98
-94
lines changed

6 files changed

+98
-94
lines changed

LICENSE

+22-24
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
This is free and unencumbered software released into the public domain.
2-
3-
Anyone is free to copy, modify, publish, use, compile, sell, or
4-
distribute this software, either in source code form or as a compiled
5-
binary, for any purpose, commercial or non-commercial, and by any
6-
means.
7-
8-
In jurisdictions that recognize copyright laws, the author or authors
9-
of this software dedicate any and all copyright interest in the
10-
software to the public domain. We make this dedication for the benefit
11-
of the public at large and to the detriment of our heirs and
12-
successors. We intend this dedication to be an overt act of
13-
relinquishment in perpetuity of all present and future rights to this
14-
software under copyright law.
15-
16-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19-
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20-
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21-
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22-
OTHER DEALINGS IN THE SOFTWARE.
23-
24-
For more information, please refer to <http://unlicense.org>
1+
# Creative Commons Attribution-NonCommercial 4.0 International License
2+
3+
Disclaimer: This is a human-readable summary of (and not a substitute for) the [license](http://creativecommons.org/licenses/by-nc/4.0/legalcode).
4+
5+
You are free to:
6+
7+
- Share — copy and redistribute the material in any medium or format
8+
- Adapt — remix, transform, and build upon the material
9+
10+
The licensor cannot revoke these freedoms as long as you follow the license terms.
11+
12+
Under the following terms:
13+
14+
- Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
15+
- NonCommercial — You may not use the material for commercial purposes.
16+
- No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
17+
18+
Notices:
19+
20+
You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.
21+
22+
No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.

README.md

+13-11
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,29 @@
55
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com)
66

77
## Introduction
8-
本仓库用于记录各大互联网公司 IT 技术面试高频题,包括《剑指 Offer》、《编程之美》等,我会一直抽空更新
8+
本仓库用于记录各大互联网公司 IT 技术面试高频题以及经典书籍读书笔记,包括《剑指 Offer》、《编程之美》、《代码整洁之道》等,抽空更新中
99

10-
如果大家觉得哪些地方写错了,或者有疑惑,欢迎提 Issues 反馈给我;我使用的语言是 Java,但也欢迎大家提交题目不同语言版本的 Solution,提交之前需要确保提交的内容格式与整个项目保持统一,嘿嘿,我对文档的规范是很苛刻的噢~
11-
12-
另外,我花了大量时间整理的内容,大家如果有转载的需求,也请注明一下[出处](https://github.com/doocs/coding-interview)
13-
14-
## Q & A
15-
### [剑指 Offer 题集](/docs/coding-interview.md)
10+
## Notes
11+
### [《剑指 Offer》](/docs/coding-interview.md)
1612
这本书选取的[题目](/docs/coding-interview.md)都是被各大公司面试官反复采用的编程题,极具实战意义。当然,如果一开始觉得这些题目比较难,也是很正常的,因为大公司的面试本身就不简单。我们逐步掌握书中总结的解题方法之后,再去面试大公司,将会轻松很多。
1713

18-
推荐两个在线刷《剑指 Offer》的平台,我个人比较倾向于 [AcWing](https://www.acwing.com)
14+
推荐两个在线刷《剑指 Offer》的平台,个人比较倾向于 [AcWing](https://www.acwing.com)
1915

2016
- [AcWing](https://www.acwing.com/problem/):墙裂推荐,支持 Java11。团队成员来自北大清华,剑指 Offer 第二版题目都有。
2117
- [NowCoder](https://www.nowcoder.com/ta/coding-interviews):这个应该大多数人都知道,但是没有剑指 Offer 第二版新增的题目。
2218

23-
### [编程之美题集](/docs/the-beauty-of-programming.md)
19+
### [《编程之美》](/docs/the-beauty-of-programming.md)
20+
21+
### [《代码整洁之道》](/docs/clean-code.md)
22+
这本书名为 *Clean Code*,乃是 Object Mentor(鲍勃大叔开办的技术咨询和培训公司)一干大牛在编程方面的经验累积。写整洁代码,需要遵循大量的小技巧,贯彻刻苦习得的“整洁感”。
23+
24+
作者 Robert C. Martin 在书中阐述了代码各个方面如何做到整洁的经验与最佳实践。我们若能长期遵照这些经验编写代码,所谓“代码感”也就自然而然滋生出来。
2425

2526
## Reading List
26-
- [x] 《剑指 Offer》 355/355 111
27+
- [x] 《剑指 Offer》 355/355
28+
- [x] 《代码整洁之道》 296/296
2729
- [ ] 《编程珠玑第二版》
28-
- [ ] 《编程之美:微软技术面试心得》 57/382 20
30+
- [ ] 《编程之美:微软技术面试心得》 57/382
2931
- [ ] 《程序员代码面试指南——IT名企算法与数据结构题目最优解》
3032
- [ ] 《Java 程序员面试笔试宝典》 67/349
3133
- [ ] 《程序员面试金典》

docs/clean-code.md

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# 《代码整洁之道》
2+
## 代码猴子与童子军军规
3+
1. 我们就像一群代码猴子,上蹿下跳,自以为领略了编程的真谛。可惜,当我们抓着几个酸桃子,得意洋洋坐到树枝上,却对自己造成的混乱熟视无睹。那堆“可以运行”的乱麻程序,就在我们的眼皮底下慢慢腐坏。
4+
5+
## 第一章 整洁代码
6+
1. 勒布朗法则:稍后等于永不(Later equals never.)
7+
1. 制造混乱无助于赶上期限。混乱只会立刻拖慢你,叫你错过期限。赶上期限的唯一方法——做的快的唯一方法——就是始终尽可能保持代码整洁。
8+
1. Javadoc 中的 `@author` 字段告诉我们自己是什么人。我们是作者。作者都有读者。实际上,作者有责任与读者做良好沟通。下次你写代码的时候,记得自己是作者,要为评判你工作的读者写代码。
9+
10+
## 第二章 有意义的命名
11+
## 第三章 函数
12+
1. 函数的第一规则是要短小。第二条规则是还要更短小...经过漫长的试错,经验告诉我,函数就该小。
13+
1. 函数应该做一件事。做好这件事。只做这一件事。判断函数是否不止做了一件事,有一个方法,就是看是否能再拆出一个函数,该函数不仅只是单纯地重新诠释其实现。
14+
1. 要确保函数只做一件事,函数中的语句都要在同一抽象层级上。函数中混杂不同的抽象层级,往往让人迷惑。读者可能无法判断某个表达式是基础概念还是细节。更恶劣的是,就像破损的窗户,一旦细节与基础概念混杂,更多的细节就会在函数中纠结起来。
15+
1. 写出短小的 switch 语句往往很难。写出只做一件事的 switch 语句也很难。我们总不发避开 switch 语句,不过还是能够确保 switch 都埋藏在较低的抽象层级,而且永远不重复。
16+
1. 最理想的参数数量是零,其次是一,再次是二...从测试的角度看,参数甚至更叫人为难。想想看,要编写能确保参数的各种组合运行正常的测试用例,是多么困难的事。如果没有参数,就是小菜一碟。
17+
1. 函数承诺只做一件事,但还是会做其它被藏起来的事。有时,它会对自己类中的变量做出未能预期的改动,导致古怪的时序性耦合及顺序依赖。
18+
19+
```java
20+
public class UserValidator {
21+
private Cryptographer cryptographer;
22+
23+
public boolean checkPassword(String userName, String password) {
24+
User user = UserGateway.findByName(userName);
25+
if (user != null) {
26+
String codePhrase = user.getPhraseEncodeByPassword();
27+
String phrase = cryptographer.decrypt(codePhrase, password);
28+
if ("Valid Password".equals(phrase)) {
29+
Session.initialize();
30+
return true;
31+
}
32+
}
33+
return false;
34+
}
35+
}
36+
```
37+
38+
副作用就在于对 `Session.initialize()` 的调用。`checkPassword` 函数是用来检查密码的。该名称未暗示它会初始化该次会话。当某个误信了函数名的调用者想要检查用户有效性时,就得冒着抹除现有会话数据的风险。这一副作用造成了一次时序性耦合。也就是说,`checkPassword` 只能在特定时刻调用。
39+
40+
## 第四章 注释
41+
1. 注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。注释总是一种失败。我们总无法找到不用注释就能表达自我的方法,所以总要有注释,这并不值得庆贺。
42+
2. 如果你发现自己需要写注释,再想想看是否有办法翻盘,用代码来表达。
43+
1. 有时,有理由用 `// TODO` 形式在源代码中放置要做的工作列表。`TODO` 是一种程序员认为应该做,但由于某些原因目前还没做的工作。
44+
1. 没有什么比被良好描述的公共 API 更有用和令人满意的了。如果你在编写公共 API,就该为它编写良好的 Javadoc。
45+
1. 删掉无用而多余的 Javadoc 吧,这些注释只是一味将代码搞得含糊不明,完全没有文档上的价值。
46+
1. 所谓每个函数都要有 Javadoc 或每个变量都要有注释的规矩全然是愚蠢可笑的。这类注释徒然让代码变得散乱,满口胡言,令人迷惑不解。
47+
1. 20 世纪 60 年代,曾经有那么一段时间,注释掉的代码可能有用。但我们已经拥有优良的源代码控制系统如此之久,这些系统可以为我们记住不要的代码。我们无需再用注释来标记,删掉即可,它们丢不了,我担保。
48+
49+
## 第五章 格式
50+
1. 代码格式很重要,必须严肃对待。代码格式关乎沟通,而沟通是专业开发者的头等大事。
51+
1. 你今天编写的功能,极有可能在下一版本中被修改,但代码的可读性却会对以后可能发生的修改行为产生深远影响。原始代码修改之后很久,其代码风格和可读性仍会影响到可维护性和扩展性。即便代码不复存在,你的风格和律条仍会存活下来。
52+
1. 若某个函数调用了另外一个,就应该把它们放在一起,而且调用者应该尽可能放在被调用者上面。
53+
54+
## 第六章 对象和数据结构
55+
1. 最为精炼的数据结构,是一个只有公共变量、没有函数的类。这种数据结构有时被称为数据传送对象,或 DTO(Data Transfer Objects)。DTO 是非常有用的结构,尤其是在于数据库通信、或解析套接字传输的消息之类的场景中。
56+
57+
## 第七章 使用异常而非返回码
58+
1. 在很久以前,许多语言都不支持异常。这些语言处理和汇报错误的手段都有限。你要么设置一个错误标识,要么返回给调用者检查的错误码。这类手段的问题在于,它们搞乱了调用者代码。调用者必须在调用之后即可检查错误。不幸的是,这个步骤很容易被遗忘。最好是抛出一个异常,这样其逻辑不会被错误处理搞乱。
59+
1. 使用不可控异常。可控异常 `checked exception` 的代价是违反开闭原则。如果你在方法中抛出可控异常,而 catch 语句在三个层级之上,你就得在 catch 语句和抛出异常处之间的每个方法签名中声明该异常。这意味着对软件中低层级的修改,都将涉及较高层级的签名。最终得到的就是一个从软件最底端贯穿到最高端的修改链。
60+
1. 别返回 null 值。我不想去计算曾经见过多少每行代码都在检查 null 值的应用程序。Java 中有 `Colletions.emptyList()` 方法,该方法返回一个预定义不可变列表,这样编码,就能尽量避免 `NullPointerException` 的出现,代码也就更整洁了。
61+
1. 别传递 null 值。在大多数编程语言中,没有良好的方法能对付由调用者意外传入 null 值。事已如此,恰当的做法就是禁止传入 null 值。

docs/coding-interview.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 剑指 Offer 题解
1+
# 剑指 Offer
22
## 3.1 找出数组中重复的数
33
来源:[AcWing](https://www.acwing.com/problem/content/14/)
44
### 题目描述

docs/the-beauty-of-programming.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 编程之美题解
1+
# 《编程之美》
22

33
## 1.2 中国象棋将帅问题
44

notes/00_Basic_Java.md

-57
This file was deleted.

0 commit comments

Comments
 (0)