Java 全栈知识体系

提示

为方便在IDEA中学习,简单梳理下文章的体系,后续将会更新这个页面。@pdai

在线工具

Java入门与进阶

面向对象与Java基础

Java进阶 - 集合框架

Java进阶 - 并发框架

Java进阶 - IO框架

Java 8 新特性解读

Java 8+ 新特性解读

Java进阶 - JVM相关

数据结构与算法

数据结构基础

排序算法详解

算法思想详解

领域算法详解

数据库理论与实践

数据库基础与理论

SQL语言基础和进阶

SQL DB - MySQL数据库

NoSQL DB - Redis详解

NoSQL DB - MongoDB详解

NoSQL DB - ElasticSearch

开发与常用基础

开发之常用类库

开发之代码质量保障

开发之正则表达式

开发之CRON表达式

开发之网络协议

开发之安全相关

框架与中间件

Web容器 - Tomcat详解

ORM框架 - MyBatis详解

分库分表 - ShardingSphere

Spring技术栈

SpringFramework框架详解

首先, 从Spring框架的整体架构和组成对整体框架有个认知。

  • Spring进阶 - SpringMVC实现原理之DispatcherServlet初始化的过程
    • 前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第一篇:DispatcherServlet的初始化过程的源码解析。

SpringBoot入门(helloworld,banner,logback,分层设计)

首先,在开始SpringBoot开发时,我们了解一些技术栈背景并通过Hello World级别应用程序开始延伸出SpringBoot入门应用的开发。

  • SpringBoot入门 - SpringBoot 简介
    • 为什么有了SpringFramework还会诞生SpringBoot?简单而言,因为虽然Spring的组件代码是轻量级的,但它的配置却是重量级的;所以SpringBoot的设计策略是通过开箱即用和约定大于配置 来解决配置重的问题的。
  • SpringBoot入门 - 创建第一个Hello world工程
    • 我们了解了SpringBoot和SpringFramework的关系之后,我们可以开始创建一个Hello World级别的项目了。
  • SpringBoot入门 - 对Hello world进行MVC分层
    • 上文中我们创建一个简单的Hello Wold级别的web应用程序,但是存在一个问题,我们将所有代码都放在一个类中的, 这显然是不合理的,那么一个经典的CRUD项目如何分包呢?本文结合常见的MVC分层思路带你学习常见的包结构划分。
  • SpringBoot入门 - 添加内存数据库H2
    • 上文我们展示了通过学习经典的MVC分包结构展示了一个用户的增删查改项目,但是我们没有接入数据库;本文将在上文的基础上,增加一个H2内存数据库,并且通过Spring 提供的数据访问包JPA进行数据查询。
  • SpringBoot入门 - 定制自己的Banner
    • 我们在启动Spring Boot程序时,有SpringBoot的Banner信息,那么如何自定义成自己项目的信息呢?
  • SpringBoot入门 - 添加Logback日志
    • SpringBoot开发中如何选用日志框架呢? 出于性能等原因,Logback 目前是springboot应用日志的标配; 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式。
  • SpringBoot入门 - 配置热部署devtools工具
    • 在SpringBoot开发调试中,如果我每行代码的修改都需要重启启动再调试,可能比较费时间;SpringBoot团队针对此问题提供了spring-boot-devtools(简称devtools)插件,它试图提升开发调试的效率。
  • SpringBoot入门 - 开发中还有哪些常用注解
    • SpringBoot中常用的注解

SpringBoot接口设计和实现(封装,校验,异常,加密,幂等)

接着, 站在接口设计和实现的角度,从实战开发中梳理出,关于接口开发的技术要点。

  • SpringBoot接口 - 如何统一接口封装
    • 在以SpringBoot开发Restful接口时,统一返回方便前端进行开发和封装,以及出现时给出响应编码和信息。
  • SpringBoot接口 - 如何对参数进行校验
    • 在以SpringBoot开发Restful接口时, 对于接口的查询参数后台也是要进行校验的,同时还需要给出校验的返回信息放到上文我们统一封装的结构中。那么如何优雅的进行参数的统一校验呢?
  • SpringBoot接口 - 如何参数校验国际化
    • 上文我们学习了如何对SpringBoot接口进行参数校验,但是如果需要有国际化的信息,应该如何优雅处理呢?
  • SpringBoot接口 - 如何统一异常处理
    • SpringBoot接口如何对异常进行统一封装,并统一返回呢?以上文的参数校验为例,如何优雅的将参数校验的错误信息统一处理并封装返回呢?
  • SpringBoot接口 - 如何提供多个版本接口
    • 在以SpringBoot开发Restful接口时,由于模块,系统等业务的变化,需要对同一接口提供不同版本的参数实现(老的接口还有模块或者系统在用,不能直接改,所以需要不同版本)。如何更加优雅的实现多版本接口呢?
  • SpringBoot接口 - 如何生成接口文档
    • SpringBoot开发Restful接口,有什么API规范吗?如何快速生成API文档呢?
  • SpringBoot接口 - 如何访问外部接口
    • 在SpringBoot接口开发中,存在着本模块的代码需要访问外面模块接口或外部url链接的需求, 比如调用外部的地图API或者天气API。那么有哪些方式可以调用外部接口呢?
  • SpringBoot接口 - 如何对接口进行加密
    • 在以SpringBoot开发后台API接口时,会存在哪些接口不安全的因素呢?通常如何去解决的呢?本文主要介绍API接口有不安全的因素以及常见的保证接口安全的方式,重点实践如何对接口进行签名
  • SpringBoot接口 - 如何保证接口幂等
    • 在以SpringBoot开发Restful接口时,如何防止接口的重复提交呢? 本文主要介绍接口幂等相关的知识点,并实践常见基于Token实现接口幂等。
  • SpringBoot接口 - 如何实现接口限流之单实例
    • 在以SpringBoot开发Restful接口时,当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。在接口层如何做限流呢? 本文主要回顾限流的知识点,并实践单实例限流的一种思路。
  • SpringBoot接口 - 如何实现接口限流之分布式
    • 上文中介绍了单实例下如何在业务接口层做限流,本文主要介绍分布式场景下限流的方案,以及什么样的分布式场景下需要在业务层加限流而不是接入层; 并且结合kailing开源的ratelimiter-spring-boot-starter在新窗口打开为例, 学习思路+代码封装+starter封装

