Skip to content

Latest commit

 

History

History
1684 lines (1235 loc) · 135 KB

README.md

File metadata and controls

1684 lines (1235 loc) · 135 KB

architecture road

The path to growth of architects

索引

  • 语言
  • 架构
  • 系统
  • 工具
  • 大前端
  • 运维
  • 综合

教程

一些语言、框架、平台、环境、工具的相关教程

  • hello-world - 每种语言下的 hello-world 示例
  • awesome - 精选列表的精选列表

Java

Python

Go

JavaScript

TypeScript

Shell

Android

Kotlin

CSS

  • 30-seconds-of-css - 精选的有用CSS片段集合,您可以在30秒或更短的时间内理解这些片段
  • magic-of-css - 一门CSS课程,让你成为一名魔术师

React.js

Vue.js

Node.js

Linux

框架

一些好用、热门的框架

Java

IO

  • javapoet - 用于生成.java源文件的Java API
  • okio - 适用于Java的现代I/O API

Thread

Net

Reflection

Spring

IOC

  • guice - Google为您带来的Java 6及更高版本的轻量级依赖注入框架

ORM

  • ORM框架使用优缺点 - ORM框架使用优缺点,主要目的是为了提高开发效率
  • mybatis-3 - 用于JavaMyBatis SQL映射器框架
  • mybatis缓存机制详解 - 一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效;二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的;使用 LRU 机制清理缓存,通过 cacheEnabled 参数开启
  • MyBatis学习之代码生成器Generator - MyBatis学习之代码生成器Generator
  • Spring data JPA - Hibernate二次封装,开发效率高,自动帮你完成很多东西
  • JOOQ - DSL写法,有点类似动态语言了,感觉中小项目用起来会很爽
  • spring data mongo - 类似spring data jpa,开发效率高,复杂操作使用MongoTemplate

Parser

  • jsoup - Java HTML Parser,具有最好的DOM、CSSjquery
  • antlr4 - ANTLR是一个功能强大的解析器生成器,用于读取,处理,执行或翻译结构化文本或二进制文件
  • jansi - Jansi是一个小型java库,允许您使用ANSI转义序列来格式化控制台输出,甚至可以在Windows上运行

Serialization

  • fastjson - 用于Java的快速JSON解析器/生成器
  • protostuff - Java序列化库,proto编译器,代码生成器
  • FlatBuffers - 相较于Protocol Buffers,其更适用于移动设备
  • protobuf - 高性能,跨语言,也是google出品
  • jprotobuf - 针对Java程序开发一套简易类库,目的是简化java语言对protobuf类库的使用
  • FST - 重新实现的Java快速对象序列化的开发包,序列化速度更快、体积更小,而且兼容JDK原生的序列化
  • Kryo - 快速高效的Java序列化框架,支持论文件、数据库或网络数据,自动深拷贝、浅拷贝
  • MessagePack - 基于二进制高效的对象序列化类库,跨语言,比JSON更快速也更轻巧
  • thrift - 跨语言,不仅仅包括序列化,是一个远程服务调用框架,facebook开源

Validator

Template Engine

Connect Pool

  • druid - 阿里巴巴数据库事业部出品,为监控而生的数据库连接池
  • HikariCP - 性能最高的数据库连接池

Cache

  • AutoLoadCache - AutoLoadCache 是基于AOP+Annotation等技术实现的高效的缓存管理解决方案,实现缓存与业务逻辑的解耦,并增加异步刷新及“拿来主义机制”,以适应高并发环境下的使用

Search

  • ElasticSearch - 基于Lucene RESTful web接口的搜索服务器
  • Solr - 高性能,基于Lucene的全文搜索服务器
  • Lucene - 一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎
  • Nutch - 提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬虫

Crawler

  • gecco - 易用的轻量化网络爬虫
  • webmagic - 适用于Java的可扩展Web爬网程序框架
  • WebMagic - 国产,完全模块化的设计,支持多线程抓取,分布式抓取,并支持自动重试、自定义UA/cookie等功能
  • Heritrix - 最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑
  • jsoup - 一款JavaHTML解析器,可直接解析URL地址、HTML文本内容
  • crawler4j - 提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫
  • WebCollector - 一个无须配置、便于二次开发爬虫内核,它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫

Barcode

  • zxing - ZXing(Zebra Crossing)用于Java/Android的条形码扫描库

Analysis

  • elasticsearch-analysis-ik - IK Analysis插件将Lucene IK分析器集成到elasticsearch中,支持自定义词典
  • ansj_seg - ansj分词.ict的真正java实现。分词效果速度都超过开源版的ict, 中文分词、人名识别、词性标注、用户自定义词典
  • HanLP - 自然语言处理、中文分词、词性标注、命名实体识别、依存句法分析、新词发现、关键词短语提取、自动摘要、文本分类聚类、拼音简繁

Events

  • Vert.x - Vert.x是一个用于在JVM上构建响应式应用程序的工具包。Vert.x框架基于事件和异步,依托于全异步Java服务器Netty,并扩展了很多其他特性,以其轻量、高性能、支持多语言开发而备受开发者青睐

Tests

  • mockito - 用Java编写的单元测试最流行的Mocking框架,允许使用自动化的单元测试创建和测试双对象,以达到测试驱动开发和行为驱动开发的目的
  • JUnit - 最常使用的单元测试工具
  • TestNG - 主要功能是覆盖范围更广的测试分类,如单元、功能性、端到端,一体化等

Utils

