Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yzx-66/java-cs-record

记录准备春招实习过程中,学习与复习的知识(模块化整理,非面试题速成)。注:暂停更新,后续请移步博客
https://github.com/yzx-66/java-cs-record

collection dubbo java juc jvm mybatis mysql network rabbitmq redis rocketmq spring springboot springcloud springmvc system-operator tomcat web

Last synced: 1 day ago
JSON representation

记录准备春招实习过程中,学习与复习的知识(模块化整理,非面试题速成)。注:暂停更新,后续请移步博客

Awesome Lists containing this project

README

        

# Java-CS-Record
这是一个**频繁更新**的项目(2020.9 ~ 2021.3)。

文章说明
* 这个仓库的文章,都是**关于计算机基础,还有 Java 后台相关原理源码,几乎不涉及怎么调用 api**。
* 每次会把一个技术点整理完才进行更新,很多技术体系太庞大,比如某些框架源码,我会只挑选关键部分整理。


CSDN 博客同步更新,现放到 Github 有如下原因
* 博客是平铺式结构,无法按照目录式结构保存,并且博客内容较杂,这里只存放相关的内容。
* 也为了更好帮助想要使用或者进行改动的同学,所以把所有 markdown 文稿也在这里开源。

最后,**欢迎 star 该项目,也欢迎使用、修改、与提出意见**,希望多多支持!

后记:4.2 日收到阿里 offer,暂时停止更新!






目录

# 基础
## 1、Java 核心
### 常见特性源码
类型相关
* 基本类型及包装类源码解析
* String 套餐及编译后实现
* Object 类与相关实现
* 异常设计原则与继承体系
* final 套餐及常见问题
* 序列化原理及技术实现

特性相关
* 反射相关问题与源码解析
* 注解底层源码解析
* Stream 执行流程源码解析
* Stream 并行流源码解析
* 函数式编程与 Lamda 底层
* SPI 机制源码解析

### Java 集合源码
list
* ArrayList 源码解析
* LinkedList 源码解析

map
* HashMap 核心方法源码详解
* HashMap 次要方法源码详解
* HashMap 知识扩充
* LinkedHashMap 源码解析
* TreeMap 核心方法源码详解
* TreeMap 次要方法源码详解
* TreeMap 中子Map源码详解
* HashTable 源码解析

set
* HashSet 源码解析
* TreeSet 源码解析

### Java 并发源码
基础
* 基础知识与概念

底层
* JMM 全解
* Sychnorized 底层详解

JUC
* CAS 与原子类源码解析
* ThreadLocal 源码解析
* Fork-Join 框架源码解析

* AQS
* AQS 源码详解
* AQS 之 Condition 源码解析
* AQS 之 ReentrantLock 源码解析
* AQS 之 ReentrantReadWriteLock 源码详解

* 并发工具
* Semaphore 源码解析
* CountDownLatch 源码解析
* CyclicBarrier 源码解析
* Exchanger 源码解析

* 并发容器
* CopyOnWriteArrayList 源码解析
* ConcurrentLinkedQueue源码解析
* ConcurrentHashMap 源码详解
* JDK 1.7 Concurrenthashmap 源码对比

* 阻塞队列
* ArrayBlockingQueue 源码解析
* LinkedBlockingDeque 源码解析
* PriorityBlockingQueue 源码解析
* DelayQueue 源码解析
* SynchronousQueue 源码解析
* LinkedTransferQueue 源码解析

* 线程池
* Executor体系
* ThreadPoolExecutor 源码详解
* ScheduledThreadPoolExecutor 源码解析

### Java 虚拟机
内存管理
* 1、运行时数据区域详解
* 2、对象详解
* 3、垃圾回收判定与算法
* 4、HotSpot回收算法细节
* 5、经典垃圾回收器
* 6、Region 内存布局回收器 G1
* 7、低延迟回收器 Shenandoah
* 8、低延迟回收器 ZGC
* 9、无操作回收器 Epsilon
* 10、回收器常用参数
* 11、故障处理工具与六种 OOM