SpringBoot集成MySQL(JPA,MyBatis,MyBatis-Plus)

接下来,我们学习SpringBoot如何集成数据库,比如MySQL数据库,常用的方式有JPA和MyBatis。

  • SpringBoot集成MySQL - 基于JPA的封装
    • 在实际开发中,最为常见的是基于数据库的CRUD封装等,比如SpringBoot集成MySQL数据库,常用的方式有JPA和MyBatis; 本文主要介绍基于JPA方式的基础封装思路。
  • SpringBoot集成MySQL - MyBatis XML方式
    • 上文介绍了用JPA方式的集成MySQL数据库,JPA方式在中国以外地区开发而言基本是标配,在国内MyBatis及其延伸框架较为主流。本文主要介绍MyBatis技栈的演化以及SpringBoot集成基础的MyBatis XML实现方式的实例。
  • SpringBoot集成MySQL - MyBatis 注解方式
    • 上文主要介绍了Spring集成MyBatis访问MySQL,采用的是XML配置方式;我们知道除了XML配置方式,MyBatis还支持注解方式。本文主要介绍SpringBoot+MyBatis注解方式。
  • SpringBoot集成MySQL - MyBatis PageHelper分页
    • 前文中,我们展示了Spring Boot与MyBatis的集成,但是没有展示分页实现。本文专门介绍分页相关知识体系和基于MyBatis的物理分页PageHelper。
  • SpringBoot集成MySQL - MyBatis 多个数据源
    • 前文介绍的SpringBoot集成单个MySQL数据库的情形,那么什么场景会使用多个数据源以及什么场景会需要多个数据源的动态切换呢?本文主要介绍上述场景及SpringBoot+MyBatis实现多个数据源的方案和示例。
  • SpringBoot集成MySQL - MyBatis-Plus方式
    • MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus在国内也有很多的用户,本文主要介绍MyBatis-Plus和SpringBoot的集成。
  • SpringBoot集成MySQL - MyBatis-Plus代码自动生成
    • 本文主要介绍 MyBatis-Plus代码自动生成,以及产生此类代码生成工具的背景和此类工具的基本实现原理。
  • SpringBoot集成MySQL - MyBatis-Plus基于字段隔离的多租户
    • 本文主要介绍 MyBatis-Plus的基于字段隔离的多租户实现,以及MyBatis-Plus的基于字段的隔离方式实践和原理。

SpringBoot集成ShardingJDBC(分表分库,读写分离,多租户)

随着数据量和业务的增长,我们还需要进行分库分表,这里主要围绕ShardingSphere中间件来实现分库分表,读写分离和多租户等。

SpringBoot集成连接池(HikariCP,Druid)

为了提高对数据库操作的性能,引出了数据库连接池,它负责分配、管理和释放数据库连接。历史舞台上出现了C3P0,DBCP,BoneCP等均已经被淘汰,目前最为常用(也是SpringBoot2标配的)是HikariCP,与此同时国内阿里Druid(定位为基于数据库连接池的监控)也有一些市场份额。

SpringBoot集成数据迁移(Liquibase,Flyway)

在实际上线的应用中,随着版本的迭代,经常会遇到需要变更数据库表和字段,必然会遇到需要对这些变更进行记录和管理,以及回滚等等;同时只有脚本化且版本可管理,才能在让数据库实现真正的DevOps(自动化执行 + 回滚等)。在这样的场景下出现了Liquibase, Flyway等数据库迁移管理工具。

  • SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移
    • Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。本文主要介绍SpringBoot与Liquibase的集成。
  • SpringBoot数据库管理 - 用flyway对数据库管理和迁移
    • 上文介绍了Liquibase,以及和SpringBoot的集成。除了Liquibase之外,还有一个组件Flyway也是经常被使用到的类似的数据库版本管理中间件。本文主要介绍Flyway, 以及SpringBoot集成Flyway。

SpringBoot集成PostgreSQL(JPA,MyBatis-Plus,Json)

在企业级应用场景下开源数据库PostgreSQL对标的是Oracle,它的市场份额稳步攀升,并且它在自定义函数,NoSQL等方面也支持,所以PostgreSQL也是需要重点掌握的。

SpringBoot集成Redis(Jedis,Luttue,Redission)

学习完SpringBoot和SQL数据库集成后,我们开始学习NoSQL数据库的开发和集成;最重要的是分布式的缓存库Redis,它是最为常用的key-value库。主要包括早前的Jedis集成,目前常见的Luttue和Redission的封装集成;还包括基于此的Redis分布式锁的实现等。

SpringBoot集成其它NoSQL数据库(MongoDB,ElasticSearch,Noe4J)