Native

  • java-native-access/jna - JNAJava程序提供了对本机共享库的轻松访问,而无需编写除Java代码之外的任何内容,JNA允许您使用自然Java方法调用直接调用本机函数

Log

RPC

  • grpc-java - Java gRPC实现,基于HTTP/2RPC

RESTful

  • spring mvc - 类加个@RestController或者方法加个@ResponseBody
  • jersey - 实现了JAX-RS规范
  • resteasy - JBoss项目,实现了JAX-RS规范,性能高

Message Queue

  • ActiveMQ - 完全支持JMS1.1J2EE 1.4规范的消息队列
  • RabbitMq - Erlang编写,在AMQP基础上完整的,可复用的企业消息系统
  • kafka - scala编写的高吞吐量的分布式发布订阅消息系统,常用于日志
  • RocketMQ - 阿里巴巴的MQ中间件,在其多个产品下使用,并能够撑住双十一的大流量
  • Apache Pulsar - 雅虎开发的企业级的发布订阅消息系统
  • Apache DistributedLog - Twitter开发的一个低延时(毫秒级)、高吞吐的分布式复制日志流系统

Bytecode

  • ASM - 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类、性能高,但不如javassist简单
  • Javassist - 是一个开源的分析、编辑和创建Java字节码的类库,无须了解JVM指令,java编码即可
  • jd-gui - java反编译
  • jbe - java字节码修改工具

Python

Log

  • loguru - Python日志记录变得简单

Cli

  • tqdm - Python 可快速扩展的CLI进度条
  • termgraph - 一个python命令行工具,它在终端中绘制基本图形

Crawler

  • scrapy - Scrapy一个用于Python的快速高级Web爬行和抓取框架

Web Framework

  • flask - 用于构建Web应用程序的Python微框架
  • django - Web框架

Go

  • go-ansi - Go语言的Windows可移植ANSI转义序列实用程序
  • sarama - SaramaApache Kafka 0.8Go
  • ansi - 小而快的库,用于创建ANSI彩色字符串和代码
  • urfave/cli - 一个简单,快速,有趣的包,用于在Go中构建命令行应用程序
  • machinery - go的分布式任务队列
  • cobra - CLI命令行库,也可用于生成程序应用和命令行文件
  • iris - 支持http2,websocket,MVC的高性能框架
  • go-kit - 微服务开发工具集
  • protoactor-go - 的Actor模型并发库
  • uber-go/dig - 依赖注入
  • pkg/errors - 异常处理库
  • Dragonboat - 高性能raft
  • revive - 代码质量检测工具
  • gotests - 快速生成单元测试的命令行工具
  • casbin - 开源访问控制框架,支持ACL, RBAC, ABAC

JavaScript

  • grpc-web - GolangTypeScriptgRPC Web实现
  • grpc-web - 适用于Web客户端的gRPC
  • dayjs - Day.js 2KB不可变日期库替代Moment.js,具有相同的现代API
  • ReLaXed - 使用Web技术创建PDF文档
  • standard - JavaScript 代码规范,自带 linter 代码自动修正

Shell

  • jq - 从文本JSON字符串读取数据的shell 工具
  • oh-my-zsh - 一个令人愉快的社区驱动(有1,200多个贡献者)框架,用于管理zsh配置。包括200多个可选插件(railsgitOSXhubcapistranobrewantphppython等),超过140个主题,还有一个自动更新工具,使其易于跟上随着社区的最新更新

CSS

  • NES.css - NES.css 是一款 NES-风格(8位机)CSS 框架

Node

Deno

UI

  • Tencent/weui - WeChat官方设计团队的UI库包括移动Web应用程序中最有用的小部件/模块
  • sdc-alibaba/SUI-Mobile - 阿里巴巴国际UED前端出品的移动端UI库,轻量精美

应用

一些好用、热门的应用

Java

  • auto - Java的源代码生成器的集合
  • hsweb-framework - hsweb是一个用于快速搭建企业后台管理系统的基础项目,集成一揽子便捷功能
  • arthas - Java诊断利器Arthas

热加载

