Java,
Java,
1.Java基础
1. 常用的设计模式(GoF)
创建型模式: - 创建型模式抽象了实例化过程。帮助一个系统独立于如何创建、组合和表示它的对象。创建型模式都会将关于该系统使用哪些具体的类信息封装起来。允许客户用结构和功能差别很大的‘产品’对象配置一个系统。配置即可以是稳定的,在编译时指定,也可以是动态的,即运行时再指定。
- Singleton单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。(私有化构造方法,提供GetInstance操作访问唯一实例Singleton)
- Factory Method工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到其子类。
- Abstract Factory抽象工厂模式:提供一个创建一系列或相关依赖对象的接口,而无需指定他们具体的类。
- Factory工厂模式:
简单工厂(不符合开闭) - Builder建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(隐藏建造过程,高内聚(内聚性:一个例程内部组成部分之间相关联系的紧密程度),低耦合(耦合性:一个例程与其他例程之间的联系的紧密程度),软件开发的目标就是内部完整,即高内聚,例程之间小巧灵活、直接可见,即是松耦合)
- Prototype原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。(深拷贝/浅拷贝)
结构型模式:
- Adapter适配器模式:将一个类的接口转换成客户希望的另外一个接口,适配器模式由于原本由于接口不兼容而不能一起工作的那些类可以一起工作。(让接口不同的类可以协同工作)
- Decorator装饰器模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。
- Bridge桥接模式:将抽象部分与它的实现部分分离,使他们可以独立的变化。(聚合/合成代理继承,找出变化并封装之)
- Composite组合模式:将对象组合成树形结构以表示‘部分-整体’的关系的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
- FlyWeight享元(共享)模式:为运用共享技术有效地支持大量细粒度的对象。(内部状态:可以共享,不易被环境修改;外部状态:不能共享,易因环境而变化; 有效解决资源浪费的情况)
- Proxy代理模式:为其他对象提供一种代理,以控制对这个对象的访问。(静态代理,JDK动态代理,CGLIB代理)
- Facade外观模式:为子系统中的一组接口提供一个一致性界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
行为型模式:
- Observer观察者模式:定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象的对象都得到通知并被自动更新。(目标和观察者解耦)
- Template模版方法模式:定义一个操作是算法框架,而将一些步骤延迟到子类中,模版方法使得子类可以不改变一个算法的结构即可重新定义该算法某些特定的步骤。
- Command命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;可以对请求排队或记录请求日志;以及支持可撤销的操作。(事务的支持)
- Status状态模式:允许一个对象在其内部状态改变时改变它的行为,让对象看起来似乎修改了它的类。
- ChainOfResponsibility职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
- Interpreter解释器模式:给定一个语言,定义它文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
- Mediator中介者模式:用一个中介对象来封装一系列对象的交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立改变他们之间的交互。(中介模式的目的是降低紧密耦合对象之间直接和其他对象通信的复杂性和依赖性)
- Visitor访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
- Strategy策略模式:定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换,本模式可使得算法可独立于使用它的客户而变化。
- Iterator迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
- Memento备忘录模式:不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
更新设计模式中的一些设计原则和法则:
- 单一职责原则
- 开放封闭原则
- 依赖倒转原则
- 里氏代还原则
- 合成聚合复用原则
- 迪米特法则
2. Spring5源码和层次分析
-
Beans
1.接口实例化
2.代理Bean操作 -
Context
1.IOC容器的设计原理及高级特性
2.AOP设计原理
3.FactoryBean和BeanFactory -
Transaction
1.声明式事务底层原理
2.Spring事务处理机制
3.事务的传播与监控
4.基于SpringJDBC手写ORM框架 -
MVC
1.MVC原理
2.与IOC容器整合
3.HandlerMapping实现原理
4.HandlerAdapter实现原理
5.ViewResolver实现原理
6.Controller调用原理
7.动态参数匹配原理
8.SpringMVC与Struts2对比
9.手动实现SpringMVC框架 -
Spring5新特性
1.Spring5.x兼容性
2.多序列化数据格式绑定API
3.函数式风格的ApplicationContext
4.Kotlin表达式
5.WebFlux模块
6.Testing改进
3. Mybatis源码和层次分析
- 代码自动生成器:Generator
- Mybatis下:1对多、多对多 嵌套结果、嵌套查询
- 一级缓存、二级缓存使用场景及选择策略
- Mybatis与Spring集成:Spring-Mybatis.jar
- Spring集成下的SqlSession与Mapper
- Mybatis的事务
- Mybatis的动态代理的实现
- 手动实现Mybatis1.0->2.0
2.分布式架构
1. 漫谈分布式架构
-
分布式架构概念及意义
-
如何把应用从单机扩展到分布式
-
大型分布式架构演进过程
-
构建分布式架构最重要因素
1.CDN加速静态文件访问
2.分布式存储
3.分布式搜索引擎
4.应用发布与监控
5.应用容灾及机房规划
6.系统动态扩容 -
分布式架构设计
1.主流架构模型-SOA架构及微服务架构
2.领域驱动设计及业务驱动划分
3.分布式架构的基本理论CAP、BASE及其应用
4.什么是分布式架构下的高可用设计
5.分布式架构下的可伸缩设计
6.构建高性能的分布式架构
2. 分布式架构策略-分而治之
-
从网络通信探究分布式通信的原理
-
基于消息方式的系统间通信
-
理解通信协议传输过程中的序列化和反序列化的机制
-
基于框架的RPC通信技术
a.Webservice/Apache CXF
b.RMI/Spring RMI
c.Hessian
d.Motan(新浪) -
传统RPC技术在大型分布式架构下面临的问题
-
分布式架构下的RPC解决方案
-
Zookeeper分布式系统的基石
a.学习搭建Zookeeper集群
b.深入分析ZK在disconf配置中心的应用
c.基于ZK的分布式锁解决方案
d.Zookeeper Watcher核心机制深入源码分析
e.Zookeeper集群升级、迁移
f.基于Zookeeper实现分布式服务器动态上下线感知
g.Zookeeper Zab协议及选举机制源码 -
使用Dubbo对单一应用服务化改造
a.Dubbo管理中心及监控平台安装部署
b.Dubbo分布式服务模块划分(领域驱动)
c.基于Dubbo的分布式系统架构实战
d.Dubbo负载均衡策略分析
e.Dubbo服务调试之服务只订阅及服务只注册配置
f.Dubbo服务接口设计原则
g.Dubbo设计原理及源码分析
h.基于Dubbo构建大型分布式电商平台实战雏形
i.Dubbo容错机制及高扩展性分析3. 分布式架构中间件
-
分布式消息通信
a.消息中间件在分布式架构中的应用
b.ActiveMQ-ActiveMQ高可用集群企业级部署方案 -ActiveMQ P2P及PUB/SUB模型详解 -ActiveMQ消息确认以及重发策略 -ActiveMQ基于Spring完成分布式消息队列实战
c.Kafka
-Kafka基于ZK搭建高可用集群 -Kafka消息处理过程解析 -Java客户端实现Kafka生产者与消费者实例 -Kafka的副本机制及选举原理解析 -基于Kafka实现应用日志实时上报统计分析
d.RabbitMQ
-初步认识RabbitMQ及高可用集群部署 -详解RabbitMQ消息分发机制及主题消息分发 -RabbitMQ消息路由机制分析 -RabbitMQ消息确认机制
e.Elasticsearch
-
分布式缓存Redis
a.Redis的数据结构分析
b.Redis主从复制原理及无磁盘复制分析
c.Redis管道模式详解
d.Redis缓存与数据库一致性问题解决方案
e.基于Redis实现分布式锁
f.Redis中AOF和RDB持久化策略的原理
g.Redis读写分离架构
h.Redis哨兵架构及数据丢失问题分析
i.Redis Cluster数据分布算法之 Hash slot
j.Redis使用常见问题及性能优化思路
k.Redis高可用及高伸缩架构实战
l.缓存击穿、缓存雪崩预防策略
m.Redis批量查询优化
n.Redis高性能集群之twenproxy or codis -
数据存储
a.mongoDB-NoSQL简介及MongoDB基本概念 -MongoDB支持的数据类型分析 -MongoDB可视化客户端及Java API实践 -手动实现基于MongoDB的ORM框架 -MongoDB企业级集群解决方案 -MongoDB聚合、索引及基本执行命令 -MongoDB数据分片、转存及恢复策略
b.MyCat
-MySQL主从复制及读写分离 -MySQL+KeepAlived实现双主高可用方案实践 -MySQL高性能解决方案之分库分表 -数据中间件Mycat -基于Mycat实现MySQL数据库读写分离 -Mycat全局表,ER表,分片策略分析
-
Nginx后台服务
-
高性能NIO框架Netty
4. 分布式解决方案
-
-
分布式全局ID生成方案
-
session跨域共享及企业单点登录解决方案
-
分布式事务解决方案
-
高并发下服务降级、限流
-
基于分布式架构下分布式锁的解决方案
-
分布式架构下实现分布式定时调度
3.微服务架构
1. Spring Boot
- Spring Boot与微服务之间的关系
- Spring Boot热部署
- 核心组件starter、actuator、auto-configuration、cli
- Spring Boot集成Mybatis实现多数据源路由
- Spring Boot集成Dubbo
- Spring Boot集成Redis缓存
- Swagger与Spring Boot集成构建API管理及测试体系
- Spring Boot实现多环境配置动态解析
2. Spring Cloud - Eureka注册中心
- Ribbon集成REST实现负载均衡
- Feign声明式服务调用
- Hystrix服务熔断降级方式
- Zuul实现微服务网关
- Config分布式统一配置中心
- Sleuth调用链路跟踪
- BUS消息总线
- 基于Hystrix实现接口降级
3. docker虚拟化 - 了解Docker的镜像、仓库、容器
- Dockerfile构建LNMP环境部署个人博客wordpress
- Docker Compose构建LNMP环境部署个人博客wordpress
- Docker网络组成、路由互联、openvswitch
- 基于swarm构建Docker集群
- Kubernetes简介
4. 漫谈微服务架构 - SOA架构和微服务之间的区别和联系
- 如何设计微服务及其设计原则
- 解惑Spring Boot流行因素及能够解决什么问题
- 什么是Spring Cloud,为何要选择Spring Cloud
- 基于全局分析Spring Cloud各个组件所要解决的问题
4.并发编程
1. Java内存模型(JMM)
- 线程通信
- 消息传递
2. 内存模型 - 重排序
- 顺序一致性
- happens-before
- as-if-serial
3. synchronized - 同步、重量级锁
- synchronized原理
- 锁优化
a. 自旋锁
b. 轻量级锁
c. 重量级锁
d. 偏向锁
4. volatile - volatile实现机制
- 内存语义
- 内存模型
5. DCL - 单例模式
- DCL
- 解决方案
6. 并发基础 - AQS
a. AbstractQueuedSynchronizer同步器
b. CLH同步队列
c. 同步状态的获取和释放
d. 线程阻塞和唤醒 - CAS
a. Compare and Swap
b. 缺陷
7. 锁 - ReentrantLock
- ReentrantReadWriteLock
- Condition
8. 并发工具类 - CyclicBarrier
- CountDownLatch
- Semphore
9. 并发集合 - ConcurrentHashMap
- ConcurrentLinkedQueue
10. 原子操作 - 基本类型
a. AtomicBoolean
b. AtomicInterger
c. AtomicLong - 数组
a. AtomicIntergerArray
b. AtomicLongArray
c. AtomicReferenceArray - 引用类型
a. AtomicReference
b. AtomicReferenceFieldUpdater
11. 线程池 - Executor
- ThreadPoolExecutor
- Callable和Future
- ScheduledExecutorService
12. 其他 - ThreadLocal
- Fork/Join
5.代码性能优化
1. 理解性能优化
- 性能基准
- 性能优化到底是什么
- 衡量维度
2. JVM调优 - JVM运行时数据区
- JVM内存模型
- 各种垃圾回收场景(Throughput/CMS)
- 理解GC日志,从日志看端倪
- MAT分析dump文件
3. Tomcat调优 - Tomcat运行机制及框架
- 分析Tomcat线程模型
- Tomcat系统参数认识及调优
- 基准测试
4. Mysql调优 - 理解Mysql底层B+Tree机制
- SQL执行计划详解
- 索引优化详解
- SQL语句优化
6.工程化与工具
- 生成可执行Jar、理解Scope生成最精确的Jar
- 解决类冲突、包依赖NoClassDefFoundError问题定位及解决
- 全面理解Maven的LifeCycle/Phase/Goal
- *Maven生成Archetype
- Maven流行插件、生成自定义插件
- Nexuss使用、上传、配置
- 对比Gradle
- Jenkins - 持续集成、一次Build解决所有手动工作
- sonarQube - 减少人为疏漏,静态代码检查,让你的代码更健壮
- Git
- 什么是Git以及Git的工作原理
- Git常用命令
- Git冲突怎么引起的,如何解决
- Git Flow规范团队Git使用流程
- 团队案例
- 敏捷开发
- 敏捷的由来
a. 传统模式的问题
b. 当前行业面临的问题
c. 微服务与敏捷 - 敏捷开发模式
a. 敏捷文件
b. 敏捷组织架构
c. 敏捷最佳实践
· TDD
· 结对编程
· CI
· 敏捷与DevOps - 敏捷开发实践
a. 用户故事
b. 看板
c. 每日站会
d. 迭代冲刺
e. 回顾会议
7.项目实战(可选)
1. 用户认证系统(passport)
- 用户注册
- 用户登录
a. SSO单点登录
b. 第三方登录 - 用户权限控制
a. UI页面拦截
b. 页面方法拦截
2. 搜索模块(大数据) - 大数据存储
a. 分布式环境配置
b. Hadoop基本配置介绍 - 大数据检索
a. Elasticsearch环境配置
b. Elasticsearch的API使用 - 动静分离
3. 商品管理系统(item) - 店铺管理
a. 创建店铺
b. 店铺主页定制 - 商品管理
a. 商品录入
b. 商品预览
4. 订单系统(order) - 订单号统一生成规则
- 下单流程管理
- 库存管理
- 购物车
a. 购物车管理
b. 未登录状态下的购物车同步
5. 支付系统(Pay) - 优惠卷支付
- 积分支付
- 金融支付
a. 微信支付
b. 支付宝支付
c. 银联支付
6. 数据统计分析系统(anal) - 用户行为分析
a. 用户兴趣分析
b. 登录异常分析 - 行业分析
- 区域分析
7. 通知推送系统(msg) - 融云推送
a. 活动推送
b. 交易信息推送
c. 异常提醒 - 消息中间件
a. 消息同步
b. 消息处理
8. 聊天系统(im) - 用户群聊
- 点对点聊天
- 文件断点续传
摘自:
- 《大话设计模式》
相关文章
- 暂无相关文章
用户点评