SpringBoot集成Websocket(socket,netty)

进一步,我们看下SpringBoot集成Socket

SpringBoot集成定时任务(springtask,quartz,elastic-job,xxl-job)

开发中常用的还有定时任务,我们看下SpringBoot集成定时任务, 包括Timer,ScheduleExecutorService, HashedWheelTimer, Spring tasks, quartz,elastic-job, xxl-job等。

  • SpringBoot集成定时任务 - Timer实现方式
    • 定时任务在实际开发中有着广泛的用途,本文主要帮助你构建定时任务的知识体系,同时展示Timer 的schedule和scheduleAtFixedRate例子;后续的文章中我们将逐一介绍其它常见的与SpringBoot的集成。
  • SpringBoot集成定时任务 - ScheduleExecutorService实现方式
    • 上文介绍的Timer在实际开发中很少被使用, 因为Timer底层是使用一个单线程来实现多个Timer任务处理的,所有任务都是由同一个线程来调度,所有任务都是串行执行。而ScheduledExecutorService是基于线程池的,可以开启多个线程进行执行多个任务,每个任务开启一个线程; 这样任务的延迟和未处理异常就不会影响其它任务的执行了。
  • SpringBoot集成定时任务 - Netty HashedWheelTimer方式
    • Timer和ScheduledExecutorService是JDK内置的定时任务方案,而业内还有一个经典的定时任务的设计叫时间轮(Timing Wheel), Netty内部基于时间轮实现了一个HashedWheelTimer来优化百万量级I/O超时的检测,它是一个高性能,低消耗的数据结构,它适合用非准实时,延迟的短平快任务,例如心跳检测。本文主要介绍时间轮(Timing Wheel)及其使用。
  • SpringBoot集成定时任务 - Spring tasks实现方式
    • 前文我们介绍了Timer和ScheduledExecutorService是JDK内置的定时任务方案以及Netty内部基于时间轮实现的HashedWheelTimer;而主流的SpringBoot集成方案有两种,一种是Spring Sechedule, 另一种是Spring集成Quartz; 本文主要介绍Spring Schedule实现方式。
  • SpringBoot集成定时任务 - 基础quartz实现方式
    • 除了SpringTask,最为常用的Quartz,并且Spring也集成了Quartz的框架。本文主要介绍Quartz和基础的Quartz的集成案例。
  • SpringBoot集成定时任务 - 分布式quartz cluster方式
    • 通常我们使用quartz只是实现job单实例运行,本例将展示quartz实现基于数据库的分布式任务管理,和控制job生命周期。
  • SpringBoot集成定时任务 - 分布式elastic-job方式
    • 前文展示quartz实现基于数据库的分布式任务管理和job生命周期的控制,那在分布式场景下如何解决弹性调度、资源管控、以及作业治理等呢?针对这些功能前当当团队开发了ElasticJob,2020 年 5 月 28 日ElasticJob成为 Apache ShardingSphere 的子项目;本文介绍ElasticJob以及SpringBoot的集成。
  • SpringBoot集成定时任务 - 分布式xxl-job方式
    • 除了前文介绍的ElasticJob,xxl-job在很多中小公司有着应用(虽然其代码和设计等质量并不太高,License不够开放,有着个人主义色彩,但是其具体开箱使用的便捷性和功能相对完善性,这是中小团队采用的主要原因);XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。本文介绍XXL-JOB以及SpringBoot的集成。@pdai

SpringBoot集成视图解析(Thymeleaf,FreeMarker,Velocity,JSP,VueJS)

SpringBoot集成视图解析,包括SpringBoot推荐的Thymeleaf,其它常用的FreeMarker, Velocity, Mustache,甚至JSP;还包括在后端视图的基础上采用主流的前端视图(比如VueJs)的兼容方案等。

  • SpringBoot集成视图 - 集成Thymeleaf视图解析
  • SpringBoot集成视图 - 集成FreeMarker视图解析
  • SpringBoot集成视图 - 集成Velocity视图解析
  • SpringBoot集成视图 - 集成Mustache视图解析
  • SpringBoot集成视图 - 集成JSP视图解析
  • SpringBoot集成视图 - 集成后端视图+VueJS解析

SpringBoot集成缓存(Caffeine,EhCache,CouchBase)

  • SpringBoot + Spring Cache + ConcurrentMap
  • SpringBoot + Spring Cache + EHCache
  • SpringBoot + Spring Cache + Redis
  • SpringBoot + Spring Cache + Caffeine
  • SpringBoot + Spring Cache + CouchBase

SpringBoot集成认证授权(SpringSecurity,Shiro,Oauth2,SA-Token,Keycloak)

  • SpringBoot + Shiro
  • SpringBoot + Spring Security
    • 常规实现
    • Oauth2
  • SpringBoot + SA-Token
  • SpringBoot + Keycloak
  • SpringBoot + 登录验证码
    • AJ_Captcha

SpringBoot集成文档操作(上传,PDF,Excel,Word)