Node

  • React Starter Kit - 同构Web应用程序样板(Node.jsExpressGraphQLReact.jsBabelPostCSSWebpackBrowsersync

Web

  • eva-icons - 一包超过480个精美的开源图标
  • quicklink - 在谷歌浏览器预加载文件,提高访问速度
  • carlo - Node和浏览器之间进行通信
  • squoosh - 在浏览器中使用同类最佳的编解码器缩小图像

Go

  • pprof - 一个开源goLang的性能分析工具

平台

一些好用、热门的平台

Docker

  • testcontainers-java - Testcontainers是一个支持JUnit测试的Java库,提供常见数据库,Selenium Web浏览器或可以在Docker容器中运行的任何其他东西的轻量级,一次性实例
  • docker-java - Java Docker API客户端
  • jib - 为Java应用程序构建docker容器映像

Flutter

  • flutter - Flutter可以轻松快速地构建漂亮的移动应用程序

Taro

  • taro - 多端统一开发框架,支持用 React 的开发方式编写一次代码,生成能运行在微信/百度/支付宝/字节跳动小程序、H5React Native 等的应用

Electron

  • electron - 使用JavaScriptHTMLCSS构建跨平台桌面应用程序,此应用程序适用于 Windows, macOSLinux 操作系统
  • electron-api-demos-Zh_CN - 一个交互式的桌面应用程序,通过示例代码演示了 Electron API 的核心特性

React

Vue

  • vuejs/vue - Vue.js是一个渐进的,可逐步采用的JavaScript框架,用于在Web上构建UI
  • element - 适用于WebVue.js 2.0 UI工具包
  • vue2-elm - 基于vue2 + vuex 构建一个具有 45 个页面的大型单页面应用
  • vuido - 使用Vue.js的本机桌面应用程序

热门

介绍当下流行的技术模块,如大数据、区块链、人工智能等

大数据

流式计算

适用场景

  • 广告相关实时统计
  • 推荐系统用户画像标签实时更新
  • 线上服务健康状况实时监测
  • 实时榜单
  • 实时数据统计

Hadoop

Spark

区块链

Hyperledger

Ethereum

EOS

  • eos - 一个开源的智能合约平台

人工智能

深度学习

  • bert - TensorFlow代码和BERT预训练模型
  • DeepLearning-500-questions - 深度学习500问,以问答形式对常用的概率知识、线性代数、机器学习、深度学习、计算机视觉等热点问题进行阐述,以帮助自己及有需要的读者
  • machine-learning-cheat-sheet - 机器学习中的经典方程和图表
  • Deeplearning4j - Deeplearning4j,ND4J,DataVec等 - Java/Scala的深度学习和线性代数与GPU + Spark

基础(Java)

输入输出

网络

多线程

反射

泛型

高级

数据结构

Java

Go

Python

JavaScript

程序算法

Java

Go

JavaScript

Python

  • Python - 在Python中算法实现

设计模式

Java

JavaScript

Python

Go

  • go-patterns - Go设计模式,食谱和习语的精选列表

设计

设计思想

DDD(Domain-driven Design - 领域驱动设计)

  • 浅谈我对DDD领域驱动设计的理解 - 概念DDD 主要对传统软件开发流程(分析-设计-编码)中各阶段的割裂问题而提出,避免由于一开始分析不明或在软件开发过程中的信息流转不一致而造成软件无法交付(和需求方设想不一致)的问题。DDD 强调一切以领域(Domain)为中心,强调领域专家(Domain Expert)的作用,强调先定义好领域模型之后在进行开发,并且领域模型可以指导开发(所谓的驱动);过程:理解领域、拆分领域、细化领域,模型的准确性取决于模型的理解深度;设计DDD 中提出了建模工具,比如聚合、实体、值对象、工厂、仓储、领域服务、领域事件来帮助领域建模
  • 领域驱动设计的基础知识总结
    • 领域Doamin)本质上就是问题域,比如一个电商系统,一个论坛系统等;
    • 界限上下文Bounded Context):阐述子域之间的关系,可以简单理解成一个子系统或组件模块;
    • 领域模型Domain Model):DDD的核心是建立(用通用描述语言、工具—领域通用语言)正确的领域模型;反应业务需求的本质,包括实体和过程;其贯穿软件分析、设计、开发 的整个过程;常用表达领域模型的方式:图、代码或文字;
    • 领域通用语言:领域专家、开发设计人员都能立即的语言或工具;
    • 经典分层架构:用户界面/展示层、应用层、领域层、基础设施层,是四层架构模式;
    • 使用的模式:
      • 关联尽量少,尽量单项,尽量降低整体复杂度。
      • 实体(Entity):领域中的唯一标示,一个实体的属性尽量少,少则清晰。
      • 值对象(Value Object):没有唯一标识,且属性值不可变,小二简单的对象,比如Date
      • 领域服务(Domain Service): 协调多个领域对象,只有方法没有状态(不存数据);可以分为应用层服务,领域层服务、基础层服务。
      • 聚合及聚合根(Aggregate,Aggregate Root):聚合定义了一组具有内聚关系的相关对象的集合;聚合根是对聚合引用的唯一元素;当修改一个聚合时,必须在事务级别;大部分领域模型中,有70%的聚合通常只有一个实体,30%只有2~3个实体;如果一个聚合只有一个实体,那么这个实体就是聚合根;如果有多个实体,那么我们可以思考聚合内哪个对象有独立存在的意义并且可以和外部直接进行交互;
      • 工厂(Factory):类似于设计模式中的工厂模式。
      • 仓储(Repository):持久化到DB,管理对象,且只对聚合设计仓储。
  • 领域驱动设计(DDD)实现之路 - 聚合:比如一辆汽车(Car)包含了引擎(Engine)、车轮(Wheel)和油箱(Tank)等组件,缺一不可
  • 领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处 - 浅析VO、DTO、DO、PO的概念、区别和用处

命令查询职责分离(CQRS)

CQRS — Command Query Responsibility Seperation

贫血/充血模型

  • 贫血,充血模型的解释以及一些经验
    • 失血模型:老子和儿子分别定义,相互不知道,二者实体定义中完全没有业务逻辑,通过外部Service进行关联
    • 贫血模型:老子知道儿子,儿子也知道老子;部分业务逻辑放到实体中;优点:各层单项依赖,结构清楚,易于维护;缺点:不符合OO思想,相比于充血模式,Service层较为厚重;
    • 充血模型:和贫血模型类似,区别在于如何划分业务逻辑。优点:Service层比较薄,只充当Facade的角色,不和DAO打交道、复合OO思想;缺点:非单项依赖,DODAO之间双向依赖、和Service层的逻辑划分容易造成混乱。
    • 肿胀模式:是一种极端情况,取消Service层、全部业务逻辑放在DO中;优点:符合OO思想、简化了分层;缺点:暴露信息过多、很多非DO逻辑也会强行并入DO。这种模式应该避免。
    • 作者主张使用贫血模式

开发模式

Actor 模式

TODO

响应式编程

Reactor

  • reactor - spring社区开源,在spring 5.0直接引入

