Linux
(一). 从认识操作系统开始
-
- 操作系统简介
- 操作系统简单分类
- 操作系统的内核
- 操作系统的用户态与内核态
- 为什么要有用户态与内核态?
- 用户态切换到内核态的几种方式
- 物理内存RAM(Random Access Memory 随机存储器)
- 虚拟内存(Virtual Memory)
- Swap交换空间
(二). 初探Linux
-
- Linux简介
- Linux诞生简介
-
- Linux的分类
(三) Linux文件系统概览
-
- Linux文件系统简介
- Inode
3.2.1 Inode是什么?有什么作用?
-
- 文件类型与目录结构
- Linux目录树
(四) Linux基本命令
-
- 目录切换命令
- 目录的操作命令(增删改查)
- 文件的操作命令(增删改查)
- 压缩文件的操作命令
- Linux的权限命令
- Linux 用户管理
- Linux系统用户组的管理
- 其他常用命令
数据结构与算法
(一). 数据结构(布隆过滤器)
- 什么是布隆过滤器?
- 布隆过滤器的原理介绍
- 布隆过滤器使用场景
- 通过 Java 编程手动实现布隆过滤器
- 利用Google开源的 Guava中自带的布隆过滤器
- Redis 中的布隆过滤器
- 介绍
- 使用Docker安装
- 常用命令一览
- 实际使用
(二). 算法
数据库
(一). MySQL
- 基本操作
- 数据库操作
- 表的操作
- 数据操作
- 字符集编码
- 数据类型(列类型)
- 列属性(列约束)
- 建表规范
- SELECT
- UNION
- 子查询
- 连接查询(join)
- TRUNCATE
- 备份与还原
- 视图
- 事务(transaction)
- 锁表
- 触发器
- SQL编程
- 存储过程
- 用户和权限管理
- 表维护
- 杂项
(二). Redis
- 5种基本数据结构
- Redis 简介
- Redis 的优点
- Redis 简介
-
-
- Redis 的安装
- 测试本地 Redis 性能
- Redis 五种基本数据结构
- 字符串 string
- 列表 list
- 字典 hash
- 集合 set
- 有序列表 zset
-
- 跳跃表
- 跳跃表简介
- 为什么使用跳跃表
- 本质是解决查找问题
- 更进一步的跳跃表
- 跳跃表的实现
- 随机层数
- 创建跳跃表
- 插入节点实现
- 节点删除实现
- 节点更新实现
- 元素排名的实现
- 跳跃表简介
- 分布式锁深入探究
- 分布式锁简介
- 为何需要分布式锁
- Java 中实现的常见方式
- Redis 分布式锁的问题
- Redis 分布式锁的实现
- 代码实现
- 分布式锁简介
- Redlock分布式锁
- 什么是 RedLock
- 怎么在单节点上实现分布式锁
- Redlock 算法
- 失败重试
- 放锁
- 性能、崩溃恢复和 fsync
- 如何做可靠的分布式锁,Redlock真的可行么
- 用锁保护资源
- 使用 Fencing (栅栏)使得锁变安全
- 使用时间来解决一致性
- 用不可靠的时间打破 Redlock
- Redlock 的同步性假设
- 结论
- 神奇的HyperLoglog解决统计问题
- HyperLogLog 简介
- 关于基数统计
- 基数统计的常用方法
- 概率算法
- HyperLogLog 原理
- 代码实验
- 更近一步:分桶平均
- 真实的 HyperLogLog
- Redis 中的 HyperLogLog 实现
- 密集型存储结构
- 稀疏存储结构
- 对象头
- HyperLogLog 的使用
- HyperLogLog 简介
- 亿级数据过滤和布隆过滤器
- 布隆过滤器简介
- 布隆过滤器是什么
- 布隆过滤器简介
-
-
- 布隆过滤器的使用场景
- 布隆过滤器原理解析
- 布隆过滤器的使用
- 布隆过滤器的基本用法
- 布隆过滤器代码实现
- 自己简单模拟实现
- 手动实现参考
- 使用 Google 开源的 Guava 中自带的布隆过滤器
-
- GeoHash查找附近的人
- 使用数据库实现查找附近的人
- GeoHash 算法简述
- 在 Redis 中使用 Geo
- 增加
- 距离
- 获取元素位置
- 获取元素的 hash 值
- 附近的公司
- 注意事项
- 持久化
- 持久化简介
- 持久化发生了什么 | 从内存到磁盘
- 如何尽可能保证持久化的安全
- Redis 中的两种持久化方式
- 方式一:快照
- 方式二:AOF
- Redis 4.0 混合持久化
- 持久化简介
- 发布订阅与Stream
- Redis 中的发布/订阅功能
- PubSub 简介
- 快速体验
- 实现原理
- 订阅频道原理
- 订阅模式原理
- PubSub 的缺点
- 更为强大的 Stream | 持久化的发布/订阅系统
- 消息 ID 和消息内容
- 增删改查示例
- 独立消费示例
- 创建消费者示例
- 组内消费示例
- QA 1:Stream 消息太多怎么办? | Stream 的上限
- QA 2:PEL 是如何避免消息丢失的?
- Redis Stream Vs Kafka
- Redis 中的发布/订阅功能
- [集群]入门实践教程
- Redis 集群概述
- Redis 主从复制
- Redis 哨兵
- Redis 集群化
- 主从复制
- 主从复制主要的作用
- 快速体验
- 实现原理简析
- Redis Sentinel 哨兵
- 快速体验
- 客户端访问哨兵系统代码演示
- 新的主服务器是怎样被挑选出来的?
- Redis 集群
- 基本原理
- Redis 集群概述
-
-
- 集群的主要作用
- 快速体验
-
-
-
- 数据分区方案简析
- 节点通信机制简析
- 数据结构简析
-
- Redis数据类型、编码、底层数据结构
- Redis构建的类型系统
- redisObject对象
- 命令的类型检查和多态
- 5种数据类型对应的编码和数据结构
- string
- listlist列表,它是简单的字符串列表,你可以添加一个元素到列表的头部,或者尾部。
- set
- zset
- hash
- 内存回收和内存共享
- Redis构建的类型系统
系统设计
(一). RestFul API
- 重要概念
- REST 接口规范
- 动作
- 路径(接口命名)
- 过滤信息(Filtering)
- 状态码(Status Codes)
- HATEOAS
(二). 常用框架
- Spring常见问题
- 什么是 Spring 框架?
- 列举一些重要的Spring模块?
- @RestController vs @Controller
- Spring IOC & AOP
- 谈谈自己对于 Spring IoC 和 AOP 的理解
- Spring AOP 和 AspectJ AOP 有什么区别?
- Spring bean
- Spring 中的 bean 的作用域有哪些?
- Spring 中的单例 bean 的线程安全问题了解吗?
- @Component 和 @Bean 的区别是什么?
- 将一个类声明为Spring的 bean 的注解有哪些?
- ### 5.5 Spring 中的 bean 生命周期?
- Spring MVC
- 说说自己对于 Spring MVC 了解?
- SpringMVC 工作原理了解吗?
- Spring 框架中用到了哪些设计模式?
- Spring 事务
- Spring 管理事务的方式有几种?
- Spring 事务中的隔离级别有哪几种?
- Spring 事务中哪几种事务传播行为?
- @Transactional(rollbackFor = Exception.class)注解了解吗?
- JPA
- 如何使用JPA在数据库中非持久化一个字段?
- Spring常用注解
2.1
-
- Spring Bean 相关
- @Autowired
- Component , @Repository , @Service ,
- @RestController
- @Scope
- Spring Bean 相关
-
-
- 处理常见的 HTTP 请求类型
- GET 请求
- POST 请求
- PUT 请求
- DELETE 请求
- PATCH 请求
- 前后端传值
- @PathVariable 和
- @RequestBody
- 读取配置信息
- @value (常用)
- @ConfigurationProperties (常用)
- PropertySource (不常用)
- 参数校验
- 一些常用的字段验证的注解
- 验证请求体(RequestBody)
- 验证请求参数(Path Variables 和 Request Parameters)
- 全局处理 Controller 层异常
- JPA 相关
- 创建表
- 创建主键
- 设置字段类型
- 指定不持久化特定字段
- 声明大字段
- 创建枚举类型的字段
- 增加审计功能
- 删除/修改数据
- 关联关系
- 事务
- json 数据处理
- 过滤 json 数据
- 格式化 json 数据
- 扁平化对象
- 测试相关
-
- Spring事务
- 什么是事务?
- 事物的特性(ACID)了解么?
- 详谈 Spring 对事务的支持
3.3.1. Spring 支持两种方式的事务管理
-
-
- Spring 事务管理接口介绍
- 事务属性详解
- @Transactional 注解使用详解
-
- Spring IOC和 AOP详解
- 什么是 IOC
- 为什么叫控制反转
- IOC 解决了什么问题
- IOC 和 DI 的区别
- 什么是AOP
- AOP解决了什么问题
- AOP为什么叫面向切面编程
- 什么是 IOC
- Spring中 Bean 的作用域与生命周期
- 前言
- bean的作用域
- singleton——唯一 bean 实例
- prototype——每次请求都会创建一个新的 bean 实例
-
-
- request——每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效
- session——每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效
- globalSession
- bean的生命周期
- initialization 和 destroy
- 实现*Aware接口 在Bean中使用Spring框架的一些对象
- BeanPostProcessor
- 总结
- 单例管理的对象
- 非单例管理的对象
-
- SpringMVC 工作原理详解
- 先来看一下什么是 MVC 模式
- SpringMVC 简单介绍
- SpringMVC 使用
- SpringMVC 工作原理(重要)
- SpringMVC 重要组件说明
- DispatcherServlet详细解析
- Spring中都用到了那些设计模式?
- 控制反转(IoC)和依赖注入(DI)
- 工厂设计模式
- 单例设计模式
- 代理设计模式
- 代理模式在 AOP 中的应用
- Spring AOP 和 AspectJ AOP 有什么区别?
- 模板方法
- 观察者模式
- Spring 事件驱动模型中的三种角色
- Spring 的事件流程总结
- 适配器模式
- spring AOP中的适配器模式
- spring MVC中的适配器模式
- 装饰者模式
- 总结
(三). 认证授权( JWT、SSO)
- JWT 身份认证优缺点分析以及常见问题解决方案
- Token 认证的优势
- 无状态
- 有效避免了CSRF 攻击
- 适合移动端应用
- 单点登录友好
- Token 认证常见问题以及解决办法
- 注销登录等场景下 token 还有效
- token 的续签问题
- 总结
- Token 认证的优势
- SSO 单点登录
- 前言
- SSO说明
- 单点登录系统的好处
- 设计目标
- SSO设计与实现
- 核心应用与依赖
- 用户登录状态的存储与校验
- 用户登录/登录校验
- 用户登出
- 跨域登录、登出
- 备注
- 前言
(四). 分布式
- 分布式相关概念入门
- 分布式系统的经典基础理论
- 分布式事务
- 一致性协议/算法
- 分布式存储
- 分布式计算
- Dubbo
- 重要的概念
- 什么是 Dubbo?
- 什么是 RPC?RPC原理是什么?
- 为什么要用 Dubbo?
- 什么是分布式?
- 为什么要分布式?
- Dubbo 的架构
- Dubbo 的架构图解
- Dubbo 工作原理
- Dubbo 的负载均衡策略
- 先来解释一下什么是负载均衡
- 再来看看 Dubbo 提供的负载均衡策略
- 配置方式
- zookeeper宕机与dubbo直连的情况
- 重要的概念
- 消息队列其实很简单
- 什么是消息队列
- 为什么要用消息队列
- 通过异步处理提高系统性能(削峰、减少响应所需时间)
- 降低系统耦合性
- 使用消息队列带来的一些问题
- JMS VS AMQP
- JMS
- AMQP
- JMS vs AMQP
- 常见的消息队列对比
- RabbitMQ
- RabbitMQ 介绍
- RabbitMQ 简介
- RabbitMQ 核心概念
- 安装 RabbitMq
- 安装 erlang
- 安装 RabbitMQ
- RabbitMQ 介绍
- RocketMQ
- 消息队列扫盲
- 消息队列为什么会出现?
- 消息队列能用来干什么?
- RocketMQ是什么?
- 队列模型和主题模型
- 队列模型
- 主题模型
- RocketMQ中的消息模型
- RocketMQ的架构图
- 如何解决 顺序消费、重复消费
- 顺序消费
- 重复消费
- 分布式事务
- 消息堆积问题
- 回溯消费
- RocketMQ 的刷盘机制
- 同步刷盘和异步刷盘
- 消息队列扫盲
-
-
- 同步复制和异步复制
- 存储机制
- 总结
-
- Kafka
- Kafka 简介
- Kafka 创建背景
- Kafka 简介
- Kafka 基础概念
- Kafka 的设计与实现
- 讨论一:Kafka 存储在文件系统上
- 讨论二:Kafka 中的底层存储设计
- 讨论三:生产者设计概要
- 讨论四:消费者设计概要
- 讨论五:Kafka 如何保证可靠性
- 动手搭一个 Kafka
- 第一步:下载 Kafka
- 第二步:启动服务
- 第三步:发送消息
- Kafka 简介
- API网关
- 背景
- 什么是API网关
- 为什么需要API网关
- 统一API网关
- 统一网关的设计
- 异步化请求
- 链式处理
- 业务隔离
- 请求限流
- 熔断降级
- 泛化调用
- 管理平台
- 总结
- 背景
- 分布式ID
- 数据库自增ID
- 数据库多主模式
- 号段模式
- 雪花算法
- 百度(uid-generator)
- 美团(Leaf)
- 总结
- Redis
- 限流的算法有哪些?
- 固定窗口计数器算法
- 滑动窗口计数器算法
- 漏桶算法
- 令牌桶算法
- Zookeeper
- 前言
- 什么是 ZooKeeper
- ZooKeeper 的由来
- ZooKeeper 概览
- 结合个人使用情况的讲一下 ZooKeeper
- 关于 ZooKeeper 的一些重要概念
- 重要概念总结
- 会话(Session)
- Znode
- 版本
- Watcher
-
-
- ACL
- ZooKeeper 特点
- ZooKeeper 设计目标
- 简单的数据模型
- 可构建集群
- 顺序访问
- 高性能
- ZooKeeper 集群角色介绍
- ZooKeeper &ZAB 协议&Paxos算法
- ZAB 协议&Paxos算法
- ZAB 协议介绍
- ZAB 协议两种基本的模式:崩溃恢复和消息广播
- 总结
-
(五). 大型网站架构
- 如何设计一个高可用系统?要考虑哪些地方?
- 什么是高可用?可用性的判断标准是啥?
- 哪些情况会导致系统不可用?
- 有哪些提高系统可用性的方法?
- 注重代码质量,测试严格把关
- 使用集群,减少单点故障
- 限流
- 超时和重试机制设置
- 熔断机制
- 异步调用
- 使用缓存
- 其他
- 总结
(六). 微服务
- Spring Cloud
- 什么是Spring cloud
- Spring Cloud 的版本
- Spring Cloud 的服务发现框架——Eureka
- 负载均衡之 Ribbon
- 什么是 RestTemplate ?
- 为什么需要 Ribbon?
- Nginx 和 Ribbon 的对比
- Ribbon 的几种负载均衡算法
- 什么是 Open Feign
- 必不可少的 Hystrix
- 什么是 Hystrix之熔断和降级
- 什么是Hystrix之其他
- 微服务网关——Zuul
- Zuul 的路由功能
- Zuul 的过滤功能
- 关于 Zuul 的其他
- 为什么要使用进行配置管理?
- Config 是什么
- 引出 Spring Cloud Bus
- 总结
必会工具
(一). Git
- 版本控制
- 什么是版本控制
- 为什么要版本控制
- 本地版本控制系统
- 集中化的版本控制系统
- 分布式版本控制系统
- 认识 Git
-
- Git 简史
- Git 与其他版本管理系统的主要区别
- Git 的三种状态
- Git 使用快速入门
- 获取 Git 仓库
- 记录每次更新到仓库
- 一个好的 Git 提交消息
- 推送改动到远程仓库
- 远程仓库的移除与重命名
- 查看提交历史
- 撤销操作
- 分支
(二). Docker
- 认识容器
- 什么是容器?
- 先来看看容器较为官方的解释
- 再来看看容器较为通俗的解释
- 图解物理机,虚拟机与容器
- 什么是容器?
- 再来谈谈 Docker 的一些概念
- 什么是 Docker?
- Docker 思想
- Docker 容器的特点
- 为什么要用 Docker ?
- 容器 VS 虚拟机
- 两者对比图
- 容器与虚拟机总结
- 容器与虚拟机两者是可以共存的
- Docker 基本概念
- 镜像(Image):一个特殊的文件系统
- 容器(Container):镜像运行时的实体
- 仓库(Repository):集中存放镜像文件的地方
- 常见命令
- 基本命令
- 拉取镜像
- 删除镜像
- Build Ship and Run
- 简单了解一下 Docker 底层原理
- 虚拟化技术
- Docker 基于 LXC 虚拟容器技术
- 总结
面试指南
(一). 程序员简历该怎么写
- 为什么说简历很重要?
- 先从面试前来说
- 再从面试中来说
- 下面这几点你必须知道
- 必须了解的两大法则
- STAR法则(Situation Task Action Result)
- FAB 法则(Feature Advantage Benefit)
- 项目经历怎么写?
- 专业技能该怎么写?
- 排版注意事项
- 其他的一些小tips
(二). 如何准备面试
- 如何获取大厂面试机会?
- 面试前的准备
- 准备自己的自我介绍
- 搞清楚技术面可能会问哪些方向的问题
-
- 休闲着装即可
- 随身带上自己的成绩单和简历
- 如果需要笔试就提前刷一些笔试题
- 花时间一些逻辑题
- 准备好自己的项目介绍
- 提前准备技术面试
- 面试之前做好定向复习
- 面试之后复盘
- 如何学习?学会各种框架有必要吗?
- 我该如何学习?
- 学会各种框架有必要吗?
(三). Java学习路线和方法推荐
- Java 基础
- 操作系统与计算机网络
- 数据结构与算法
- 前端知识
- MySQL
- 常用工具
- 常用框架
- 多线程的简单使用
- 分布式
- 深入学习
- 微服务
- 总结
本文限于篇幅,故而只展示目录的内容,完整的Java面试学习文档小编已经帮你整理好了,有需要的朋友点赞+关注私信我222免费领取Java、大厂面试学习资料哦!