开发中常见的文档操作,包括文件的上传和下载,上传又包含大文件的处理;针对不同的文档类型又有些常见的工具,比如POI及衍生框架用来导出Excel, iText框架用来导出PDF等。

  • SpringBoot集成文件 - 基础的文件上传和下载
    • 项目中常见的功能是需要将数据文件(比如Excel,csv)上传到服务器端进行处理,亦或是将服务器端的数据以某种文件形式(比如excel,pdf,csv,word)下载到客户端。本文主要介绍基于SpringBoot的对常规文件的上传和下载,以及常见的问题等。
  • SpringBoot集成文件 - 大文件的上传(异步,分片,断点续传和秒传)
    • 上文中介绍的是常规文件的上传和下载,而超大文件的上传技术手段和普通文件上传是有差异的,主要通过基于分片的断点续传和秒传和异步上传等技术手段解决。本文主要介绍SpringBoot集成大文件上传的案例。
  • SpringBoot集成文件 - 集成POI之Excel导入导出
    • Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。本文主要介绍通过SpringBoot集成POI工具实现Excel的导入和导出功能。
  • SpringBoot集成文件 - 集成EasyExcel之Excel导入导出
    • EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。它能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。它是基于POI来封装实现的,主要解决其易用性,封装性和性能问题。本文主要介绍通过SpringBoot集成EasyExcel实现Excel的导入,导出和填充模板等功能。
  • SpringBoot集成文件 - 集成EasyPOI之Excel导入导出
    • 除了POI和EasyExcel,国内还有一个EasyPOI框架较为常见,适用于没有使用过POI并希望快速操作Excel的入门项目,在中大型项目中并不推荐使用(为了保证知识体系的完整性,把EasyPOI也加了进来)。本文主要介绍SpringBoot集成EasyPOI实现Excel的导入,导出和填充模板等功能。
  • SpringBoot集成文件 - 集成POI之Word导出
    • 前文我们介绍了通过Apache POI导出excel,而Apache POI包含是操作Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。所以也是可以通过POI来导出word的。本文主要介绍通过SpringBoot集成POI工具实现Word的导出功能。
  • SpringBoot集成文件 - 集成POI-tl之基于模板的Word导出
    • 前文我们介绍了通过Apache POI通过来导出word的例子;那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。本文主要介绍通过SpringBoot集成poi-tl实现模板方式的Word导出功能。
  • SpringBoot集成文件 - 集成itextpdf之导出PDF
    • 除了处理word, excel等文件外,最为常见的就是PDF的导出了。在java技术栈中,PDF创建和操作最为常用的itext了,但是使用itext一定要了解其版本历史和License问题,在早前版本使用的是MPL和LGPL双许可协议,在5.x以上版本中使用的是AGPLv3(这个协议意味着,只有个人用途和开源的项目才能使用itext这个库,否则是需要收费的)。本文主要介绍通过SpringBoot集成itextpdf实现PDF导出功能。
  • SpringBoot + 集成PDFBox之PDF操作
  • SpringBoot + 集成OpenOffice之文档在线预览
    • https://blog.csdn.net/shipfei_csdn/article/details/105141487
  • SpringBoot + 集成LibreOffice之文档在线预览
  • SpringBoot + 集成kkfileview之文档在线预览
    • https://kkfileview.keking.cn

SpringBoot集成消息队列(ActiveMQ,RabbitMQ,ZeroMQ,Kafka)

  • SpringBoot + ActiveMQ
  • SpringBoot + RabbitMQ
  • SpringBoot + ZeroMQ
  • SpringBoot + Kafka

SpringBoot集成通知(Email,短信,钉钉,微信)

  • SpringBoot + 邮件
  • SpringBoot + 钉钉
  • SpringBoot + 微信
  • SpringBoot + 短信

SpringBoot集成文件系统(minIO,aliyun,tencentCloud,FastDFS)

  • SpringBoot + MinIO
  • SpringBoot + aliyun
  • SpringBoot + TecentCloud
  • SpringBoot + FastDFS

SpringBoot集成工作流引擎(activi,jBPM,flowable)

  • SpringBoot + activi
  • SpringBoot + jBPM
  • SpringBoot + flowable

SpringBoot集成其它功能(支付,OPC-UA,JavaFX2)

除了上述的常见的业务上的集成功能外,还有哪些功能或者应用呢?

  • SpringBoot集成JavaFX2 - JavaFX 2.0应用
    • 很多人对Java开发native程序第一反应还停留在暗灰色单一风格的Java GUI界面,开发方式还停留在AWT或者Swing。本文主要基于SpringBoot和JavaFX开发一个Demo给你展示Java Native应用可以做到什么样的程度。当然JavaFX 2.0没有流行起来也是有原因的,而且目前native的选择很多,前端是个框架都会搞个native...
  • SpringBoot + 支付
  • SpringBoot + OPC-UA
  • ...

SpringBoot应用部署(jar,war,linux,docker,docker-compose)