RxJava

  • RxJava - 安卓上用的特别多,特别与RxAndroid,Retrofit等结合使用

Vert.x

  • vert.x - 基于netty,可以通过它使用JavaScript、Ruby、Groovy、Java,甚至是混合语言来编写应用

DODAF2.0

Serverless

无需过多关系服务器的服务架构理念。

  • 什么是Serverless无服务器架构? - Serverless 不代表出去服务器,而是去除对服务器运行状态的关心;Serverless 代表一思维方式的转变,从“构建一套服务在一台服务器上,对对个事件进行响应转变为构建一个为服务器,来响应一个事件”;Serverless 不代表某个具体的框架
  • 如何理解Serverless? - 依赖于 Baas ((Mobile) Backend as a Service)Faas (Functions as a service)

Service Mesh

  • 什么是Service Mesh? - 什么是Service Mesh
  • 初识 Service Mesh - 初识 Service Mes
  • Istio - Google/IBM/Lyft共同开发的新一代Service Mesh开源项目, 运行在k8s
  • sofa-mesh - 蚂蚁金服基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案
  • sofa-mosn - 蚂蚁金服基于 Golang 开发的Service Mesh数据平面代理, MOSN支持EnvoyIstioAPI,可以和Istio集成

概要设计

  • UML教程 - 掌握UML,并在软件设计中合理使用

详细设计

功能模块

底层

从架构设计,到应用层调优,再深入了解底层原理,扎实的基本功

内存模型

并发模式

多线程并发

一致性事务

线程模型

锁细节

CopyOnWrite

  • JAVA中写时复制(Copy-On-Write) Map实现 - 实现读写分离,读取发生在原始数据上,写入发生在副本上。不用加锁,通过最终一致实现一致性。
  • 聊聊并发-Java中的Copy-On-Write容器 - 可以对CopyOnWrite容器进行并发的读,而不需要加锁。CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。

无锁

死锁

分布式事务

性能

任何脱离细节的ppt架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题

性能指标

调优方法论

JVM调优

Web调优

DB调优

Cache调优

应用调优

架构

基础设施

服务器

Tomcat

Jetty

  • Jetty 的工作原理以及与 Tomcat 的比较 - Jetty 的工作原理以及与 Tomcat 的比较
  • Jetty和tomcat优势比较 - 架构比较:Jetty的架构比Tomcat的更为简单;性能比较:JettyTomcat性能方面差异不大,Jetty默认采用NIO结束在处理I/O请求上更占优势,Tomcat默认采用BIO处理I/O请求,Tomcat适合处理少数非常繁忙的链接,处理静态资源时性能较差;其他方面:Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好;TomcatJEEServlet 支持更加全面。

网络

有关网络协议、安全、服务的框架和工具

协议


OSI 七层协议

TCP/IP

HTTP

HTTP2.0

HTTPS

  • https原理通俗了解 - 使用非对称加密协商加密算法;使用对称加密方式传输数据;使用第三方机构签发的证书,来加密公钥,用于公钥的安全传输、防止被中间人串改
  • 八大免费SSL证书 - 八大免费SSL证书-给你的网站免费添加Https安全加密

网络模型


  • web优化必须了解的原理之I/o的五种模型和web的三种工作模式 - web优化必须了解的原理之I/O的五种模型和web的三种工作模式。五种I/O模型:阻塞I/O,非阻塞I/OI/O复用、事件(信号)驱动I/O、异步I/O,前四种I/O属于同步操作,I/O的第一阶段不同、第二阶段相同,最后的一种则属于异步操作;三种 Web Server 工作方式:Prefork(多进程)、Worker方式(线程方式)、Event方式。
  • select、poll、epoll之间的区别总结 - selectpollepoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。select 有打开文件描述符数量限制,默认1024(2048 for x64),100万并发,就要用1000个进程、切换开销大;poll采用链表结构,没有数量限制。selectpoll “醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,通过回调机制节省大量CPU时间;selectpoll每次调用都要把fd集合从用户态往内核态拷贝一次,而epoll只要一次拷贝。poll会随着并发增加,性能逐渐下降,epoll采用红黑树结构,性能稳定,不会随着连接数增加而降低。
  • select,poll,epoll比较 - 在连接数少并且连接都十分活跃的情况下,selectpoll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。
  • 深入理解Java NIO - NIO 是一种同步非阻塞的 IO 模型。同步是指线程不断轮询 IO 事件是否就绪,非阻塞是指线程在等待 IO 的时候,可以同时做其他任务。
  • BIO与NIO、AIO的区别 - BIONIOAIO的区别
  • 两种高效的服务器设计模型 - 两种高效的服务器设计模型:ReactorProactor模型
  • Epoll —— 使用详解(精髓) - 使用详解
  • Java NIO —— 深入理解 - 深入理解Java NIO
  • Java NIO —— 编写Socket服务器的一个例子 - Java NIO 编写Socket服务器的一个例子
  • Kqueue用法简介 - kqueue用法简介

长连接和短连接


异步


安全


服务


  • retrofit - Square,Inc。AndroidJava提供类型安全的HTTP客户端
  • okhttp - 适用于AndroidJava应用程序的HTTP + HTTP/2客户端
  • http-request - Java HTTP请求库

REST


序列化


数据库

有关数据库的框架和数据库相关知识

  • 数据库的三大范式以及五大约束 - 第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;第三范式:必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)
  • 数据库事务隔离级别 - 数据库事务隔离级别
  • 数据库两大神器【索引和锁】 - 索引和锁

面对对象型


关系型


MySQL

