# java-practice **Repository Path**: jcsn/java-practice ## Basic Information - **Project Name**: java-practice - **Description**: 学习Java时的笔记 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-18 - **Last Updated**: 2026-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java ## README # 2024-java-practice ## 介绍 温习java知识点 ## 目录结构 ### code 代码目录 #### 1.JavaSE - Java基础 * `Atm-app` ATM系统 * `day9-static` * `static_code.Demo3` 斗地主案例 * `static_singleinstance` 单例模式 * `Singleinstance` 饿汉单例模式 * `SingleinstanceLazy` 懒汉单例模式(延时加载) * `day11-oop` * `d6_abstract.cases` 抽象方法案例 * `d6_abstract.template_case` 模板方法案例 * `day12-oop` 多态 * `polymorphic.d4_test` 多态综合案例 * `polymorphic.d8_anonymous` 匿名内部类 * `day15-collection-map` 集合 * `d4_collection_test` 斗地主游戏的案例开发 * `day16-movie-buy-map` 日志框架阶段项目 * `day16-stream-exception-map` 不可变集合、Stream流及异常 * `day17-file-io-app` File、递归、IO流(一) * `day18-io-app` IO流(二) * `day19-thread-app` 多线程 * `d8_threadpool.ThreadPoolDemo2` 线程池 * `d9_timer.*` 定时器 * `day20-net-app` 网络编程 * `d2_udp1` UDP单发单收 * `d3_udp2` UDP多发多收 * `d4_upd3` UDP广播、组播 * `d5_socket1` TCP1发1收 * `d6_socket2` TCP多发和多收-单个客户端消息 * `d7_socket3` TCP多发和多收-同时接受多个客户端消息(重点) * `d8_socket4` TCP多发和多收-线程池优化(重点) * `d9_chat` 即时通讯-端口转发 * `d9_chat.chat` 即时通讯-聊天室 * `d10_bs` 模拟BS系统 * `day21-junit-reflect-annotation-proxy-app` 单元测试、反射、注解、动态代理 * `day22-xml-app` XML、Xpath、工厂模式、装饰模式 #### 2.JavaWeb - JavaWeb开发 * `day01_基础加强` * `day04_jdbc` * `day05_dataSource_jdbcTemplate` * `day13_servlet` * `day13_tomcat` * `day14_servlet&http&request` * `day14_test` * `day15_response` * `day16_cookie&session` * `day17_case` * `day17_el&jstl` * `day19_filter&listener` * `day23_redis` * `day28_travel` #### 3.JavaFrameWork - Java开发框架 * spring * `spring_01_quickstart` * `spring_02_base_config` * `spring_03_bean_instance` * `spring_04_bean_lifecycle` * `spring_05_di_set` * `spring_06_di_constructor` * `spring_07_di_autoware` * `spring_08_di_collection` * `spring_09_datasource` * `spring_10_container` * `spring_11_annotation_bean` * `spring_12_annotation_bean_manager` * `spring_13_annotation_di` * `spring_14_annotation_third_bean_manager` * `spring_15_spring_mybatis` * `spring_16_spring_junit` * `spring_17_aop_demo` * `spring_18_aop_quickstart` * `spring_19_aop_pointcut` * `spring_20_aop_advice_type` * `spring_21_case_interface_run_speed` * `spring_22_aop_advice_data` * `spring_23_case_handle_password` * `spring_24_case_transfer` * `spring_25_case_transfer_log` * springmvc * `springmvc_01_quickstart` * `springmvc_02_bean_load` * `springmvc_03_request_mapping` * `springmvc_04_request_param` * `springmvc_05_response` * `springmvc_06_rest` * `springmvc_07_rest_case` * `springmvc_08_ssm` * `springmvc_09_result` * `springmvc_10_exception` * `springmvc_11_page` * `springmvc_12_interceptor` * maven * `maven_01_parent` * `maven_02_ssm` * `maven_03_pojo` * `maven_04_dao` * springboot * `springboot_01_quickstart` * `springboot_02_base_config` * `springboot_03_read_data` * `springboot_04_profile` * `springboot_05_maven_and_boot_profile` * `springboot_06_config_file` * `springboot_07_test` * `springboot_08_mybatis` * `springboot_09_ssm` * mybatis_plus * `mybatisplus_01_quickstart` * `mybatisplus_02_dql` * `mybatisplus_03_dml` * `mybatisplus_04_generator` * `itcast-mp-generator` * `itcast-mp-springboot` * `itcast-mybatis-plus` * SpringAdvance49 * `asm` * `demo6_advanced_aspectj_01` * `demo6_advanced_aspectj_02` * `show` * SpringBoot * `ip_spring_boot_starter` * `springboot_01_01_quickstart` * `springboot_01_02_quickstart` * `springboot_01_03_quickstart` * `springboot_01_04_quickstart` * `springboot_02_base_configuration` * `springboot_03_yaml` * `springboot_04_junit` * `springboot_05_mybatis` * `springboot_06_mybatis_plus` * `springboot_07_druid` * `springboot_08_ssmp` * `springboot_09_config` * `springboot_10_profiles` * `springboot_11_log` * `springboot_12_hot_deploy` * `springboot_13_configuration` * `springboot_14_test` * `springboot_15_sql` * `springboot_16_redis` * `springboot_17_mongodb` * `springboot_18_es` * `springboot_19_cache` * `springboot_20_jetcache` * `springboot_21_j2cache` * `springboot_22_task` * `springboot_23_mail` * `springboot_24_mq` * `springboot_25_admin_server` * `springboot_26_admin_client` * `springboot_27_bean_init` * `springboot_28_bean_load` * `springboot_29_bean_properties` * `springboot_30_startup` #### 4.MiddleKey&&ServiceFramework * `1.1 SpringCloud` 微服务拆分、Eureka注册中心、Ribbon负载均衡 * `1.2 SpringCloud` Nacos配置、Feign、Gateway[断言、过滤器、默认过滤器、全局过滤器、跨域问题] * `2. Docker` * `docker-compose.yml` 部署微服务示例 * `docker-compose up -d` 部署命令 * `3. RabbitMq` * `mq-demo` RabbitMq 基础 * `mq-advanced-demo` RabbitMq 高级 * `4. Seata` * `5. Elasticsearch` * `ESAndCanal` Canal监听mysql对接java客户端及es服务 * `ESDemo` ES Demo * `wfu-es-demo` 微服务版ES Demo * `6. Sentinel` 微服务保护 * `7. Dubbo` * `1. spring和springmvc整合后代码` * `2. dubbo快速入门` * `3. dubbo高级特性-序列化` * `4. 超时与重试` * `5. 多版本` * `6. 负载均衡` * `7. 集群容错` * `8. Zookeeper` * `curator-zk` * `9. RocketMq` * `Mybatis-Reverse` Mybatis逆向工程 - 生成curd代码 * `rocketmq` 官方源码 * `rocketmq-demo` 消息发送样例 * `base` 基本消息发送、消费 * 同步消息发送 * 异步消息发送 * 单向消息发送 * `batch` 批量消息发送 * `delay` 延时消息发送 * `filter` 过滤消息发送 * `order` 顺序消息发送 * `transaction` 事务消息发送 * RPC案例-下单、支付 * `shop-project` 技术整合 [ Dubbo + Zookeeper + RocketMq + Mysql + Springboot * springboot整合 * springboot-rocketmq-producer `RocketMq生产者整合` [Springboot + RocketMq] * springboot-rocketmq-consumer `RocketMq消费者整合` [Springboot + RocketMq] * springboot-dubbo-consumer `Dubbo 消费者` [Springboot + Dubbo] * springboot-dubbo-interface `Dubbo RPC服务接口` [Springboot + Dubbo] * springboot-dubbo-provider `Dubbo 生产者` [Springboot + Dubbo] * `shop` 下单、支付 * `CastException` 异常抛出类 * `shop-order-web` 下单、库存扣减消费 * `shop-goods-service` 幂等性处理、回退库存 * `shop-coupon-service` 回退优惠券 * `shop-user-service` 修改余额 * `shop-order-service` 取消订单 * `shop-pay-service` 创建支付订单 * `shop-pay-web` 支付回调 * `10. Redis` * `hm-dianping` * 点评系统-Redis登录及拦截器鉴权、刷新token * 缓存穿透、缓存击穿、缓存雪崩 * 互斥锁、逻辑过期 * Util方法封装 * Redis分布式锁 * 不可重入的分布式锁 * 可重入的分布式锁 * Redisson的multiLock * 使用Lua编写删除锁脚本并调用,保证锁误删 * 基于阻塞队列实现异步秒杀下单 * 问题一:内存限制问题 * 问题二:数据安全问题 * 消息队列实现异步秒杀 * Redis消息队列 * Redis消息队列-认识消息队列 * Redis消息队列-基于List实现消息队列 * Redis消息队列-基于PubSub的消息队列 * Redis消息队列-基于Stream的消息队列 * Redis消息队列-基于Stream的消息队列-消费者组 * 基于Redis的Stream结构作为消息队列,实现异步秒杀下单 * `item-service` 多级缓存 * `jedis-demo` Jedis 客户端代码示例 * `redis-client-demo` Redis通信协议-基于Socket自定义Redis的客户端 * `redis-demo` 哨兵模式、分片集群模式示例 * `11. MongoDB` * `article` MongoDB实现文章的增删改查 #### 4.2.ServiceFramework - Java服务框架 #### 5.ProjectPractice - Java项目实战 #### 6.InterviewTopic - Java大厂面试专题 #### ActivitiDemo - 工作流示例代码 #### algorithm - 算法实现 * BinarySearchDemo `二分查找` * BubblingDemo `冒泡算法` * ChoiceDemo `选择排序 [ 每轮选择当前位置,开始选择后面较小值与之交换 ]` #### easyExcel - easyExcel读写实现 ### doc 文档/知识点 #### 1.JavaSE * java编写、javac编译 * 新建项目流程之项目-模块-包-类 * 文件编辑、删除、模块编辑-导入-删除 * 字面量 * 字符 * 字符串 * 变量 * 数据类型 * 引用数据类型 * String、Array...etc * 基本数据类型 * 整数 byte [-128~127]、short、int、long * 浮点数 float、double * 字符 char [0~65535] * 布尔 boolean * 类型转换 * 自动类型转换 * 表达式的自动类型转换 * 强制类型转换 * 运算符 * 基本算术运算符 +、-、*、/、% * +符号做连接符 * 自增自减运算符 ++、-- * 赋值运算符 =、+=、-=、*=、/=、%= * 关系运算符 ==、!=、>、>=、<、<= * 逻辑运算符 &、&&、|、||、!、^ * 三元运算符 条件表达式 ? 值1 : 值2 * 运算符优先 () * 流程控制 * 分支结构 * if分支 * 循环结构 * for * while * do-while * 死循环 * 循环嵌套 * 跳转关键字 * break * continue * 案例技术 * 随机数Random类 * 数组 * 定义 * 静态初始化数组 * 动态初始化数组 * 遍历 * 定义 * 使用方法 * 案例 * 数组元素求和 * 数组元素求最值 * 随机排名 * 数组排序 * 冒泡排序 * 选择排序 * 快速排序 * 插入排序 * 数组的内存图 * 方法 * 方法完整的定义形式、调用 * 方法其他的定义形式、调用 * 方法使用常见问题 * 方法的参数传递机制 * 基本类型的参数传递:值传递 * 引用类型的参数传递:值传递 * 方法的重载 * 定义 * 识别方法重载 * 面向对象 * 面向对象 * 设计对象并使用 * 对象内存图 * 多个对象的内存图 * 两个变量指向同一个对象的内存图 * 垃圾回收 * 面向对象编程训练:模拟购物车模块 * 构造器 * 作用 * 定义格式 * 分类 * 注意事项 * this关键字 * JavaBean * 成员变量和局部变量的区别 * 面向对象三大特征之二:继承 * 继承概述、使用继承的好处 * 继承设计规范 * 继承的特点 * 继承后:成员变量、成员方法的访问特点 * 继承后:方法重写 * 继承后:子类构造器的特点 * 继承后:子类构造器访问父类有参构造器 * this、super使用总结 * 面向对象进阶(包、权限修饰符、final、常量、枚举、抽象类、接口) * 包 * 什么是包 * 导包 * 自动导包设置 * 权限修饰符 * 什么是权限修饰符 * 权限修饰符的分类和具体作用范围 * final * final的作用 * 注意 * 常量 * 常量的概述和作用 * 常量执行原理 * 常量作信息标志和分类 * 枚举 * 枚举的概述 * 枚举的特征 * 枚举的使用场景 * 抽象类 * 抽象类 * 抽象类的特征、注意事项 * 抽象类的应用知识:模板方法模式 * 接口 * 接口概述、特点 * 接口的基本使用:被实现 * 接口与接口的关系:多继承 * jdk8开始接口新增方法 * 使用接口注意事项 * 面向对象三大特征之三:多态 * 多态的概述 * 什么是多态 * 常见类型 * 多态中成员访问特点 * 多态的前提 * 多态的优势 * 优势 * 缺陷 * 常见类型 * 多态综合案例 * API * String * String类概述 * 概述 * 特点详解 * String类创建对象的两种方式 * 定义方式 * 区别 * String类常用api-字符串内容比较 * String类常用api-遍历、替换、截取、分割操作 * ArrayList * ArrayList集合快速入门 * ArrayList集合 * ArrayList集合的对象获取 * ArrayList集合添加元素的方法 * ArrayList集合对于泛型的支持 * ArrayList集合常用api、遍历 * ArrayList集合案例:遍历并删除元素 * ArrayList集合案例:存储自定义类型 * ArrayList集合案例:元素搜索 * static静态关键字 * static是什么 * 修饰成员变量的用法 * static修饰成员方法的基本用法 * static使用场景 * static修饰成员方法的内存原理 * static的注意事项 * static应用知识:工具类 * static应用知识:代码块 * 代码块概述 * 代码块种类 * 静态代码块应用案例 * static应用知识:单例 * 设计模式 * 单例设计模式介绍 * 饿汉单例模式 * 懒汉单例模式 * 饿汉、懒汉单例模式选择 * 包装类 * 包装类的定义 * 8种基本数据类型对应的引用类型 * 为什么提供包装类 * 自动装箱 * 自动拆箱 * 包装类的特有功能 * 正则 * 正则规则 * 正则示例 * 全面、深入学习正则表达式的规则 * 全面、深入学习正则表达式的规则 * 拓展:正则表达式爬取信息中的内容 * Lambda表达式 * Lambda * 概述 * 简化格式 * 什么是函数式接口 * Lambda表达式的省略规则 * 集合 * 重点 * 集合概述 * 集合对于泛型的支持 * 集合类体系结构 * Collection集合特点 单列集合 * List系列集合:添加的元素是有序、可重复、有索引 * ArrayList * LinkedList * Set系列集合:添加的元素是无序、不重复、无索引 * HashSet * LinkedHashSet * TreeSet * Collection使用场景 * Map集合特点 双列集合 * HashMap * LinkedHashMap * TreeMap * Map集合实现类特点 * 常见数据结构 * 栈 * 队列 * 数组 * 链表 * 二叉树、二叉查找树 * 平衡二叉树 * 红黑树 * 补充知识 * 集合的并发修改异常问题(删除时易出bug) * 泛型深入 * 泛型的概述和优势 * 自定义泛型类 * 自定义泛型方法 * 自定义泛型接口 * 泛型通配符、上下限 * 哈希表(对于增删改查数据性能都较好的结构) * 可变参数 * 集合工具类Collections * 集合嵌套 * 不可变集合、Stream流、异常 * 创建不可变集合 * 概念 * 为什么要创建不可变集合 * 如何创建不可变集合 * Stream流 * 概念 * 获取Stream流 * stream流常用api(中间操作方法) * 收集stream流 * 异常 * 异常概述 * 异常体系 * 常见运行时异常 * 异常默认处理流程 * 编译时异常处理机制(三种) * 运行时异常处理机制 * 自定义异常 * 日志框架 * 概述 * 体系结构 * LogBack概述 * LogBack快速入门 * LogBack配置详解-输出位置、格式设置 * LogBack配置详解-日志级别设置 * File、递归、IO流 * File * 概述 * 相对路径和绝对路径 * 常用api * 方法递归 * 递归的形式和特点 * 递归的算法流程、核心要素 * 递归求阶乘的执行流程 * 字符集 * 概述 * 字符集的编码、解码 * IO流 * 概述 * 分类 * 字节流 * 文件字节输入流:每次读取一个字节 * 文件字节输入流:每次读取一个字节数组 * 文件字节输入流:一次读完全部字节 * 文件字节输出流:写字节数据到文件 * 文件拷贝 * 资源释放的方式 * try-catch-finally * JDK7优化(建议使用) * JDK9优化(不建议使用) * 字符流的使用 * 文件字符输入流-一次读取一个字符 * 文件字符输入流-一次读取一个字符数组 * 文件字符输出流 * 缓冲流 *1 缓冲流概述 *2 字节缓冲流 *3 字节缓冲流的性能分析 *4 字符缓冲流 * 转换流 * 字符输入转换流 InputStreamReader * 字符输出转换流 OutputStreamWriter * 序列化 * 对象序列化 * 对象反序列化 * 注意事项 * 打印流 * PrintStream * PrintWriter * 输出语句的重定向 * IO框架 * IO流体系小结 * 字节流 * 字符流 * 多线程 * 多线程的创建 * 继承Thread类 * 实现Runnable接口 * JD0新增:实现Callable类 * Thread类的常用方法 * 线程安全 * 线程同步 * 线程通信 * 线程池[重点] * 线程池概述 * 线程池实现的api、参数说明 * 线程池处理Runnable任务 * 线程池处理Callable任务 * Executors工具栏实现线程池 * 补充知识 * 定时器 * 并发、并行 * 线程的生命周期 * 网络编程 * 网络通信三要素 * IP地址 * 端口号 * 协议 *1. TCP *2. UDP * UDP通信 * 快速入门 * 广播、组播 * TCP通讯 * 快速入门 - 1发1收 * 多发多收消息 - 单个客户端消息 * 同时接受多个客户端消息(重点) * 使用线程池优化 * TCP实战案例 * 即时通讯-端口转发 * 模拟BS系统 * 单元测试、反射、注解、动态代理 * JUnit单元测试框架 * 概述 * 快速入门 * 反射 * 反射概述 * 反射获取类对象(3种方法) * 反射获取构造器对象 * 反射获取成员变量对象 * 反射获取方法对象 * 反射的作用-绕过编译阶段为集合添加数据(泛型擦除) * 反射的作用-通用框架的底层原理 * 注解 * 注解概述 * 自定义注解 * 元注解 * 注解解析 * 注解的应用场景一: JUnit框架 * 动态代理(切面编程AOP思想) * XML、XPATH * XML * XML概述 * XML语法规则 * XML文档约束方式 - DTD约束【了解】 * XML文档约束方式 - schema约束【了解】 * XML解析 * XML解析概述 * Dom4j解析XML文件 * Dom4j解析XML文件-案例 * XPATH * 引入 * XPath使用步骤: * XPath常用API * XPath提供的四种检索数据的写法 * 小结 * 设计模式 * static应用知识:单例模式 * 饿汉单例 * 懒汉单例 * 工厂模式(Factory Pattern) * 概述 * 工厂设计模式的作用 * 小结 * 装饰模式 * 概述 * 装饰模式的作用 #### 2.JavaWeb - JavaWeb开发 * 基础加强笔记 * Junit单元测试 * 反射:框架设计的灵魂 * 注解 * MySQL基础课堂笔记 * 数据库的基本概念 * DDL - 操作数据库、表 * DML - 增删改表中数据 * DQL - 查询表中数据 * 约束 * 数据库的设计 * 数据库的备份和还原 * 多表查询 * 事务 * DCL - 管理用户,授权 * JDBC课堂笔记 * JDBC基本概念 * 快速入门 * 对JDBC中各个接口和类详解 * JDBC连接池&JDBCTemplate课堂笔记 * 数据库连接池 * Spring JDBC : JDBC Template * Tomcat&Servlet笔记 * web相关概念回顾 * web服务器软件:Tomcat * Servlet入门学习 * Servlet&HTTP&Request笔记 * Servlet * HTTP协议 * Request * Response笔记 * HTTP协议:响应消息 * Response对象 * ServletContext对象 * Cookie&Session笔记 * 会话技术 * Cookie * Session * JSP:入门学习 * EL&JSTL笔记 * JSP: * 指令 * 注释 * 内置对象 * MVC开发模式 * EL表达式 * JSTL标签 * 三层架构 * Filter&Listener笔记 * Filter:过滤器 * Listener:监听器 * redis笔记 * 概念 * 下载安装 * 命令操作 * 数据结构 * 持久化操作 * 使用Java客户端操作redis #### 3.JavaFrameWork - Java开发框架 ##### 3.1 知识点 * Spring * Spring介绍 * 为什么要学? * 学什么? * 怎么学? * Spring相关概念 * 初识Spring * Spring家族 * 了解Spring发展史 * Spring系统架构 * 系统架构图 * 课程学习路线 * Spring核心概念 * 目前项目中的问题 * IOC、IOC容器、Bean、DI * 核心概念小结 * 入门案例 * IOC入门案例 * 入门案例思路分析 * 入门案例代码实现 * DI入门案例 * 入门案例思路分析 * 入门案例代码实现 * IOC相关内容 * bean基础配置 * bean基础配置(id与class) * bean的name属性 * bean作用范围scope配置 *bean基础配置小结 * bean实例化 * 环境准备 * 构造方法实例化 * 分析Spring的错误信息 * 静态工厂实例化 * 实例工厂与FactoryBean * bean实例化小结 * bean的生命周期 * 环境准备 * 生命周期设置 * close关闭容器 * 注册钩子关闭容器 * bean生命周期小结 * DI相关内容 * setter注入 * 环境准备 * 注入引用数据类型 * 注入简单数据类型 * 构造器注入 * 环境准备 * 构造器注入引用数据类型 * 构造器注入多个引用数据类型 * 构造器注入多个简单数据类型 * 自动配置 * 什么是依赖自动装配? * 自动装配方式有哪些? * 准备下案例环境 * 完成自动装配的配置 * 集合注入 * 环境准备 * 注入数组类型数据 * 注入List类型数据 * 注入Set类型数据 * 注入Map类型数据 * 注入Properties类型数据 * IOC/DI配置管理第三方bean * 案例:数据源对象管理 * 环境准备 * 思路分析 * 实现Druid管理 * 实现C3P0管理 * 加载properties文件 * 第三方bean属性优化 * 读取单个属性 * 加载properties文件小结 * 核心容器 * 环境准备 * 容器 * 容器的创建方式 * Bean的三种获取方式 * 容器类层次结构 * BeanFactory的使用 * 核心容器总结 * 容器相关 * bean相关 * 依赖注入相关 * IOC/DI注解开发 * 环境准备 * 注解开发定义bean * 删除原XML配置 * Dao上添加注解 * 配置Spring的注解包扫描 * 运行程序 * Service上添加注解 * 运行程序 * @Component/@Controller/@Service/@Repository * 纯注解开发模式 * 思路分析 * 实现步骤 *@Configuration *@ComponentScan * 注解开发bean作用范围与生命周期管理 * 环境准备 * Bean的作用范围 * Bean的生命周期 * 注解开发依赖注入 * 环境准备 * 注解实现按照类型注入 * 注解实现按照名称注入 * 简单数据类型注入 * 注解读取properties配置文件 * @Autowired * @Qualifier * @Value * @PropertySource * IOC/DI注解开发管理第三方bean * 环境准备 * 注解开发管理第三方bean *入对应的jar包 *配置类中添加一个方法 *方法上添加`@Bean`注解 *IOC容器中获取对象并打印 * 引入外部配置类 * 使用包扫描引入 * 使用`@Import`引入 * @Bean * @Import * 注解开发实现为第三方bean注入资源 * 简单数据类型 * 引用数据类型 * 注解开发总结 * Spring整合 * Spring整合Mybatis思路分析 * 环境准备 * 整合思路分析 * Spring整合Mybatis * 项目中导入整合需要的jar包 * 创建Spring的主配置类 * 创建数据源的配置类 * 主配置类中读properties并引入数据源配置类 * 创建Mybatis配置类并配置SqlSessionFactory * 主配置类中引入Mybatis配置类 * 编写运行类 * 运行程序 * Spring整合Junit * 环境准备 * 整合Junit步骤 * @RunWith * @ContextConfiguration * AOP简介 * 什么是AOP? * AOP作用 * AOP核心概念 * AOP入门案例 * 需求分析 * 思路分析 * 环境准备 * AOP实现步骤 * 步骤1:添加依赖 * 步骤2:定义接口与实现类 * 步骤3:定义通知类和通知 * 步骤4:定义切入点 * 步骤5:制作切面 * 步骤6:将通知类配给容器并标识其为切面类 * 步骤7:开启注解格式AOP功能 * 步骤8:运行程序 * 知识点1:@EnableAspectJAutoProxy * 知识点2:@Aspect * 知识点3:@Pointcut * 知识点4:@Before * AOP工作流程 * AOP工作流程 * 流程1:Spring容器启动 * 流程2:读取所有切面配置中的切入点 * 流程3:初始化bean, * 流程4:获取bean执行方法 * 验证容器中是否为代理对象 * AOP核心概念 * AOP配置管理 * AOP切入点表达式 * 语法格式 * 通配符 * 书写技巧 * AOP通知类型 * 类型介绍 * 环境准备 * 通知类型的使用 * 业务层接口执行效率 * 需求分析 * 环境准备 * 功能开发 * AOP通知获取数据 * 环境准备 * 获取参数 * 获取返回值 * 获取异常 * 百度网盘密码数据兼容处理 * 需求分析 * 环境准备 * 具体实现 * AOP总结 * AOP的核心概念 * 切入点表达式 * 五种通知类型 * 通知中获取参数 * AOP事务管理 * Spring事务简介 * 相关概念介绍 * 转账案例-需求分析 * 转账案例-环境搭建 * 事务管理 * Spring事务角色 * Spring事务属性 * 事务配置 * 转账业务追加日志案例 * 事务传播行为 * SpringMVC * SpringMVC概述 * SpringMVC入门案例 * 需求分析 * 案例制作 * 步骤1:创建Maven项目 * 步骤2:补全目录结构 * 步骤3:导入jar包 * 步骤4:创建配置类 * 步骤5:创建Controller类 * 步骤6:使用配置类替换wel * 步骤7:配置Tomcat环境 * 步骤8:启动运行项目 * 步骤9:浏览器访问 * 步骤10:修改Controller返回值解决上述问题 * 步骤11:设置返回数据为json * 知识点1:@Controller * 知识点2:@RequestMapping * 知识点3:@ResponseBody * 入门案例总结 * 工作流程解析 * 启动服务器初始化过程 * 单次请求过程 * bean加载控制 * 问题分析 * 思路分析 * 环境准备 * 设置bean加载控制 * 知识点1:@ComponentScan * PostMan工具的使用 * PostMan简介 * PostMan安装 * PostMan使用 * 创建WorkSpace工作空间 * 发送请求 * 保存当前请求 * 请求与响应 * 设置请求映射路径 * 环境准备 * 问题分析 * 设置映射路径 * 请求参数 * 环境准备 * 参数传递 * 五种类型参数传递 * 普通参数 * POJO数据类型 * 嵌套POJO类型参数 * 数组类型参数 * 集合类型参数 * 知识点1:@RequestParam * JSON数据传输参数 * JSON普通数组 * JSON对象数据 * JSON对象数组 * 知识点1:@EnableWebMvc * 知识点2:@RequestBody * @RequestBody与@RequestParam区别 * 日期类型参数传递 * 步骤1:编写方法接收日期数据 * 步骤2:启动Tomcat服务器 * 步骤3:使用PostMan发送请求 * 步骤4:查看控制台 * 步骤5:更换日期格式 * 步骤6:携带时间的日期 * 知识点1:@DateTimeFormat * 内部实现原理 * 响应 * 环境准备 * 响应页面[了解] * 返回文本数据[了解] * 响应JSON数据 * 知识点1:@ResponseBody * Rest风格 * REST简介 * RESTful入门案例 * 环境准备 * 思路分析 * 修改RESTful风格 * 知识点1:@PathVariable * RESTful快速开发 * 知识点1:@RestController * 知识点2:@GetMapping @PostMapping @PutMapping @DeleteMapping * RESTful案例 * 需求分析 * 环境准备 * 后台接口开发 * 页面访问处理 * SSM整合 * 流程分析 * 整合配置 * 步骤1:创建Maven的web项目 * 步骤2:添加依赖 * 步骤3:创建项目包结构 * 步骤4:创建SpringConfig配置类 * 步骤5:创建JdbcConfig配置类 * 步骤6:创建MybatisConfig配置类 * 步骤7:创建jdroperties * 步骤8:创建SpringMVC配置类 * 步骤9:创建Web项目入口配置类 * 功能模块开发 * 步骤1:创建数据库及表 * 步骤2:编写模型类 * 步骤3:编写Dao接口 * 步骤4:编写Service接口和实现类 * 步骤5:编写Contorller类 * 单元测试 * 步骤1:新建测试类 * 步骤2:注入Service类 * 步骤3:编写测试方法 * PostMan测试 * 新增 * 修改 * 删除 * 查询单个 * 查询所有 * 统一结果封装 * 表现层与前端数据传输协议定义 * 表现层与前端数据传输协议实现 * 环境准备 * 结果封装 * 统一异常处理 * 问题描述 * 异常处理器的使用 * 环境准备 * 使用步骤 * 知识点1:@RestControllerAdvice * 知识点2:@ExceptionHandler * 项目异常处理方案 * 异常分类 * 异常解决方案 * 异常解决方案的具体实现 * 前后台协议联调 * 环境准备 * 列表功能 * 添加功能 * 添加功能状态处理 * 修改功能 * 删除功能 * 拦截器 * 拦截器概念 * 拦截器入门案例 * 环境准备 * 拦截器开发 * 拦截器参数 * 前置处理方法 * 后置处理方法 * 完成处理方法 * 拦截器链配置 * 配置多个拦截器 * Maven * Maven简介 * Maven是什么 * Maven的作用 * Maven下载与安装 * Maven环境变量配置 * Maven基础概念 * 仓库 * 坐标 * 仓库配置 * 项目构建 * 依赖管理 * 依赖传递 * 依赖范围 * 私服 [Nexus](https://help.sonatype.com/repomanager3/download) * 运行 * 仓库类型 * 本地仓库访问私服 * POM文件帮助文档 * Maven高级 * 分模块开发 * 分模块开发设计 * 分模块开发实现 * 环境准备 * 抽取domain层 * 抽取Dao层 * 运行测试并总结 * 依赖管理 * 依赖传递与冲突问题 * 可选依赖和排除依赖 * 方案一:可选依赖 * 方案二:排除依赖 * 聚合和继承 * 聚合 * 步骤1:创建一个空的maven项目 * 步骤2:将项目的打包方式改为pom * 步骤3:pml添加所要管理的项目 * 步骤4:使用聚合统一管理项目 * 继承 * 步骤1:创建一个空的Maven项目并将其打包方式设置为pom * 步骤2:在子项目中设置其父工程 * 步骤3:优化子项目共有依赖导入问题 * 步骤4:优化子项目依赖版本问题 * 聚合与继承的区别 * 聚合与继承的区别 * IDEA构建聚合与继承工程 * 属性 * 属性 * 问题分析 * 解决步骤 * 配置文件加载属性 * 版本管理 * 多环境配置与应用 * 多环境开发 * 步骤1:父工程配置多个环境,并指定默认激活环境 * 步骤2:执行安装查看env_dep环境是否生效 * 步骤3:切换默认环境为生产环境 * 步骤4:执行安装并查看env_pro环境是否生效 * 步骤5:命令行实现环境切换 * 步骤6:执行安装并查看env_test环境是否生效 * 跳过测试 * 方式一:IDEA工具实现跳过测试 * 方式二:配置插件实现跳过测试 * 方式三:命令行跳过测试 * 私服 * 私服简介 * 私服安装 * 步骤1:下载解压 * 步骤2:启动Nexus * 步骤3:浏览器访问 * 步骤4:首次登录重置密码 * 私服仓库分类 * 本地仓库访问私服配置 * 步骤1:私服上配置仓库 * 步骤2:配置本地Maven对私服的访问权限 * 步骤3:配置私服的访问路径 * 私服资源上传与下载 * 步骤1:配置工程上传私服的具体位置 * 步骤2:发布资源到私服 * MyBatisPlus * MyBatisPlus入门案例与简介 * 入门案例 * 步骤1:创建数据库及表 * 步骤2:创建SpringBoot工程 * 步骤3:勾选配置使用技术 * 步骤4:pom.xml补全依赖 * 步骤5:添加MP的相关配置信息 * 步骤6:根据数据库表创建实体类 * 步骤7:创建Dao接口 * 步骤8:编写引导类 * 步骤9:编写测试类 * MybatisPlus简介 * 标准数据层开发 * 标准CRUD使用 * 新增 * 删除 * 修改 * 根据ID查询 * 查询所有 * Lombok * 概念 * 使用步骤 * 分页功能 * 步骤1:调用方法传入参数获取返回值 * 步骤2:设置分页拦截器 * 步骤3:运行测试程序 * DQL编程控制 * 条件查询 * 条件查询的类 * 环境构建 * 构建条件查询 * 多条件构建 * null判定 * 查询投影 * 查询指定字段 * 聚合查询 * 分组查询 * 查询条件 * 等值查询 * 范围查询 * 模糊查询 * 排序查询 * 映射匹配兼容性 * 问题1:表字段与编码属性设计不同步 * 问题2:编码中添加了数据库中未定义的属性 * 问题3:采用默认查询开放了更多的字段查看权限 * 知识点1:@TableField * 问题4:表名与编码开发设计不同步 * 知识点2:@TableName * 代码演示 * DML编程控制 * id生成策略控制 * 知识点1:@TableId * 环境构建 * 代码演示 * ID生成策略对比 * 简化配置 * 多记录操作 * 逻辑删除 * 步骤1:修改数据库表添加`deleted`列 * 步骤2:实体类添加属性 * 步骤3:运行删除方法 * 知识点1:@TableLogic * 乐观锁 * 概念 * 实现思路 * 实现步骤 * 快速开发 * 代码生成器原理分析 * 代码生成器实现 * 步骤1:创建一个Maven项目 * 代码2:导入对应的jar包 * 步骤3:编写引导类 * 步骤4:创建代码生成类 * 步骤5:运行程序 * MP中Service的CRUD * SpringAdvance49 * 容器与 bean * 容器接口 * 容器实现 * Bean 的生命周期 * Bean 后处理器 * BeanFactory 后处理器 * Aware 接口 * 初始化与销毁 * Scope * AOP * AOP 实现之 ajc 编译器 * AOP 实现之 agent 类加载 * AOP 实现之 proxy * jdk 动态代理进阶 * cglib 代理进阶 * cglib 避免反射调用 * jdk 和 cglib 在 Spring 中的统一 * 切点匹配 * 从 @Aspect 到 Advisor * 静态通知调用 * 动态通知调用 * WEB * RequestMappingHandlerMapping 与 RequestMappingHandlerAdapter * 参数解析器 * 参数名解析 * 对象绑定与类型转换 * @ControllerAdvice 之 @InitBinder * 控制器方法执行流程 * @ControllerAdvice 之 @ModelAttribute * 返回值处理器 * MessageConverter * @ControllerAdvice 之 ResponseBodyAdvice * 异常解析器 * @ControllerAdvice 之 @ExceptionHandler * Tomcat 异常处理 * BeanNameUrlHandlerMapping 与 SimpleControllerHandlerAdapter * RouterFunctionMapping 与 HandlerFunctionAdapter * SimpleUrlHandlerMapping 与 HttpRequestHandlerAdapter * mvc 处理流程 * Boot * Boot 骨架项目 * Boot War项目 * Boot 启动过程 * Tomcat 内嵌容器 * Boot 自动配置 * 条件装配底层 * 其它 * FactoryBean * @Indexed 原理 * 代理进一步理解 * @Value 装配底层 * @Autowired 装配底层 * 事件监听器 * 事件发布器 * SpringBoot * 基础篇 * 快速上手SpringBoot * SpringBoot入门程序制作(一) * SpringBoot入门程序制作(二) * SpringBoot入门程序制作(三) * SpringBoot入门程序制作(四) * 教你一招:在Idea中隐藏指定文件/文件夹 * SpringBoot简介 * parent * starter * 引导类 * 内嵌tomcat * SpringBoot基础配置 * 属性配置 * 配置文件分类 * 配置文件优先级 * properties(最高)> yml > yaml(最低) * application.properties > application.yml > application.yaml * application-prod.yml > application-dev.yml > application.yml > bootstrap-dev.yml > bootstrap.yml * bootstrap读取优先级比application高,会在服务启动前优先读取配置 * 配置共享的优先级 * nacos 服务名-profile.yaml > nacos 服务名.yaml > local 服务名.yaml * 教你一招:**自动提示功能消失解决方案** * yaml文件 * yaml数据读取 * 读取单一数据 * 读取全部数据 * 读取对象数据 * yaml文件中的数据引用 * 基于SpringBoot实现SSMP整合 * 整合JUnit * 整合MyBatis * 整合MyBatis-Plus * 整合Druid * SSMP整合综合案例 * 模块创建 * 实体类开发 * 数据层开发——基础CRUD * 数据层开发——分页功能制作 * 数据层开发——条件查询功能制作 * 业务层开发 * 表现层开发 * 表现层消息一致性处理 * 前后端联通性测试 * 页面基础功能开发 * 业务消息一致性处理 * 页面功能开发 * 运维实用篇 * SpringBoot程序的打包与运行 * **程序打包** * **程序运行** * SpringBoot程序打包失败处理 * 命令行启动常见问题及解决方案 * SpringBoot项目快速启动(Linux版) * 配置高级 * 临时属性设置 * **属性加载优先级** * 开发环境中使用临时属性 * 配置文件分类 * 自定义配置文件 * 多环境开发 * 多环境开发(yaml单一文件版) * 多环境开发(yaml多文件版) * 多环境开发(properties多文件版) * 多环境开发独立配置文件书写技巧 * 多环境开发控制 * 日志 * 代码中使用日志工具记录日志 * 优化日志对象创建代码 * 日志输出格式控制 * 日志文件 * 开发实用篇 * 热部署 * 手动启动热部署 * 自动启动热部署 * 参与热部署监控的文件范围配置 * 关闭热部署 * 配置高级 * @ConfigurationProperties * 宽松绑定/松散绑定 * 常用计量单位绑定 * 校验 * 数据类型转换 * 测试 * 加载测试专用属性 * 加载测试专用配置 * Web环境模拟测试 * 数据层测试回滚 * 测试用例数据设定 * 数据层解决方案 * SQL * 数据源技术 * 持久化技术 * 数据库技术 * NoSQL * SpringBoot整合Redis * 安装 * 基本操作 * 整合 * SpringBoot整合MongoDB * 安装 * 基本操作 * 整合 * SpringBoot整合ES * 安装 * 基本操作 * 整合 * 整合第三方技术 * 缓存 * SpringBoot内置缓存解决方案 * 手机验证码案例 * SpringBoot整合Ehcache缓存 * SpringBoot整合Redis缓存 * SpringBoot整合Memcached缓存 * SpringBoot整合jetcache缓存 * 纯远程方案 * 纯本地方案 * 本地+远程方案 * 远程方案的数据同步 * 数据报表 * SpringBoot整合j2cache缓存 * 任务 * Quartz * Task * 邮件 * 发送简单邮件 * 发送多组件邮件(附件、复杂正文) * 消息 * 消息的概念 * Java处理消息的标准规范 * JMS * AMQP * MQTT * KafKa * 购物订单发送手机短信案例 * SpringBoot整合ActiveMQ * 安装 * 整合 * SpringBoot整合RabbitMQ * 安装 * 整合(direct模型) * 整合(topic模型) * SpringBoot整合RocketMQ * 安装 * 整合(异步消息) * SpringBoot整合Kafka * 安装 * 整合 * 监控 * 监控的意义 * 可视化监控平台 * 监控原理 * 自定义监控指标 * 原理篇 * 自动配置工作流程 * bean的加载方式 * 方式一:配置文件+``````标签 * 方式二:配置文件扫描+注解定义bean * 方式三:注解方式声明配置类 * 使用FactroyBean接口 * 注解格式导入XML格式配置的bean * proxyBeanMethods属性 * 方式四:使用@Import注解注入bean * 使用@Import注解注入配置类 * 方式五:编程形式注册bean * 方式六:导入实现了ImportSelector接口的类 * 方式七:导入实现了ImportBeanDefinitionRegistrar接口的类 * 方式八:导入实现了BeanDefinitionRegistryPostProcessor接口的类 * bean的加载控制 * bean的依赖属性配置管理 * 自动配置原理(工作流程) * 变更自动配置 * 自定义starter开发 * 案例:记录系统访客独立IP访问次数 * IP计数业务功能开发(自定义starter) * 定时任务报表开发 * 使用属性配置设置功能参数 * 使用属性配置设置定时器参数 * 拦截器开发 * 功能性完善——开启yml提示功能 * SpringBoot程序启动流程解析 ##### 3.2 md文档 * Spring_day01.md * Spring_day02.md * Spring_day03.md * SpringMVC_day01.md * SpringMVC_day02.md * SpringBoot.md * Maven.md * Maven高级.md * POM文件帮助文档.md * MyBatisPlus.md * Mybatis-Plus入门第一天讲义.pdf * Mybatis-Plus入门第二天讲义.pdf * Spring高级49讲.md * SpringBoot讲义.md #### 4.MiddleKey&&ServiceFramework * SpringCloud * 认识微服务 * 学习目标 * 单体架构 * 分布式架构 * 微服务 * SpringCloud * 服务拆分和远程调用 * 服务拆分原则 * 服务拆分示例 * 导入Sql语句 * 导入demo工程 * 实现远程调用案例 * 案例需求: * 注册RestTemplate * 实现远程调用 * 提供者与消费者 * Eureka注册中心 * Eureka的结构和作用 * 搭建eureka-server * 创建eureka-server服务 * 引入eureka依赖 * 编写启动类 * 编写配置文件 * 启动服务 * 服务注册 * 引入依赖 * 配置文件 * 启动多个user-service实例 * 服务发现 * 引入依赖 * 配置文件 * 服务拉取和负载均衡 * Ribbon负载均衡 * 负载均衡原理 * 源码跟踪 * LoadBalancerIntercepor * LoadBalancerClient * 负载均衡策略IRule * 总结 * 负载均衡策略 * 负载均衡策略 * 自定义负载均衡策略 * 饥饿加载 * Nacos注册中心 * 认识和安装Nacos * 服务注册到nacos * 引入依赖 * 配置nacos地址 * 重启 * 服务分级存储模型 * 给user-service配置集群 cluster-name * 同集群优先的负载均衡 * NacosRule: * 优先选择同集群服务实例列表 * 本地集群找不到提供者,才去其它集群寻找,并且会报警告日志 * 确定了可用实例列表后,再采用随机负载均衡挑选实例 * 权重配置 * 环境隔离 * 创建namespace * 给微服务配置namespace * Nacos与Eureka的区别 * 共同点 * 都支持服务注册和服务拉取 * 都支持服务提供者心跳方式做健康检测 * 不同点 * Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式 * 临时实例心跳不正常会被剔除,非临时实例则不会被剔除 * Nacos支持服务列表变更的消息推送模式,服务列表更新更及时 * Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式 * Nacos配置管理 * 统一配置管理 * 在nacos中添加配置文件 * 从微服务拉取配置 * 配置热更新 * 方式一 * 在@Value注入的变量所在类上添加注解@RefreshScope * 方式二 * 使用@ConfigurationProperties注解代替@Value注解 * 配置共享 * 添加一个环境共享配置 * 在user-service中读取共享配置 * 运行两个UserApplication,使用不同的profile * 配置共享的优先级 * 搭建Nacos集群 * Feign远程调用 * Feign替代RestTemplate * 引入依赖 * 添加注解 * 编写Feign的客户端 * 测试 * 总结 * 自定义配置 * 配置文件方式 * Java代码方式 * Feign使用优化 * 最佳实践 * 继承方式 * 抽取方式 * 实现基于抽取的最佳实践 * Gateway服务网关 * 为什么需要网关 * gateway快速入门 * 创建gateway服务,引入依赖 * 编写启动类 * 编写基础配置和路由规则 * 重启测试 * 网关路由的流程图 * 断言工厂 * 过滤器工厂 * 路由过滤器的种类 * 请求头过滤器 * 默认过滤器 * 总结 * 全局过滤器 * 全局过滤器作用 * 自定义全局过滤器 * 过滤器执行顺序 * defaultFilter > 路由过滤器 > GlobalFilter的顺序执行 * 跨域问题 * 什么是跨域问题 * 模拟跨域问题 * 解决跨域问题 * Docker * 初识Docker * 什么是Docker * 应用部署的环境问题 * Docker解决依赖兼容问题 * Docker解决操作系统环境差异 * 小结 * Docker和虚拟机的区别 * Docker架构 * 镜像和容器 * DockerHub * Docker架构 * 小结 * 安装Docker * Docker的基本操作 * 镜像操作 * 镜像名称 * 镜像命令 * 案例1-拉取、查看镜像 * 案例2-保存、导入镜像 * 练习 * 容器操作 * 容器相关命令 * 案例-创建并运行一个容器 * 案例-进入容器,修改文件 * 小结 * 数据卷(容器数据管理) * 什么是数据卷 * 数据集操作命令 * 创建和查看数据卷 * 挂载数据卷 * 案例-给nginx挂载数据卷 * 查看html数据卷的位置 * 进入该目录 * 修改文件 * 案例-给MySQL挂载本地目录 * 小结 * Dockerfile自定义镜像 * 镜像结构 * Dockerfile语法 * 构建Java项目 * 基于Ubuntu构建Java项目 * 指定基础镜像 * 配置环境变量,JDK的安装目录 * 拷贝jdk和java项目的包 * 安装JDK * 配置环境变量 * 暴露端口 * 入口,java项目的启动命令 * 基于java8构建Java项目 * 小结 * Docker-Compose * 初识DockerCompose * 安装DockerCompose * 部署微服务集群 * compose文件 * 修改微服务配置 * 打包 * 拷贝jar包到部署目录 * 部署 * Docker镜像仓库 * 搭建私有镜像仓库 * 推送、拉取镜像 * RabbitMQ * 初识MQ * 同步和异步通讯 * 同步通讯 * 异步通讯 * 技术对比: * 快速入门 * 安装RabbitMQ * RabbitMQ消息模型 * 导入Demo工程 * 入门案例 * publisher实现 * consumer实现 * 总结 * SpringAMQP * Basic Queue 简单队列模型 * 消息发送 * 消息接收 * 测试 * WorkQueue 工作队列 * 消息发送 * 消息接收 * 测试 * 能者多劳 * 总结 * 发布/订阅 * Fanout * 声明队列和交换机 * 消息发送 * 消息接收 * 总结 - Fanout交换机将消息路由给每一个与之绑定的队列 * Direct * 基于注解声明队列和交换机 * 消息发送 * 总结 - Direct交换机根据RoutingKey判断路由给哪个队列 * Topic * 说明 * 消息发送 * 消息接收 * 总结 * 消息转换器 * 测试默认转换器 * 配置JSON转换器 * RabbitMQ 高级篇 * 消息可靠性 * 生产者消息确认 * 修改配置 * 定义Return回调 * 定义ConfirmCallback * 消息持久化 * 交换机持久化 默认 * 队列持久化 默认 * 消息持久化 默认 * 消费者消息确认 * 演示none模式 * 演示auto模式 * 消费失败重试机制 * 本地重试 * 失败策略 * 总结 * 死信交换机 * 初识死信交换机 * 什么是死信交换机 * 利用死信交换机接收死信(拓展) * 总结 * TTL * 接收超时死信的死信交换机 * 声明一个队列,并且指定TTL * 发送消息时,设定TTL * 总结 * 延迟队列 * 安装DelayExchange插件 * DelayExchange原理 * 使用DelayExchange * 总结 * 惰性队列 * 消息堆积问题 * 惰性队列 * 基于命令行设置lazy-queue * 基于@Bean声明lazy-queue * 基于@RabbitListener声明LazyQueue * 总结 * MQ集群 * 集群分类 * 普通集群 * 集群结构和特征 * 部署 * 镜像集群 * 集群结构和特征 * 部署 * 仲裁队列 * 集群特征 * 部署 * Java代码创建仲裁队列 * SpringAMQP连接MQ集群 * Seata - 分布式事务 * Seata的部署和集成.md * 分布式事务问题 * 本地事务 * 分布式事务 * 演示分布式事务问题 * 理论基础 * CAP定理 * 一致性 Consistency * 可用性 Availability * 分区容错 Partition * 矛盾 - 不可能同时满足 * ES集群为CP,高一致性,低可用性 * BASE理论 * **Basically Available** **(基本可用)**:分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。 * **Soft State(软状态):** 在一定时间内,允许出现中间状态,比如临时的不一致状态。 * **Eventually Consistent(最终一致性)**:虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。 * 解决分布式事务的思路 * 全局事务:整个分布式事务 * 分支事务:分布式事务中包含的每个子系统的事务 * 最终一致思想:各分支事务分别执行并提交,如果有不一致的情况,再想办法恢复数据 * 强一致思想:各分支事务执行完业务不要提交,等待彼此结果。而后统一提交或回滚 * 初识Seata * Seata的架构 * **TC (Transaction Coordinator) -** **事务协调者:** 维护全局和分支事务的状态,协调全局事务提交或回滚。 * **RM (Resource Manager) -** **资源管理器:** 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 * **TM (Transaction Manager) -** **事务管理器:** 定义全局事务的范围、开始全局事务、提交或回滚全局事务。 * 部署TC服务 * 微服务集成Seata * 引入依赖 * 配置TC地址 * 其它服务 * 动手实践 * XA模式 - 强一致 * 两阶段提交 * Seata的XA模型 * 优缺点 * 实现XA模式 * AT模式 默认模式 - 弱一致 * Seata的AT模型 * 流程梳理 * AT与XA的区别 * 脏写问题 * 优缺点 * 实现AT模式 * TCC模式 - 弱一致 * 流程分析 * Seata的TCC模型 * 优缺点 * 事务悬挂和空回滚 * 实现TCC模式 * SAGA模式 - 最终一致 * 原理 * 优缺点 * 四种模式对比 * 高可用 * 高可用架构模型 * 实现高可用 * ElasticSearch搜索高级课程 * 课程简介 * 课程内容 * 面向人员 * 课程优势 * 学习路径 * Elastic Stack简介 * 简介 * 特色 * 组件介绍 * Elasticsearch是什么 * 搜索是什么 * 数据库做搜索弊端 * 站内搜索(垂直搜索):数据量小,简单搜索,可以使用数据库。 * 互联网搜索,肯定不会使用数据库搜索。数据量太大。PB级。 * 全文检索、倒排索引和Lucene * **全文检索** * Lucene * 什么是Elasticsearch * 简介 * Elasticsearch的功能 * Elasticsearch的使用场景 * Elasticsearch的特点 * elasticsearch核心概念 * lucene和elasticsearch的关系 * elasticsearch的核心概念 * NRT(Near Realtime):近实时 * Cluster:集群 * Node:节点 * Index:索引 * Document:文档 * Field:字段 * Type:类型 * shard:分片 * replica:副本 * elasticsearch核心概念 数据库核心概念 * Elasticsearch相关软件安装 * Windows安装elasticsearch * 0_73以上版本,验证:java -version。 * 下载和解压缩Elasticsearch安装包,查看目录结构。 * 配置文件: * 启动Elasticsearch:bin\bat,es的特点就是开箱即,无需配置,启动即可。 * 检查ES是否启动成功:浏览器访问http://localhost:9200/?Pretty * 浏览器访问 http://localhost:9200/_cluster/health 查询集群状态 * Windows安装Kibana * Windows安装postman * Windows安装head插件 * js * 下载head并运行 * 运行 * es快速入门 * 文档(document)的数据格式 * 图书网站商品管理案例:背景介绍 * 简单的集群管理 * 快速检查集群的健康状况 * 快速查看集群中有哪些索引 * 简单的索引操作 * 商品的CRUD操作(document CRUD操作) * 新建图书索引 * 新增图书 :新增文档 * 查询图书:检索文档 * 修改图书:替换操作 * 修改图书:更新文档 * 删除图书:删除文档 * 文档document入门 * 默认自带字段解析 * _index * _type * _id * 创建索引时,不同数据放到不同索引中 * 生成文档id * 手动生成id * 自动生成id * _source 字段 * _source * 定制返回字段 * 文档的替换与删除 * 全量替换 * 强制创建 * 删除 * 局部替换 partial update * 图解内部原理 * 演示 * 使用脚本更新 * 内置脚本 * 外部脚本 * 图解es的并发问题 * 图解悲观锁与乐观锁机制 * 图解es内部基于_version乐观锁控制 * 实验基于_version的版本控制 * 图解es内部并发控制 * 演示客户端程序基于_version并发操作流程 * 新建文档 * 客户端1修改。带版本号1。 * 客户端2并发修改。带版本号1。 * 客户端2重新查询。得到最新版本为2。seq_no=22 * 客户端2并发修改。带版本号2。 * 演示自己手动控制版本号 external version * 新建文档 * 客户端1修改文档 * 客户端2同时修改 * 客户端2重新查询数据 * 客户端2重新修改数据 * 更新时 retry_on_conflict 参数 * retry_on_conflict * 与 _version结合使用 * 批量查询 mget * mget 批量查询: * 同一索引下批量查询: * 第三种写法:搜索写法 * 批量增删改 bulk * 文档概念学习总结 * Java api 实现文档管理 * es技术特点 * java 客户端简单获取数据 * 结合spring-boot-test测试文档查询 * 结合spring-boot-test测试文档新增 * 结合spring-boot-test测试文档修改 * 结合spring-boot-test测试文档删除 * 结合spring-boot-test测试文档bulk * 图解es内部机制 * 图解es分布式基础 * es对复杂分布式机制的透明隐藏特性 * Elasticsearch的垂直扩容与水平扩容 * 增减或减少节点时的数据rebalance * master节点 * 节点对等的分布式架构 * 图解分片shard、副本replica机制 * shard&replica机制 * 图解单node环境下创建index是什么样子的 * 图解2个node环境下replica shard是如何分配的 * 图解横向扩容 * 图解es容错机制 master选举,replica容错,数据恢复 * 图解文档存储机制 * 数据路由 * 文档存储如何路由到相应分片 * 路由算法 * 手动指定 routing number * 主分片数量不可变 * 图解文档的增删改内部机制 * 图解文档的查询内部机制 * bulk api奇特的json格式 * Mapping映射入门 * 什么是mapping映射 * 精确匹配与全文搜索的对比分析 * exact value 精确匹配 * full text 全文检索 * 全文检索下倒排索引核心原理快速揭秘 * 分词,初步的倒排索引的建立 * 搜索 * 重建倒排索引 * 重新搜索 * 分词器 analyzer * 什么是分词器 analyzer * 内置分词器的介绍 * query string根据字段分词策略 * query string分词 * 测试分词器 * mapping回顾总结 * mapping的核心数据类型以及dynamic mapping * 核心的数据类型 * dynamic mapping 推测规则 * 查看mapping * 手动管理mapping * 查询所有索引的映射 * 创建映射 !! * Text 文本类型 * keyword关键字字段 * date日期类型 * 数值类型 * 修改映射 * 删除映射 * 复杂数据类型 * multivalue field * empty field * object field * 索引Index入门 * 索引管理 * 为什么我们要手动创建索引 * 索引管理 * 1 创建索引 * 2查询索引 * 3修改索引 * 4删除索引 * 定制分词器 * 默认的分词器 * 修改分词器的设置 * 定制化自己的分词器 * type底层结构及弃用原因 * type是什么 * es中不同type存储机制 * type弃用 * 定制dynamic mapping * 定制dynamic策略 * 自定义 dynamic mapping策略 * date_detection 日期探测 * 自定义日期格式 * numeric_detection 数字探测 * 定制自己的dynamic mapping template * 模板写法 * 场景 * 零停机重建索引 * 零停机重建索引 * 生产实践:基于alias对client透明切换index * 中文分词器 IK分词器 * Ik分词器安装使用 * 中文分词器 * 安装 * ik分词器基础知识 * ik分词器的使用 * ik配置文件 * ik配置文件 * 自定义词库 * 使用mysql热更新 词库 * 热更新 * 步骤 * java api 实现索引管理 * search搜索入门 * 搜索语法入门 * query string search * 传参 * 图解timeout * multi-index 多索引搜索 * multi-index搜索模式 * 初步图解一下简单的搜索原理 * 分页搜索 * 分页搜索的语法 * deep paging * 什么是deep paging * deep paging 性能问题 * query string基础语法 * query string基础语法 * _all metadata的原理和作用 * query DSL入门 * DSL * Query DSL语法 * 组合多个搜索条件 * full-text search 全文检索 * 全文检索 * _score初探 * DSL 语法练习 * match_all * match * multi_match * range query 范围查询 * term query * terms query * exist query 查询有某些字段值的文档 * Fuzzy query * IDs * prefix 前缀查询 * regexp query 正则查询 * Filter * filter与query示例 * filter与query对比 * filter与query性能 * 定位错误语法 * 定制排序规则 * 默认排序规则 * 定制排序规则 * Text字段排序问题 * Scroll分批查询 * java api实现搜索 * 评分机制详解 * 评分机制 TF\IDF * 算法介绍 * _score是如何被计算出来的 * 分析一个document是如何被匹配上的 * Doc value * query phase * query phase * replica shard如何提升搜索吞吐量 * fetch phase * fetch phbase工作流程 * 一般搜索,如果不加from和size,就默认搜索前10条,按照_score排序 * 搜索参数小总结 * preference * timeout * routing * search_type * 聚合入门 * 聚合示例 * 需求:计算每个studymodel下的商品数量 * 需求:计算每个tags下的商品数量 * 需求:加上搜索条件,计算每个tags下的商品数量 * 需求:先分组,再算每组的平均值,计算每个tag下的商品的平均价格 * 需求:计算每个tag下的商品的平均价格,并且按照平均价格降序排序 * 需求:按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格 * 两个核心概念:bucket和metric * bucket:一个数据分组 * metric:对一个数据分组执行的统计 * 电视案例 * 需求1 统计哪种颜色的电视销量最高 * 需求2 统计每种颜色电视平均价格 * 需求3 继续下钻分析 * 需求4:更多的metric * 需求5:划分范围 histogram * 需求6:按照日期分组聚合 * 需求7 统计每季度每个品牌的销售额 * 需求8 :搜索与聚合结合,查询某个品牌按颜色销量 * 需求9 global bucket:单个品牌与所有品牌销量对比 * 需求10:过滤+聚合:统计价格大于1200的电视平均价格 * 需求11 bucket filter:统计品牌最近一个月的平均价格 * 需求12 排序:按每种颜色的平均销售额降序排序 * 需求13 排序:按每种颜色的每种品牌平均销售额降序排序 * java api实现聚合 * 需求二:按照颜色分组,计算每个颜色卖出的个数,每个颜色卖出的平均价格 * 需求三:按照颜色分组,计算每个颜色卖出的个数,以及每个颜色卖出的平均值、最大值、最小值、总和。 * 需求四:按照售价每2000价格划分范围,算出每个区间的销售总额 histogram * 需求五:计算每个季度的销售总额 * es7 sql新特性 * 快速入门 * 启动方式 * 显示方式 * sql 翻译 * 与其他DSL结合 * java 代码实现sql功能 * Logstash学习 * Logstash基本语法组成 * 什么是Logstash * 配置文件: * 输入插件 * 过滤匹配插件 * 输出插件 * 启动操作: * Logstash输入插件(input) * 标准输入(Stdin) * 读取文件(File) * 读取TCP网络数据 * Logstash过滤器插件(Filter) * Grok 正则捕获 * 时间处理(Date) * 数据修改(Mutate) * 正则表达式替换匹配字段 * 分隔符分割字符串为数组 * 重命名字段 * 删除字段 * GeoIP 地址查询归类 * 综合例子: * Logstash输出插件(output) * 综合案例 * kibana学习 * 基本查询 * 可视化 * 仪表盘 * 使用模板数据指导绘图 * 其他功能 * 集群部署 * 结点的三个角色 * master: 是否允许为主结点 * data: 允许存储数据作为数据结点 * ingest: 是否允许成为协调节点 * 项目实战 * 项目一:ELK用于日志分析 * 项目二:学成在线站内搜索模块 * mysql导入course_pub表 * 创建索引xc_course * 创建映射 * logstash创建模板文件 * conf * 启动 * 微服务保护.md * 初识Sentinel * 雪崩问题及解决方案 * 雪崩问题 * 超时处理 * 仓壁模式 * 断路器 * 限流 * 服务保护技术对比 * Sentinel介绍和安装 * 微服务整合Sentinel * 流量控制 * 簇点链路 * 快速入门 * 流控模式 * 关联模式 * 链路模式 * 流控效果 * 快速报错 * warm up * 排队等待 * 热点参数限流 * 全局参数限流 * 热点参数限流 * 隔离和降级 * FeignClient整合Sentinel * 修改配置,开启sentinel功能 * 编写失败降级逻辑 * 线程隔离(舱壁模式) * 线程隔离的实现方式 * sentinel的线程隔离 * 配置隔离规则 * Jmeter测试 * 熔断降级 * 慢调用 * 异常比例、异常数 * 授权规则 * 授权规则 * 基本规则 * 如何获取origin * 给网关添加请求头 * 配置授权规则 * 自定义异常结果 * 异常类型 * 自定义异常处理 * 规则持久化 * 规则管理模式 * pull模式 * push模式 * 实现push模式 `见Sentinel 规则持久化` * Sentinel 规则持久化 * 修改order-service服务 * 引入依赖 * 配置nacos地址 * server-addr: localhost:8848 # nacos地址 * rule-type: flow # 还可以是:degrade、authority、param-flow * 修改sentinel-dashboard源码 * 解压 * 修改nacos依赖 * 添加nacos支持 * 修改nacos地址 * 配置nacos数据源 * 修改前端页面 * 重新编译、打包项目 * 启动 * Dubbo.ppt * dubbo-admin安装 * Zookeeper安装 * Zookeeper集群搭建 * Zookeeper.ppt * 主要功能 * 配置管理 * 分布式锁 * 集群管理 * Zookeeper数据模型 * 树形目录 * 节点可分四大类 * PERSISTENT持久化节点 * EPHEMERAL临时节点: -e * PERSISTENT SEQUENTIAL持久化顺序节点:-s * EPHEMERAL SEQUENTIAL临时顺序节点:-es * Zookeeper服务端常用命令 * 启动 ZooKeeper服务:./zkServer.sh start * 查看 ZooKeeper服务状态:./zkServer.sh status * 停止 ZooKeeper服务:./zkServer.sh stop * 重启 ZooKeeper服务:./zkServer.sh restart * Zookeeper客户端常用命令 * 简单命令 * 连接服务端 ./zkC1i.sh -server ip:port * quit * ls * ls -s / 查看节点详细信息 * czxid:节点被创建的事务ID * ctime:创建时间 * mzxid:最后一次被更新的事务ID * mtime:修改时间 * pzxid:子节点列表最后一次被更新的事务ID * cversion:子节点的版本号 * dataversion:数据版本号 * aqlversion:权限版本号 * ephemeralOwner:用于临时节点,代表临时节点的事务ID,如果为持久节点则为0 * dataLength:节点存储的数据的长度 * numChildren:当前节点的子节点个数 * create /节点path value 持久节点 * create -e /节点path value 临时节点,会话结束时删除节点 * create -s /节点path value 顺序节点 * create -es /节点path value 临时顺序节点,会话结束时删除节点 * get * set * delete * deleteall * JavaApi操作 * Curator Apache Zookeeper的java客户端 * Curator api * 建立连接 * 添加节点 * 删除节点 * 修改节点 * 查询节点 * Watch事件监听 * 分布式锁 * 定义: 跨机器的进程之间的数据同步问题 * redis 也可实现分布式锁,且性能最高,但如果在集群状态下,master挂了未同步数据时,会导致集群都获取锁 * Curator 性能相对较高、比较可靠的实现分布式锁 * 核心思想 * 当客户端要获取锁,则创建节点,使用完锁,则删除该节点 * 原理 * 客户端获取锁时,在lock节点下创建 **临时顺序** 节点。 * 然后获取lock下面的所有子节点,客户端获取到所有的子节点之后,如果发现自己已创建的子节点序号最小,那么就认为该客户端获取到了锁。使用完锁后,将该节点删除。 * 如果发现自己创建的节点并非lock所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,同时对其注册事件监听器,监听删除事件 * 如果发现比自己小的那个节点被删除,则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点是否是lock子节点中序号最小的,如果是则获取到了锁。如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。 * 模拟12306售票案例 * 详细代码见code/4.MiddleKey&&ServiceFramework/8. Zookeeper/curator-zk/test * Zookeeper集群搭建 * RocketMq * MQ介绍 * 为什么要用MQ * MQ的优点和缺点 * 各种MQ产品的比较 * RocketMQ快速入门 * 准备工作 * 下载RocketMQ * 环境要求 * 安装RocketMQ * 启动RocketMQ * 启动NameServer * 查看启动日志 * 启动Broker * 查看启动日志 * 编辑runbrokesh和runservesh修改默认JVM大小 * 测试RocketMQ * 发送消息 * 设置环境变量 * 使用安装包的Demo发送消息 * 接收消息 * 设置环境变量 * 接收消息 * 关闭RocketMQ * 关闭NameServer * 关闭Broker * RocketMQ集群搭建 * 各角色介绍 * 集群搭建方式 * 集群特点 * 集群模式 * 双主双从集群搭建 * 总体架构 * 集群工作流程 * 服务器环境 * Host添加信息 * nameserver * broker * 防火墙配置 * 关闭防火墙 * 查看防火墙的状态 * 禁止firewall开机启动 * 开放name server默认端口 * 开放master默认端口 * 开放slave默认端口 (当前集群模式可不开启) * 重启防火墙 * 环境变量配置 * 创建消息存储路径 * broker配置文件 * 修改启动脚本文件 * 服务启动 * 查看进程状态 * 查看日志 * 查看nameServer日志 * 查看broker日志 * mqadmin管理工具 * 使用方式 * 命令介绍 * 注意事项 * 集群监控平台搭建 * 概述 * 下载并编译打包 * 消息发送样例 * 基本样例 * 消息发送 * 消费消息 * 顺序消息 * 顺序消息生产 * 顺序消费消息 * 延时消息 * 启动消息消费者 * 发送延时消息 *3 验证 * 使用限制 * 批量消息 * 发送批量消息 * 过滤消息 * SQL基本语法 * 消息生产者 * 消息消费者 * 事务消息 * 流程分析 * 发送事务消息 * 使用限制 * 项目实战 * 案例介绍 * 业务分析 * 下单 * 支付 * 问题分析 * 问题1 * 问题2 * 技术分析 * 技术选型 * SpringBoot整合RocketMQ * 消息生产者 * 添加依赖 * 配置文件 * 启动类 * 测试类 * 消息消费者 * 添加依赖 * 配置文件 * 启动类 * 消息监听器 * SpringBoot整合Dubbo * 搭建Zookeeper集群 * 准备工作 * 配置集群 * 启动集群 * RPC服务接口 * 服务提供者 * 添加依赖 * 配置文件 * 启动类 * 服务实现 * 服务消费者 * 添加依赖 * 配置文件 * 启动类 * Controller * 环境搭建 * 数据库 * 优惠券表 * 商品表 * 订单表 * 订单商品日志表 * 用户表 * 用户余额日志表 * 订单支付表 * MQ消息生产表 * MQ消息消费表 * 项目初始化 * 工程浏览 * 工程关系 * Mybatis逆向工程使用 * 代码生成 * 代码导入 * 公共类介绍 * 下单业务 * 下单基本流程 * 接口定义 * 业务类实现 * 校验订单 * 生成预订单 * 扣减库存 * 扣减优惠券 * 扣减用户余额 * 确认订单 * 小结 * 失败补偿机制 * 消息发送方 * 消费接收方 * 回退库存 * 回退优惠券 * 回退余额 * 取消订单 * 测试 * 准备测试环境 * 准备测试数据 * 测试下单成功流程 * 测试下单失败流程 * 支付业务 * 创建支付订单 * 支付回调 * 流程分析 * 代码实现 * 线程池优化消息发送逻辑 * 处理消息 * 配置RocketMQ属性值 * 消费消息 * 整体联调 * 准备工作 * 配置RestTemplate类 * 配置请求地址 * 下单测试 * 支付测试 * 高级功能 * 消息存储 * 存储介质 * 性能对比 * 消息的存储和发送 * 消息存储结构 * 刷盘机制 * 高可用性机制 * 消息消费高可用 * 消息发送高可用 * 消息主从复制 * 负载均衡 * Producer负载均衡 * Consumer负载均衡 * 消息重试 * 顺序消息的重试 * 无序消息的重试 * 死信队列 * 死信特性 * 查看死信信息 * 消费幂等 * 消费幂等的必要性 * 处理方式 * 源码分析 * 环境搭建 * 源码拉取 * 导入IDEA * 调试 * namesrvAddr地址 * 存储路径 * commitLog路径 * 消息队列存储路径 * 消息索引存储路径 * checkpoint文件路径 * abort文件存储路径 * NameServer * 架构设计 * 启动流程 * 路由管理 * 小结 * Producer * 方法和属性 * 启动流程 * 消息发送 * 批量消息发送 * 消息存储 * 消息存储核心类 * 消息存储流程 * 存储文件 * 存储文件内存映射 * 实时更新消息消费队列与索引文件 * 消息队列和索引文件恢复 * 刷盘机制 * 过期文件删除机制 * 小结 * Consumer * 消息消费概述 * 消息消费初探 * 消费者启动流程 * 消息拉取 * 消息队列负载与重新分布机制 * 消息消费过程 * 定时消息机制 * 顺序消息 * 小结 * Redis * Redis实战课 * 面向群体 * 学习要求 * 环境准备 * Redis快速入门 * 初识Redis * 认识NoSQL * 结构化与非结构化 * 关联和非关联 * 查询方式 * 事务 * 总结 * 认识Redis * 安装Redis * 依赖库 * 上传安装包并解压 * 启动 * 默认启动 * 指定配置启动 * Redis常见命令 * Redis通用命令 * 查看keys命令的帮助信息: * String类型 * String的常见命令 * Key结构 * Hash类型 * List类型 * Set类型 * SortedSet类型 * Redis的Java客户端 * Jedis客户端 * 快速入门 * 连接池 * SpringDataRedis客户端 * 快速入门 * 引入依赖 * 配置Redis * 注入RedisTemplate * 编写测试 * 自定义序列化 * StringRedisTemplate * Redis实战篇 * 开篇导读 * 短信登录 * 导入黑马点评项目 * 导入SQL * 有关当前模型 * 导入后端项目 * 导入前端工程 * 运行前端项目 * 基于Session实现登录流程 * 实现发送短信验证码功能 * 实现登录拦截功能 * 隐藏用户敏感信息 * session共享问题 * Redis代替session的业务流程 * 设计key的结构 * 设计key的具体细节 * 整体访问流程 * 基于Redis实现短信登录 * 解决状态登录刷新问题 * 初始方案思路总结: * 优化方案 * 代码 * 商户查询缓存 * 什么是缓存? * 为什么要使用缓存 * 如何使用缓存 * 添加商户缓存 * 缓存模型和思路 * 代码实现 * 缓存更新策略 * 数据库缓存不一致解决方案: * 数据库和缓存不一致采用什么方案 * 实现商铺和缓存与数据库双写一致 * 缓存穿透问题的解决思路 * 编码解决商品查询的缓存穿透问题: * 缓存雪崩问题及解决思路 * 缓存击穿问题及解决思路 * 利用互斥锁解决缓存击穿问题 * 利用逻辑过期解决缓存击穿问题 * 封装Redis工具类 * 优惠卷秒杀 * -全局唯一ID * -Redis实现全局唯一Id * 添加优惠卷 * 实现秒杀下单 * 库存超卖问题分析 * 乐观锁解决超卖问题 * 优惠券秒杀-一人一单 * 集群环境下的并发问题 * 分布式锁 * 基本原理和实现方式对比 * Redis分布式锁的实现核心思路 * 实现分布式锁版本一 * Redis分布式锁误删情况说明 * 解决Redis分布式锁误删问题 * 分布式锁的原子性问题 * Lua脚本解决多条命令原子性问题 * 利用Java代码调用Lua脚本改造分布式锁 * 分布式锁-redisson * 分布式锁-redisson功能介绍 * 分布式锁-Redisson快速入门 * 分布式锁-redisson可重入锁原理 * 分布式锁-redisson锁重试和WatchDog机制 * 分布式锁-redisson锁的MutiLock原理 * 秒杀优化 * 秒杀优化-异步秒杀思路 * 秒杀优化-Redis完成秒杀资格判断 * 秒杀优化-基于阻塞队列实现秒杀优化 * Redis消息队列 * Redis消息队列-认识消息队列 * Redis消息队列-基于List实现消息队列 * Redis消息队列-基于PubSub的消息队列 * Redis消息队列-基于Stream的消息队列 * Redis消息队列-基于Stream的消息队列-消费者组 * 基于Redis的Stream结构作为消息队列,实现异步秒杀下单 * 达人探店 * 达人探店-发布探店笔记 * 达人探店-查看探店笔记 * 达人探店-点赞功能 * 达人探店-点赞排行榜 * 好友关注 * 好友关注-关注和取消关注 * 好友关注-共同关注 * 好友关注-Feed流实现方案 * 好友关注-推送到粉丝收件箱 * 好友关注-实现分页查询收邮箱 * 附近商户 * 附近商户-GEO数据结构的基本用法 * 附近商户-导入店铺数据到GEO * 附近商户-实现附近商户功能 * 用户签到 * 用户签到-BitMap功能演示 * 用户签到-实现签到功能 * 用户签到-签到统计 * 额外加餐-关于使用bitmap来解决缓存穿透的方案 * UV统计 * UV统计-HyperLogLog * UV统计-测试百万数据的统计 * 分布式缓存 * 学习目标 * Redis持久化 * RDB持久化 * 执行时机 * RDB原理 * 小结 * AOF持久化 * AOF原理 * AOF配置 * AOF文件重写 * RDB与AOF对比 * Redis主从 * 搭建主从架构 * 主从数据同步原理 * 全量同步 * 增量同步 * repl_backlog原理 * 主从同步优化 * 小结 * Redis哨兵 * 哨兵原理 * 集群结构和作用 * 集群监控原理 * 集群故障恢复原理 * 小结 * 搭建哨兵集群 * RedisTemplate * 导入Demo工程 * 引入依赖 * 配置Redis地址 * 配置读写分离 * Redis分片集群 * 搭建分片集群 * 散列插槽 * 插槽原理 * 小结 * 集群伸缩 * 需求分析 * 创建新的redis实例 * 添加新节点到redis * 转移插槽 * 故障转移 * 自动故障转移 * 手动故障转移 * RedisTemplate访问分片集群 * 多级缓存 * 什么是多级缓存 * JVM进程缓存 * 导入案例 * 初识Caffeine * 实现JVM进程缓存 * 需求 * 实现 * Lua语法入门 * 初识Lua * HelloWorld * 变量和循环 * Lua的数据类型 * 声明变量 * 循环 * 条件控制、函数 * 函数 * 条件控制 * 案例 * 实现多级缓存 * 安装OpenResty * OpenResty快速入门 * 反向代理流程 * OpenResty监听请求 * lua基本语法 * 编写item.lua * 请求参数处理 * 获取参数的API * 获取参数并返回 * 查询Tomcat * 发送http请求的API * 封装http工具 * CJSON工具类 * 实现Tomcat查询 * 基于ID负载均衡 * 原理 * 实现 * 测试 * Redis缓存预热 * 查询Redis缓存 * 封装Redis工具 * 实现Redis查询 * Nginx本地缓存 * 本地缓存API * 实现本地缓存查询 * 缓存同步 * 数据同步策略 * 安装Canal * 认识Canal * 安装Canal * 监听Canal * 引入依赖: * 编写配置: * 修改Item实体类 * 编写监听器 * Redis高级篇之最佳实践 * Redis键值设计 * 优雅的key结构 * 拒绝BigKey * BigKey的危害 * 如何发现BigKey * redis-cli --bigkeys * scan扫描 * 第三方工具 * 网络监控 * 如何删除BigKey * 恰当的数据类型 * 例1:比如存储一个User对象,我们有三种存储方式: * 方式一:json字符串 * 方式二:字段打散 * 方式三:hash(推荐) * 例2:假如有hash类型的key,其中有100万对field和value,field是自增id,这个key存在什么问题?如何优化? * 方案一 * 方案二 * 总结 * 批处理优化 * Pipeline * 我们的客户端与redis服务器是这样交互的 * MSet * Pipeline * 集群下的批处理 * 串行化执行代码实践 * 服务器端优化-持久化配置 * 服务器端优化-慢查询优化 * 什么是慢查询 * 如何查看慢查询 * 服务器端优化-命令及安全配置 * 服务器端优化-Redis内存划分和内存配置 * 服务器端集群优化-集群还是主从 * 结束语 * Redis原理篇 * 原理篇-Redis数据结构 * Redis数据结构-动态字符串 * Redis数据结构-intset * Redis数据结构-Dict * Redis数据结构-ZipList * Redis数据结构-ZipList的连锁更新问题 * Redis数据结构-QuickList * Redis数据结构-RedisObject * Redis数据结构-String * Redis数据结构-List * Redis数据结构-Set结构 * Redis数据结构-ZSET * Redis数据结构-Hash * 原理篇-Redis网络模型 * 用户空间和内核态空间 * 网络模型-阻塞IO * 网络模型-非阻塞IO * 网络模型-IO多路复用 * 网络模型-IO多路复用-select方式 * 网络模型-IO多路复用模型-poll模式 * 网络模型-IO多路复用模型-epoll函数 * 网络模型-epoll中的ET和LT * 网络模型-基于epoll的服务器端流程 * 网络模型-信号驱动 * 异步IO * 对比 * 网络模型-Redis是单线程的吗?为什么使用单线程 * Redis的单线程模型-Redis单线程和多线程网络模型变更 * Redis通信协议-RESP协议 * Redis通信协议-基于Socket自定义Redis的客户端 * Redis内存回收-过期key处理 * Redis内存回收-内存淘汰策略 * 结束语 #### 5.ProjectPractice - Java项目实战 #### 6.InterviewTopic - Java大厂面试专题 #### SpecialDoc - 特殊文档 * java文档url.md * idea快捷键.md ### utils * Annotate `注解` * class.md `类注解` * method.md `方法注解` * Collection `集合` * Collection `单列集合` * Api.java `单列集合API` * ArrayList.java `集合函数` * LinkedList.java `栈、队列` * Map `双列集合` * Api.java `双列集合API` * Collections.java `Collections集合工具类` * CommonException `自定义的公共异常处理器` * Stream * Stream.java `Stream流API` * Time * Calendar.java `日历` * Date.java `日期对象` * SimpleDateFormat.java `格式化和解析日期` * TimeJDK8 * ChronoUnit.java `可用于比较所有的时间单位` * DateTimeFormatter.java `时间的格式化和解析` * Duration.java `计算两个时间的间隔 (基于年月日时分秒的间隔)` * Instant.java `时间戳对象` * LocalDate.java `年月日时间对象` * LocalDateTime.java `年月日时分秒时间对象` * LocalTime.java `时分秒时间对象` * Period.java `计算两个日期的间隔 (基于年月日的间隔)` * Array.java `数组函数` * BeanUtils.java `Bean 工具类` * BigDecimal.java `BigDecimal加减乘除` * Function.java `自定义函数` * mysql `mybatis-Plus增删改查操作` * chain * MybatisPlusChainQuery.java `链式编程风格查询` * MybatisPlusChainUpdate.java `链式编程风格更新` * service `service层调用` * MybatisPlusCount.java * MybatisPlusGet.java * MybatisPlusPage.java * MybatisPlusQuery.java * MybatisPlusRemove.java * MybatisPlusSave.java * MybatisPlusUpdate.java * wrappers `条件查询` * AllEq * And * Apply * Between * Eq * Exists * Func * Ge * GroupBy * Gt * Having * InSql * InWrapper * IsNull * Last * Le * Like * LikeLeft * LikeRight * Lt * Ne * Nested * NotBetween * NotExists * NotInSql * NotLike * NotLikeLeft * NotLikeRight * Or * OrderBy * Select * Set * SetSql * ActiveRecordCURD.java `ActiveRecord设计模式` * DBKit.java `通过静态调用的方式执行 CRUD` * SimpleQueryExample.java `Mybatis-Plus 提供的一个工具类,它对 selectList 查询后的结果进行了封装,使其可以通过 Stream 流的方式进行处理,从而简化了 API 的调用` * IdWorker.java `雪花算法代码实现` * InetAddress.java `IP工具类` * Math.java `比较函数` * Object.java `Object函数` * Objects.java `Objects函数` * String.java `字符串函数` * StringBuilder.java `字符串函数` * System.java `系统函数` #### doc.md 官方文档合集 ### soft 常用软件 * `Docker` * `Centos7安装Docker.md` * `docker 私有仓库.md` * `docker-compose` 下载好的docker-compose * `docker-compose.md` docker-compose使用教程 * `dockerfile.md` dockerfile使用教程 * `docker安装.md` * `docker应用部署.md` * `安装Canal.md` docker安装canal[ mysql开启binlog ] * `ES` * `cerebro-0.9.4.zip` 监控ES集群状态软件 * `安装elasticsearch.md` docker安装部署es * `Jmeter` * `Jmeter快速入门` * `Nacos` * `nacos-server-1.4.1.zip` nacos安装包 * `Nacos安装指南.md` * `nacos集群搭建.md` * `Nexus` 私服 [Nexus](https://help.sonatype.com/repomanager3/download) * `nginx-1.18.0.zip` nginx安装包 * `RabbitMQ` * `RabbitMQ部署指南.md` * `Redis` * `Redis Linux安装说明.md` * `Redis集群.md` * `安装OpenResty.md` * `案例导入说明.md` * `Dubbo` 基于Java的高性能、轻量级的开源RPC(远程过程调用)框架,旨在解决分布式服务间的通信问题 * `dubbo-admin安装.md` * `ZooKeeper` 分布式的、开源的、分布式应用程序的协调服务(本身不做事情,管人的) * `Zookeeper安装.md` * `Zookeeper集群搭建.md` * `7z2106-x64.exe` 解压工具 * `seata-server-1.4.2.zip` Seata开源分布式事务解决方案 * `Snipaste-1.16.2-x64.zip` 截图工具