原创

Java知识图谱

Java知识图谱

其他技能

项目构建

  • Maven
  • Gradle

版本控制

  • Git
  • SVN

开发工具

  • Idea
  • sourceTree
  • Postman
  • Navicat

解决方案

技术实践方案

业务实现方案

架构技能

分布式架构

  • Keepalive+Nginx/LVS
  • Zookeeper
  • RPC

    • SpringCloud
    • Dubbo
    • HSF
    • 服务治理

      • 服务熔断
      • 服务降级
      • 服务降流
      • 服务隔离
  • MQ

    • RocketMQ
    • Kafka
    • ActiveMQ
  • 缓存

    • Redis
    • Memcached
  • 分布式数据一致性

微服务架构

  • Docker

数据库架构

  • 主备架构
  • 主从架构
  • 双主架构

专业基石

数据结构

算法思想

Java基础

集合

IO/NIO

并发编程

  • 并发基石
  • 线程基础
  • synchronized
  • JUC

JVM

  • JVM调优
  • JVM结构

JDBC

  • 连接池

编码规范

  • 重构 改善既有代码的设计
  • 思考开源项目代码设计
  • Sonar

微服务架构

nacos

dubbo

Spring Cloud

微服务架构

  • Spring Cloud
    与微服务

    • 概念

      • 用来开发一种由很多小的服务来组成应用系统的架构
      • 这些服务都可以运行在自己的进程中,可以实现独立部署
      • 服务之间通过一些轻量级的通信机制来进行交互
      • 服务之间没有非常强的技术关联,服务与服务之间可以采用不同的技术栈
      • 每个服务都可以使用不同的数据存储机制
    • Spring Cloud简介

      • 微服务的协调者
      • 是用来构建一整套完整的分布式系统的一套框架
      • 分布式系统是非常庞大而复杂的,它不单说是一个框架就能解决的,
        即使是Spring Cloud也不能解决分布式系统的所有问题,它也是有适合的一个场景
      • 微服务架构是分布式系统中的一种类型
    • Spring Cloud 与 Spring Boot的关系

      • Spring boot是构建Spring Cloud架构的基石
      • 版本命名规则:伦敦地铁站名字
      • Finchley 版本是基于Spring Boot 2.0
    • Spring Cloud解决的问题

      • 配置管理
      • 服务注册
      • 服务发现
      • 断路器
      • 智能路由
      • 微代理
      • 负载均衡
      • 服务间调用
      • 一次性令牌
      • 控制总线
      • 思维导图模板
      • 全局锁
      • 领导选举
      • 分布式会话
      • 集群状态
      • 分布式消息
      • ……
    • Spring Cloud子项目介绍

      • Spring Cloud Config

        • 配置中心,利用git来集中管理程序的配置
      • Spring Cloud Netflix

        • 集成众多Netflix的开源软件,包括Eureka、Hystrix、Zuul、Archaius等
      • Spring Cloud Bus

        • Bus实际上就是消息总线的意思
        • 消息总监,利用分布式消息将服务和服务实例连接一起,用于在一个集群中传播状态的变化,比如配置更改事件,可以与Spring Cloud config联合实现热部署
      • Spring Cloud for Cloud Foundry

        • 利用Pivotal Cloudfoundry 集成你的应用程序。
          CloudFoundry是VMware推出的开源PaaS云平台。
      • Spring Cloud Cloud Foundry Service Broker

        • 为建立管理云托管服务的服务代理提供一个七点。
      • Spring Cloud Cluster

        • 基于Zookeeper、Redis、Hazelcast、Consul实现的领导选举和平民状态模式的抽象和实现
      • Spring Cloud Consul

        • 基于Hashicorp Consul实现的服务发现和配置管理
      • Spring Cloud Security

        • 在Zuul代理中OAuth2 REST客户端和认证头转发提供复杂均衡
      • Spring Cloud Sleuth

        • 适用于Spring Cloud 应用程序的分布式跟踪,与Zipkin HTrace和基于日志(例如ELK)的跟踪相兼容。可以实现日志的收集。
      • Spring Cloud Data Flow

        • 一种针对现代运行是可组合的微服务应用程序的云本地编排服务。易于使用的DSL、拖放式GUI和REST API一起简化了基于微服务的数据管道的整体编排
      • Spring Cloud Stream

        • 一个轻量级的事件驱动的微服务框架来快速构建可以连接到外部系统的应用程序。使用Apache Kafka或者RabbitMQ在Spring Boot应用程序之间发生和接受消息的简单声明模型。
      • Spring Cloud Stream App Starters

        • 基于Spring Boot为外部系统提供Spring的集成
      • Spring Cloud Task App Starters

        • Spring Cloud Task App Starters是Spring Boot应用程序,可能是任何进程,包括Spring Batch作业,并可以在数据处理有限时间终止
      • Spring Cloud for Amazon Web Services

        • 与Amazon Web Services轻松集成。它提供了一种方便的方式来与AWS提供的服务进行交互,使用众所周知的Spring惯用语和API(如消息传递或缓存API)。开发人员可以围绕托管服务构建应用程序,而无需关系基础设置或维护工作
      • Spring Cloud Connectors

        • 便于PaaS应用在各种平台上连接到后端像数据库和消息服务。
      • Spring Cloud Starters

        • 基于Spring Boot的项目,用以简化Spring Cloud的依赖管理。该项目已经终止,并且在Angel.SR2后的版本和其他项目合并
      • Spring Cloud CLI

        • Spring Boot CLI插件用于在Croovy中快速创建Spring Cloud组件应用程序。
      • Spring Cloud Contract

        • Spring Cloud Contract是一个总体项目,其中包含帮助用户成功实施消费者驱动契约(Consumer Driven Contracts)的解决方案
      • Spring Cloud扩展

  • 单块架构进化成微服务架构

    • ①把整个系统打散成为不同的功能单元,
      每个单元称之为服务
    • ②服务之间要有良好的接口和锲约,
      接口应该采取中立与平台无关的方式定义

      • 使之能够跨越不同的硬件平台
      • 使之能够跨越不同的操作系统平台
      • 使之能够跨越不同的编程语言
      • 使之能够在各种各样的系统的中能够以一种统一通用的方式进行交互
  • 设计原则

    • 拆分的足够微
    • 轻量级通信
    • 领域驱动设计原则

      • 服务要能反映出业务的领域模型
      • 与业务领域专家达到功能一致共识
      • 优点

        • 减少微服务中通用语言的复杂性
        • 可以帮助团队分清领域边界,理清上下文边界
    • 单一职责原则

    • DevOps及两个披萨原则
    • 不限于技术栈原则
  • 设计

    • ①服务拆分

      • 意义

        • 易于实现
        • 易于维护
        • 易于部署
        • 易于更新
      • 方法

        • 横向拆分法
          指的是根据不同的业务功能来进行拆分

            • 数据采集
            • 数据存储
            • 数据查询
            • 数据展示
        • 纵向拆分法
          指的是把一个业务功能里面不同的模块或者组件进行拆分

          • 用户界面层
          • 应用层
          • 领域层
          • 基础设施层

            • 如:将公共的组件当作独立的基础设施下沉到底层,
              作为独立的一个基础设施层
        • 使用领域设计原则(简称DDD)

            • 数据采集限界上下文

              • 数据采集
              • 数据存储
            • 限界上下文

              • 数据展示
            • 数据API限界上下文

              • 数据查询
    • ②服务注册
      Eureka

      • 实现方式

        • 在Spring Cloud中Eureka提供了服务的注册与发现机制
        • 高可用性
        • 开源
      • 如何集成Eureka

        • Eureka Server

          • 引入pom.xml依赖

            • spring-cloud-starter-netflix-eureka-server
            • spring-boot-starter-test
            • spring-cloud-dependencies:${springCloudVersion}
          • Eureka Server
            配置及启动

            • 在Application 启动类上加一个@EnableEurekaServer注解
            • 编写application.properties配置

              • 定义服务启动的端口号
                server.port: 8761
              • 定义实例的主机名称
                eureka.instance.hostname: localhost
              • Eureak本身可以作为客服端去其他的服务注册中心注册,这里我们将其禁用
                eureka.client.registerWithEureka: false
              • 作为客户端的配置,禁用掉
                eureka.client.fetchRegistry: false
              • 定义服务的URL
                eureka.client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
            • 右键选择Application,->Run Ass -> Java Application启动注册服务器

            • 浏览器访问localhost:8761,如果可以成功访问Eureka界面,说明整个注册服务器(服务注册中心)搭建完成了
        • Eureka-Client

          • 引入pom.xml依赖

            • spring-cloud-starter-netflix-eureka-client
            • spring-boot-starter-test
            • spring-cloud-dependencies:${springCloudVersion}
          • Eureak Client
            配置及启动

            • 在Application 启动类上加一个@EnableDiscoveryClient注解
            • 编写application.properties配置

              • 指定应用名称,即当前工程的名称
                spring.application.name: 工程名称
              • 指定Eureak注册服务器的位置
                eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
            • 先启动Eureka Server端,
              再右键Application;->Run Ass -> Java Application启动客户端

            • 浏览器访问localhost:8761 Eureka服务注册中心,我们如果看到Eureka服务注册中心应用列表有该应用名称,即注册成功
            • 附录:Eureka有一个自我防护机制,不代表应用服务一掉线就立刻在服务注册中心显示不可用了,它会反复的侦听几次,如果超过某个阀值它才会断定你掉线了,如果要关闭该机制
              在application.properties配置中增加
              eureka.server.enable-self-preservation=false
    • ③服务发现

      • 配置
      • 实现
    • ④服务消费

      • 常见的消费模式

        • 服务直连模式

          • 优点

            • 简洁明了
            • 基于Http的特点与平台编程语言无关性
          • 缺点

            • 无法保证服务的可用性,如需要连接某个IP下的某个资源的时候,肯定需要指定这个IP地址,如果这个绑定的IP的主机宕机了,怎么办,显然这个资源我们是拿不到了,因为这种服务直连模式没办法做到负载均衡,也就没有办法来保证这个服务的可用性,所以在生产环境中这种模式使用是比较少的
        • 客户端发现模式

          • 服务实例启动后,将自己的位置信息提交到服务注册表(服务注册中心)

            • 它是一种由客户端来决定相应的服务实例的网络位置的解决方案,也就是说由客户端来决定使用服务的哪个实例
          • 客户端从服务注册表进行查询,来获取可用的服务实例

          • 客户端自行使用负载均衡算法从多个服务实例中选择出一个
        • 服务端发现模式

          • 与客户端发现模式最大的区别就是它的负载均衡不是有客户端来做的,而是由服务端来做的
          • 通常负载均衡器是独立部署在服务端的,也就是说客户端去请求负载均衡器上的服务,而不需要关心具体调用哪个服务实例,它是由负载均衡器来判断的并转发请求到具体的服务实例上去
      • 微服务常见的消费者

        • httpclient

          • httpClient是阿帕奇旗下的一个子项目,它是用来提供高效以及功能丰富的HTTP协议工具包,并且它能支持HTTP协议最新的版本以及建议
          • 在JDK里面它已经提供了访问HTTP协议基本功能,但是对大部分程序来说JDK这个库还不够丰富和灵活,那么HttpClient就能对JDK提供一些比较友好的补充,而且也方便开发人员来测试这个基于HTTP的接口从而来提高开发的效率以及代码的健壮性
          • 用法

            • pom.xml添加依赖httpclient:4.5.3
            • 在RestConfiguration中提供注入,
              @Autowired
              private RestTemplateBuilder builder;
            • 注入RestTemplate,并调用getForEntity(url,String.class)
        • ribbon

          • ribbon是Spring Cloud内置的一个组件,它是Netflix实现客户端负载均衡的工具,
            它是基于HTTP和TCP来实现客户端负载均衡的,ribbon的每个负载均衡器都是组合整个服务间的一部分,它们一起协作,可以根据需要远程服务器来进行交互来获取包含客户端名字的集合,ribbon经常会与Eureak结合来使用,在典型的分布式部署中Eureak会为所有的微服务实例提供服务注册,而ribbon作为提供这个服务消费的客户端
          • ribbon常用负载均衡撒算法

            • 简单轮询的负载均衡
            • 加权时间的负载均衡
            • 区域感知、轮询负载均衡
            • 随机负载均衡
          • 用法

            • pom.xml添加依赖spring-cloud-starter-netflix-ribbon
            • 声明@ribbonClient注解,并注入
            • 配置
            • 使用
            • 应用配置application.properties
        • feign

          • feign是一款被Spring Cloud集成的声明式的Web服务客户端,它使得Web服务客户端的写入更加的方便,同时具有可拔插,注释支持,
          • 在使用feign的同时Spring Cloud也会集成Ribbon和Eureak来提供负载均衡Http客户端
      • 实现服务的负载均衡及高可用方式

        • 每个应用启动多个实例
        • 这时使用feign来实现服务间调用,以及借助Eureak来实现服务间的高可用
    • ⑤统一入口

      • API网关的概念

        • API网关是用于管理所有api,形成统一api入口的组件
      • API网关的意义

        • 集合多个服务的api
        • 统一api入口
      • api网关的利与弊

          • 避免将内部信息泄露给外部
          • 为微服务添加额外的安全层
          • 支持混合通信协议
          • 降低构建微服务的复杂性
          • 微服务模拟与虚拟化
          • 在架构上需要额外考虑更多编排与管理
          • 路由逻辑配置要进行统一的管理
          • 可能引发单点故障
      • api网关的实现方式

        • NGINX
        • Kong
        • Spring Cloud Zuul
          推荐使用

          • 功能

            • 认证
            • 鉴权
            • 限流
            • 动态路由
            • 监控
            • 弹性
            • 安全
            • 负载均衡
            • 协助单点压测
            • 静态响应
            • 主动与主动交换管理
      • Spring Cloud集成Zuul

        • pom.xml依赖

          • // Eureka Client
            spring-cloud-starter-netflix-eureka-client
          • // Zuul
            spring-cloud-starter-netflix-zuul
          • // 该依赖用于测试阶段
            spring-boot-starter-test
        • 在Application 启动类上加@EnableZuulProxy注解

        • application.properties配置

          • 修改application.properties字符编码为UTF-8
          • 指定应用名称
            spring.application.name: 当前工程名称
          • 指定Eureak服务注册中心地址
            eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
          • 设置Zuul本身的配置,路由的url,这里设置的是url的路径,假设有个hi的应用,当我匹配这个路径的时候,那么我就把请求这个路径的请求做一个转发,转发到下面的服务中去
            zuul.routes.hi.path: /hi/*,两个表示该路径下的所有资源
          • 服务转发至
            zuul.routes.hi.serviceId: 转发至的服务工程名称
        • 启动网关所在服务

        • 再启动网关转发至的服务
        • 访问Zuul服务,如localhost:8081/hi,
          这是时候它会把请求转发到 【要转发的服务】上去,这时候Zuul就起到了一个转发请求的功能,这就是Zuul实现的反向代理的一个功能
        • 案例

          • 天气预报微服务重构
            msa-weather-report-eureka-feign-gateway
            表示这个天气预报微服务依赖于API网关

            • 将原来依赖与城市数据API微服务和天气数据API微服务的依赖从代码中移出出去,转换为依赖于API网关
            • 此前我们定义了CityClient城市数据微服务和WeatherClient天气数据微服务两个接口,现在这两个接口都不用了,我们建一个新的接口DataClient数据接口,并在接口上方注解@FeignClient("msa-weather-eureka-client-zuul")API网关的名称,并且API网关下面有两个接口,第一个接口是获取城市列表@GetMapping("/city/cities"),第二个是根据城市ID连接城市数据@GetMapping("/data/weather/cityId/{cityId}")
            • 在Controller中重新注入
              @Autowired
              private DataClient dataClient;
            • 在实现类中也改成由dataClient统一提供数据
              @Autowired
              private DataClient dataClient;
            • 配置application.properties改成UTF8编码
            • 设置当前应用名称,与当前工程名称一致
              spring.application.name: msa-weather-report-eureka-feign-gateway
            • 其他的配置保持原样
    • ⑥配置管理

      • 实现集中化配置的原因

        • 微服务数量多,配置多
        • 手工管理配置复杂
        • 实现微服务的集中化配置
      • 配置分类

        • 按配置来源划分

          • 主要有源代码、文件、数据库连接、远程调用等
        • 按配置环境来分

          • 开发环境、测试环境、预发布环境、生产环境等
        • 按配置的集成阶段划分

          • 编译时、打包时和运行时
        • 按配置的加载方式划分

          • 启动加载和动态加载
      • 配置中心的要求

        • 面向可配置的编码
        • 环境隔离性
        • 一致性:相同环境下服务器的配置环境应该是一致的
        • 集中化配置
      • 如何集成Spring Cloud Config

        • 分布式外部化集中化的配置中心

          • Server端可以在所有管理中管理应用程序的外部属性,Server的默认实现使用的git,因此它可以轻松的支持标记版本的配置环境,并且可以通过广泛的工具来访问管理内容,所以每个配置不仅有环境的区分还有版本的区分
          • config-server
            配置中心服务端

            • pom.xml依赖

              • // Spring Cloud Config Server
                spring-cloud-config-server
            • 在Application上添加@EnableConfigServer注解启用Config

            • 修改application.properties配置文件字符编码位UTF8
            • 设置应用名称
              spring.application.name: 当前工程名称
            • 指定端口号
              server.port= 8888
            • 指定Eureak服务注册中心地址
              eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
            • 指定Spring Cloud config git在线仓库配置地址
              spring.cloud.config.server.git.uri=https://github.com/xxxx/spring-cloud-microservices-development
            • 指定仓库下的一个路径
              spring.cloud.config.server.git.searchPaths=config-repo
          • config-client
            配置中心客户端

            • pom.xml依赖

              • // Config Client
                spring-cloud-config-client
              • 常见的Eureak ClientApplication上不用加任何注解
            • application.properties配置

              • 修改application.properties配置为UTF8
              • 指定用户名称
                spring.application.name: 指定用户名称
              • 指定服务注册中心
                eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
              • 指定当前环境
                spring.cloud.config.profile=dev
              • 指定config-server
                spring.cloud.config.uri=http://localhost:8888/
            • 测试

              • 先启动Eureak
              • 再启动Config Server
    • ⑦熔断机制

      • 熔断机制的概念

        • 当服务过载,流量激增超过负荷的时候,这个时候使用熔断,其实就是掐断服务,包保护服务自身不至于崩溃的一种机制,所以服务熔断又称之为过载防护
        • 在微服务架构中,服务之间存在一定的依赖关系,所以形成了一种依赖链,
          如果某个服务调用慢,或者超时的时候会造成服务的不可用,会间接的导致其依赖的服务不可用,严重的时候还会阻塞整个依赖链,最终会导致这个业务系统崩溃
        • 对该服务的调用执行熔断,对于后续请求,不在继续调用该目标服务,而是直接返回,从而可以快速释放资源
        • 目的:保护系统
      • 服务熔断的原理

        • 断路器

          • 保险丝
        • 断路器模式

          • 致力于防止应用程序反复的尝试可能失败的一些操作,允许它不用等待故障被修复,或者说在缺点故障持续的时间来浪费CPU的性能,断路器模式还可以使应用程序检测故障是否已经被解决,如果问题已经被解决,那么应用程序可以尝试的再调用该操作
      • 熔断机制的意义

        • 系统稳定
        • 减少性能损耗
        • 及时响应
        • 阀值可控制
      • 熔断机制的功能

        • 异常处理
        • 日志记录
        • 测试失败的操作
        • 手动复位
        • 并发
        • 加速熔断
        • 重试失败请求
      • 熔断与降级的异同点

        • 相似性

          • 目的一致
          • 表现类似
          • 粒度一致
        • 不同点

          • 触发条件不同
          • 管理的目标层次不同
      • 如何集成hystrix

        • Hystrix会监控微服务的调用状况,当失败的应用到达一定的阀值的时候它就会启用这个熔断机制,Hystrix有个注解,通过这个注解就可以将这个类关联到熔断器连在一起的代理上
        • pom.xml依赖

          • // Hystrix
            spring-cloud-starter-netflix-hystrix
        • application.properties配置

          • application.properties编码格式设置位UTF8
          • 设置应用名称
            spring.application.name: 设置应用名称
        • 配置及使用

          • 在Application上添加注解@EnableCircuitBreaker启用熔断器
          • 在Controller 的方法上加一个注解@HystrixCommand(fallbackMethod="defaultCities")
          • 在Controller下面的方法下写一个默认的方法,在熔断情况下默认返回的数据
          • 其实在FeignClient已经内嵌了对hystrix函数的支持,所以在FeignClient有种更简单的方式,只需要在FeignClient添加 fallback声明回调的类即可,这个类是要实现DataClient接口的,并且在类上写@Component注解
            @FeignClient(name="请求服务名称", fallback=DataClientFallback.class)
    • ⑧自动扩展

      • 自动扩展的概念
      • 自动扩展的意义

        • 提高了高可用性和容错能力
        • 增加了可伸缩性
        • 具有最佳使用率,并节约成本
        • 优先考虑某些服务或服务组
      • 依赖关键功能

        • 一个容器抽象层,在许多物理或虚拟机上提供统一抽象
        • 容器编排和初始化系统在集群抽象之上智能管理部署
      • 容器编排工作职责

        • 集群管理
        • 自动部署
        • 可伸缩性
        • 运行状况监控
        • 基础架构抽象
        • 资源优化
        • 资源分配
        • 服务可用性
        • 敏捷性
        • 隔离
      • 常用资源分配算法

        • 传播(Spread)
        • 装箱(Bin Packing)
        • 随机(Random)
      • 常用容器编排技术

        • Docker Swarm
        • Kubernetes
        • Apache Mesos
      • 自动扩展的常见方式

        • 垂直扩展,提升硬件配置
          如双核提升为四核
        • 水平扩展,增加服务器设备数
        • 自我注册和自我发现
        • 按需扩展
        • 特定时间段
        • 消息长度
        • 业务参数
      • 自动扩展的常见级别

        • 应用程序级别
        • 基础架构级别

zookeeper

docker

数据库

SQL数据库

  • MySQL
  • Oracle
  • 分库分表

    • ShardingSphere
    • MyCat
    • TDDL

NoSQL数据库

  • Redis
  • MongoDB
  • Hbase
  • h2

JavaWeb

Jsp

Servlet

Html

  • 1.W3C标准
  • 2.HTML编辑工具
  • 3.HTML标签
  • 4.CSS的基本用法
  • 5.在HTML中引入CSS样式

Css

  • 1.CSS编辑网页文本
  • 2.列表样式
  • 3.盒子模型
  • 4.浮动
  • 5.定位网页元素

JavaScript

  • JS基础

    • 1.JavaScript核心语法
    • 2.程序调试
    • 3.JavaScript对象
  • JS高级

    • 1.初识jQuery,jQuery选择器
    • 2.jQuery中的事件与动画
    • 3.jQuery操作DOM
    • 4.表单校验

JQuery

Tomcat

Vue

大数据

数据收集

  • 网络爬虫
  • Flume/LogStash

    • Flume+Kafka+ELK

数据存储

  • HDSF
  • Hive
  • Hbase
  • MongoDB

数据检索

  • Elasticsearch

数据挖掘

  • 机器学习
  • MATLAB
  • SPSS
  • SAS

数据可视化

  • R
  • D3.js
  • ECharts
  • Excel

算法

  • 一致性

    • paxos
    • raft
    • gassip
  • 数据结构

    • 栈、队列、链表
    • 散列表
    • 二叉树、红黑树、B树
  • 常用算法

    • 排序

      • 插入排序
      • 桶排序
      • 堆排序
      • 快速排序
    • 最大子弹组

    • 最长公共子系列
    • 最小生成树
    • 最短路径
    • 矩阵的存储和运算

云计算

  • 云服务

    • Saas
    • Paas
    • Iaas
  • Openstack

  • Docker

数据处理

  • Spark

    • RDD
    • Spark SQL
    • Spark Streaming
    • Mllib
  • Hadoop

    • HDFS(分布式文件系统)
    • Mapreduce(计算框架)
    • Yarn(资源管理平台)
    • Pig(piglatin语句到mapreduce的映射)
    • Hive(数据仓库,提供SQL)
    • Mahout(机器算法的maprduce实现库)
  • Kafka

  • Storm
  • Elk

    • ElasticSearch
    • Logstash
    • Kibana

重构设计

设计原则

  • 单一职责原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 迪米特原则
  • 开闭原则

设计原则

  • 单一职责原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 迪米特原则
  • 开闭原则

创建型模式

  • 抽象工厂模式
  • 生成器模式
  • 工厂模式
  • 原型模式
  • 多例模式
  • 单例模式

创建型模式

  • 抽象工厂模式
  • 生成器模式
  • 工厂模式
  • 原型模式
  • 多例模式
  • 单例模式

结构型模式

  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰者模式
  • 外观模式
  • 亨元模式
  • 代理模式

结构型模式

  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰者模式
  • 外观模式
  • 亨元模式
  • 代理模式

行为型模式

  • 责任链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 模板方法模式
  • 访问者模式

行为型模式

  • 责任链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 模板方法模式
  • 访问者模式

开源框架

NET框架

  • Netty
  • HttpClient
  • Mina

MVC框架

  • Spring
  • Struts

ORM框架

  • Mybatis
  • Hibernate

RPC框架

  • Dubbo
  • HSF
  • SpringCloud
  • Thrift

模板引擎

  • Freemarker
  • Velocity
  • Thymeleaf

测试技能

单元测试

  • Mock
  • SpringTest
  • junit
  • mockito
  • easymock
  • testng

压力测试

  • JMeter

LinuxOS

Linux常用命令

Shell脚本编程

中间件

消息队列

  • activemq
  • rabbitmq
  • kafka
  • rocketmq

Zookeeper

ElasticStack

缓存技术

  • redis
  • Ehcache
  • memcache

性能优化

Web前端性能优化

  • 终端优化
  • 传输优化
  • 反向代理
  • 动静分离
  • CDN加速

应用服务性能优化

  • 集群
  • 缓存
  • 异步
  • 代码

    • 并发编程
    • 资源服用
    • 数据结构

数据存储性能优化

  • SQL优化
  • 索引优化
  • 数据库结构+分库分表

日志框架

log

log4j

slf4j

logback

数据结构和算法

结构

  • 线性表
  • 散列表

算法

  • 排序
  • 搜索
  • 查找
  • 匹配
正文到此结束
相关文章
该篇文章的评论功能已被站长关闭