InnoDB

优化

索引

NoSQL


MongoDB
  • MongoDB 教程 - MongoDB 教程
  • Mongodb相对于关系型数据库的优缺点 - 优点:弱一致性(最终一致),更能保证用户的访问速度;内置GridFS,支持大容量的存储;Schema-less 数据库,不用预先定义结构;内置Sharding;相比于其他NoSQL,第三方支持丰富;性能优越;缺点:mongodb不支持事务操作;mongodb占用空间过大;MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方
Hbase

其他


  • XiaoMi/soar - SQL优化器和重写器
  • opentsdb - 可扩展的分布式时间序列数据库
  • influxdb - 可扩展的数据存储区,用于指标,事件和实时分析

扩展


读写分离模式

分片模式

  • 分库分表需要考虑的问题及方案 - 中间件: 轻量级:sharding-jdbcTSharding;重量级:AtlasMyCATVitess等;问题:事务、Join、迁移、扩容、ID、分页等;事务补偿:对数据进行对帐检查;基于日志进行比对;定期同标准数据来源进行同步等;分库策略:数值范围;取模;日期等;分库数量:通常 MySQL 单库 5千万条、Oracle 单库一亿条需要分库
  • MySql分表和表分区详解 - 分区:是MySQL内部机制,对客户端透明,数据存储在不同文件中,表面上看是同一个表;分表:物理上创建不同的表、客户端需要管理分表路由

工具


  • Flyway - 是一个敏捷工具,用于数据库的移植
  • liquibase - 一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。支持xml,groovy编写
  • Apache Impala - 是一个高性能分析数据库,可针对存储在 Apache Hadoop 集群中的 PB 级数据进行闪电般快速的分布式 SQL 查询
  • MyFlash - 美团点评的开源MySQL闪回工具
  • Ctrip DAL - 是携程框架部开发的数据库访问框架,支持代码生成和水平扩展

缓存

  • caffeine - 适用于Java 8的高性能缓存库
  • Redisson - 分布式Java对象和服务(Set,Multimap,SortedSet,Map,List,Queue,Deque,Semaphore,Lock,AtomicLong,Map Reduce,Publish/Subscribe,Bloom filter,Spring Cache,Tomcat,Scheduler,JCache API,Hibernate)在Redis服务器上。最先进的Redis Java客户端
  • jedis - 一个非常小而且理智的redis java客户端

缓存策略

本地缓存

客户端缓存

服务器缓存

持续集成

持续部署

中间件

基础框架

权限


  • apereo/cas - Apereo CAS - 企业单一登录适用于所有地球人及其他人
  • scribejava - 适用于Java的简单OAuth
  • Apache Shiro - 一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理
  • Spring Security - 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架

公共组件

消息队列


RabbitMQ

支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。

RocketMQ

Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。

ActiveMQ

Java实现,兼容JMS,可以内嵌于Java应用中。

Kafka

高吞吐量、采用拉模式。适合高IO场景,比如日志同步。

Redis 消息推送

生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。

定时调度


单机定时调度

分布式定时调度

事件总线


  • EventBus - 适用于AndroidJava的事件总线,可简化活动,碎片,线程,服务等之间的通信。减少代码,提高质量

数据库


Sharding Jdbc

通用服务

分布式

原理

策略

一致性策略

  • 从分布式一致性谈到CAP理论、BASE理论 - 一致性分类:强一致(立即一致);弱一致(可在单位时间内实现一致,比如秒级);最终一致(弱一致的一种,一定时间内最终一致)。CAP:一致性、可用性、分区容错性(网络故障引起)。BASEBasically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

分布式锁

  • 分布式锁的几种实现方式 - 基于数据库的分布式锁:优点:操作简单、容易理解。缺点:存在单点问题、数据库性能够开销较大、不可重入;基于缓存的分布式锁:优点:非阻塞、性能好。缺点:操作不好容易造成锁无法释放的情况;Zookeeper 分布式锁:通过有序临时节点实现锁机制,自己对应的节点需要最小,则被认为是获得了锁。优点:集群可以透明解决单点问题,避免锁不被释放问题,同时锁可以重入。缺点:性能不如缓存方式,吞吐量会随着zk集群规模变大而下降
  • 基于Zookeeper的分布式锁 - 清楚的原理描述 + Java 代码示例
  • jedisLock—redis分布式锁实现 - 基于 setnx(set if ont exists),有则返回false,否则返回true。并支持过期时间。
  • Memcached 和 Redis 分布式锁方案 - 利用 memcachedadd(有别于set)操作,当key存在时,返回false

一致性算法

PAXOS

Zab

Raft

Gossip

多阶段提交

幂等

  • 分布式系统:幂等性设计 - 幂等特性的作用:该资源具备幂等性,请求方无需担心重复调用会产生错误;常见保证幂等的手段:MVCC(类似于乐观锁)、去重表(唯一索引)、悲观锁、一次性token、序列号方式

一致方案

主节点选举

TCC(Try/Confirm/Cancel) 柔性事务

  • 传统事务与柔性事务 - 基于BASE理论:基本可用、柔性状态、最终一致;解决方案:记录日志+补偿(正向补充或者回滚)、消息重试(要求程序要幂等);“无锁设计”、采用乐观锁机制

一致性Hash算法

设计

扩展设计