执行子系统
* 1、类加载时机
* 2、类加载过程
* 3、类加载器详解(JDK9+)
* 4、方法执行指令详解

编译与优化
* 1、前端编译与语法糖
* 2、后端编译优化

## 2、数据库
### Redis 底层实现
数据结构与对象
* 1、SDS、整数集合、压缩列表
* 2、双端链表、字典、跳表
* 3、RedisObject 实现
* 4、五种基本类型对象实现

核心实现
* 1、事件驱动模型实现
* 2、RedisServer 实现
* 3、初始化服务器
* 4、RedisClient 实现
* 5、RedisDB 实现
* 6、过期键处理

持久化实现
* 1、RDB 实现
* 2、AOF 实现

多机实现
* 1、主从复制实现
* 2、主从复制步骤
* 3、哨兵 Sentinel 实现
* 4、Sentinel 自动故障转移
* 5、集群实现
* 6、集群 MOVED 错误与 ASK 错误
* 7、集群内部消息

功能实现
* 通知功能实现
* 发布订阅实现
* 慢查询日志实现
* 监视器实现
* 事务功能实现

### 数据库原理
总体概述

关系模型
* 1、结构与模型
* 2、关系模型
* 3、关系代数
* 4、关系演算

标准 SQL
* 1、基本SQL语言
* 2、复杂查询与视图
* 3、完整性和安全性
* 4、嵌入式SQL

建模设计
* 1、数据库E-R模型
* 2、IDEF1x工程化方法
* 3、关系函数依赖
* 4、五大关系范式
* 5、关系模式分解

实现技术
* 1、存储体系与组织
* 2、索引存储及分类
* 3、B+树索引结构
* 4、散列索引结构
* 5、关系查询实现
* 6、两趟扫描算法
* 7、内部查询优化
* 8、事务调度与封锁
* 9、基于回滚事务调度
* 10、故障恢复实现

## 3、计算机
### 计算机组成原理
计算机总体概述

硬件结构
* 1、系统总线
* 2、存储器
* 3、主存储器
* 4、IO系统
* 5、IO控制方式

CPU
* 1、数的表示
* 2、数的运算
* 3、指令系统
* 4、寻址与设计
* 5、CPU 结构
* 6、指令流水
* 7、中断系统

CU
* 1、微操作与 CU
* 2、组合逻辑设计
* 3、微程序设计

### 计算机体系结构
体系结构概述

规则与公式

指令系统
* 1、指令集与MIPS
* 2、流水线性能
* 3、非线性流水调度
* 4、相关与冲突
* 5、流水线实现
* 6、指令并行
* 7、指令调度

硬件系统
* 1、Cache映像及变换
* 2、提高Cache命中率
* 3、降低Cache开销
* 4、并行主存
* 5、虚拟存储器

多处理器
* 1、互连网络
* 2、动态互连网络
* 3、多处理器
* 4、一致性问题
* 5、同步实现
* 6、并发保证

### 操作系统(Linux)
启动与接口
* 1、Linux 系统启动:bootsect.s、setup.s
* 2、Linux 系统启动:head.s、main.c
* 3、内核接口与实现原理

进程管理
* 1、进程视图与基本问题
* 2、用户级线程与内核级线程实现
* 3、多进程起点 0 号和 1 号进程
* 4、CPU 调度算法与实现
* 5、临界区算法与信号量实现
* 6、死锁问题及多种处理策略

内存管理
* 1、程序重定位与内存分区
* 2、虚拟内存及 Linux 实现
* 3、页面换入换出实现

外设管理
* 1、设备驱动 printf 与 scanf 实现
* 2、磁盘基本原理与盘块编号
* 3、磁盘请求队列调度与内核高速缓存
* 4、基于文件的磁盘使用
* 5、Linux 完整文件系统实现

