为什么要创建这个仓库?
我在学习编程的时候,经常会搜索一些资料,但无论是Google还是百度,搜索出来的资料往往都不系统,资料的质量也参差不齐。直到现在,我都认为阅读书籍是最系统的学习方式。计算机科学的知识体系太庞大了,如果一些知识学过,却在之后一段时间不再触及,很容易就忘掉,但我们不可能时时刻刻都能随手拿到一本相应的书来作为参考,因此系统地整理一些自己看过的博文合集显得十分必要了。
随着仓库维护时间越来越长,我发现仓库的内容不仅仅对自己有用,对别人也有一定的参考价值。在拿了一些star后,我渐渐加上了一些自己学习心得,主要是关于一些自己读过的书籍。希望对你们有参考价值。
其实我觉得每个人都可以建一个这样的仓库,整理知识的过程也是一个学习的过程。通过反复阅读与复习,慢慢知识就成了自己的一部分。
阅读需知:
-
推荐使用chrome插件:简悦来阅读。
-
如果你在中国境内,部分文章可能需要科学上网才能阅读;当然也有可能是链接失效,你可以提交issue,感谢你的贡献。
-
仓库维护时间越久,文章目录越来越长,为了优化阅读体验,拆分了大章节,增加了每个大章节的链接。
计算机科学 | Java | Web | 架构 | 中间件 | 分布式 | 工具 | 未分类 |
计算机网络 | Java基础 | 框架 | 设计模式 | Zookeeper | 分布式基础理论 | IDEA系列教程 | 视频 Git书籍 《Pro Git》 |
操作系统 | Java并发 | 系统设计 | 消息队列 | Postman系列教程 | Docker — 从入门到实践 | ||
数据库 | JVM | 代码规范 | Web Server | 其他 | |||
算法 | 科普系列 | 搜索引擎 |
一.计算机网络(Computer Networking)
推荐书籍
-
图解系列感觉都还不错,对新手很友好。还有一本老厚老厚《HTTP权威指南》,暂时还没有时间看。
-
如果对网络零基础,可以作为阅读以下几本书的铺垫。
-
豆瓣上有人提供了本书的相应公开课,不过只看了书,公开课没看,国立清华大学公开课地址,原贴地址
-
计算机网络的权威书籍。了解到作者生平故事的时候,总觉得英年早逝,真的很可惜。
-
这本书其实是我最早看的关于计算机网络的书籍,是国内一些大学的教材,尽管自己也被国内很多教材荼毒过,但这本书还是不错的。
计算机网络总览
TCP、UDP
计算机网络体系结构
HTTP
- HTTP 请求方法
- HTTP 状态码
- HTTP 缓存
- HTTP内容协商
- HTTP内容安全策略( CSP )
- HTTP的发展:0.9/1.0/1.1/2.0
- HTTP/1.x 的连接管理
- Identifying resources on the Web
- 浏览器发送一次网址请求的过程
- 代理
SSH
SSL与TLS
集线器、交换机和路由器
全双工、半双工和单工
CDN
Cookie、Session、Token
加解密算法
二.操作系统(Operating System)
操作系统基础知识(基于CSAPP)
基础知识
- 【不周山之读薄 CSAPP】零 系列概览
- 壹 数据表示 - 不同的数据是如何存储与表示的
- 贰 机器指令与程序优化 - 控制流、过程调用、跳转
- 叁 内存与缓存 - 内存层级与缓存机制
- 肆 链接 - 不同的代码如何协同
- 伍 异常控制流 - 不同进程间的切换与沟通
- 陆 系统输入输出 - 怎么把不同的内容发送到不同的地方
- 柒 虚拟内存与动态内存分配 - 现代计算机中内存的奥秘
- 捌 网络编程 - 从最原始套接字彻底理解网络编程
- 玖 并行与同步 - 协同工作中最重要的两个问题
实验部分
- 实验概览
- I Data Lab - 位操作,数据表示
- II Bomb Lab - 汇编,栈帧与 gdb
- III Attack Lab - 漏洞是如何被攻击的
- IV Cache Lab - 实现一个缓存系统来加速计算
- V Shell Lab - 实现一个 shell
- VI Malloc Lab - 实现一个动态内存分配
- VII Proxy Lab - 实现一个多线程带缓存的代理服务器
Linux
Linux基础
Linux shell
Vim
Linux内核
三.数据库(Database)
数据库理论
事务
- 『浅入深出』MySQL 中事务的实现
- 彻底理解数据库事务
- 深入分析事务的隔离级别
- 知乎:数据库事务原子性、一致性是怎样实现的?
- 知乎:乐观锁和 MVCC 的区别?
- 浅谈数据库并发控制 - 锁和 MVCC
- InnoDB存储引擎MVCC实现原理
范式
MySQL
MySQL索引
MySQL优化
- MySQL 对于千万级的大表要怎么优化?
- MYSQL性能优化的最佳20+条经验 ===> 英文原文:Top 20+ MySQL Best Practices
- MySQL 性能优化神器 Explain 使用分析
- 视频:性能优化之MySQL优化
MySQL的锁
Redis
关于Redis的学习,命令与基础知识部分,Redis官网其实蛮详细了。
书籍推荐:
-
这本书主要是关于基础知识的讲解,比较全面,其实还有一本《Redis实战》,我翻了翻,没怎么细看。
-
Redis底层是用C语言写的,这本书剖析了Redis的内部源码实现,配图也很多,有很多经典巧妙的数据结构,我觉得是对算法学习很好的补充。
-
这本书有对应的小册,在掘金官网上可以购买,我只看了小册,不过书和小册应该基本一致。
基础知识
- 字符串(strings)
- 散列(hashes)
- 列表(lists)
- 集合(sets)
- 有序集合(sorted sets)
- bitmaps
- hyperloglogs
- 地理空间(geospatial)
- 复制(replication)
- LUA脚本(Lua scripting)
- LRU驱动事件(LRU eviction)
- 事务(transactions)
- 磁盘持久化(persistence)
- Redis哨兵(Sentinel)
- 分区(Cluster)
底层源码解析
分布式锁
缓存
四.算法(Algorithm)
排序算法
- 常见排序算法及对应的时间复杂度和空间复杂度
- 常用的八种排序算法Java代码实现
- 图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
- 图解排序算法(二)之希尔排序
- 图解排序算法(三)之堆排序
- 图解排序算法(四)之归并排序
- 图解排序算法(五)之快速排序——三数取中法
递归与尾递归
字典树(Trie)
红黑树
KMP
布隆过滤器(Bloom Filter)
一致性哈希
JDK里的排序算法
Huffman 编码
并查集
动态规划
贪心
五.Java基础(Basic)
Java枚举
Java异常
序列化与反序列化
反射
- 知乎:学习java应该如何理解反射?
- 深入解析Java反射(1) - 基础
- 深入解析Java反射(2) - invoke方法
- 并发编程网:Java Reflection教程
- 反射——Java高级开发必须懂的
注解
String、StringBuilder和StringBuffer
- 在java中String类为什么要设计成final? - 知乎
- Java StringBuilder和StringBuffer源码分析
- Stack Overflow: String, StringBuffer, and StringBuilder
hashCode()和equals()
Java IO
《分布式Java应用 基础与实践》第四章
Java容器 ==>> 推荐阅读-
ArrayList、LinkedList、Vector、HashSet、Treeset、HashMap、TreeMap的区别和适用场景
-
HashMap与ConcurrentHashMap
-
优先级队列
Java 8 ==>> 推荐阅读《Java 8实战》与《Java 8函数式编程》
值得思考的问题:
六.Java并发(Concurrency)
推荐书籍:
-
z这本书比《Java并发编程实战》更适合入门一些。作者还创办了并发编程网,里面有很多值得读的文章。
-
jdk并发包作者写的书,书很好,但翻译为人诟病很久。
-
在图书馆瞎逛的时候看到的一本书,翻了翻,出乎意料地不错,涉及到一些Java8函数式编程的知识。
并发合集
Java并发工具类之LongAdder
线程池
阻塞队列
- 聊聊并发(七)——Java中的阻塞队列
- 【死磕Java并发】-----J.U.C之阻塞队列:BlockingQueue总结
- 【死磕Java并发】-----J.U.C之阻塞队列:ArrayBlockingQueue
- 【死磕Java并发】-----J.U.C之阻塞队列:LinkedBlockingDeque
- 【死磕Java并发】-----J.U.C之阻塞队列:PriorityBlockingQueue
- 【死磕Java并发】-----J.U.C之阻塞队列:SynchronousQueue
- 【死磕Java并发】-----J.U.C之阻塞队列:LinkedTransferQueue
synchronized和lock
- 【死磕Java并发】-----深入分析synchronized的实现原理
- 深入浅出synchronized
- Lock与synchronized 的区别
- 并发编程的锁机制:synchronized和lock
CAS
ThreadLocal
Java中的锁
Java秒杀
七.Java虚拟机(JVM)
推荐书籍
-
学过JVM的应该都看过这本书,比较详细,但这本书第二版是2013年出的,HotSpot在具体实现上有了一些变化,比如说内存结构Perm区的继任者Metaspace,以及一些新的垃圾收集器也出现了,这部分内容需要再自己选择性地去补充学习。
-
相比较上一本,这一本书感觉更基础,两者可以相互补充。
合集
JVM内存结构
垃圾收集(GC)
- 深入理解 java 垃圾回收机制
- 不同的垃圾回收器的比较
- 了解CMS(Concurrent Mark-Sweep)垃圾回收器
- 并发编程网:深入理解G1垃圾收集器
- 占小狼:G1垃圾收集器介绍
- 占小狼:Java GC的那些事(1)
- 占小狼:Java GC的那些事(2)
- Java GC系列(1):Java垃圾回收简介
- Java GC系列(2):Java垃圾回收是如何工作的?
- Java GC系列(3):垃圾回收器种类
- Java GC系列(4):垃圾回收监视和分析
- 知乎:怎么在面试时回答Java垃圾回收机制(GC)相关问题?
- 美团技术团队:Java Hotspot G1 GC的一些关键技术
类加载
性能调优
八.架构与设计
设计模式
系统设计
- 系统设计面试之前需要知道的八件事
- 设计Twitter
- 创建照片分享应用
- 创建短网址系统
- 如何设计 Google Docs
- 设计新闻推送系统
- 设计 Facebook 聊天功能
- 如何为 Twitter 设计趋势算法
- 设计缓存系统
- 设计推荐系统
- 随机 ID 生成器
- 设计键值存储
- 构建网页爬虫
- 设计垃圾回收系统
- 设计电商网站
- 设计点击计数器
- 设计 Youtube
九.框架(Framework)
Spring
IoC
- 知乎:Spring IOC原理总结
- 知乎:Spring IoC有什么好处呢?
- BeanFactory、ApplicationContext以及WebApplicationContext
- BeanFactory和ApplicationContext中各自Bean的生命周期
- Bean的注入方式和作用域
AOP
常用知识点
- Spring常见面试题
- 知乎:@Autowired和@Resource的区别是什么?
- StringRedisTemplate 类
- RestTemplate类
- EntityManager
Spring源码
Spring Boot
-
@SpringBootApplication(源码分析与启动流程) ==>> 推荐阅读《Spring Boot揭秘》第三章
-
参考视频教程
-
参考文档以及开原作品索引
Thymeleaf
Spring MVC
Servlet
redirect和forward
Spring MVC常用注解
面试相关
MyBatis
- MyBatis Reference Documentation ===> 中文文档
- 美团技术团队:聊聊MyBatis缓存机制
- 动态SQL
- MyBatis常见面试题
- MyBatis中的#与$的区别
Spring Cloud
- 参考文档以及开源作品索引
十.中间件
1.Web Server
Tomcat
Nginx
2.消息队列
RabbitMQ
RocketMQ
kafka
ActiveMQ
十一.分布式
1.分布式基础理论
- 美团技术团队:分布式系统互斥性与幂等性问题的分析与解决
- 分布式基础理论
- CAP理论:
- BASE理论:
- 2PC协议:
- 3PC协议:
- 一致性算法Paxos:
- 一致性协议Raft:
- 分布式事务
- happens-before
十二.搜索引擎
Elasticsearch
Apache Solr
十二.其他
IDEA
Postman
压力测试
- Apache bench
- JMeter