稳定/高可用设计

  • 系统设计:关于高可用系统的一些技术方案 - 可扩展:水平扩展、垂直扩展。 通过冗余部署,避免单点故障;隔离:避免单一业务占用全部资源。避免业务之间的相互影响 2. 机房隔离避免单点故障;解耦:降低维护成本,降低耦合风险。减少依赖,减少相互间的影响;限流:滑动窗口计数法、漏桶算法、令牌桶算法等算法。遇到突发流量时,保证系统稳定;降级:紧急情况下释放非核心功能的资源。牺牲非核心业务,保证核心业务的高可用;熔断:异常情况超出阈值进入熔断状态,快速失败。减少不稳定的外部依赖对核心服务的影响;自动化测试:通过完善的测试,减少发布引起的故障;灰度发布:灰度发布是速度与安全性作为妥协,能够有效减少发布故障
  • 关于高可用的系统 - 设计原则:数据不丢(持久化);服务高可用(服务副本);绝对的100%高可用很难,目标是做到尽可能多的9,如99.999%(全年累计只有5分钟)

限流

  • 谈谈高并发系统的限流 - 计数器:通过滑动窗口计数器,控制单位时间内的请求次数,简单粗暴;漏桶算法:固定容量的漏桶,漏桶满了就丢弃请求,比较常用;令牌桶算法:固定容量的令牌桶,按照一定速率添加令牌,处理请求前需要拿到令牌,拿不到令牌则丢弃请求,或进入丢队列,可以通过控制添加令牌的速率,来控制整体速度。Guava 中的 RateLimiter 是令牌桶的实现;Nginx 限流:通过 limit_req 等模块限制并发连接数

组件

远程调用


  • brpc - 整个百度使用的工业级RPC框架,拥有1,000,000多个实例和数千种服务,在百度内部称为baidu-rpc
  • incubator-dubbo - Apache Dubbo(孵化)是一个基于Java的高性能开源RPC框架
  • 从零开始实现RPC框架 - 从零开始实现RPC框架 - RPC原理及实现:核心角色:Server:暴露服务的服务提供方、Client:调用远程服务的服务消费方、Registry:服务注册与发现的注册中心。
  • 分布式RPC框架性能大比拼 - 分布式RPC框架性能大比拼 dubbomotanrpcxgRPCthrift的性能比较
  • motan - 新浪轻量级RPC框架
  • SOFARPC - 蚂蚁金服一个高可扩展性、高性能、生产级的 Java RPC 框架, 提供了丰富的模型抽象和可扩展接口

Dubbo

Thrift

gRPC

服务端可以认证加密,在外网环境下,可以保证数据安全。

配置管理


日志管理


接口网关


主要职责:请求转发、安全认证、协议转换、容灾。

负载均衡


硬件负载均衡

软件负载均衡

数据同步


数据存储


时间同步


事务管理


  • fescar - Fescar是一种易于使用,高性能,基于Java的开源分布式事务解决方案

检索


文件系统


唯一ID


  • 高并发分布式系统中生成全局唯一Id汇总 - Twitter 方案(Snowflake 算法):41位时间戳+10位机器标识(比如IP,服务器名称等)+12位序列号(本地计数器);Flicker 方案:MySQL自增ID + "REPLACE INTO XXX:SELECT LAST_INSERT_ID();"UUID:缺点,无序,字符串过长,占用空间,影响检索性能;MongoDB 方案:利用 ObjectId。缺点:不能自增;
  • TDDL 在分布式下的SEQUENCE原理 - 在数据库中创建 sequence 表,用于记录,当前已被占用的id最大值;每台客户端主机取一个id区间(比如 1000~2000)缓存在本地,并更新 sequence 表中的id最大值记录;客户端主机之间取不同的id区间,用完再取,使用乐观锁机制控制并发
  • Snowflake: Twitter的分布式自增ID算法 - Snowflake: Twitter的分布式自增ID算法

微服务

  • 微服务架构设计 - 微服务架构设计
  • 微服务架构选型手册 - 微服务架构技术栈选型手册
  • 微服务架构核心20讲 - 微服务架构核心20讲
  • 微服务架构的理论基础 - 康威定律 - 定律一:组织沟通方式会通过系统设计表达出来,就是说架构的布局和组织结构会有相似。定律二:时间再多一件事情也不可能做的完美,但总有时间做完一件事情。一口气吃不成胖子,先搞定能搞定的。定律三:线型系统和线型组织架构间有潜在的异质同态特性。种瓜得瓜,做独立自治的子系统减少沟通成本。定律四:大的系统组织总是比小系统更倾向于分解。合久必分,分而治之。

微服务框架

  • istio - 一个连接、管理和保护微服务的开放平台
  • spring-cloud-alibaba - Spring Cloud阿里巴巴为阿里巴巴中间件的分布式解决方案提供应用程序开发的一站式解决方案
  • dubbo - 一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架
  • dubbox - 当当根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox
  • finatra - twitter基于scala开发

注册与发现

路由控制

  • 分布式服务框架学习笔记4 服务路由 - 原则:透明化路由;负载均衡策略:随机、轮询、服务调用延迟、一致性哈希、粘滞连接;本地路由有限策略:injvm(优先调用jvm内部的服务),innative(优先使用相同物理机的服务),原则上找距离最近的服务;配置方式:统一注册表;本地配置;动态下发

虚拟化

容器

教程