那么如何将SpringBoot应用打包并部署呢?打包主要有jar,war两种方式;部署包含在linux或者windows上制作成服务,以及制作成docker进行部署;此外也可以结合CI/CD 环境进行部署。

  • SpringBoot应用部署 - 打包成jar部署
    • 我们知道spring-boot-starter-web默认已经集成了web容器(tomcat),在部署前只需要将项目打包成jar即可。那么怎么将springboot web项目打包成jar呢?本文主要介绍常见的几种方式。
  • SpringBoot应用部署 - 使用第三方JAR包
    • 在项目中我们经常需要使用第三方的Jar,比如某些SDK,这些SDK没有直接发布到公开的maven仓库中,这种情况下如何使用这些三方JAR呢?本文提供最常用的两种方式。
  • SpringBoot应用部署 - 打包成war部署
    • 前文我们知道SpringBoot web项目默认打包成jar部署是非常方便的,那什么样的场景下还会打包成war呢?本文主要介绍SpringBoot应用打包成war包的示例。
  • SpringBoot应用部署 - 替换tomcat为Jetty容器
    • 前文我们知道spring-boot-starter-web默认集成tomcat servlet容器(被使用广泛);而Jetty也是servlet容器,它具有易用性,轻量级,可拓展性等,有些场景(Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境)下会使用jetty容器。本文主要介绍SpringBoot使用Jetty容器。
  • SpringBoot应用部署 - 替换tomcat为Undertow容器
    • 前文我们了解到Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境;那么从性能的角度来看,更为优秀的servlet容器是Undertow。本文将介绍Undertow,以及SpringBoot集成Undertow的示例。
  • SpringBoot应用部署 - 在linux环境将jar制作成service
    • 前文我们将SpringBoot应用打包成jar,那么如何将jar封装成service呢?本文主要介绍将SpringBoot应用部署成linux的service。
  • SpringBoot应用部署 - 在windows环境将jar制作成service
    • 前文我们将SpringBoot应用打包成jar并在Linux上封装成service,那么在Windows环境下如何封装呢?本文主要介绍将SpringBoot应用部署成Windows的service。
  • SpringBoot应用部署 - docker镜像打包,运行和管理
    • 随着软虚拟化docker的流行,基于docker的devops技术栈也开始流行。本文主要介绍通过docker-maven-plugin将springboot应用打包成docker镜像,通过Docker桌面化管理工具或者Idea Docker插件进行管理。
  • SpringBoot应用部署 - 使用Docker Compose对容器编排管理
    • 如果docker容器是相互依赖的(比如SpringBoot容器依赖另外一个MySQL的数据库容器),那就需要对容器进行编排。本文主要介绍基于Docker Compose的简单容器化编排SpringBoot应用。

SpringBoot集成监控(actuator,springboot-admin,ELK,Grafana,APM)

SpringBoot集成监控,包括SpringBoot自带的actuator,基于actuator的可视化工具springboot admin。监控的日志体系技术栈ELK,监控状态和指标收集prometheus+Grafana,基于Agent的APM性能监控等。

  • SpringBoot集成监控 - 集成actuator监控工具
    • 当SpringBoot的应用部署到生产环境中后,如何监控和管理呢?比如审计日志,监控状态,指标收集等。为了解决这个问题,SpringBoot提供了Actuator。本文主要介绍Spring Boot Actuator及实现案例。
  • SpringBoot集成监控 - 集成springboot admin监控工具
    • 上文中展示了SpringBoot提供了Actuator对应用进行监控和管理, 而Spring Boot Admin能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。 本文主要介绍springboot admin以及SpringBoot和springboot admin的集成。
  • SpringBoot集成监控 - 日志收集(ELK)
  • SpringBoot集成监控 - 状态监控(Prometheus+Grafana)
  • SpringBoot集成监控 - 性能监控(APM Agent)

SpringBoot进阶(starter,自动装配原理,各类机制等)

SpringBoot进阶


开发与工具

开发百宝箱(常用资源)

开发工具清单


开发工具详解


Linux相关

Linux 基础和常用工具总结。

  • Linux - Linux基础知识
    • Linux基础知识学习梳理
  • Linux - Linux 常用
    • 本文记录常用的Linux命令, 主要使用CentOS7
  • Linux - Curl使用
    • 主要总结Linux Curl的一些常见用法
  • Linux - Linux创建自建服务
    • 以打包自己开发的Java应用到Linux服务器,作为一个服务启动,并开启自启。
  • Linux - 内存分析工具pmap
    • pmap工具是linux的工具,能够查看进程用了多少内存,还能分析内存用在上面环节,对于一些长期占用内存居高不下的程序可以分析其行为,命令简单,信息简洁。
  • Linux - 零拷贝技术
    • 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。
  • Linux - ab压力测试
    • ab是apachebench命令的缩写, apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。

Docker相关

  • Docker - Overview
  • 虚拟化技术 - Docker Vs. 虚拟机
    • 人们为了提高系统及硬件资源的利用率而引入了虚拟化技术。虚拟化是一种资源管理技术,它可以各种实体资源抽像后再分隔,从而打破实体结构的限制,最大程度的提高资源的利用率。Docker属于软件虚拟化技术中的操作系统层虚拟化技术,它是基于LXC实现的一个应用容器引擎,Docker让开发者可以打包他们的应用及依赖环境到一个可移植的容器中,然后可以将这个容器快速部署开发、测试或生产环境中。了解本文从三个问题着手,什么是虚拟化技术,docker和虚拟机区别,docker可以用来做什么?
  • Docker基础 - 入门基础和Helloworld
    • 在了解了虚拟化技术和Docker之后,让我们上手Docker,看看Docker是怎么工作的。这里会介绍CentOS环境下Docker的安装和配置,以及会给你展示两个实例,给你一个直观的理解。再啰嗦下,有条件的情况下直接看官网在新窗口打开, 网上资料鱼龙混杂,版本也更新不及时。
  • Docker基础 - 仓库,镜像,容器详解
    • 本文将从仓库,镜像,容器三个方面讲解常用的docker命令和使用等,对于开发而言这块使用的
  • Docker基础 - 一个web应用运行实例
    • 通过上文我们已经基本了解了docker的结构(仓库,镜像,容器)以及跑docker应用了;本文将通过介绍一个web应用:向你展示如何进行主机与web容器之间的通信,这是web开发者常用的;第二,贯穿上文中内容, 且为我们后续讲解网络提供基础
  • Docker基础 - Docker网络使用和配置
    • 上文已经向你介绍了,web容器创建和容器互联了,但是容器之间为什么可以直接通信?主机和容器之间为何可以通信?如何进行自定义的配置呢?所以这节就是我们要讲述的Docker网络。
  • Docker基础 - Docker数据卷和数据管理
    • Docker 容器的数据放哪里呢? 本文带你理解如何在 Docker 内部以及容器之间管理数据。

