用于提供 https://github.com/CyC2018/CS-Notes 项目的离线阅读
pdf 使用 cmd-markdown 的付费工具手工进行 pdf 的转换。
原作者已经制作好 gitbook 地址:https://legacy.gitbook.com/book/cyc2018/interview-notebook/details
那么为什么还需要本仓库? 我个人认为cmd-markdown 工具所转化的 pdf相比 gitbook 直接生成的 pdf 拥有更好的阅读体验!
- 新增机器学习小抄 , 文件较大,已放在百度云盘。不过 README 一般也没啥人看,就当个小彩蛋?
- 新增深度学习 500 问
- 100-Days-Of-ML-Code 中文版
- 阿里 Java 手册 1.4.0 版本
- 计算机网络-自顶向下 第七版英文原版
- 用动画的形式呈现解LeetCode题目的思路
- effective-java 第三版中文开源翻译
- 深入理解操作系统 第三版英文版原版-CSAPP 3rd
- 【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频
分割线
以下就可耻的抄袭原有仓库的内容介绍吧
Ⅰ | Ⅱ | Ⅲ | Ⅳ | Ⅴ | Ⅵ | Ⅶ | Ⅷ | Ⅸ | Ⅹ |
---|---|---|---|---|---|---|---|---|---|
算法✏️ | 操作系统💻 | 网络☁️ | 面向对象👫 | 数据库💾 | Java ☕ | 系统设计💡 | 工具🔨 | 编码实践🙊 | 后记📝 |
在 Java 中除了最为基础的东西之外,你只要看三样东西就可以了:
Java 中有三大支柱,在 java.util.concurrent、java.security、javax.cropty、javax.security 四个包中就占了两个(多线程、安全)
还有一个网络在 java.net、javax.net 中,呵呵
掌握了上面 6 个包及其子包中内容的话,那 Java 水平可以说达到了另一种境界。
PS:三大支柱是我之前给 Java 中多线程、网络和安全取的代号,嘿嘿
这三样中的东西非常多,基本上就是 Java 的核心所在。
多线程(multi-threading and concurrent)
- 关键词:volatile, sychronized
- 传统的线程 API:java.lang.Thread, java.lang.Runnable, java.lang.ThreadGroup, Object#wait, Object#notify, Object#notifyAll
- JDK 5 并发包(java.util.concurrent)API:线程池、任务执行器、计数信号量、倒计数门闩、并发集合(并发 Map、阻塞队列等)、基于 CPU CAS 指令的原子 API(java.util.concurrent.atomic)、锁 API(java.util.concurrent.lock)和条件对象等。
- 作为个人知识提升,还需要理解诸如自旋锁、分离锁、分拆锁、读写锁等的同步锁策略,以及可重入锁、锁的公平性的意义。以及各种并发锁的算法,比如:Peterson锁、Bakery锁 等等,以及现代 CPU 体系结构
涉及多线程及并发的 API 在 java.lang 中及 java.util.concurrent.* 中。
网络(network communication)
- 阻塞 TCP 通信、阻塞 UDP 通信、组播
- 非阻塞 TCP 通信、非阻塞 UDP 通信
- 客户端通信 API(java.net.URL, java.net.URLConnection 等类库)
涉及网络通信的 API 都在 java.net 和 java.nio.channels 包中。这里的网络已经将 RMI 相关包 java.rmi, javax.rmi 都排除了。
安全(security, cryptography and AAA)
- Java 加密类库 JCA
- Java 加密类库扩展 JCE
- 涉及密码学知识点的消息摘要、消息认证码、对称加密、非对称加密、数字签名
- 涉及网络通信证书管理工具(keytool)及 API(PKI、X.509证书)
- 基于 SSL/TLS 的安全网络通信 API(JSSE),包括:密钥库管理、信任库管理、阻塞 SSL 通信和非阻塞 SSL 通信等等
- Java 认证及授权服务(JAAS)API
涉及安全的东西都在:
- java.security(JCA、JCE、数字证书,以及 JCE 的 SPI)
- javax.net(SSL/TLS)
- javax.security(JAAS)
- javax.crypto(密码学)
- keytool 的 JDK 工具
<!-- GFM-TOC -->
***
<!-- GFM-TOC -->
对于所有的图片地址进行替换
例如:
src="../pics//f5757d09-88e7-4bbd-8cfb-cecf55604854.png"
替换为
src="https://github.com/CyC2018/Interview-Notebook/raw/master/pics/f5757d09-88e7-4bbd-8cfb-cecf55604854.png"
所有的width=""
都需要删除
使用正则表达式 width="[0-9]*"
进行替换
所有公式需要替换为遵守 MathJax
语法,代码为
public static void main(String[] args) {
// 使用最小匹配
String templete = "<img src=\"https://latex.codecogs.com/gif.latex?.*?\"/>";
Pattern pattern = Pattern.compile(templete);
String testStr = "为每个用户分配 m bit 的码片,并且所有的码片正交,对于任意两个码片 <img src=\"https://latex.codecogs.com/gif.latex?\\vec{S}\"/> 和 <img src=\"https://latex.codecogs.com/gif.latex?\\vec{T}\"/> 有";
Matcher matcher = pattern.matcher(testStr);
while (matcher.find()) {
String str = matcher.group(0);
System.out.println(str);
String newStr = str.substring(str.indexOf("?") + 1, str.length() - 3);
System.out.println("$" + newStr + "$");
testStr = testStr.replace(str, "$" + newStr + "$");
}
System.out.println(testStr);
}