工具

  • chef-cookbooks/docker - Dockerchef食谱
  • dive - 用于探索或查看docker镜像中每个图层的工具
  • docker-swarm-visualizer - Docker Swarm模式的可视化工具,使用Docker Remote APINode.JSD3
  • dockerize - 简化在docker容器中运行应用程序
  • ansible-container - Ansible Container是一个使用Ansible playbooks构建Docker镜像和编排容器的工具
  • Knative - Knative:用于构建、部署和管理Serverless工作负载的Kubernetes框架
  • TAC - TAC基于java的微服务容器,提供从业务代码编写、编译、发布、jar动态加载、运行等一系列常用开发流程的支持
  • gVisor - gVisor:Google开源的轻量级的Sandbox,额外的内存消耗非常小,但同时提供了和VM方案相当隔离等级
  • Pouch - Pouch:阿里巴巴开源的自研容器技术
  • container-diff - container-diffGoogle 开源 Docker 镜像差异分析工具
  • Kubernetes - 谷歌开源用于自动化部署,扩展和管理集装箱化应用程序的系统

镜像

安全

监控

防御

漏洞扫描

验证码

DDoS 防范

容灾

应用层容灾

  • 防雪崩利器:熔断器 Hystrix 的原理与使用 - 雪崩效应原因:硬件故障、硬件故障、程序Bug、重试加大流量、用户大量请求;雪崩的对策:限流、改进缓存模式(缓存预加载、同步调用改异步)、自动扩容、降级;Hystrix设计原则:资源隔离:Hystrix通过将每个依赖服务分配独立的线程池进行资源隔离, 从而避免服务雪崩;熔断开关:服务的健康状况 = 请求失败数 / 请求总数,通过阈值设定和滑动窗口控制开关;命令模式:通过继承 HystrixCommand 来包装服务调用逻辑
  • 缓存穿透,缓存击穿,缓存雪崩解决方案分析 - 缓存穿透,缓存击穿,缓存雪崩解决方案分析
  • 缓存击穿、失效以及热点key问题 - 主要策略:失效瞬间:单机使用锁;使用分布式锁;不过期;热点数据:热点数据单独存储;使用本地缓存;分成多个子key

跨机房容灾

  • “异地多活”多机房部署经验谈 - 通过自研中间件进行数据同步
  • 异地多活(异地双活)实践经验 - 注意延迟问题,多次跨机房调用会将延时放大数倍;建房间专线很大概率会出现问题,做好运维和程序层面的容错;不能依赖于程序端数据双写,要有自动同步方案;数据永不在高延迟和较差网络质量下,考虑同步质量问题;核心业务和次要业务分而治之,甚至只考虑核心业务;异地多活监控部署、测试也要跟上;业务允许的情况下考虑用户分区,尤其是游戏、邮箱业务;控制跨机房消息体大小,越小越好;考虑使用docker容器虚拟化技术,提高动态调度能力
  • 容灾技术及建设经验介绍 - 容灾技术及建设经验介绍
  • 容灾演练流程 - 依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验:常见故障画像;案例:预案有效性、预案有效性、故障复现、架构容灾测试、参数调优、参数调优、故障突袭、联合演练

平滑启动

平滑重启应用思路:1、端流量(如vip层);2、flush 数据(如果有)、3、重启应用

诊断

  • arthas - Java诊断利器Arthas
  • metrics - 捕获JVM和应用程序级指标。所以你知道发生了什么
  • RxJava - JVMReactive Extensions - 一个使用Java VM的可观察序列组成异步和基于事件的程序的库
  • Supervisor - Supervisor进程管理工具,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动。
  • TProfiler - 一个阿里开源可以在生产环境长期使用的JVM性能分析工具
  • greys-anatomy - Java问题在线诊断工具

保护

用户隐私保护

序列化

加密解密

  • 常见对称加密算法 - DES3DESBlowfishAESDES 采用 56位秘钥,Blowfish 采用1到448位变长秘钥,AES128,192和256位长度的秘钥;DES 秘钥太短(只有56位)算法目前已经被 AES 取代,并且 AES 有硬件加速,性能很好
  • 常用的哈希算法 - MD5SHA-1 已经不再安全,已被弃用;目前 SHA-256 是比较安全的
  • 基于Hash摘要签名的公网URL签名验证设计方案 - 基于Hash摘要签名的公网URL签名验证设计方案
  • 常见非对称加密算法 - RSA、DSA、ECDSA(螺旋曲线加密算法);和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快;256位的ECC秘钥的安全性等同于3072位的RSA秘钥
  • 区块链的加密技术 - 区块链的加密技术

Linux安全

数据备份

网络隔离

权限

工具

工欲善其事必先利其器,不管是小白,还是资深开发,玩Java技术体系,选择好的工具,提升开发效率和团队协作效率,是必不可少的

开发软件

介绍常用的开发工具IDE

Eclipse

  • ansi-econsole - Eclipse插件,它理解ANSI转义序列以为Eclipse控制台输出着色
  • jadx - 反编译
  • alibaba/p3c - 阿里巴巴Java编码指南pmd实现和IDE插件

UML

HTML

  • eleme/UETool - 在屏幕上显示/编辑任何视图的属性。

编辑器

介绍一下常用热门的文档、文件编辑器

Markdown

  • mermaid - 以与markdown类似的方式生成图表和流程图
  • editor.md - 开源嵌入式在线markdown编辑器(组件)
  • markdown-toc - 生成markdown文件的markdown TOC(目录)
  • github-markdown-toc - 为GitHub README.md创建简单的TOC
  • ghtoc - 为markdown文件生成toc

Vim

浏览器

  • proxyee-down - http下载工具,基于http代理,支持多连接分块下载。支持百度云文件分块下载

  • selenium - 封装了各种工具和库,可实现Web浏览器自动化

  • ChromeAppHeroes - Chrome插件英雄榜, 为优秀的Chrome插件写一本中文说明书