开发与方法论

开发原则,流程,协议

相关文章

  • 软件开发中的原则 - SOLID
    • 在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义。本文主要将总结这些常见的原则,和具体阐述意义。
  • 分布式理论 - CAP
    • CAP理论是分布式系统、特别是分布式存储领域中被讨论的最多的理论。其中C代表一致性 (Consistency),A代表可用性 (Availability),P代表分区容错性 (Partition tolerance)。CAP理论告诉我们C、A、P三者不能同时满足,最多只能满足其中两个。
  • 分布式理论 - BASE
    • BASE是“Basically Available, Soft state, Eventually consistent(基本可用、软状态、最终一致性)”的首字母缩写。其中的软状态和最终一致性这两种技巧擅于对付存在分区的场合,并因此提高了可用性。
  • 事务理论 - ACID
    • 事务的四个基本特性
  • 康威定律 - 微服务基础
    • 微服务这个概念很早就提出了, 真正火起来是在2016年左右,而康威定律(Conway's Law)就是微服务理论基础。本文整理自肥侠的文章, 帮助大家理解微服务理论体系
  • 开发流程详解
    • 谈谈我常见的敏捷开发流程的理解
  • 开源协议详解
    • 开源不等于免费!为了加速我们的开发,我们会使用开源的软件和源码; 为避免商业风险,需要在使用时了解第三方如软件协议,版本,和已知CVE风险等;本文旨在从开源软件再发布过程使用权限的角度入手,总结各个常见开源协议的异同,方便理解。
  • 知识共享协议CC 4.0
    • 本文主要介绍知识共享许可协议,及本站遵守的多数站点会采用的知识共享协议CC BY-NC-SA 4.0协议,即署名-非商业性使用-相同方式共享协议。

代码规范

相关文章


设计模式

在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义。本文主要将对24种设计模式和7个设计原则进行总结,和具体阐述意义。你可以通过这篇文章设计模式 - Overview 了解整体上的知识点。

知识体系系统性梳理

相关文章

第一步:创建型设计模式

  • 创建型 - 单例模式(Singleton pattern)
    • 单例模式(Singleton pattern): 确保一个类只有一个实例,并提供该实例的全局访问点, 本文介绍6中常用的实现方式
  • 创建型 - 简单工厂(Simple Factory)
    • 简单工厂(Simple Factory),它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化,这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类
  • 创建型 - 工厂方法(Factory Method)
    • 工厂方法(Factory Method),它定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类
  • 创建型 - 抽象工厂(Abstract Factory)
    • 抽象工厂(Abstract Factory),抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同
  • 创建型 - 生成器(Builder)
    • 生成器(Builder),封装一个对象的构造过程,并允许按步骤构造
  • 创建型 - 原型模式(Prototype)
    • 原型模式(Prototype),使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象

第二步:结构型设计模式

  • 结构型 - 外观(Facade)
    • 外观模式(Facade pattern),它提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用
  • 结构型 - 适配器(Adapter)
    • 适配器模式(Adapter pattern): 将一个类的接口, 转换成客户期望的另一个接口。 适配器让原本接口不兼容的类可以合作无间。 对象适配器使用组合, 类适配器使用多重继承
  • 结构型 - 桥接(Bridge)
    • 桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变
  • 结构型 - 组合(Composite)
    • 组合模式(composite pattern): 允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合
  • 结构型 - 装饰(Decorator)
    • 装饰者模式(decorator pattern): 动态地将责任附加到对象上, 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案
  • 结构型 - 享元(Flyweight)
    • 享元模式(Flyweight Pattern): 利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 它让某个类的一个实例能用来提供许多"虚拟实例"
  • 结构型 - 代理(Proxy)
    • 代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问

第三步:行为型设计模式

  • 行为型 - 责任链(Chain Of Responsibility)
    • 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象
  • 行为型 - 策略(Strategy)
    • 策略模式(strategy pattern): 定义了算法族, 分别封闭起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户
  • 行为型 - 模板方法(Template Method)
    • 模板方法模式(Template pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤
  • 行为型 - 命令模式(Command)
    • 命令模式(Command pattern): 将"请求"封闭成对象, 以便使用不同的请求,队列或者日志来参数化其他对象. 命令模式也支持可撤销的操作
  • 行为型 - 观察者(Observer)
    • 观察者模式(observer pattern): 在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新
  • 行为型 - 访问者(Visitor)
    • 访问者模式(visitor pattern): 当你想要为一个对象的组合增加新的能力, 且封装并不重要时, 就使用访问者模式
  • 行为型 - 状态(State)
    • 状态模式(State pattern): 允许对象在内部状态改变时改变它的行为, 对象看起来好象改了它的类
  • 行为型 - 解释器(Interpreter)
    • 解释器模式(Interpreter pattern): 使用解释器模式为语言创建解释器,通常由语言的语法和语法分析来定义
  • 行为型 - 迭代器(Iterator)
    • 迭代器模式(iterator pattern): 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示
  • 行为型 - 中介者(Mediator)
    • 中介者模式(Mediator pattern) : 使用中介者模式来集中相关对象之间复杂的沟通和控制方式
  • 行为型 - 备忘录(Memento)
    • 备忘录模式(Memento pattern): 当你需要让对象返回之前的状态时(例如, 你的用户请求"撤销"), 你使用备忘录模式

架构与系统设计

学习思路

架构基础与方法论

相关文章

A. 架构基础 - 基础知识:首先带你梳理下架构中有哪些知识点,如何学习架构,并向你介绍架构相关基础知识。

B. 架构基础 - 理解架构:然后带你从构架的视角,架构的演进,架构的服务演化等角度分析架构的维度; 而架构的模式即方法论总结,架构的核心要素是我们架构实现的目标。

  • 架构 - 理解构架的视角
    • 在学习架构时,我认为首先要理清楚架构的视角,因为你所认知的架构和别人所说的架构可能是两码事。对于不同职位的视角是不一样的,比如开发而言他更多的看到的是开发架构;对售前人员,他可能更多的看到的是业务架构;对于运维人员,他看到的可能是运维架构;而对于技术支持和部署人员,他更多的看到的网络和物理架构。
  • 架构 - 理解架构的演进
    • 在学习架构时,第一步不要去学习框架,而是要学习架构的演进。强烈推荐李智慧老师的《大型网站技术架构》,这本书翻起来很快,对构筑你自己的体系很有帮助,本文的内容来源于它,在此基础上拓展了下。
  • 架构 - 理解架构的服务演化
    • Kubernetes、Service Mesh 和 Serverless应该是最近比较火的了,而上文主要从逻辑架构角度分析了架构演进,本文将从服务演化容器编排化的角度帮你增强对架构演进的认识。
  • 架构 - 理解架构的模式1
    • 架构演进中有很多知识点,总体上可以归结为以下模式,这里说的模式本质是架构中技术点的抽象。强烈推荐李智慧老师的《大型网站技术架构》,本文的内容也是来源于它,在此基础上拓展了下。
  • 架构 - 理解架构的模式2
  • 架构 - 理解架构的核心要素
    • 一般来说软件架构需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素

架构技术点详解

相关文章

C. 架构技术点详解:紧接着对于高并发和高可用,高性能,具体阐述其中涉及的知识点,比如:缓存,限流,降级和熔断,负载均衡,容灾备份,故障转移。

  • 架构之高并发:缓存
    • 高并发实现的三板斧:缓存,限流和降级。缓存在高并发系统中有者极其广阔的应用,需要重点掌握,本文重点介绍下缓存及其实现。
  • 架构之高并发:限流
    • 每个系统都有服务的上线,所以当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。限流其实就是:当高并发或者瞬时高并发时,为了保证系统的稳定性、可用性,系统以牺牲部分请求为代价或者延迟处理请求为代价,保证系统整体服务可用。
  • 架构之高并发:降级和熔断
    • 在高并发环境下,服务之间的依赖关系导致调用失败,解决的方式通常是: 限流->熔断->隔离->降级, 其目的是防止雪崩效应
  • 架构之高可用:负载均衡
    • 负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
  • 架构之高可用:容灾备份,故障转移
    • 容灾技术是系统的高可用性技术的一个组成部分,容灾系统更加强调处理外界环境对系统的影响,特别是灾难性事件对整个IT节点的影响,提供节点级别的系统恢复功能。故障转移(failover),即当活动的服务或应用意外终止时,快速启用冗余或备用的服务器、系统、硬件或者网络接替它们工作。故障恢复是在计划内或计划外中断解决后切换回主站点的过程。

此外还需要关注下架构的安全。

产品与团队

技术人通常沉溺于技术的本身,高估了技术本身的价值,而忽视了其它要素的重要性。@pdai

技术之外,我认为技术人应该至少对如下方面同样提升自己的认知:

  • 从产品的角度:产品的本身是解决人性上的需求等
  • 从个人的角度:自身成长,身心建设,认知提升,相关理论等
  • 从团队的角度:承认个体的局限性,关注其它角色和要素的重要性等
  • 从生活的角度:与上面几点而言,生活的本身才是最重要的,保持身心健康,去爱你所爱,不虚此生

个人成长

个人成长相关

  • 知识体系:如何构建自己的知识体系
    • 这个网站区别于其它博客和公众号是期望构建知识体系,构建知识体系帮助了我很大程度上提升了认知效率。偶然看到36氪分享的一篇文章,也是关于如何构建知识体系的,基本和我的做法一致,现在分享给大家。
  • 自我迭代:从复盘中获得自我迭代
    • 在工作学习生活中,一味的埋头苦干是不行的,如何实现快速的自我迭代,一定是复盘 - 对做过的事加以回顾,从中探寻规律、总结经验、提升解决问题的能力!知乎上有一个相关的讨论在新窗口打开,本文站在个人复盘的角度总结一些经验(复盘最重要的还是自我实践,然后持之以恒,当然首先要对自己诚实)。
  • 如何提问:提问的智慧
    • 平时我们工作学习中都会遇到很多问题,如何更好的提问,从而促进问题的解决呢?问对问题才有会有正确的答案。这里强烈推荐看这篇《提问的智慧》,本文翻译自How To Ask Questions The Smart Way在新窗口打开,原文在GitHub有几万的赞,足以见得本文被推崇的程度。
  • 问题分析:5W2H分析法
    • 平时遇到问题,如何应用一些分析方法来帮助我们系统性思考呢?5W2H分析法。
  • 人的需求:马斯洛需求模型
    • 人都潜藏着各种需求,作为团队中一员或者团队的管理者,如果能从人核心的需求出发,解决他的底层需求,就能增强团队的满足感。
  • 个人价值:个人价值冰山模型
    • 你的收入是由什么决定呢, 站在理论角度如何提高收入呢?这里分享一篇文章主要从冰山模型谈个人价值、个人回报。
  • 人生效率:如何做好人生效率管理
    • 虽然我也鼓励别人积极学习生活,但是时常也会焦虑,那么如何去调整心态,积极的去面对呢?这里分享一篇 PM熊叔 的文章《如何做好人生效率管理》,一起做好人生效率的管理,一起共勉。
  • 思维模型:查理芒格推荐的100个思维模型
    • 我对查理芒格的《穷查理宝典》印象比较深的一个观点是:在手里拿着一把锤子的人眼中,世界就像一颗钉子。大多数人试图以一种思维模型来解决所有问题,而其思维往往只来自某一专业学科;但你必须要知道各种重要学科的重要理论,才能洞察问题本质。本文标题就不去纠结了,100个思维模式可以供你参考。
  • 年轻心态:张一鸣 - Stay hungry, Stay young
    • 张一鸣在“2016今日头条Bootcamp”上对研发&产品部门应届毕业生发表了题目为“Stay hungry, Stay young”的演讲。多年以后来看,他提的优秀年轻人的五个特质很值得年轻人深思,同样也适合工作老鸟保持年轻的心态
  • 反内耗:停止心理内耗才能变更强
    • 真正厉害的人,都是“反内耗”体质,只有停止心理内耗,这样才会一步步变强。很多人抱怨开发越来越卷,而实际上多数人的卷来源自己的'内心的卷'(心理上的内耗),本文主要转载自知乎上一个关于人是如何变强的回答,希望能给你一些启发。

产品相关

产品相关

  • 张小龙:微信背后的产品观
    • 之前虎嗅曾发表了“和菜头”写的《张小龙:微信背后的产品观》。那篇文章虽基于张小龙的产品经验分享,其实相当多的内容是来自和菜头本人的理解,现在,虎嗅再根据点点网CEO许朝军的博客内容,把张小龙的现场分享实录呈现给大家。
  • Martin Fowler: 关注成效而非产出
    • 近两年pdai所接触到的项目,很多功能并没有解决用户的痛点,而只是开发设计人员觉得它应该有,这些应该有的背后其实就是Martin Fowler所反对的,他的观点是我们应该关注成效而非产出(用代码量、功能点、还是用户故事) 。本文转载了TW翻译的Martin Fowler的这篇文章,希望能给你带来启发。
  • 产品歪楼:如何做好产品决策中的内部环境分析
    • 很多时候,产品经理在做产品的过程中,发现产品做着做着就歪楼了,然后就开始烂尾。有些时候,你或许经常会像彩霞仙子一样感叹:“我猜中了开头,却没有猜中者结局!”

团队相关

团队相关

  • 华为:软件开发团队如何管理琐碎、突发性任务
    • 如何管理琐碎、突发性任务? 请看华为团队的分享。
  • 张一鸣:做CEO要避免理性的自负
    • “Context,not Control”。 成功的创业者必然会面对公司从小变大的结果。CEO作为创造者与执掌者,需要不断更新自我,及时应对公司发展带来的管理挑战。在源码资本2017年码会上,今日头条创始人CEO张一鸣为码会高低年级的同学分享重量级管理心得:做CEO要避免理性的自负。
  • 美团: 研发团队资源成本优化实践
    • 很多管理者在业务发展的较前期阶段,可能并没有意识到资源成本膨胀所带来的压力。等到业务到了一定规模,拿到机器账单的时候,惊呼“机器怎么这么费钱”,再想立即降低成本,可能已经错过了最佳时机,因为技术本身是一个相对长期的改造过程。资源成本优化宜早不宜迟。本文我们将分享美团到餐研发团队的资源成本优化实践。
  • 哈啰:团队过程管理演进之路
    • 职能团队依据业务领域需要划分为跨职能团队,怎么让团队运转起来?怎么组织跨团队的事情?怎么提升团队的自组织能力?怎么了解团队的效能情况?怎么拉通价值流上的角色?本文为你阐述团队管理的进化、精细化之路。本文主要分享哈啰技术团队的文章。

其它分享

其它分享


关于本站点和我

感恩

感恩活着,感谢岁月静好。@pdai

关于我

A. 关于我:如果你我本人以及我是如何构建知识体系等,可以在如下章节中了解。

相关文章

  • 关于 - 我
    • 你的时间花在哪里,你的收获就在哪里。技术只是技术,生活中的一小部分,仅此而已
    • 等在合适的时机会放出我的微信,并且会建学习讨论圈,尽请期待
  • 关于 - 赞赏❤️的用途
    • 感谢各位读者的支持,能感受到每个留言和每一笔赞赏背后的热情❤️,这是我坚持的动力。我特意整理了超过20元的赞赏者和留言(因为无法导出赞赏记录,我是一条条找记录一个字一个字输入的,只能保留一相对靠前的,以示我对赞赏者的敬意;后续每一笔超过20元的赞赏和留言都会持续记录...)
  • 关于 - 如何构建知识体系
    • 本文主要小结下我在构建一个知识体系时的思考
  • 关于 - 如何自我驱动
    • 本文主要介绍我总结这个知识体系所用的工具栈和自我驱动(类似于公司里敏捷开发)

关于本站点:内容,构建和部署

B. 关于本站点:如果你对这个站点感兴趣,可以在如下章节了解,包含排版,搭建,编译,部署,域名,https以及备案等。

相关文章