Linux IO 特性
* 1、Linux 网络 IO 模型
* 2、IO 多路复用 epoll 详解
* 3、Linux 零拷贝技术

### 计算机网络
网络概述与分层结构

五层模型
* 1、物理层核心基础
* 2.1、链路层的差错控制与流量控
* 2.2、广播链路MAC协议
* 2.3、多种局域网协议及技术
* 3.1、网络层概述
* 3.2、Internet 路由协议
* 3.3、IP 协议
* 3.4、网络层其他协议与技术
* 4.1、传输层与 UDP 协议
* 4.2、TCP 协议
* 4.3、TCP 可靠传输原理
* 4.4、TCP 实现可靠传输的方式
* 4.5、TCP 流量控制与拥塞控制实现
* 5.1、HTTP、SMTP、POP3
* 5.2、FTP、DNS、DHCP

网络安全
* 1、网络安全基础
* 2、SSL 协议
* 3、IPSec 协议

### 编译原理
流程
* 编译及其流程

前端
* 1、词法及分析与有限自动机
* 2、词法 DFA 及分析器构造
* 3、语法分析与上下文无关文法
* 4、自上而下分析法与 LL(1) 文法
* 5、自下而上分析法与 LR(1) 文法

中间代码
* 1、语义分析与中间代码、符号表
* 2、变量与过程翻译
* 3、算术表达式与数组元素翻译
* 4、布尔表达式及控制语句翻译

后端
* 目标代码生成与优化

## 4、软件与算法
### 软件工程
概述
* 1、软件工程概述
* 2、软件过程模型

工程流程
* 1、结构化需求分析
* 2、结构化总体设计
* 3、结构化详细设计
* 4、系统实现与软件测试
* 5、维护、评估、改进

面向对象
* 1、面向对象方法学
* 2、面向对象分析
* 3、面向对象设计
* 4、面向对象实现风格

管理
* 软件项目管理

### Leetcode 典例
数组
* 1、快慢指针
* 2、对撞指针
* 3、滑动窗口

链表
* 1、典型操作
* 2、虚拟头节点
* 3、双指针或回溯

查找表
* 1、Set 与滑动窗口
* 2、Map 常见典例
* 3、几数和系列问题
* 4、特殊键值选择

栈、队列
* 1、栈常见题型
* 2、用栈代替递归
* 3、队列与 BFS
* 4、优先队列

二叉树
* 1、典型操作
* 2、稍复杂递归问题
* 3、二分搜索树

回溯
* 1、常见典例
* 2、排列与组合
* 3、二维平面类型
* 4、N 皇后问题

动态规划
* 1、常见题型(上)
* 2、常见题型(下)
* 3、背包问题系列
* 4、LCS 与 LIS 问题

贪心
* 常见典例

**算法补充**

排序算法:所有常见方法

树相关算法:AVL 树、红黑树、B\B+ 树

图论算法:最短路径与最小生成树

# 开发
## 1、常用技术
### Spring
整体架构及模块依赖关系

IOC
* 实体Bean构建方式(xml、JavaConfig)及相关配置
* 1、核心组件及继承关系类图
* 2、初始化源码流程(上)定位 Resource
* 3、初始化源码流程(中)加载 BeanDefinition
* 4、初始化源码流程(下)注册 BeanDefinition
* 5、源码流程的核心类时序图

DI
* 四种依赖注入方式(xml、注解)
* 1、源码流程(上)实例化Bean
* 2、源码流程(下)依赖注入
* 3、源码流程的核心类时序图
* 4、懒加载与 finishBeanFactoryInitialization
* 5、FactoryBean 与解析
* 6、自动装配 autowire
* 7、循环依赖 singleton 三层缓存

Bean
* 生命周期与拓展点
* 不同作用域原理

