前言:
java是一门面向对象的编程语言,功能强大、简单易用,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
在Java简单入门之后很多人不知道下一阶段该做什么,对自己的学习进程没有一个系统性的规划,或者是知道该学什么,却又找不到对应的内容。在这里我对上述问题做了一个整合,希望对大家有所帮助。
目录:
一、Java
(一).基础
1. Java基本功
1.1.Java入门(基础概念与常识)
1.1.1. Java语言有哪些特点?
1.1.2.关于JVMJDK和JRE最详细通俗的解答
1.1.2.1.JVM
1.1.2.2. JDK和JRE
1.1.3. OracleJDK和OpenJDK的对比
1.1.4. Java和C++的区别?
1.1.5.什么是Java程序的主类应用程序和小程序的主类有何不同?
1.1.6. Java应用程序与小程序之间有哪些差别?
1.1.7. import java和javax有什么区别?
1.1.8.为什么说Java语言“编译与解释并存?
1.2. Java语法
1.2.1.字符型常量和字符串常量的区别?
1.2.2.关于注释?
1.2.3.标识符和关键字的区别是什么?
1.2.4. Java中有哪些常见的关键字?
1.2.5.自增自减运算符
1.2.6. continue. break. 和return的区别是什么?
1.2.7. Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?
1.2.8. ==和Dequals的区别
1.2.9. hashCode0与equals0
1.3.基本数据类型
1.3.1. Java中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?
1.3.2. 自动装箱与拆箱
1.3.3. 8种基本类型的包装类和常量池
1.4.方法(函数)
1.4.1. 什么是方法的返回值2返回值在类的方法里的作用是什么?
1.4.2.为什么Java中只有值传递?
1.4.3.重载和重写的区别
1.4.4.深拷贝vs浅拷贝
1.4.5. 方法的四种类型
2. Java面向对象
2.1.类和对象
2.1.1.面向对象和面向过程的区别
2.1.2. 构造器Constructor是否可被override?
2.1.3.在Java中定义-个不做事且没有参数的构造方法的作用
2.1.4. 成员变量与局部变量的区别有哪些?
2.1.5.创建一个对象用什么运算符?对象实体与对象引用有何不同?
2.1.6. 一个类的构造方法的作用是什么?若一个类没有声明构造方法, 该程序能正确执行吗?为什
2.1.构造方法有哪些特性?
2.1.8. 在调用子类构造方法之前会先调用父类没有参数的构造方法其目的是?
2.1.9.对象的相等与指向他们的引用相等,两者有什么不同?
2.2. 面向对象三大特征
2.2.1. 封装
2.2.2.继承
2.2.3.多态
2.3.修饰符
2.3.1. 在一个静态方法内调用一个非静态成员为什么是非法的?
2.3.2.静态方法和实例方法有何不同
2.4. 接口和抽象类
2.4.1.接口和抽象坐的区别是什么?
2.5.其它重要知识点
2.5.1. String StringBuffer和StringBuilder的区别是什么? String为什么是不可变的?
2.5.2. Object类的常见方法总结
2.5.3. ==与equals([重要)
2.5.4. hashCode与equals (重要)
2.5.4.1. hashCode () 介绍
2.5.4.2.为什么要有hashCode
2.5.4.3. hashCode ()与equals ()的相关规定
2.5.5. Java序列化中如果有些字段不想进行序列化,怎么办?
2.5.6.获取用键盘输入常用的两种方法
3. Java核心技术
3.1.集合
3.1.1. Collections工具类和Arrays工具类常见方法总结
3.2.异常
3.2.1. Java异常类层次结构图
3.2.2. Throwable类常用方法
3.2.3. try-catch-finally
3.2.4.使用try-with-resources 来代替try-catch- finally
3.3.多线程
3.3.1.简述线程.程序进程的基本概念。以及他们之间关系是什么?
3.3.2.线程有哪些基本状态?
3.4.文件与no流
3.4.1. Java中10流分为几种?
3.4.1.1. 既然有了字节流为什么还要有字符流?
3.4.1.2. BIO,NIO,AIO有什么区别?
二).容器
1. ArrayList
1.1 ArrayList简介
1.2 ArrayList核心源码
1.3 ArrayList源码分析
1.3.1 System.arraycopy0和Arrays.copyOf0方法
1.3.2两者联系与区别
1.3.3 ArrayList核心扩容技术
1.3.4内部类
1.4 ArrayList经典Demo
2. LinkedList
2.1简介
2.2内部结构分析
2.3 LinkedList源码分析
2.3.1构造方法
2.3.2 add方法
2.3.3根据位置取数据的方法
2.3.4 根据对象得到索引的方法
2.3.5 检查链表是否包含某对象的方法:
2.3.6删除方法
2.4 LinkedList类常用方法测试
2.5.其它重要知识点
2.5.1. String StringBuffer和StringBuilder的区别是什么? String为什么是不可变的?
2.5.2. Object类的常见方法总结
2.5.3. ==与equals[重要)
2.5.4. hashCode与equals (重要)
2.5.4.1. hashCode () 介绍
2.5.4.2.为什么要有hashCode
2.5.4.3. hashCode ()与equals ()的相关规定
2.5.5. Java序列化中如果有些字段不想进行序列化,怎么办?
2.5.6. 获取用键盘输入常用的两种方法
3. Java核心技术
3.1.集合
3.1.1. Cllections工具类和Arays工具类常见方法总结
3.2.异常
3.2.1. Java异常类层次结构图
3.2.2. Throwable类常用方法
3.2.3. try-cath-ially
3.2.4.使用try-with-resources 来代替try-catch-fina11y
3.3.多线程
3.3.1.简述线程、程序进程的基本概念。以及他们之间关系是什么?
3.3.2.线程有哪些基本状态?
3.4.文件与10流
3.4.1. Java中10流分为几种?
3.4.1.1. 既然有了字节流为什么还要有字符流?
3.4.1.2. BIO,NIO,AIO有什么区别?
二).容器
1. ArrayList
1.1 ArrayList简介
1.2 ArrayList核心源码
1.3 ArrayList源码分析
1.3.1 Systemarraycopy0和Arrays.copyOfl方法
1.3.2两者联系与区别
1.3.3 ArrayList核心扩容技术
1.3.4内部类
1.4 ArrayList经 典Demo
2. LinkedList
2.1简介
2.2内部结构分析
2.3 LinkedList源码分析
2.3.1构造方法
2.3.2 add方法
2.3.3根据位置取数据的方法
2.3.4根据对象得到索引的方法
2.3.5检查链表是否包含某对象的方法:
2.3.6删除方法
2.4 LinkedList类常用方法测试
3. HashMap
3.1 HashMap简介
3.2底层数据结构分析
3.2.1 JDK1.8之前
3.2.2 JDK1.8之后
3.3 HashMap源码分析
3.3.1构造方法
3.3.2 put方法
3.4 get方法
3.5 resize方法
3.6 HashMap常用方法测试
(三).并发
1.并发容器
1.1 JDK提供的并发容器总结
1.2 ConcurrentHashMap
1.3 CopyOnWritrrayList
1.3.1 CopyOnWriteArrayList简介
1.3.2 CopyOnWriteArrayList是如何做到的?
1.3.3 CopyOnWriteArrayList读取和写入源码简单分析
1.4 ConcurrentLinkedQueue
1.5 BlockingQueue
1.5.1 BlockingQueue简单介绍
1.5.2 ArrayBlockingQueue
1.5.3 LinkedBlockingQueue
1.5.4 PriorityBlockingQueue
1.6 ConcurrentSkipListMap
2.线程池
2.1使用线程池的好处
2.2 Executor框架
2.2.1简介
2.2.2 Executor框架结构(主要由三大部分组成)
2.2.3 Executor框架的使用示意图
2.3 (重要)ThreadPoolExecutor类简单介绍
2.3.1 ThreadPoolExecutor类分析
2.3.2推荐使用ThreadPoolExecutor 构造函数创建线程池
2.4 (重要)ThreadPoolExecutor使用示例
2.4.1示例代码: Runnable + ThreadPooTExecutor
2.4.2 线程池原理分析
2.4.3几个常见的对比
2.4.4加餐: ca11able + ThreadPoo1Executor示例代码
2.5几种常见的线程池详解
3.1 HashMap简介
3.2底层数据结构分析
3.2.1 JDK1.8之前
3.2.2 JDK1.8之后
3.3 HashMap源码分析
3.3.1构造方法
3.3.2 put方法
3.4 get方法
3.5 resize方法
3.6 HashMap常用方法测试
(三).并发
1.并发容器
1.1 JDK提供的并发容器总结
1.2 ConcurrentHashMap
1.3 CopyOnWritrrayList
1.3.1 CopyOnWriteArrayList简介
1.3.2 CopyOnWriteArrayList是如何做到的?
1.3.3 CopyOnWriteArrayList读取和写入源码简单分析
1.4 ConcurrentLinkedQueue
1.5 BlockingQueue
1.5.1 BlockingQueue简单介绍
1.5.2 ArrayBlockingQueue
1.5.3 LinkedBlockingQueue
1.5.4 PriorityBlockingQueue
1.6 ConcurrentSkipListMap
2.线程池
2.1使用线程池的好处
2.2 Executor框架
2.2.1简介
2.2.2 Executor框架结构(主要由三大部分组成)
2.2.3 Executor框架的使用示意图
2.3 (重要)ThreadPoolExecutor类简单介绍
2.3.1 ThreadPoolExecutor类分析
2.3.2推荐使用ThreadPoolExecutor 构造函数创建线程池
2.4 (重要)ThreadPoolExecutor使用示例
2.4.1示例代码: Runnable + ThreadPooTExecutor
2.4.2 线程池原理分析
2.4.3几个常见的对比
2.4.4加餐: ca11able + ThreadPoo1Executor示例代码
2.5几种常见的线程池详解
2.5.1 FixedThreadPool
2.5.2 SingleThreadExecutor详解
2.5.3 CachedThreadPool详解
2.6 ScheduledThreadPoolExecutor详解
2.6.1 简介
2.6.2 运行机制
2.6.3 ScheduledThreadoolExecutor执行周期任务的步骤
2.7线程池大小确定
3.乐观锁与悲观锁
3.1何谓悲观锁与乐观锁
3.1.1悲观锁
3.1.2乐观锁
3.1.3两种锁的使用场景
3.2乐观锁常见的两种实现方式
3.2.1. 版本号机制
3.2.2. CAS算法
3.3乐观锁的缺点
3.3.1 ABA问题
3.3.2循环时间长开销大
3.3.3 只能保证-个共享变量的原子操作
3.4 CAS与synchronized的使用情景
4. Atomic
4.1 Atomic原子类介绍
4.2基本类型原子类
4.2.1基本类型原子类介绍
4.2.2 Atomiclinteger常见方法使用
4.2.3 基本数据类型原子类的优势
4.2.4 Atomiclnteger线程安全原理简单分析
4.3数组类型原子类
4.3.1 数组类型原子类介绍
4.3.2 Atomiclntegerray常见方法使用
4.4引用类型原子类
4.4.1引用类型原子类介绍
4.4.2 AtomicReference类使用示例
4.4.3 AtomicStampedReference类使用示例
4.4.4 AtomicMarkableReference类使用示例
4.5对象的属性修改类型原子类
4.5.1 对象的属性修改类型原子类介绍
4.5.2 AtomicIntegerFieldUpdater类使用示例
5. AQS .
5.1 AQS简单介绍
5.2 AQS原理
5.2.1 AQS原理概览
5.2.2 AQS对资源的共享方式
5.2.3 AQS底层使用了模板方法模式
5.3 Semaphore(信号量)允许多个线程同时访问
5.4 CountDownLatch (倒计时器)
5.4.1 CountDownLatch的两种典型用法
5.4.2 CountDownLatch的使用示例
5.4.3 CountDownLatch的不足
5.4.4 CountDownLatch相常见面试题
5.5 CyclicBarrier{循环栅档)
5.5.1 CyclicBarrier的应用场景
5.5.2 CyclicBarrier的使用示例
5.5.31 cyclicBarrier 源码分析
5.5.4 CycicBarrier和CountDownLatch的区别
5.6 ReentrantLock和ReentrantReadWriteLock
(四). JM
1. Java内存区域
1.1概述
1.2运行时数据区域
1.2.1程序计数器
1.2.2 Java虚拟机栈
1.2.3本地方法栈
1.2.4堆
1.2.5方法区
1.2.5.1 方法区和永久代的关系
1.2.5.2常用参数
1.2.5.3 为什么要将永久代(PermGen)替换为元空间(MetaSpace)呢?
1.2.6运行时常量池
1.2.7直接内存
1.3 HotSpot虚拟机对象探秘
1.3.1 对象的创建
1.3.2对象的内存布局
1.3.3对象的访问定位
1.4 重点补充内容
1.4.1 String类和常量池
1.4.2 String s1 = new String"abc"),这句话创建了几个字符串对象?
1.4.3 8种基本类型的包装类和常量池
2. JVM垃圾回收
2.1揭开JVM内存分配与回收的神秘面纱
2.1.1对象优先在eden区分配
2.1.2 大对象直接进入老年代
2.1.3 长期存活的对象将进入老年代
2.1.4 动态对象年龄判定
2.2对象已经死亡?
2.2.1引用计数法
2.2.2可达性分析算法
2.2.3再谈引用
2.2.4不可达的对象并非非死不可”
2.2.5 如何判断-个常量是废弃常量
2.2.6 如何判断-个类是无用的类
2.3垃圾收集算法
2.3.1标记清除算法
2.3.2复制算法
2.3.3 标记整理算法
2.3.4分代收集算法
2.4垃圾收集器
2.4.1 Serial收集器
2.4.2 ParNew收集器
2.4.3 Parallel Scavenge收集器
2.4.4.Serial Old收集器
2.4.5 Parallel Old收集器
2.4.6 CMS收集器
2.4.7G1收集器
3. JDK监控和故障处理工具
3.1 JDK命令行工具
3.1.1 jps :查看所有Java进程
3.1.2 jstat;监视虚拟机各种运行状态信息
3.1.3 jinfo: 实时地查看和调整虚拟机各项参数
3.1.4 jmap :生成堆转储快照
3.1.5 jhat:分析heapdump文件
3.1.6 jstack生成虚拟机当前时刻的线程快照
3.2 JDK可视化分析工具
3.2.1 JConsole:java监视与管理控制台
3.2.2VisualVM:多合-故障处理工具
4.类文件结构
4.1概述
4.2 Class文件结构总结
4.2.1魔数
4.2.2 Class文件版本
4.2.3常量池
4.2.4访问标志
4.2.5当前类索引.父类索引与接口索引集合
4.2.6字段表集合
4.2.7方法表集合
4.2.8属性表集合
5.类加载过程
5.1类加载过程
5.1.1加载
5.1.2 验证
5.1.3准备
5.1.4解析
5.1.5初始化
5.2卸载
6.类加载器
6.1回顾-下类加载过程
6.2类加载器总结
6.3双亲委派模型
6.3.1双亲委派模型介绍
6.3.2双亲委派模型实现源码分析
6.3.3双亲委派模型的好处
6.3.4如果我们不想用双亲委派模型怎么办?
6.4自定义类加载器
二.网络
(一).计算机网络知识
1.计算机概述
1.1基本术语
1.2重要知识点总结
2.物理层
2.1基本术语
2.2重要知识点总结
2.3最重要的知识点
2.3.1拓展:
2.3.2几种常用的信道复用技术
2.3.3 几种常用的宽带接入技术,主要是ADSL和FTTx
3.数据链路层
3.1基本术语
3.2重要知识点总结
3.3最重要的知识点
4.网络层
4.1基本术语
4.2重要知识点总结
4.3最重要知识点
5.运输层
5.1基本术语
5.2重要知识点总结
5.3最重要的知识点
6.应用层
6.1基本术语
6.2重要知识点总结
6.3最重要知识点总结
二). HTTPS中的TLS
1.SSL.与TLS
2.从网络协议的角度理解HTTPS
3.从密码学的角度理解HTTPS
3.1. TLS工作流程
3.2.密码基础
3.2.1.伪随机数生成器
3.2.2.消息认证码
3.2.3.数字签名
3.2.4.公钥密码
3.2.5.证书
3.2.6.密码小结
3.3. TLS使用的密码技术
3.4. TLS总结
4. RSA简单示例
三. Linux
(-).从认识操作系统开始
1.1操作系统简介
1.2操作系统简单分类
1.3操作系统的内核
1.4操作系统的用户态与内核态
1.4.1为什么要有用户态与内核态?
1.4.2用户态切换到内核态的几种方式
1.4.3物理内存RAM(Random Access Memory随机存储器)
1.4.4虚拟内存Virtual Memory)
1.4.5 Swap交换空间
(二).初探Linux
2.1 Linux简介
2.2 Linux诞生简介
2.3 Linux的分类
曰) Linux文件系统概览
3.1 Linux文件系统简介
3.2 Inode
3.2.1 lnode是什么?有什么作用?
3.3文件类型与目录结构
3.4 Linux目录树
(四) Linux基本命令
4.1目录切换命令
4.2目录的操作命令(增删改查)
4.3文件的操作命令(增删改查)
4.4压缩文件的操作命令
4.5 Linux的权限命令
4.6 Linux用户管理
4.7 Linux系统用户组的管理
4.8其他常用命令
四、数据结构与算法
(一).数据结构(布隆过滤器)
1.什么是布隆过滤器?
2.布隆过滤器的原理介绍
3.布隆过滤器使用场景
4.通过Java编程手动实现布隆过滤器
5.利用Google开源的Guava中自带的布隆过滤器
6.Redis中的布隆过滤器
6.1介绍
6.2使用Docker安装
6.3常用命令- -览
6.4实际使用
(二).算法
五.数据库
(-). MySQL
1.基本操作
2.数据库操作
3.表的操作
4.数据操作
5.字符集编码
6.数据类型(列类型)
7.列属性(列约束)
8.建表规范
9. SELECT
10. UNION
11.子查询
12.连接查询(join)
13. TRUNCATE
14.备份与还原
15.视图
16.事务(transaction)
17.锁表.
18.触发器
19. SQL编程
20.存储过程
21.用户和权限管理
22.表维护
23.杂项
(二). Redis
1. 5种基本数据结构
1.1 Redis简介
1.1.1 Redis的优点
1.1.2 Redis的安装
1.1.3测试本地Redis性能
1.2 Redis五种基本数据结构
1.2.1字符串string
1.2.2列表list
1.2.3字典hash
1.2.4集合set
1.2.5有序列表zset
2.跳跃表
2.1跳跃表简介
2.1.1为什么使用跳跃表
2.1.2 本质是解决查找问题
2.1.3更进一步的跳跃表
2.2跳跃表的实现
2.2.1随机层数
2.2.2 创建跳跃表
2.2.3 插入节点实现
2.2.4节点删除实现
2.2.5节点更新实现
2.2.6元素排名的实现
3.分布式锁深入探究
3.1分布式锁简介
3.1.1为何需要分布式锁
3.1.2 Java中实现的常见方式
3.1.3 Redis分布式锁的问题
3.2 Redis分布式锁的实现
3.2.1代码实现
4. Redlock分布式锁
4.1什么是RedLock
4.2怎么在单节点上实现分布式锁
4.3 Redlock算法
4.4失败重试
4.5放锁
4.6性能、崩溃恢复和fsync
5.如何做可靠的分布式锁,Rellock真的可行么
5.1用锁保护资源
5.2使用Fencing (栅栏)使得锁变安全
5.3使用时间来解决-致性
5.4用不可靠的时间打破Redlock
5.5 Redlock的同步性假设
5.6结论
6.神奇的HyperLoglog解决统计问题
6.1 HyperLogLog简介
6.1.1关于基数统计
6.1.2基数统计的常用方法
6.1.3 概率算法
6.2 HyperLoglog原理
6.2.1代码实验
6.2.2更近-步:分桶平均
6.2.3 真实的HyperLogLog
6.3 Redis中的HyperLogLog实现
6.3.1密集型存储结构
6.3.2稀疏存储结构
6.3.3对象头
6.4 HyperLogLog的使用
7.亿级数据过滤和布隆过滤器
7.1布隆过滤器简介
7.1.1布隆过滤器是什么
7.1.2布隆过滤器的使用场景
7.2布隆过滤器原理解析
7.3布隆过滤器的使用
7.3.1布隆过滤器的基本用法
7.4布隆过滤器代码实现
7.4.1自己简单模拟实现
7.4.2手动实现参考
7.4.3使用Google开源的Guava中自带的布隆过滤器
8. GeoHash查找附近的人
8.1使用数据库实现查找附近的人
8.2 GeoHash算法简述
8.3在Redis中使用Geo
8.3.1增加
8.3.2距离
8.3.3获取元素位置
8.3.4获取元素的hash值
8.3.5附近的公司
8.3.6注意事项
9.持久化
9.1持久化简介
9.1.1 持久化发生了什么I从内存到磁盘
9.1.2如何尽可能保证持久化的安全
9.2 Redis中的两种持久化方式
9.2.1方式一:快照
9.2.2方式二: AOF
9.2.3 Redis 4.0混合持久化
10.发布订阅与Stream
10.1 Redis中的发布订阅功能
10.1.1 PubSub简介
10.1.2快速体验
10.1.3实现原理
10.1.4订阅频道原理
10.1.5订阅模式原理
10.1.6 PubSub的缺点
10.2更为强大的Stream I 持久化的发布/订阅系统
10.2.1消息ID和消息内容
10.2.2增删改查示例
10.2.3独立消费示例
10.2.4创建消费者示例
10.2.5组内消费示例
10.2.6 QA1: Stream 消息太多怎么办?| Stream 的上限
10.2.7 QA2: PEL 是如何避免消息丢失的?
10.2.8 Redis Stream Vs Kafka
11. [集群入门实践教程
11.1 Redis集群概述
1.1.1 Redis主从复制
11.1.2 Redis哨兵
11.1.3 Redis集群化
11.2主从复制
11.2.1主从复制主要的作用
11.2.2快速体验
11.2.3实现原理简析
11.3 Redis Sentinel哨兵
11.3.1快速体验
11.3.2客户端访问哨兵系统代码演示
11.3.3新的主服务器是怎样被挑选出来的?
11.4 Redis集群
11.4.1基本原理
11.4.2集群的主要作用
11.4.3快速体验
11.4.5数据分区方案简析
11.4.6节点通信机制简析
11.4.7数据结构简析
12. Redis数据类型、编码,底层数据结构
12.1 Redis构建的类型系统
12.1.1 redisObject对象
12.1.2命令的类型检查和多态
12.2 5种数据类型对应的编码和数据结构
12.2.1string
12.2.2 lstlit列表,它是简单的字符串列表,你可以添加一个元素到列表的头部,或者尾部。
12.2.3 set
12.2.4 zset
12.2.5 hash
12.3内存回收和内存共享
六。系统设计
(一) RestFul API
I. 重要概念
2. REST接口规范
2.1动作
2.2路径(接口命名)
2.3过滤信息(Filtering)
2.4状态码(Status Codes)
3. HATEOAS
二).常用框架
1. Spring常见问题
1.1什么是Spring框架?
1.2列举-些重 要的Spring模块?
1.3 @RestController vs @Controller
1.4 Spring I0C & AOP
1.4.1谈谈自己对于Spring loC和AOP的理解
1.4.2 Spring AOP和Aspect] AOP有什么区别?
1.5 Spring bean
1.5.1 Spring中的bean的作用域有哪些?
1.5.2 Spring中的单例bean的线程安全问题了解吗?
1.5.3 @Component和@Bean的区别是什么?
1.5.4 将一个类声明为Spring的bean的注解有哪些?
1.5.5 ### 5.5 Spring中的bean生命周期?
1.6 Spring MVC
1.6.1说说自己对于Spring MVC了解?
1.6.2 SpringMVC工作原理了解吗?
1.7 Spring框架中用到了哪些设计模式?
1.8 Spring事务
1.8.1 Spring管理事务的方式有几种?
1.8.2 Spring事务中的隔离级别有哪几种?
1.8.3 Spring事务中哪几种事务传播行为?
1.8.4 @TransactionalrollbackFor = Exception.lass)注解了解吗?
1.9 JPA
1.9.1如何使用IPA在数据库中非持久化- -个字段?
2. Spring常用注解
2.1 springootpplication
2.2 Spring Bean相关
2.2.1 @Autowired
2.2.2 Component , GRepository , service, eController
2.2.3 @RestController
2.2.4 escope
2.2.5 Configuration
2.3处理常见的HTTP请求类型
2.3.1 GET请求
2.3.2POST请求
2.3.3 PUT请求
2.3.4 DELETE请求
2.3.5 PATCH请求
2.4前后端传值
2.4.1 @Pathvariable 和GRequestParam
2.4.21 @RequestBody
2.5读取配置信息
2.5.1 @value (常用)
2.5.2 ConfigurationProperties (常用)
2.5.31 PropertySource (不常用)
2.6参数校验
2.6.1 -些常用的字段验证的注解
2.6.2验证请求体(RequestBody)
2.6.3验证请求参数(Path Variables和Request Parameters)
2.7全局处理Controller层异常
2.8JPA相关
2.8.1创建表
2.8.2创建主键
2.8.3设置字段类型
2.8.4指定不持久化特定字段
2.8.5声明大字段
2.8.6创建枚举类型的字段
2.8.7增加审计功能
2.8.8删除/修改数据
2.8.9关联关系
2.9事务GTransactional
2.10 json数据处理
2.10.1过滤json数据
2.10.2格式化json数据
2.10.3扁平化对象
2.11测试相关
3. Spring事务
3.1什么是事务?
3.2事物的特性(ACID) 了解么?
3.3详谈Spring对事务的支持
3.3.1. Spring支持两种方式的事务管理
3.3.2 Spring事务管理接口介绍
3.3.3事务属性详解
3.3.4 @Transactional注解使用详解
4. Spring I0C和AOP详解
4.1什么是I0C
4.1.1为什么叫控制反转
4.2 I0C解决了什么问题
4.3 I0C和DI的区别
4.4什么是AOP
4.5 AOP解决了什么问题
4.6 AOP为什么叫面向切面编程
5. Spring中Bean的作用域与生命周期
5.1前言
5.2 bean的作用域
5.2.1 singleton--唯一 bean 实例
5.2.2 prototype--每次请求都会创建一 个新的 bean实例
5.2.3 request--每次HTTP请求都会产生- 个新的bean, 该bean仅在 当前HTTP request内
有效
5.2.4 session--每- 次HTTP请求都会产生- 个新的bean,该bean仅在当前HTTP session内
有效
5.2.5 globalSession
5.3 bean的生命周期
5.3.1 initialization和destroy
5.3.2 实现*Aware接口在Bean中使用Spring框架的一些对象
5.3.3 BeanPostProcessor
5.3.4总结
5.3.5 单例管理的对象
5.3.6 非单例管理的对象
6. SpringMVC工作原理详解
6.1 先来看一下什么是MVC模式
6.2 SpringMVC简单介绍
6.3 SpringMVC使用
6.4 SpringMVC工作原理(重要)
6.5 SpringMVC重要组件说明
6.6 DispatcherSerlet详细解析
7. Spring中都用到了那些设计模式?
7.1控制反转(loC)和依赖注入(D)
7.2工厂设计模式
7.3单例设计模式
7.4代理设计模式
7.4.1代理模式在AOP中的应用
7.4.2 Spring AOP和Aspect] AOP有什么区别?
7.5模板方法
7.6观察者模式
7.6.1 Spring事件驱动模型中的三种角色
7.6.2 Spring的事件流程总结
7.7适配器模式
7.7.1 spring AOP中的适配器模式
7.7.2 spring MVC中的适配器模式
7.8装饰者模式
7.9总结
(三).认证授权(WT. Sso)
1. JWT身份认证优缺点分析以及常见问题解决方案
1.1 Token认证的优势
1.1.1无状态
1.1.2 有效避免了CSRF攻击
1.1.3 适合移动端应用
1.1.4单点登录友好
1.2 Token认证常见问题以及解决办法
1.2.1注销登录等场景下token还有效
1.2.2 token的续签问题
1.3总结
2. sso单点登录
2.1前言
2.1.1 SO说明
2.1.2单点登录系统的好处
2.1.3设计目标
2.2 SSO设计与实现
2.2.1 核心应用与依赖
2.2.2 用户登录状态的存储与校验
2.2.3 用户登录/登录校验
2.2.4 用户登出
2.2.5跨域登录.登出
2.3备注
(四).分布式
1.分布式相关概念入门
1.1分布式系统的经典基础理论
1.2分布式事务
1.3 -致性协议/算法
1.4分布式存储
1.5分布式计算
2. Dubbo
2.1重要的概念
2.1.1 什么是Dubbo?
2.1.2什么是RPC7RPC原理是什么?
2.1.3为什么要用Dubbo?
2.1.4 什么是分布式?
2.1.5 为什么要分布式?
2.2 Dubbo的架构
2.2.1 Dubbo的架构图解
2.2.2 Dubbo工作原理
2.3 Dubbo的负载均衡策略
2.3.1先来解释一下什么是负载均衡
2.3.2再来看看Dubbo提供的负载均衡策略
2.3.3配置方式
2.4 zookeeper宕机与dubbo直连的情况
3.消息队列其实很简单
3.1什么是消息队列
3.2为什么要用消息队列
3.2.1 通过异步处理提高系统性能(削峰、减少响应所需时间)
3.2.2降低系统耦合性
3.3使用消息队列带来的一-些问题
3.4 JMS VS AMQP
3.4.1 JMS
3.4.2 AMQP
3.4.3 JMS vs AMQP
3.5常见的消息队列对比
4. RabbitMQ
4.1 RabbitMQ介绍
4.1.1 RabbitMQ简介
4.1.2 RabbitMQ核心概念
4.2安装RabbitMq
4.2.1安装erlang
4.2.2 安装RabbitMQ
5. RocketMQ
5.1消息队列扫盲
5.1.1 消息队列为什么会出现?
5.1.2消息队列能用来干什么?
5.2 RocketMQ是什么?
5.3队列模型和主题模型
5.3.1 队列模型
5.3.2主题模型
5.3.3 RocketMQ中的消息模型
5.4 RocketMQ的架构图
5.5如何解决顺序消费、重复消费
5.5.1 顺序消费
5.5.2重复消费
5.6分布式事务
5.7消息堆积问题
5.8回溯消费
5.9 RocketMQ的刷盘机制
5.9.1 同步刷盘和异步刷盘
5.9.2同步复制和异步复制
5.9.3存储机制
5.10总结
6. Kafka
6.1 Kafka简介
6.1.1 Kafka创建背景
6.1.2 Kafka简介
6.1.3 Kafika基础概念
6.2 Kafka的设计与实现
6.2.1讨论- -: Kafka 存储在文件系统上
6.2.2讨论二: Kafka 中的底层存储设计
6.2.3讨论三:生产者设计概要
6.2.4讨论四:消费者设计概要
6.2.5讨论五: Kafka 如何保证可靠性
6.3动手搭-一个Kafka
6.3.1第一步:下载Kafka
6.3.2第二步:启动服务
6.3.3第三步:发送消息
7. API网关
7.1背景
7.1.1什么是API网关
7.1.2为什么需要API网关
7.1.3 统- -API网关
7.2统- -网关的设计
7.2.1异步化请求
7.2.2链式处理
7.2.3业务隔离
7.2.4请求限流
7.2.5熔断降级
7.2.6泛化调用
7.2.7管理平台
7.3总结
8.分布式ID
8.1数据库自增ID
8.2数据库多主模式
8.3号段模式
8.4雪花算法
8.5百度(uid-generator)
8.6美团(Leaf)
8.7总结
8.8 Redis
9.限流的算法有哪些?
9.1固定窗口计数器算法
9.2滑动窗口计数器算法
9.3漏桶算法
9.4令牌桶算法
10. Zookeeper
10.1前言
10.2什么是ZooKeeper
10.2.1 Zookeeper的由来
10.2.2 ZooKeeper概览
10.2.3 结合个人使用情况的讲一下ZooKeeper
10.3关于ZooKeeper的一些重要概念
10.3.1重要概念总结
10.3.2会话(Session)
10.3.3 Znode
10.3.4版本
10.3.5 Watcher
10.3.6 ACL
10.4 ZooKeeper特点
10.5 ZooKeeper设计目标
10.5.1 简单的数据模型
10.5.2可构建集群
10.5.3顺序访问
10.5.4高性能
10.6 ZooKeeper集群角色介绍
10.7 ZooKeeper &ZAB协议&Paxos算法
10.7.1 ZAB协议&Paxos算法
10.7.2 ZAB协议介绍
10.7.3 ZAB协议两种基本的模式:崩溃恢复和消息广播
10.8总结
(五).大型网站架构
1.如何设计-个高可用系统?要考虑哪些地方?
1.1什么是高可用?可用性的判断标准是啥?
1.2哪些情况会导致系统不可用?
1.3有哪些提高系统可用性的方法?
1.3.1 注重代码质量,测试严格把关
1.3.2使用集群,减少单点故障
1.3.3限流
1.3.4超时和重试机制设置
1.3.5 熔断机制
1.3.6异步调用
1.3.7 使用缓存
1.3.8 其他
1.4总结
(六).微服务
1. Spring Cloud
1.1什么是Spring cloud
1.2 Spring Cloud的版本
1.3 Spring Cloud的服务发现框架一-- Eureka
1.4负载均衡之Ribbon
1.4.1什么是RestTemplate?
1.4.2为什么需要Ribbon?
1.4.3 Nginx和Ribbon的对比
1.4.4 Ribbon的几种负载均衡算法
1.5什么是Open Feign
1.6必不可少的Hystrix
1.6.1什么是Hystrix之熔断和降级
1.6.2什么是Hystrix之其他
1.7微服务网关-- -Zuul
1.7.1 Zuul的路由功能
1.7.2 Zuul的过滤功能
1.7.3关于Zuul的其他
1.7.4为什么要使用进行配置管理?
1.7.5 Config是什么
1.8引出Spring Cloud Bus
1.9总结
七.必会工具
(-).Git
1.版本控制
1.1什么是版本控制
1.2为什么要版本控制
1.3本地版本控制系统
1.4集中化的版本控制系统
1.5分布式版本控制系统
2.认识Git
2.1 Git简史
2.2 Git与其他版本管理系统的主要区别
2.3 Git的三种状态
3. Git使用快速入门
3.1获取Git仓库
3.2记录每次更新到仓库
3.3 -个好的Git提交消息
3.4推送改动到远程仓库
3.5远程仓库的移除与重命名
3.6查看提交历史
3.7撤销操作
3.8分支
(二). Docker
1.认识容器
1.1什么是容器?
1.1.1先来看看容器较为官方的解释
1.1.2再来看看容器较为通俗的解释
1.2图解物理机虚拟机与容器
2.再来谈谈Docker的一-些概念
2.1什么是Docker?
2.2 Docker思想
2.3 Docker容器的特点
2.4为什么要用Docker ?
3.容器VS虚拟机
3.1两者对比图
3.2容器与虚拟机总结
3.3容器与虚拟机两者是可以共存的
4. Docker基本概念
4.1镜像(mage):-一个特殊的文件系统
4.2容器(Container:镜像运行时的实体
4.3仓库(Repository):集中存放镜像文件的地方
5.常见命令
5.1基本命令
5.2拉取镜像
5.3删除镜像
6. Build Ship and Run
7.简单了解-下Docker底层原理
7.1虚拟化技术
7.2 Docker基于LXC虚拟容器技术
8.总结.
八。面试指南
(一) .程序员简历该怎么写
1.为什么说简历很重要?
1.1先从面试前来说
1.2再从面试中来说
2.下面这几点你必须知道
3.必须了解的两大法则
3.1 STAR法则(Situation Task Action Result)
3.2 FAB法则(Feature Advantage Benefit)
4.项目经历怎么写?
5.专业技能该怎么写?
6.排版注意事项
7.其他的一些小tips
(二) .如何准备面试
1.如何获取大厂面试机会?
2.面试前的准备
2.1准备自己的自我介绍
2.2搞清楚技术面可能会问哪些方向的问题
2.3休闲着装即可
2.4随身带上自己的成绩单和简历
2.5如果需要笔试就提前刷一些笔试题
2.6花时间一些逻辑题
2.7准备好自己的项目介绍
2.8提前准备技术面试
2.9面试之前做好定向复习
3.面试之后复盘
4.如何学习?学会各种框架有必要吗?
4.1我该如何学习?
4.2学会各种框架有必要吗?
(三) .Java学习路线和方法推荐
1.Java基础
2.操作系统与计算机网络
3.数据结构与算法
4.前端知识
5. MySQL
6.常用工具
7.常用框架
8.多线程的简单使用
9.分布式
10.深入学习
11.微服务
12.总结
正文:
一、Java
(一).基础
二、网络
(一).计算机网络知识
1.计算机概述
四、数据结构与算法
(一).数据结构(布隆过滤器)
海量数据处理以及缓存穿透这两个场景让我认识了布隆过滤器,我查阅了一些资料来了解它,但是很
多现成资料并不满足我的需求,所以就决定自己总结一篇关于布隆过滤器的文章。希望通过这篇文章让
更多人了解布隆过滤器,并且会实际去使用它!
下面我们将分为几个方面来介绍布隆过滤器:
1.什么是布隆过滤器?
2.布隆过滤器的原理介绍。
3.布隆过滤器使用场景。
4.通过Java编程手动实现布隆过滤器。
5.利用Google开源的Guava中自带的布隆过滤器。
五、数据库
(一). MySQL
1.基本操作
六系统设计
(一). RestFul API
RESTful API是每个程序员都应该了解并掌握的基本知识,我们在开发过程中设计API的时候也应该至
少要满足RESTful API的最基本的要求(比如接口中尽量使用名词,使用POST请求创建资源,DELETE
请求删除资源等等,示例: GET /notes/id: 获取某个指定id的笔记的信息)。
如果你看RESTful API相关的文章的话-般都比较晦涩难懂, 包括我下面的文章也会提到-些概念性的
东西。但是,实际上我们平时开发用到的RESTful API的知识非常简单也很容易概括!举个例子,如果我
给你下面两个url你是不是立马能知道它们是干什么的!这就是RESTful API的强大之处!
RESTful API可以你看到url + http method就知道这个url是千什么的,让你看到了http状态码
(status code)就知道请求结果如何。
GET /classes: 列出所有班级
POST /classes: 新建一个班级
下面的内容只是介绍了我觉得关于RESTful API比较重要的一些东西,欢迎补充。
由于此PDE内容过多在此就不一一展示了