Java-CS-Record

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

APACHE-2.0 License

Stars
87
Committers
2

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!