AOP
* 切面编程及 AOP 示例(注解、xml配置)
* 1、源码流程(上)创建代理 AopProxy
* 2、源码流程(中)方法调用
* 3、源码流程(下)AdviceInterceptor 与回调

Transation
* 事务(三大接口、隔离级别、传播属性)及示例
* 1、源码流程核心对象
* 2、源码执行流程(上)准备阶段
* 3、源码执行流程(下)提交与回滚

MVC
* SpringMVC 整合示例与优化建议
* 1、MVC:九大核心组件分析
* 2、源码流程(上)从监听器启动
* 3、源码流程(中)Servlet 初始化阶段
* 4、源码流程(下)运行阶段
* 5、HandlerMapping 初始化及 handler 获取
* 6、HandlerInterceptor 注册与时序原理
* 7、HandlerAdapter 适配与执行的过程

### Mybatis
架构分层及主要对象

执行原理
* 1、编程式流程及核心对象生命周期
* 2、配置文件 mybatis-conf.xml 详解
* 3、执行原理(一):创建会话工厂(SqlSessionFactory) 源码分析
* 4、执行原理(二):创建会话(SqlSession) 源码分析
* 5、执行原理(三):获取代理对象(MapperProxy) 源码分析
* 6、执行原理(四):MapperProxy执行SQL源码分析

特性原理
* 1、Mapper 注册与绑定源码解析
* 2、动态 SQL 特性
* 3、动态 SQL 源码解析
* 4、一级、二级缓存机制
* 6、插件机制源码解析
* 7、PageHelper 分页插件原理
* 8、ResultSetHandler 封装对象流程
* 9、延迟加载原理

集成原理
* 1、Spring 集成 MyBatis 及问题分析
* 2、Spring集成原理(一):分析注入 SqlSessionFactoryBean
* 3、Spring集成原理(二):分析注入 MapperScannerConfigurer
* 4、Spring集成原理(三):MapperFactoryBean 与 SqlSessionTemplate
* 5、Spring集成原理(四):分析注入 MapperProxy

### SpringBoot
Spring 注解驱动
* 1、Spring 注解驱动原理(一):AnnotationConfigApplicationContext 两类构造方法.md
* 2、Spring 注解驱动原理(二):使用 basePackages 构造
* 3、Spring 注解驱动原理(三):使用 annotatedClass 构造之注册配置类
* 4、Spring 注解驱动原理(四):使用 annotatedClass 构造之 ConfigurationClassPostProcessor

自动装配
* 1、如何实现自定 starter
* 2、自动装配原理(一):AutoConfigrationImportSelector 回调流程
* 3、自动装配原理(二):AutoConfigurationImportSelector 的 selectImports
* 4、自动装配原理(三):ConfigurationClassBeanDefinitionReader 过滤条件注解

启动原理
* 1、启动原理(一):Jar 启动实现
* 2、启动原理(二):构造 SpringApplication
* 3、启动原理(三):run 方法解析

内嵌 web 容器
* 内嵌 Web 服务器原理:源码流程

# 附录
## 书籍记录与推荐
仅代表我读完后的个人观点(只有力荐里的与豆瓣评分无冲突,几乎都是高分)
* 万分力荐:代表我认为特别好的,如果想读些 Java 相关的书,建议一定读我里面罗列的,绝对物超所值。
* 比较推荐:代表我认为的好书,看完确实可以学到东西那种,但算不上特别好,不过还是很值得一读。
* 可以看看:代表我认为还是有一定缺陷的书,不是讲的不特别清楚,就是有点泛或者浅。
* 比较一般:代表我读完后收获较小的书,或者主观上不是很喜欢的书,并不代表里面的书一定不好。

**链接是豆瓣中该书的所有短评,避免只被我读完时的感受影响!**

