后端架构
System Design
负载均衡
轮询,比率(加权),优先分组,动态负载均衡算法包括:最少连接,最快(Fasttest) ……
限流
TODO
熔断
Circuit Breaker
常用于容错熔断的 Hystrix 项目不再开发,建议新项目转到 resilience4j
容错
failover, failfast, failback
平滑启动
SOA & 微服务
SOA(Service-Oriented Architecture),即面向服务的架构。
服务治理框架
服务治理框架演进
- 浅谈服务治理、微服务与Service Mesh(一):Dubbo的前世今生 - DockOne.io
- 浅谈服务治理、微服务与Service Mesh(二): Spring Cloud从入门到精通到放弃 - DockOne.io
- 浅谈服务治理、微服务与Service Mesh(三): Service Mesh与Serverless - DockOne.io
Spring Cloud
Dobbo
Motan
Service Mesh
服务网格
Istio
TODO
Conduit
TODO
RPC
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
Thrift
Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift基于自己的传输协议和序列化协议。
gRPC
gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。
Dubbo RPC
Dubbo-RPC是服务治理框架Dubbo的子模块,提供了灵活的配置方式,支持常见的传输协议RMI、Dubbo、Hessain、WebService、Http 等,序列化支持Hessian2、dubbo、JSON、SOAP 等。
RPC-传输协议
常见RPC协议有: Dubbo/RMI(socket实现), Hessian/WebService(HTTP实现) 以及Redis, Memcached等。
RPC-序列化类库
包括gRPC使用的ProtoBuf、Thrift序列化协议、Avro协议。
API网关
Spring Cloud Gateway
TODO
Zuul
TODO
注册中心
Zookeeper
Consul
TODO
Etcd
TODO
Web Server
Nginx
Tomcat
缓存
TODO
Memcached
数据库
关系型数据库
MySQL
NoSQL
Mongo
Redis
HBase
消息队列
Kafka
RabbitMQ
TODO
ZeroMQ
TODO
分布式系统
TODO: https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式一致
容器化
Docker
Kubernetes
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。
资源调度
Mesos vs Yarn vs Kubernetes
- 统一资源管理与调度平台(系统)介绍
- Docker、Kubernetes 和 Apache Mesos 对比中的一些误区 - 知乎
- Kubernetes和Mesos有啥区别,我该使用哪个好?
- Mesos和YARN的区别以及它们如何协同工作 - DockOne.io
Yarn
Mesos
Mesos可以理解为一种分布式集群的“系统内核”, 负责整个集群资源的分配(CPU、内存、存储资源、网络资源等)。在Mesos上可以运行Spark, Storm, Hadoop, Marathon等多种Framework。
DevOps & 监控
基础监控
Ganglia
除了对基础性能的监控、Ganglia还可以通过Coda Hale开发的Metrics库实现对Spark、Hadoop、Kafka、JStorm的监控。
Open Falcon
Open Falcon提供了对集群、MySQL、Redis、Nginx、JMX、Mesos等常见应用的监控功能。
APM
应用性能管理(Application Performance Management)
Zipkin
TODO
SkyWalking
TODO
压力测试
WRK
JMeter
大数据
批处理计算
Hadoop
流式计算
Flink
Storm
混合型计算
Spark
大数据分析
Hive
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
Druid
Druid.io是一个开源的,分布式的,列式存储的,适用于实时数据查询分析的OLAP系统。
Spark SQL
TODO
机器学习 & 深度学习
机器学习
框架
TensorFlow
算法理论
有监督学习算法
LR
逻辑回归(Logistics Regression)
kNN
k-近邻算法
FM
因子分解机(Factorization Machine) 因子分解机(Factorization Machine, FM) 是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。目前,被广泛的应用于广告预估模型中
FFM
Field-aware Factorization Machines(FFM)
朴素贝叶斯
Naive Bayes
SVM
支持向量机(Support Vector Machine)
决策树
决策树(Decision Tree)
随机森林
Random Forest
boosting
集成学习的两个流派,bagging & boosting派系
无监督学习算法
k-均值
k-means 算法
分层聚类
PCA
主成分分析(Principal Component Analysis)
DBSCAN
DBSCAN,英文全写为Density-based spatial clustering of applications with noise ,是在 1996 年由Martin Ester, Hans-Peter Kriegel, Jörg Sander 及 Xiaowei Xu 提出的聚类分析算法, 这个算法是以密度为本的:给定某空间里的一个点集合,这算法能把附近的点分成一组(有很多相邻点的点),并标记出位于低密度区域的局外点(最接近它的点也十分远),DBSCAN 是其中一个最常用的聚类分析算法
深度学习
深度学习框架
TensorFlow
Caffe2
TODO
MXNet
TODO
DeepLearning4j
TODO
神经网络
发展
积神经网络(CNN)
CNN经典模型:LeNet
CNN经典模型:AlexNet
CNN经典模型:VGGNet
CNN经典模型:GoogLeNet
循环神经网络(RNN)
度残差网络(DRN)
度信念网络(DBN)
推荐系统
搜索引擎
搜索引擎原理
评估方法
ElasticSearch
Lucene
TODO
Solr
TODO
Linux & DevOps
- ✐笔记: Shell Script 30分钟快速入门指北: 一篇简短的Bash Shell入门教程
- ✐笔记: Sed, Awk, Grep: Linux搜索三件套
- ✐笔记: Linux性能分析(Linux-Performance): 基础性能分析命令(uptime,ps/pstree,free,vmstat/iostat,sar,netstat),sysctl优化内核参数
- ✐笔记: Linux进阶(Linux-Primer): 包括 Linux常用命令,I/O模型,网络编程I/O设计模式(Reactor/Proactor),用户态&内核态,内存寻址,进程控制,信号,etc.
性能调优
网络编程
相关tag: #NIO #IO模型 #IO设计模式
并发(C100K)
- ✐笔记: 并发系统(C100K)
- 高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少
- 高性能网络编程(二):上一个10年,著名的C10K并发连接问题
- 高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了
- 高并发性能调试经验分享 - 腾讯WeTest
OS系统原理
- 使用 Linux 系统调用的内核命令
- 每个程序员都应该了解的CPU缓存知识
- 每个程序员都应该了解的虚拟内存知识
- 每个程序员都应该了解的内存知识
- Linux内存寻址之分页机制
- Linux内存寻址之分段机制
- 内存管理笔记(分页,分段,逻辑地址,物理地址与地址转换方式)
网络协议
数据结构与算法
数据结构
树
AVL
TODO
红黑树
TODO
B-树
TODO
优先队列(堆)
TODO
散列
TODO
算法设计
贪婪
分治
回溯
动态规划
图论算法
拓扑排序
TODO
最短路径算法
TODO
网络流问题
TODO
最小生成树
TODO
深度优先搜索
TODO
设计模式
正则表达式
C/C++
智能指针
Java SE
- ✐笔记: Java 30分钟快速入门:《Java核心技术》读书笔记,包括Java对象,字符串,反射和RTTI,异常,泛型,集合,I/O流,多线程,网络编程API,NIO,Native Method,Java 8~9新特性(Lambda,Stream),etc.
- ✐笔记: More about Java:Java虚拟机相关笔记,JVM内存分代,JVM参数调优,垃圾回收,Java内存模型,etc.
异常
集合
List
两种主要的List:
ArrayList
&LinkedList
Queue
LinkedList
同时实现了Deque和Queue接口,ArrayDeque
以循环数组实现的Dueue,PriorityQueue
用二叉堆实现的优先级队列
Set
Set是不能包含重复的元素的集合:
HashSet
由HashMap实现,TreeSet
由TreeMap实现
Map
HashMap
散列表,LinkedHashMap
遍历时与插入顺序一致,TreeMap
用红黑树实现按Key排序的Map
并发
线程API
线程安全集合
线程安全的Queue
阻塞队列
PriorityBlockingQueue
,SynchronousQueue
等;
非阻塞队列ConcurrentLinkedQueue
,ConcurrentLinkedDueue
;
线程安全的Set
ConcurrentSkipListSet
由ConcurrentSkipListMap实现
线程安全的Map
ConcurrentHashMap
分段加锁的并发安全Map,ConcurrentSkipListMap
跳表实现的并发安全SortedMap
异步
JVM
JAVA内存模型
深入理解Java内存模型-系列
GC
GC算法
TODO
GC回收器
性能分析
深入 Java 调试体系
JProfiler
VisualVM
Btrace
BTrace是SUN Kenai云计算开发平台下的一个开源项目,旨在为java提供安全可靠的动态跟踪分析工具。
HouseMD
比BTrace更轻量级的Java进程运行时的诊断调式命令行工具,可以用来跟踪跟踪方法的耗时。
Memory Analyzer (MAT)
Java堆转储 (Heap Dump) 文件分析工具,可以分析堆内存中每种对象的数量,还可以跟踪对象的引用链,排查内存泄漏问题。
- Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
- 使用 Eclipse Memory Analyzer 进行堆转储文件分析
构建 & 测试
第三方类库
当你想重新发明轮子时,应该先去Guava & Apache Commons库里找找看。
Guava
Guava包含了若干被Google的 Java项目广泛依赖的核心库,例如:集合collections、caching 、并发库 concurrency libraries 、通用注解 common annotations 、字符串处理 string processing 、I/O、原生类型支持 primitives support 等等。
Apache Commons
Apache Commons 提供了FileUpload, Lang, Pool(对象池), IO工具集等
Metrics
目前最为流行的 metrics 库是来自 Coda Hale 的 dropwizard/metrics,该库被广泛地应用于各个知名的开源项目中。例如 Hadoop、Kafka、Spark、JStorm。并且Metrics生成的数据可以很方便的与Graphite、Ganglia等监控系统结合使用。
Java 8/9/10新特性
深入拆解 Java 虚拟机
注:文章来自极客时间课程,需要付费购买才可以查看完整内容。
- 01 | Java代码是怎么运行的?
- 初步认识Java字节码
- 解释执行 vs 即时编译(JIT), Hotspot默认采用混合模式;
- Hotspot引入了几种即时编译器? Hotspot的分层编译是怎样执行的?
- 02 | Java的基本类型
- 基本类型在Java虚拟机内存的存储
- 03 | Java虚拟机是如何加载Java类的?
- 类加载器ClassLoader的分类, 继承关系, 双亲委派模型
- 加载的最后一步是初始化, 成员赋值操作/static代码块会被放入
<clinit>
方法, 虚拟机加锁确保<clinit>
只会执行一次
- 04 | JVM是如何执行方法调用的?(上)
- 字节码指令invokestatic, invokespecial, invokevirtual, invokeinterface分别用来调用哪种方法
- 05 | JVM是如何执行方法调用的?(下)
- 06 | JVM是如何处理异常的?
- 每个方法都有异常表, 异常表一个条目对应一个异常处理器(Catch), 抛出异常时会遍历异常表, 如果没有找到合适的异常处理器, 那么它会弹出当前方法对应的 Java 栈帧,并且在调用者(caller)中重复上述操作。在最坏情况下,Java 虚拟机需要遍历当前线程 Java 栈上所有方法的异常表。
- 字节码对Try-Catch-Finally的处理
- 07 | JVM是如何实现反射的?
- 10 | Java对象的内存布局
- 【工具篇】 常用工具介绍
Java EE
Web 框架
Servlet
Spring MVC
Spring Boot
Spring WebFlux
- 聊聊 Spring Boot 2.0 的 WebFlux
- Spring Web MVC 基于 Servlet API 和 Servlet 容器设计。Spring WebFlux 基于 Reactive Streams API 和 Servlet 3.1+ 容器设计
- Reactive Streams API 是什么?
- 流是序列,是生产者生产,一个或多个消费者消费的元素序列。这种具体的设计模式成为发布订阅模式。
- Back pressure是一种常用策略,使得发布者拥有无限制的缓冲区存储 item,用于确保发布者发布 item 太快时,不会去压制订阅者。
- Reactive Streams (响应式流)是提供处理非阻塞back pressure异步流的一种标准。JDK 9
java.util.concurrent
包提供了两个主要的 API 来处理响应流:- java.util.concurrent.Flow
- java.util.concurrent.SubmissionPublisher
ORM框架
MyBatis
- MyBatis 3 | 入门
- 通过源码深入理解 SQL 的执行过程
- 《深入理解mybatis原理》
Hibernate
数据库中间件
Sharding JDBC
Sharding JDBC是当当开源的轻量级分库分表Jar包
MyCAT
Mycat是一个数据库分库分表代理中间件
数据库连接池
Durid
Durid 不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个 SQL Parser。
DBCP
DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP。
c3p0
c3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
日志框架
J2EE规范
响应式编程
响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
- ✐笔记: 响应式编程
- 响应式编程 - 维基百科
- 响应式编程(Reactive Programming)介绍 - 极客学院Wiki
- 响应式编程思想: 响应式编程三种模型, 以及实现:
- Actor模型, 实现类库:
- AKKA Actor
- 响应式扩展(reactive extensions, Rx)模型, 实现类库:
- RxJava
- Reactor
- 函数响应式编程(functional reactive programming, FRP)模型
- Actor模型, 实现类库:
Reactive Streams
Java 9 新特性:Reactive Streams(响应式流)是一个使用非阻塞back pressure(背压机制)的异步流处理标准。在
java.util.concurrent
包中提供
Reactor
Reactor是Pivotal发布的第四代响应式框架,跟RxJava 2有些相似。 Spring WebFlux 以Reactor为基础,实现Web领域的反应式编程框架。
RxJava
Reactive Extensions for Java
Akka
Actor模型为编写并发和分布式系统提供了一种更高的抽象级别。它将开发人员从显式地处理锁和线程管理的工作中解脱出来,使编写并发和并行系统更加容易。
Vert.x
Java 异步非阻塞编程框架,底层基于Netty异步通信。Vert.x本身是事件驱动、非阻塞纯异步IO模型,这意味着可以使用很少的线程处理大量并发请求。