Cli

  • httpie - 现代命令行HTTP客户端一样简单 - 用户友好的卷曲替代方案,具有直观的UIJSON支持,语法突出显示,类似wget的下载,扩展等

项目管理

Maven,

持续集成

Jenkins

Ansible

Chef

Puppet

代码质量

Sonar,

版本管理

Git

文档管理

接口管理

  • swagger-core - 用于生成Swagger API规范的示例和服务器集成,可以轻松访问REST API

写博客

  • hexo-theme-next - Hexo的优雅主题
  • maupassant-hexo - 一个简单的Hexo主题从icylogic分叉
  • hexo - 一个快速、简单和强大的博客框架,由Node.js提供支持
  • hexo-theme-yilia - 一个简洁优雅的hexo主题
  • solo - 一款小而美的博客系统,专为程序员设计
  • jekyll-now - 在几分钟内构建一个Jekyll博客,无需触及命令行

测试

TDD 理论

  • 深度解读 - TDD(测试驱动开发) - 基于测试用例编码功能代码,XP(Extreme Programming)的核心实践;好处:一次关注一个点,降低思维负担;迎接需求变化或改善代码的设计;提前澄清需求;快速反馈

单元测试

压力测试

全链路压测

A/B/灰度/蓝绿测试

操作系统

有关系统的设计和操作相关的知识点

底层

  • 计算机原理 - 操作系统基础知识——操作系统的原理,类型和结构
  • 多级缓存:从Java视角理解CPU缓存和伪共享 - 典型的 CPU 有三级缓存,距离核心越近,速度越快,空间越小。L1 一般 32kL2 一般 256k,L3 一般12M。内存速度需要200CPU 周期,CPU 缓存需要1个CPU周期。
  • 线程 - 线程的生命周期及状态转换详解
  • 协程 - 终结python协程:从yieldactor模型的实现。线程的调度是由操作系统负责,协程调度是程序自行负责。与线程相比,协程减少了无谓的操作系统切换。实际上当遇到IO操作时做切换才更有意义,(因为IO操作不用占用CPU),如果没遇到IO操作,按照时间片切换。

设计

  • system-design-primer - 了解如何设计大型系统,准备系统设计面试,包括Anki抽认卡

虚拟机

  • firecracker - 安全、快速的microVM,适用于无服务器计算

构建

面试

软件管理

评审

重构

编码规范

代码 Review

RUP

看板管理

SCRUM

3个角色:Product Owner(PO) 产品负责人;Scrum Master(SM),推动Scrum执行;Team 开发团队

3个工件:Product Backlog 产品TODOLIST,含优先级;Sprint Backlog 功能开发 TODO LIST;燃尽图;

五个价值观:专注、勇气、公开、承诺、尊重;

结对编程

结对编程 - 边写码,边review。能够增强代码质量、减少bug

架构师

  • 架构师图谱
    • 业务理解和抽象能力
    • NB的代码能力
    • 全面:1. 在面对业务问题上,架构师脑海里是否会浮现出多种技术方案;2. 在做系统设计时是否考虑到了足够多的方方面面;3. 在做系统设计时是否考虑到了足够多的方方面面;
    • 全局:是否考虑到了对上下游的系统的影响。
    • 权衡:权衡投入产出比;优先级和节奏控制;
  • 关于架构优化和设计,架构师必须知道的事情 - 要去考虑的细节:模块化、轻耦合、无共享架构;减少各个组件之前的依赖、注意服务之间依赖所有造成的链式失败及影响等;基础设施、配置、测试、开发、运维综合考虑;考虑人、团队、和组织的影响
  • 如何才能真正的提高自己,成为一名出色的架构师? - 提高自己,成为一名出色的架构师
  • 架构师的必备素质和成长途径 - 素质:业务理解、技术广度、技术深度、丰富经验、沟通能力、动手能力、美学素养;成长路径:2年积累知识、4年积累技能和组内影响力、7年积累部门内影响力、7年以上积累跨部门影响力
  • 架构设计师—你在哪层楼? - 第一层的架构师看到的只是产品本身;第二层的架构师不仅看到自己的产品,还看到了整体的方案;第三层的架构师看到的是商业价值

大咖博客

综合

  • awesome-cheatsheets - 超级速查表 - 编程语言、框架和开发工具的速查表,单个文件包含一切你需要知道的东西
  • HelloGitHub - 分享 GitHub 上有趣、入门级的开源项目,帮你找到编程的乐趣。欢迎推荐、自荐项目,让更多人知道你的项目
  • translations - 经典IT资源的中文翻译
  • awesome-laravel - 来自Laravel生态系统的书签、包、教程、视频和其他很酷的资源的精选列表
  • xitu/gold-miner - 掘金翻译计划,可能是世界最大最好的英译中技术社区,最懂读者和译者的翻译平台
  • flyleft/tip - 自写博客、博客收藏、开源项目收藏
  • scalad/Note - 常规Java工具,算法,加密,数据库,面试题,源代码分析,解决方案
  • coding-guide_i3geek - 内容包括但不限于数据结构、算法、数据库、操作系统、计算机网络等多方面
  • JCSprout - Java Core Sprout:基本,并发,算法
  • CS-Notes - 技术面试必备基础知识
  • architecture.of.internet-product - 互联网公司技术架构,微信/淘宝/微博/腾讯/阿里/美团点评/百度/Google/Facebook/Amazon/eBay的架构
  • architect-awesome - 后端架构师技术图谱
  • build-your-own-x - 建立自己的(在这里插入技术)
  • free-programming-books - 免费书单推荐

参考资料