### 万分力荐
* 深入理解Java虚拟机(第3版):无需多言,刷了两次。
* Redis设计与实现:也是刷了两次,我看过最深入浅出的书,一点没有门槛,看完觉得 Redis 非常明了。
* 操作系统原理、实现与实践:哈工大老师出品,除实践部分看了两次,围绕 Linux 作为原理的现实,注重抠细节,特别厉害。
* 代码整洁之道:绝大部分观点都认可,很多观点都让人佩服,比如代码要短小精悍,还要可以自解释等等。
* Mybatis技术内幕:好书,从模块讲起,再讲处理流程,主干清晰明了,源码也讲的清楚。
* 深入刨析Tomcat:读过最好的源码书,没有之一,从假设自己要设计一个服务器出发,然后分析 Tomcat 完善自己的服务器。
* MySQL技术内幕:看这本书之前最好懂操作系统,不然很难受,而且第一章提的很多东西后面才讲,但确实是好书。
* 从Paxos到Zookeeper :豆瓣7.7,但是我认为是好书,不过 Paxos 那块讲的不是很清楚,还需要配合博客看看。
* 微服务架构设计模式 :好书,改变了我对微服务的看法,微服务根本不是用个 Dubbo 或者 SpringCloud 的事。

### 比较推荐
* Effective Java中文版(第3版):列了 90 条,核心感觉还是讲怎么用 Java 写更健壮和灵活的程序,写得还算不错
* Java并发编程艺术:这本书讲述顺序就是按照内存模型->synchronized->源码,总体觉得还不错,但是开头两章有点劝退。
* Spring Boot编程思想(核心篇):豆瓣评分较低 6.5,但是我觉得把 SpringBoot 比较核心的部分都讲了,就是确实凑字数太明显,啥都贴。
* RocketMQ技术内幕:豆瓣评分较低 6.9,不过我觉得主要原因可能把 Client 还有 Server 串着讲,阅读体验确实差,但内容尚可吧。
* RabbitMQ实战指南:远超我的期望,冲着如何实现去的,实战书里少有的既有实战又有深度。
* 计算机网络(原书第7版) :不用多说,比教材易懂,也比教材讲的内容多,总体自顶向下,更容易理解点。

### 可以看看
* Spring源码深度解析(第二版):当时读的时候豆瓣 5.9 分,倒不是说不好,只是对第一次看源码的新手不太友好,而且确实绝大部分照搬第一版。
* 深入理解Apache Dubbo与实战:是我读过的源码书里不算好的,讲的不透彻,但拓展点还有 RPC 策略那讲的确实还行。
* 深入分析Java Web技术内幕(修订版):如果看了我说的其他书,这本书完全没必要看,各个模块讲的很浅,但要想快速了解一下可以看看。
* Netty实战 :我一般不看实战书的,但是 Netty 的书太少了,以为有源码,结果一点没提,不过 Netty 用法讲的确实比网课好。
* 图解HTTP:比较浅,看这个是因为 HTTP 权威指南太厚,不过比一般大学教材 HTTP 部分讲的多。
* 图解TCP/IP:当时看的入门书,如果想深入学一下,还是推荐计网的教材或者其他书籍。
* 分布式服务架构:原理、设计与实战:架构没讲什么,说了点分布式的问题,分布式事务、性能估算还有日志框架啥的还行,最后几章完全凑数。

### 比较一般
* 大型网站技术结构:扫盲书,三天就看完了,建立个概念而已。
* 分布式服务框架:原理与实践:讲咋设计微服务框架的,比较一般,就讲了下微服务框架的几个关键点,总体比较宏观一些。
* 大规模分布式存储系统:分布式入门书,讲的分布式存储系统的宏观架构,并没有一些具体的细节,还讲了一些 OceanBase 基本原理。
* Elasticsearch源码解析与优化实战:叫源码解析,冲着核心源码去看的,结果没啥源码,讲的都是模块,而且也不够深入浅出。
* 代码简洁之道:程序员的职业素养:总体还行,存在部分观点很不认可,有点教条主义与理想化,尤其程序员对抗加班,还有什么必须完全 TDD。

That's ALL!