The path to growth of architects
- 语言
- 架构
- 系统
- 工具
- 大前端
- 运维
- 综合
一些语言、框架、平台、环境、工具的相关教程
hello-world
- 每种语言下的hello-world
示例awesome
- 精选列表的精选列表
JavaGuide
- 一份涵盖大部分Java
程序员所需要掌握的核心知识Java-Notes
- 计算机科学基础知识、Java
开发、后端/服务端、面试相关30-seconds-of-java
- 可以快速理解的有用的小Java
函数的精选集合javaee7-samples
-Java 7
示例30-seconds-of-java8
- 30秒收集有用的Java 8
片段java8-tutorial
- 现代Java
-Java8
指南learn-java8
- 《跟上Java 8
》视频课程源码java 11-examples
-java 11
示例代码eugenp/tutorials
-Java
常用技术Spring
、核心等技术代码java-learning
- 旨在打造在线最佳的Java
学习笔记,含博客讲解和源码实例,包括Java SE
和Java Web
DuGuQiuBai/Java
- 27天成为Java
大神
30-seconds-of-python-code
- 30秒掌握Python
实现的代码LearnPython
- 以撸代码的形式学习Python
geekcomputers/Python
-Python
学习示例awesome-python
- 精选的Python
框架,库,软件和资源的精选列表awesome-python-cn
-Python
资源大全中文版,包括:Web
框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由伯乐在线持续更新awesome-python-applications
-Python
资源仓库及首页
golang
-Go
编程语言gostart
-Go
新手入门指南go-lang-cheat-sheet
-Go
语法和功能概述example.v2
- 《Go
并发编程实战》第2版learn-go-with-tests
- 通过测试驱动开发学习Go
the-way-to-go_ZH_CN
- 《The Way to Go
》中文译本,中文正式名《Go
入门指南》go-fundamental-programming
- 《Go
编程基础》是一套针对Google
出品的Go
语言的视频语音教程,主要面向新手级别的学习者awesome-go
-go
的开源项目收集
wtfjs
-JavaScript
小技巧、难点30-seconds/30-seconds-of-code
- 精选的有用JavaScript
代码段集合,您可以在30秒或更短的时间内理解这些代码段33-js-concepts
- 每个JavaScript
开发人员应该知道33个概念33-js-concepts-ZH-CN
- 同上,中文版You-Dont-Know-JS
- 关于JavaScript
的系列丛书airbnb/javascript
-JavaScript
样式指南jstutorial
-Javascript
教程书yepbug/js-stack-from-scratch
- 从零开始构建JavaScript
技术栈verekia/js-stack-from-scratch
- 从零开始构建JavaScript
技术栈,英文版es6tutorial
- 《ECMAScript 6
入门》是一本开源的JavaScript
语言教程,全面介绍ECMAScript 6
新增的语法特性freeCodeCamp
- 开源代码库和课程。学习与数百万人一起免费编码。
TypeScript-Handbook
-TypeScript
手册是TypeScript
语言的综合指南typescript-tutorial
-TypeScript
入门教程TypeScript-WeChat-Starter
-TypeScript
和微信使用示例TypeScript
-TypeScript
语言typescript-book
- TypeScript的权威指南,可能是最好的TypeScript
书籍zhongsp/TypeScript
-TypeScript
使用手册
cheat.sh
- 帮助快速查找语法点,支持多种语言bash-guide
- 学习bash
的指南Bash-Snippets
- 重型终端用户的小型bash
脚本集合fengyuhetao/shell
-Linux
命令行与shell
脚本编程大全案例awesome-shell
- 精选的命令行框架,工具包,指南和小玩意的精选列表the-art-of-command-line
- 在一个页面中掌握命令行Bash 命令教程
-Bash
命令教程
android_guides
- 面向Android
开发人员的广泛开源指南
Kotlin-Tutorials
-Kotlin
视频教程
30-seconds-of-css
- 精选的有用CSS
片段集合,您可以在30秒或更短的时间内理解这些片段magic-of-css
- 一门CSS
课程,让你成为一名魔术师
react
- 用于构建用户界面的声明性,高效且灵活的JavaScript
库react-developer-roadmap
- 成为2019年React
开发人员的路线图react-redux-tutorial
-react-redux-tutorial
中文,目录、代码示例
vue-tutorials
- 深入了解Vue.js
nodejs/node
-Node.js JavaScript
运行时nodejs
-Node.js
基础与应用教程,适合初学者入门7-days-nodejs
- 七天学会NodeJS
N-blog
-Node.js
包教不包会
Linux 命令大全
-Linux
命令大全how-to-write-makefile
-makefile
教程the-book-of-secret-knowledge
- 一系列精彩的列表,手册/博客/黑客/单行/cli/web
工具等等。特别是对于系统和网络管理员,DevOps、Pentesters
或安全研究人员
一些好用、热门的框架
ronmamo/reflections
-Java
反射
spring-boot-samples
-Spring Boot
示例spring-boot
-spring-boot
项目spring-boot-admin
- 用于管理Spring
启动应用程序的Admin UI
spring-data-commons
-Spring Data Commons
各种数据存储特定实现之间共享的接口和代码。spring-data-examples
-Spring
数据示例项目Spring 简明教程
- 简明教程Spring Boot基础教程
-Spring Boot
基础教程Spring Boot 中文索引站
-Spring Boot
中文索引站Spring Cloud 中文文档
-Spring Cloud
中文文档Spring Cloud基础教程
-Spring Cloud
基础教程
guice
-Google
为您带来的Java 6
及更高版本的轻量级依赖注入框架
ORM框架使用优缺点
-ORM
框架使用优缺点,主要目的是为了提高开发效率mybatis-3
- 用于Java
的MyBatis 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
jsoup
-Java HTML Parser
,具有最好的DOM、CSS
和jquery
antlr4
-ANTLR
是一个功能强大的解析器生成器,用于读取,处理,执行或翻译结构化文本或二进制文件jansi
-Jansi
是一个小型java
库,允许您使用ANSI
转义序列来格式化控制台输出,甚至可以在Windows
上运行
fastjson
- 用于Java
的快速JSON
解析器/生成器protostuff
-Java
序列化库,proto
编译器,代码生成器FlatBuffers
- 相较于Protocol Buffers
,其更适用于移动设备protobuf
- 高性能,跨语言,也是google
出品jprotobuf
- 针对Java
程序开发一套简易类库,目的是简化java
语言对protobuf
类库的使用FST
- 重新实现的Java
快速对象序列化的开发包,序列化速度更快、体积更小,而且兼容JDK
原生的序列化Kryo
- 快速高效的Java
序列化框架,支持论文件、数据库或网络数据,自动深拷贝、浅拷贝MessagePack
- 基于二进制高效的对象序列化类库,跨语言,比JSON
更快速也更轻巧thrift
- 跨语言,不仅仅包括序列化,是一个远程服务调用框架,facebook
开源
Hibernate Validator
Bean Validation
- 基于Hibernate Validator
jetbrick-template-2x
-Java
模板引擎freemarker
- 老牌模板引擎velocity
- 模板引擎thymeleaf
- 性能稍微差点,不过越来越快了,不跑服务器可以直接在浏览器显示,开发起来比较爽
AutoLoadCache
-AutoLoadCache
是基于AOP+Annotation
等技术实现的高效的缓存管理解决方案,实现缓存与业务逻辑的解耦,并增加异步刷新及“拿来主义机制”,以适应高并发环境下的使用
ElasticSearch
- 基于Lucene RESTful web
接口的搜索服务器Solr
- 高性能,基于Lucene
的全文搜索服务器Lucene
- 一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎Nutch
- 提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和Web
爬虫
gecco
- 易用的轻量化网络爬虫webmagic
- 适用于Java
的可扩展Web
爬网程序框架WebMagic
- 国产,完全模块化的设计,支持多线程抓取,分布式抓取,并支持自动重试、自定义UA/cookie
等功能Heritrix
- 最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑jsoup
- 一款Java
的HTML
解析器,可直接解析URL
地址、HTML
文本内容crawler4j
- 提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫WebCollector
- 一个无须配置、便于二次开发爬虫内核,它提供精简的的API
,只需少量代码即可实现一个功能强大的爬虫
zxing
-ZXing(Zebra Crossing)
用于Java/Android
的条形码扫描库
elasticsearch-analysis-ik
-IK Analysis
插件将Lucene IK
分析器集成到elasticsearch
中,支持自定义词典ansj_seg
-ansj
分词.ict
的真正java
实现。分词效果速度都超过开源版的ict
, 中文分词、人名识别、词性标注、用户自定义词典HanLP
- 自然语言处理、中文分词、词性标注、命名实体识别、依存句法分析、新词发现、关键词短语提取、自动摘要、文本分类聚类、拼音简繁
Vert.x
-Vert.x
是一个用于在JVM
上构建响应式应用程序的工具包。Vert.x
框架基于事件和异步,依托于全异步Java
服务器Netty
,并扩展了很多其他特性,以其轻量、高性能、支持多语言开发而备受开发者青睐
mockito
- 用Java
编写的单元测试最流行的Mocking
框架,允许使用自动化的单元测试创建和测试双对象,以达到测试驱动开发和行为驱动开发的目的JUnit
- 最常使用的单元测试工具TestNG
- 主要功能是覆盖范围更广的测试分类,如单元、功能性、端到端,一体化等
guava
- 适用于Java
的Google
核心库retrolambda
- 将Java 8
的lambda
表达式移植到Java
7、6和5中resilience4j
-Resilience4j
是专为Java8
和函数式编程设计的容错库Apache Commons 工具类介绍及简单使用
-Apache Commons
工具类介绍及简单使用Google guava 中文教程
-Google guava
中文教程
java-native-access/jna
-JNA
为Java
程序提供了对本机共享库的轻松访问,而无需编写除Java
代码之外的任何内容,JNA
允许您使用自然Java
方法调用直接调用本机函数
log4j 详细讲解
-log4j
详细讲解log4j2 实际使用详解
-log4j2
实际使用详解Log4j1,Logback以及Log4j2性能测试对比
-Log4J
异步日志性能优异最全LogBack 详解、含java案例和配置说明
- 最全LogBack
详解、含java
案例和配置说明commons-logging
- 日志接口,会自动装载具体的日志系统,采用ClassLoader
寻找和载入底层的日志库,没有第三方会使用JDK
自带slf4j
- 日志接口,通过各种桥接包判断实现,在编译时静态绑定真正的日志库
grpc-java
-Java gRPC
实现,基于HTTP/2
的RPC
spring mvc
- 类加个@RestController
或者方法加个@ResponseBody
jersey
- 实现了JAX-RS
规范resteasy
-JBoss
项目,实现了JAX-RS
规范,性能高
ActiveMQ
- 完全支持JMS1.1
和J2EE 1.4
规范的消息队列RabbitMq
-Erlang
编写,在AMQP
基础上完整的,可复用的企业消息系统kafka
-scala
编写的高吞吐量的分布式发布订阅消息系统,常用于日志RocketMQ
- 阿里巴巴的MQ
中间件,在其多个产品下使用,并能够撑住双十一的大流量Apache Pulsar
- 雅虎开发的企业级的发布订阅消息系统Apache DistributedLog
-Twitter
开发的一个低延时(毫秒级)、高吞吐的分布式复制日志流系统
ASM
- 是一个Java
字节码操控框架。它能够以二进制形式修改已有类或者动态生成类、性能高,但不如javassist
简单Javassist
- 是一个开源的分析、编辑和创建Java
字节码的类库,无须了解JVM指令,java
编码即可jd-gui
-java
反编译jbe
-java
字节码修改工具
loguru
-Python
日志记录变得简单
scrapy
-Scrapy
一个用于Python
的快速高级Web
爬行和抓取框架
go-ansi
-Go
语言的Windows
可移植ANSI
转义序列实用程序sarama
-Sarama
是Apache Kafka 0.8
的Go
库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
等
grpc-web
-Golang
和TypeScript
的gRPC Web
实现grpc-web
- 适用于Web
客户端的gRPC
dayjs
-Day.js 2KB
不可变日期库替代Moment.js
,具有相同的现代API
ReLaXed
- 使用Web
技术创建PDF
文档standard
-JavaScript
代码规范,自带linter
代码自动修正
jq
- 从文本JSON
字符串读取数据的shell
工具oh-my-zsh
- 一个令人愉快的社区驱动(有1,200多个贡献者)框架,用于管理zsh配置。包括200多个可选插件(rails
,git
,OSX
,hub
,capistrano
,brew
,ant
,php
,python
等),超过140个主题,还有一个自动更新工具,使其易于跟上随着社区的最新更新
NES.css
-NES.css
是一款 NES-风格(8位机) 的CSS
框架
expressjs/express
-Node
的快速,无偏见,极简主义的Web
框架。
denoland/deno
- 下一代Node.js
Tencent/weui
-WeChat
官方设计团队的UI
库包括移动Web应用程序中最有用的小部件/模块sdc-alibaba/SUI-Mobile
- 阿里巴巴国际UED
前端出品的移动端UI
库,轻量精美
一些好用、热门的应用
auto
-Java
的源代码生成器的集合hsweb-framework
-hsweb
是一个用于快速搭建企业后台管理系统的基础项目,集成一揽子便捷功能arthas
-Java
诊断利器Arthas
JRebel
- 收费,idea,eclipse,netbeans
都有它的插件spring-loaded
-spring
开源热更新工具spring-boot-devtools
-spring boot
子模块,热更新工具HotswapAgent
- 免费开源热更新
React Starter Kit
- 同构Web应用程序样板(Node.js
,Express
,GraphQL
,React.js
,Babel
,PostCSS
,Webpack
,Browsersync
)
eva-icons
- 一包超过480个精美的开源图标quicklink
- 在谷歌浏览器预加载文件,提高访问速度carlo
-Node
和浏览器之间进行通信squoosh
- 在浏览器中使用同类最佳的编解码器缩小图像
pprof
- 一个开源goLang
的性能分析工具
一些好用、热门的平台
testcontainers-java
-Testcontainers
是一个支持JUnit
测试的Java
库,提供常见数据库,Selenium Web
浏览器或可以在Docker
容器中运行的任何其他东西的轻量级,一次性实例docker-java
-Java Docker API
客户端jib
- 为Java
应用程序构建docker
容器映像
flutter
-Flutter
可以轻松快速地构建漂亮的移动应用程序
taro
- 多端统一开发框架,支持用React
的开发方式编写一次代码,生成能运行在微信/百度/支付宝/字节跳动小程序、H5
、React Native
等的应用
electron
- 使用JavaScript
,HTML
和CSS
构建跨平台桌面应用程序,此应用程序适用于Windows
,macOS
和Linux
操作系统electron-api-demos-Zh_CN
- 一个交互式的桌面应用程序,通过示例代码演示了Electron API
的核心特性
facebook/create-react-app
- 通过命令行快速创建react
应用ant-design
- 企业级UI
设计语言和React
实现proton-native
- 适用于跨平台本机桌面应用的React
环境
vuejs/vue
-Vue.js
是一个渐进的,可逐步采用的JavaScript
框架,用于在Web
上构建UI
element
- 适用于Web
的Vue.js 2.0 UI
工具包vue2-elm
- 基于vue2 + vuex
构建一个具有 45 个页面的大型单页面应用vuido
- 使用Vue.js
的本机桌面应用程序
介绍当下流行的技术模块,如大数据、区块链、人工智能等
Storm官方网站
-Storm
官方网站Storm最详细的入门教程
-Storm
最详细的入门教程Flink基本原理介绍
-Flink
基本原理介绍Kafka Stream调研:一种轻量级流计算模式
-Kafka Stream
调研:一种轻量级流计算模式
适用场景
- 广告相关实时统计
- 推荐系统用户画像标签实时更新
- 线上服务健康状况实时监测
- 实时榜单
- 实时数据统计
用通俗易懂的话说下hadoop
- 用通俗易懂的话说下hadoop
是什么,能做什么史上最详细的Hadoop环境搭建
- 史上最详细的Hadoop
环境搭建HDFS基本原理
-Hadoop
学习——HDFS
基本原理用通俗易懂的大白话讲解Map/Reduce原理
- 用通俗易懂的大白话讲解Map/Reduce
原理简单的map-reduce的java例子
- 简单的map-reduce
的java
例子初步掌握Yarn的架构及原理
- 初步掌握Yarn
的架构及原理
Spark(一): 基本架构及原理
-Spark
(一): 基本架构及原理
lhartikk/naivechain
- 200行代码中的区块链实现sunysen/naivechain
- 200行代码中的区块链实现SimpleCoin
- 只是一个非常简单,不安全和不完整的加密货币区块链实现,用Python
作为教育材料。换句话说,一个简单的比特币克隆bitcoinj
- 用于处理比特币的库cryptocurrency
- 简单的Java库与比特币交互mipengchong/blockchain
- 免费分享区块链白皮书,涉及各门各派
blockchain_guide
- 介绍区块链相关技术,从理论到实践,比特币,以太币和超级边界Composer
-Composer
是构建区块链业务网络的框架caliper
- 区块链基准框架,用于衡量多个区块链解决方案的绩效hyperledger_on_swarm
-hyperledger fabric docker
集群fabric-explorer
-Fabric-explorer
是一个简单,功能强大,可维护的开源结构浏览器balance-transfer-java
- 超级账本转账示例fabric-starter
-Hyperledger Fabric
的入门应用程序和部署脚本yeasy/hyperledger_code_fabric
-hyperledger fabric
项目的代码分析shanlusun/blockchain
- 在区块链上学习,一步一步awesome-blockchain-cn
- 收集所有区块链(BlockChain
)技术开发相关资料,包括Fabric
和Ethereum
开发资料blockchain-tutorial
- 区块链教程
go-ethereum
- 官方Go
实施以太坊协议ethereumbook
- 掌握以太坊
eos
- 一个开源的智能合约平台
bert
-TensorFlow
代码和BERT
预训练模型DeepLearning-500-questions
- 深度学习500问,以问答形式对常用的概率知识、线性代数、机器学习、深度学习、计算机视觉等热点问题进行阐述,以帮助自己及有需要的读者machine-learning-cheat-sheet
- 机器学习中的经典方程和图表Deeplearning4j
-Deeplearning4j,ND4J,DataVec
等 -Java/Scala
的深度学习和线性代数与GPU + Spark
doubleview/data-structure
- 基于java
语言的数据结构及算法实现,LeetCode
算法示例Play-with-Data-Structures
-Java
语言玩转数据结构示例代码githubofrico/DataStructure
- 常用数据结构及其算法的Java
实现,包括但不仅限于链表、栈,队列,树,堆,图等经典数据结构及其他经典基础算法(如排序等)Algorithms-and-Data-Structures-in-Java
-Java
中的算法和数据结构datastructure
- 用Java
实现的数据结构暨算法,同时对其进行了测试wangkuiwu/datastructs_and_algorithm
-C/C++/Java
中的数据结构和算法介绍与实现
timtadh/data-structures
-Go
语言实现数据结构
python_data_structures_and_algorithms
-Python
中文数据结构和算法教程Python-and-Algorithms-and-Data-Structures
-Python
书籍中的算法和数据结构python-data-structure-cn
-python
中文版数据结构
data_structures_and_algorithms_using_javascript
-JavaScript
数据结构和算法itsy-bitsy-data-structures
-JS
数据结构
TheAlgorithms/Java
- 所有算法都用Java实现kdn251/interviews
- Java实现算法Algorithms
- 算法4 所有练习题的Java
实现LeetCodeAnimation
- 用动画的形式呈现解LeetCode
算法题目的思路pedrovgs/Algorithms
- 用Java
编写的一些常见算法问题的解决方案
aQuaYi/LeetCode-in-Go
- 针对LeetCode
算法问题的解决方案,100%
覆盖率,不断更新brianway/algorithms-learning
- 算法学习笔记和LeetCode
解决方案soulmachine/algorithm-essentials
- 算法精粹—举一反三,抛弃题海战术
JS-Sorting-Algorithm
- 一本关于排序算法的GitBook
在线书籍 《十大经典排序算法》,使用JavaScript & Python & Go & Java
实现linyiqun/DataMiningAlgorithm
- 数据挖掘18大算法实现以及其他相关经典DM
算法geguofeng/algorithm-learning
- 算法与数据结构学习,《程序员代码面试指南》和LintCode
刷题trekhleb/javascript-algorithms
- 在JavaScript
中实现的算法和数据结构,包含解释和进一步读数的链接
Python
- 在Python
中算法实现
java_design_patterns
-Java
实现的面向对象设计模式示例java-design-patterns
- 用Java
实现的设计模式Spring-涉及到的设计模式汇总
-Spring
-涉及到的设计模式汇总Mybatis使用的设计模式
-Mybatis
使用的设计模式
Design-Patterns-in-Javascript
- 设计模式应用于Javascript
代码
python-patterns
-Python
中的一系列设计模式/习语design-patterns-for-humans
- 设计模式的超简化解释
go-patterns
-Go
设计模式,食谱和习语的精选列表
浅谈我对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 — Command Query Responsibility Seperation
领域驱动设计系列 (六):CQRS
- 核心思想:读写分离(查询和更新在不同的方法中),不同的流程只是不同的设计方式,CQ
代码分离,分布式环境中会有明显体现(有冗余数据的情况下),目的是为了高性能;DDD CQRS架构和传统架构的优缺点比较
- 最终一致的设计理念;依赖于高可用消息中间件CQRS架构简介
- 一个实现CQRS
的抽象案例深度长文:我对CQRS/EventSourcing架构的思考
-CQRS
模式分析 + 12306 抢票案例
贫血,充血模型的解释以及一些经验
- 失血模型:老子和儿子分别定义,相互不知道,二者实体定义中完全没有业务逻辑,通过外部
Service
进行关联 - 贫血模型:老子知道儿子,儿子也知道老子;部分业务逻辑放到实体中;优点:各层单项依赖,结构清楚,易于维护;缺点:不符合
OO
思想,相比于充血模式,Service
层较为厚重; - 充血模型:和贫血模型类似,区别在于如何划分业务逻辑。优点:
Service
层比较薄,只充当Facade
的角色,不和DAO
打交道、复合OO
思想;缺点:非单项依赖,DO
和DAO
之间双向依赖、和Service
层的逻辑划分容易造成混乱。 - 肿胀模式:是一种极端情况,取消
Service
层、全部业务逻辑放在DO
中;优点:符合OO
思想、简化了分层;缺点:暴露信息过多、很多非DO
逻辑也会强行并入DO
。这种模式应该避免。 - 作者主张使用贫血模式
- 失血模型:老子和儿子分别定义,相互不知道,二者实体定义中完全没有业务逻辑,通过外部
TODO
reactor
-spring
社区开源,在spring 5.0
直接引入
RxJava
- 安卓上用的特别多,特别与RxAndroid,Retrofit
等结合使用
一篇的比较全面的 RxJava2 方法总结
- 一篇的比较全面的RxJava2
方法总结RxJava2:背压和Flowable
-RxJava2
:背压和Flowable
RxJava2:使用 Subject
-RxJava2
:使用Subject
vert.x
- 基于netty
,可以通过它使用JavaScript、Ruby、Groovy、Java
,甚至是混合语言来编写应用
DODAF2.0方法论
-DODAF2.0
方法论DODAF2.0之能力视角如何落地
-DODAF2.0
之能力视角如何落地
无需过多关系服务器的服务架构理念。
什么是Serverless无服务器架构?
-Serverless
不代表出去服务器,而是去除对服务器运行状态的关心;Serverless
代表一思维方式的转变,从“构建一套服务在一台服务器上,对对个事件进行响应转变为构建一个为服务器,来响应一个事件”;Serverless
不代表某个具体的框架如何理解Serverless?
- 依赖于Baas ((Mobile) Backend as a Service)
和Faas (Functions as a service)
什么是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
支持Envoy
和Istio
的API
,可以和Istio
集成
UML教程
- 掌握UML
,并在软件设计中合理使用
从架构设计,到应用层调优,再深入了解底层原理,扎实的基本功
Java-concurrency
-Java
并发知识合集并发知识图谱
-JAVA
并发知识图谱并发优化 - 降低锁颗粒
- 降低锁颗粒
事务 ACID 特性
- 数据库事务ACID
特性事务的隔离级别
- 理解事务的4种隔离级别数据库事务的四大特性及事务隔离级别
- 数据库事务的四大特性及事务隔离级别MySQL的InnoDB的幻读问题
-MySQL
的InnoDB
的幻读问题一篇文章带你读懂MySQL和InnoDB
- 图解脏读、不可重复读、幻读问题数据一致性:接口调用一致性
- 接口调用一致性
40个Java多线程问题总结
- 40个Java
多线程问题总结Java并发编程安全
-Java
并发编程——线程安全及解决机制简介
Java中的锁分类
-Java
中的锁分类:主要包括synchronized
、ReentrantLock
和ReadWriteLock
发之AQS详解
-Java
并发之AQS
详解Java 中信号量 Semaphore
- 有数量控制 申请用acquire
,申请不要则阻塞;释放用release
Java开发中的Mutex vs Semaphore
- 简单的说就是Mutex
是排它的,只有一个可以获取到资源,Semaphore
也具有排它性,但可以定义多个可以获取的资源的对象公平锁与非公平锁
- 默认情况下ReentrantLock
和synchronized
都是非公平锁。ReentrantLock
可以设置成公平锁。悲观锁:MySQL悲观锁&乐观锁
-MySQL
悲观锁/乐观锁悲观锁:select.. for update导致的数据库死锁分析
-Mysql
查询语句使用select.. for update
导致的数据库死锁分析悲观锁:Mysql并发时经典常见的死锁原因及解决方法
-Mysql
并发时经典常见的死锁原因及解决方法乐观锁的一种实现方式CAS
- 和MySQL
乐观锁方式相似,只不过是通过和原值进行比较ABA 问题:Java CAS 和ABA问题
-Java CAS
和ABA
问题ABA 问题:Java 中 ABA问题及避免
-AtomicStampedReference
和AtomicStampedReference
可重入锁和不可重入锁:可重入锁和不可重入锁
- 通过简单代码举例说明可重入锁和不可重入锁。可重入锁指同一个线程可以再次获得之前已经获得的锁。可重入锁可以用户避免死锁。Java
中的可重入锁:synchronized
和java.util.concurrent.locks.ReentrantLock
可重入锁和不可重入锁:ReenTrantLock可重入锁(和synchronized的区别)总结
-synchronized
使用方便,编译器来加锁,是非公平锁。ReenTrantLock
使用灵活,锁的公平性可以定制。相同加锁场景下,推荐使用synchronized
。互斥锁和共享锁:ReadWriteLock场景应用
- 互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock
是互斥锁,ReadWriteLock
中的写锁是互斥锁。 共享锁:可以有多个线程同时或的锁。比如,Semaphore
、CountDownLatch
是共享锁,ReadWriteLock
中的读锁是共享锁。
JAVA中写时复制(Copy-On-Write) Map实现
- 实现读写分离,读取发生在原始数据上,写入发生在副本上。不用加锁,通过最终一致实现一致性。聊聊并发-Java中的Copy-On-Write容器
- 可以对CopyOnWrite
容器进行并发的读,而不需要加锁。CopyOnWrite
并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。
线程安全的无锁RingBuffer的实现
- 线程安全的无锁RingBuffer
的实现,一个读线程,一个写线程
死锁四个必要条件的合理解释
- 互斥、持有、不可剥夺、环形等待Java如何查看死锁?
-JConsole
可以识别死锁Java多线程系列:死锁及检测
-jstack
可以显示死锁
GTS:微服务架构下分布式事务解决方案
-GTS
微服务架构下分布式事务解决方案
任何脱离细节的ppt
架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题
15天的性能优化工作,5方面的调优经验
- 代码层面、业务层面、数据库层面、服务器层面、前端优化系统性能优化的几个方面
- 系统性能优化的几个方面
JVM性能调优监控工具
-JVM
性能调优监控工具jps
、jstack
、jmap
、jhat
、jstat
、hprof
使用详解九大Java性能调试工具,必备至少一款
- 九大Java
性能调试工具,必备至少一款janus 性能优化与 JVM 调优实践
-janus
性能优化与JVM
调优实践jmh
- 性能微基准测试工具
HTTP缓存机制
-HTTP
缓存机制
主流Java数据库连接池比较与开发配置实战
- 主流Java
数据库连接池比较与开发配置实战
CDN加速原理
-CDN
加速原理国内有哪些比较好的 CDN?
- 国内有哪些比较好的CDN
- zuul性能调优-使用okhttp替代httpclient -
zuul性能调优
Ngnix的基本学习-多进程和Apache的比较
-Nginx
通过异步非阻塞的事件处理机制实现高并发。Apache
每个请求独占一个线程,非常消耗系统资源。事件驱动适合于IO
密集型服务(Nginx
),多进程或线程适合于CPU
密集型服务(Apache
),所以Nginx
适合做反向代理,而非Web
服务器使用。Nginx与Apache的对比以及优缺点
-nginx
只适合静态和反向代理,不适合处理动态请求OpenResty官方网站
-OpenResty
官方网站浅谈 OpenResty
- 浅谈OpenResty
,通过Lua
模块可以在Nginx
上进行开发agentzh 的 Nginx 教程
-agentzh
的Nginx
教程Tengine官方网站
-Tengine
官方网站Apache Httpd官方网站
-Apache Httpd
官方网站
Tomcat
Tomcat原理详解及请求过程
-TOMCAT
原理详解及请求过程Tomcat服务器原理详解
-Tomcat
服务器原理详解Tomcat 系统架构与设计模式工作原理
-Tomcat
系统架构与设计模式工作原理四张图带你了解Tomcat系统架构
- 四张图带你了解Tomcat
系统架构JBoss vs. Tomcat: 选择Java服务器
-Tomcat
是轻量级的Serverlet
容器,没有实现全部JavaEE
特性(比如持久化和事务处理),但可以通过其他组件代替,比如Spring
。Jboss
实现全部了JavaEE
特性,软件开源免费、文档收费。Tomcat 调优方案
- 启动NIO
模式(或者APR
),调整线程池;禁用AJP
连接器(Nginx+tomcat
的架构,不需要AJP
)tomcat http协议与ajp协议
-tomcat http
协议与ajp
协议AJP与HTTP比较和分析
-AJP
协议(8009端口)用于降低和前端Server
(如Apache
,而且需要支持AJP
协议)的连接数(前端),通过长连接提高性能。并发高时,AJP
协议优于HTTP
协议
Jetty
Jetty 的工作原理以及与 Tomcat 的比较
-Jetty
的工作原理以及与Tomcat
的比较Jetty和tomcat优势比较
- 架构比较:Jetty
的架构比Tomcat
的更为简单;性能比较:Jetty
和Tomcat
性能方面差异不大,Jetty
默认采用NIO
结束在处理I/O
请求上更占优势,Tomcat
默认采用BIO
处理I/O
请求,Tomcat
适合处理少数非常繁忙的链接,处理静态资源时性能较差;其他方面:Jetty
的应用更加快速,修改简单,对新的Servlet
规范的支持较好;Tomcat
对JEE
和Servlet
支持更加全面。
有关网络协议、安全、服务的框架和工具
Vamei/Protocol-Forest-Vamei
- 协议森林
OSI 七层协议
OSI七层协议模型、TCP/IP四层模型
-OSI
七层协议模型、TCP/IP
四层模型学习笔记
TCP/IP
深入浅出 TCP/IP 协议
- 深入浅出TCP/IP
协议TCP协议中的三次握手和四次挥手
-TCP
协议中的三次握手和四次挥手
HTTP
http协议详解
-http
协议详解(超详细)
HTTP2.0
HTTP 2.0 原理详细分析
-HTTP 2.0
原理详细分析HTTP 2.0 的基本单位为二进制帧
-HTTP 2.0
利用二进制帧负责传输;多路复用
HTTPS
https原理通俗了解
- 使用非对称加密协商加密算法;使用对称加密方式传输数据;使用第三方机构签发的证书,来加密公钥,用于公钥的安全传输、防止被中间人串改八大免费SSL证书
- 八大免费SSL
证书-给你的网站免费添加Https
安全加密
web优化必须了解的原理之I/o的五种模型和web的三种工作模式
-web
优化必须了解的原理之I/O
的五种模型和web
的三种工作模式。五种I/O
模型:阻塞I/O
,非阻塞I/O
,I/O
复用、事件(信号)驱动I/O
、异步I/O
,前四种I/O
属于同步操作,I/O
的第一阶段不同、第二阶段相同,最后的一种则属于异步操作;三种Web Server
工作方式:Prefork
(多进程)、Worker
方式(线程方式)、Event
方式。select、poll、epoll之间的区别总结
-select
,poll
,epoll
本质上都是同步I/O
,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。select
有打开文件描述符数量限制,默认1024(2048 for x64)
,100万并发,就要用1000个进程、切换开销大;poll
采用链表结构,没有数量限制。select
,poll
“醒着”的时候要遍历整个fd
集合,而epoll
在“醒着”的时候只要判断一下就绪链表是否为空就行了,通过回调机制节省大量CPU
时间;select
,poll
每次调用都要把fd集合从用户态往内核态拷贝一次,而epoll
只要一次拷贝。poll
会随着并发增加,性能逐渐下降,epoll
采用红黑树结构,性能稳定,不会随着连接数增加而降低。select,poll,epoll比较
- 在连接数少并且连接都十分活跃的情况下,select
和poll
的性能可能比epoll
好,毕竟epoll
的通知机制需要很多函数回调。深入理解Java NIO
-NIO
是一种同步非阻塞的IO
模型。同步是指线程不断轮询IO
事件是否就绪,非阻塞是指线程在等待IO
的时候,可以同时做其他任务。BIO与NIO、AIO的区别
-BIO
与NIO
、AIO
的区别两种高效的服务器设计模型
- 两种高效的服务器设计模型:Reactor
和Proactor
模型Epoll —— 使用详解(精髓)
- 使用详解Java NIO —— 深入理解
- 深入理解Java NIO
Java NIO —— 编写Socket服务器的一个例子
-Java NIO
编写Socket
服务器的一个例子Kqueue用法简介
-kqueue
用法简介
TCP/IP系列——长连接与短连接的区别
-TCP/IP
系列——长连接与短连接的区别
netty
-Netty
项目 - 事件驱动的异步网络应用程序框架async-http-client
- 用于Java
的异步Http
和WebSocket
客户端库Netty原理剖析
-Reactor
模式介绍;Netty
是Reactor
模式的一种实现对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解
- 多个物理分离的buffer,通过逻辑上合并成为一个,从而避免了数据在内存之间的拷贝
Netflix/zuul
-Zuul
是一种网关服务,可提供动态路由,监控,弹性,安全性等zuul性能调优-使用okhttp替代httpclient
-zuul
性能调优-使用okhttp
替代httpclient
完全吃透 TLS/SSL
- 完全吃透TLS/SS
retrofit
-Square,Inc。
为Android
和Java
提供类型安全的HTTP
客户端okhttp
- 适用于Android
和Java
应用程序的HTTP + HTTP/2
客户端http-request
-Java HTTP
请求库
eclipse-ee4j/jersey
-Jersey
是一个REST
框架,提供JAX-RS
参考实现等
Hessian原理分析
-Binary-RPC
不仅仅是序列化Protobuf协议的Java应用例子
-Protobuf
协议的Java
应用例子Protocol Buffers序列化协议及应用
- 关于协议的解释;缺点:可读性差简单的使用 protobuf 和 protostuff
-protostuff
的好处是不用写.proto
文件,Java
对象直接就可以序列化
有关数据库的框架和数据库相关知识
数据库的三大范式以及五大约束
- 第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;第三范式:必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)数据库事务隔离级别
- 数据库事务隔离级别数据库两大神器【索引和锁】
- 索引和锁
MySQL的InnoDB索引原理详解
-MySQL
的InnoDB
索引原理详解MySQL存储引擎--MyISAM与InnoDB区别
- 两种类型最主要的差别就是Innodb
支持事务处理与外键和行级锁myisam和innodb索引实现的不同
-myisam
和innodb
索引实现的不同
InnoDB
一篇文章带你读懂Mysql和InnoDB
- 一篇文章带你读懂Mysql
和InnoDB
InnoDB并发如此高,原因竟然在这?
-InnoDB
并发如此高
优化
MySQL36条军规
-MySQL36
条军规MYSQL性能优化的最佳20+条经验
-MYSQL
性能优化的最佳20+
条经验SQL优化之道
-SQL
优化之道Mysql数据库死锁的产生原因及解决办法
-Mysql
数据库死锁的产生原因及解决办法导致索引失效的可能情况
- 导致索引失效的可能情况MYSQL分页limit速度太慢优化方法
- 原则上就是缩小扫描范围
索引
聚集索引:MySQL 聚集索引/非聚集索引简述
-MySQL
聚集索引/非聚集索引简述聚集索引:MyISAM和InnoDB的索引实现
-MyISAM
是非聚集,InnoDB
是聚集复合索引:优点和注意事项
- 复合索引的优点和注意事项复合索引:MySQL查询where条件的顺序对查询效率的影响
-MySQL
查询where
条件的顺序对查询效率的影响自适应哈希索引:InnoDB存储引擎——自适应哈希索引
-InnoDB
存储引擎——自适应哈希索引MySQL性能优化神器 Explain 使用分析
-MySQL
性能优化神器Explain
使用分析
MongoDB 教程
-MongoDB
教程Mongodb相对于关系型数据库的优缺点
- 优点:弱一致性(最终一致),更能保证用户的访问速度;内置GridFS
,支持大容量的存储;Schema-less
数据库,不用预先定义结构;内置Sharding
;相比于其他NoSQL
,第三方支持丰富;性能优越;缺点:mongodb
不支持事务操作;mongodb
占用空间过大;MongoDB
没有如MySQL
那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方
简明 HBase 入门教程(开篇)
- 简明HBase
入门教程(开篇)深入学习HBase架构原理
- 深入学习HBase
架构原理传统的行存储和(HBase)列存储的区别
- 传统的行存储和(HBase
)列存储的区别Hbase与传统数据库的区别
- 空数据不存储,节省空间,且适用于并发HBase Rowkey设计
-HBase Rowkey
设计:rowkey
按照字典顺序排列,便于批量扫描;通过散列可以避免热点
XiaoMi/soar
-SQL
优化器和重写器opentsdb
- 可扩展的分布式时间序列数据库influxdb
- 可扩展的数据存储区,用于指标,事件和实时分析
读写分离模式
Mysql主从方案的实现
-Mysql
主从方案的实现搭建MySQL主从复制经典架构
- 搭建MySQL
主从复制经典架构Haproxy+多台MySQL从服务器(Slave) 实现负载均衡
-Haproxy
+多台MySQL
从服务器(Slave
) 实现负载均衡DRBD+Heartbeat+Mysql高可用读写分离架构
-DRBD
+Heartbeat
+Mysql
高可用读写分离架构MySQL Cluster 方式
-MySQL Cluster
方式
分片模式
分库分表需要考虑的问题及方案
- 中间件: 轻量级:sharding-jdbc
、TSharding
;重量级:Atlas
、MyCAT
、Vitess
等;问题:事务、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
客户端
缓存策略
缓存失效策略
- 缓存失效策略(FIFO 、LRU、LFU
三种算法的区别)
本地缓存
HashMap本地缓存
-HashMap
本地缓存EhCache本地缓存
- 堆内、堆外、磁盘三级缓存;可按照缓存空间容量进行设置;按照时间、次数等过期策略。Guava Cache
- 简单轻量、无堆外、磁盘缓存Nginx本地缓存
-Nginx
本地缓存Pagespeed
-Pagespeed
—懒人工具,服务器端加速分布式Bitmap实践:Naix
- 分布式Bitmap
实践:Naix
客户端缓存
浏览器端缓存
- 主要是利用Cache-Control
参数H5 和移动端 WebView 缓存机制解析与实战
-H5
和移动端WebView
缓存机制解析与实战
服务器缓存
Web缓存 nuster
- nuster cacheWeb缓存 varnish
- varnish cacheWeb缓存 squid
- squid cacheMemcached 教程
-Memcached
教程深入理解Memcached原理
- 采用多路复用技术提高并发性;slab
分配算法:memcached
给Slab
分配内存空间,默认是1MB
;分配给Slab
之后 把slab
的切分成大小相同的chunk
,Chunk
是用于缓存记录的内存空间,Chunk
的大小默认按照1.25
倍的速度递增;好处是不会频繁申请内存,提高IO
效率,坏处是会有一定的内存浪费。Memcached软件工作原理
-Memcached
软件工作原理Memcache技术分享
-Memcache
技术分享:介绍、使用、存储、算法、优化、命中率memcache 中 add 、 set 、replace 的区别
- 区别在于当key
存在还是不存在时,返回值是true
和false
的memcached全面剖析
-memcached
全面剖析Redis 教程
-Redis
教程Redis底层原理
- 使用ziplist
存储链表,ziplist
是一种压缩链表,它的好处是更能节省内存空间,因为它所存储的内容都是在连续的内存区域当中的。使用skiplist
(跳跃表)来存储有序集合对象、查找上先从高Level
查起、时间复杂度和红黑树相当,实现容易,无锁、并发性好Redis持久化方式
-RDB
方式:定期备份快照,常用于灾难恢复。优点:通过fork
出的进程进行备份,不影响主进程、RDB
在恢复大数据集时的速度比AOF
的恢复速度要快。缺点:会丢数据。AOF
方式:保存操作日志方式。优点:恢复时数据丢失少,缺点:文件大,回复慢。分布式缓存--序列3--原子操作与CAS乐观锁
- 分布式缓存--序列3--原子操作与CAS
乐观锁Redis单线程架构
-Redis
单线程架构Redis的回收策略
-Redis
的回收策略Redis高可用技术解决方案总结
-Redis
高可用技术解决方案总结Redlock算法: 使用Redis实现分布式锁的算法
-Redlock算法: 使用Redis实现分布式锁的算法
Tair官方网站
-Tair
官方网站Tair和Redis的对比
- 特点:可以配置备份节点数目,通过异步同步到备份节点;一致性Hash
算法;架构:和Hadoop
的设计思想类似,有Configserver
,DataServer
,Configserver
通过心跳来检测,Configserver
也有主备关系。
apereo/cas
-Apereo CAS
- 企业单一登录适用于所有地球人及其他人scribejava
- 适用于Java
的简单OAuth
库Apache Shiro
- 一个强大且易用的Java
安全框架,执行身份验证、授权、密码学和会话管理Spring Security
- 一个能够为基于Spring
的企业应用系统提供声明式的安全访问控制解决方案的安全框架
rabbitmq/rabbitmq-tutorials
- 以各种方式使用RabbitMQ
的教程消息队列-推/拉模式学习 & ActiveMQ及JMS学习
-RabbitMQ
消费者默认是推模式(也支持拉模式);Kafka
默认是拉模式;Push方式
:优点是可以尽可能快地将消息发送给消费者,缺点是如果消费者处理能力跟不上,消费者的缓冲区可能会溢出;Pull
方式:优点是消费端可以按处理能力进行拉去,缺点是会增加消息延迟Kafka、RabbitMQ、RocketMQ等消息中间件的对比
-Kafka、RabbitMQ、RocketMQ
等消息中间件的对比 —— 消息发送性能和区别消息总线VS消息队列
- 消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本消息的顺序
- 如何保证消费者接收消息的顺序
RabbitMQ
支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。
RabbitMQ的应用场景以及基本原理介绍
- 应用场景以及基本原理介绍消息队列之 RabbitMQ
- 消息队列RabbitMQ之消息确认机制(事务+Confirm)
- 消息确认机制
RocketMQ
Java
实现,推拉模式都是支持,吞吐量逊于Kafka
。可以保证消息顺序。
RocketMQ 实战之快速入门
- 快速入门RocketMQ 源码解析
- 源码解析
ActiveMQ
纯Java
实现,兼容JMS
,可以内嵌于Java
应用中。
ActiveMQ消息队列介绍
- 消息队列
Kafka
高吞吐量、采用拉模式。适合高IO
场景,比如日志同步。
Kafka 官方网站
- 官方网站各消息队列对比/解析
- 各消息队列对比,Kafka
深度解析,众人推荐,精彩好文Kafka分区机制介绍与示例
-Kafka
分区机制介绍与示例
Redis
消息推送
生产者、消费者模式完全是客户端行为,list
和 拉模式实现,阻塞等待采用 blpop
指令。
Redis用作消息队列
-Redis
学习笔记之十:Redis
用作消息队列
单机定时调度
linux定时任务cron配置
-linux
定时任务cron
配置Linux cron运行原理
-fork
进程 +sleep
轮询Quartz使用总结
-Quartz
使用总结Quartz源码解析
-Quartz
源码解析 —— 触发器按时启动原理quartz原理揭秘和源码解读
- 定时调度在QuartzSchedulerThread
代码中,while()
无限循环,每次循环取出时间将到的trigger
,触发对应的job
,直到调度器线程被关闭
分布式定时调度
这些优秀的国产分布式任务调度系统
- 你用过几个?opencron
、LTS
、XXL-JOB
、Elastic-Job
、Uncode-Schedule
、Antares
Quartz任务调度的基本实现原理
-Quartz
集群中,独立的Quartz
节点并不与另一其的节点或是管理节点通信,而是通过相同的数据库表来感知到另一Quartz
应用的Elastic-Job-Lite 源码解析
-Elastic-Job-Lite
源码解析Elastic-Job-Cloud 源码解析
-Elastic-Job-Cloud
源码解析
EventBus
- 适用于Android
和Java
的事件总线,可简化活动,碎片,线程,服务等之间的通信。减少代码,提高质量
Sharding Jdbc
- 分布式理论(一) - CAP定理
- 分布式理论(二) - BASE理论
- 分布式理论(三) - 2PC协议
- 分布式理论(四) - 3PC协议
- 分布式理论(五) - 一致性算法Paxos
- 分布式理论(六) - 一致性协议Raft
从分布式一致性谈到CAP理论、BASE理论
- 一致性分类:强一致(立即一致);弱一致(可在单位时间内实现一致,比如秒级);最终一致(弱一致的一种,一定时间内最终一致)。CAP
:一致性、可用性、分区容错性(网络故障引起)。BASE
:Basically Available
(基本可用)、Soft state
(软状态)和Eventually consistent
(最终一致性)。BASE
理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。
分布式锁
分布式锁的几种实现方式
- 基于数据库的分布式锁:优点:操作简单、容易理解。缺点:存在单点问题、数据库性能够开销较大、不可重入;基于缓存的分布式锁:优点:非阻塞、性能好。缺点:操作不好容易造成锁无法释放的情况;Zookeeper
分布式锁:通过有序临时节点实现锁机制,自己对应的节点需要最小,则被认为是获得了锁。优点:集群可以透明解决单点问题,避免锁不被释放问题,同时锁可以重入。缺点:性能不如缓存方式,吞吐量会随着zk集群规模变大而下降基于Zookeeper的分布式锁
- 清楚的原理描述 +Java
代码示例jedisLock—redis分布式锁实现
- 基于setnx(set if ont exists)
,有则返回false
,否则返回true
。并支持过期时间。Memcached 和 Redis 分布式锁方案
- 利用memcached
的add
(有别于set
)操作,当key
存在时,返回false
PAXOS
分布式系列文章——Paxos算法原理与推导
- 分布式系列文章——Paxos
算法原理与推导Paxos-->Fast Paxos-->Zookeeper分析
-Paxos-->Fast Paxos-->Zookeeper
分析分布式Zookeeper与Paxos
- 分布式Zookeeper
与Paxos
Zab
Zab:Zookeeper 中的分布式一致性协议介绍
-Zookeeper
中的分布式一致性协议介绍
Raft
Raft 为什么是更易理解的分布式一致性算法
- 三种角色:Leader
(领袖)、Follower
(群众)、Candidate
(候选人);通过随机等待的方式发出投票,得票多的获胜
Gossip
Gossip算法
-Gossip
算法
关于分布式事务、两阶段提交协议、三阶提交协议
- 关于分布式事务、两阶段提交协议、三阶提交协议
分布式系统:幂等性设计
- 幂等特性的作用:该资源具备幂等性,请求方无需担心重复调用会产生错误;常见保证幂等的手段:MVCC
(类似于乐观锁)、去重表(唯一索引)、悲观锁、一次性token
、序列号方式
分布式系统事务一致性解决方案
- 分布式系统事务一致性解决方案保证分布式系统数据一致性的6种方案
- 保证分布式系统数据一致性的6
种方案
利用zookeeper实现分布式leader节点选举
- 利用zookeeper
实现分布式leader
节点选举
传统事务与柔性事务
- 基于BASE
理论:基本可用、柔性状态、最终一致;解决方案:记录日志+补偿(正向补充或者回滚)、消息重试(要求程序要幂等);“无锁设计”、采用乐观锁机制
一致性哈希算法
- 一致性哈希算法
扩展设计
架构师不可不知的十大可扩展架构
- 通用的套路就是分布、缓存及异步处理可扩展性设计之数据切分
- 水平切分+垂直切分;利用中间件进行分片如,MySQL Proxy
;利用分片策略进行切分,如按照ID取模说说如何实现可扩展性的大型网站架构
- 分布式服务+消息队列大型网站技术架构(七)--网站的可扩展性架构
- 网站的可扩展性架构
稳定/高可用设计
系统设计:关于高可用系统的一些技术方案
- 可扩展:水平扩展、垂直扩展。 通过冗余部署,避免单点故障;隔离:避免单一业务占用全部资源。避免业务之间的相互影响 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框架性能大比拼dubbo
、motan
、rpcx
、gRPC
、thrift
的性能比较motan
- 新浪轻量级RPC
框架SOFARPC
- 蚂蚁金服一个高可扩展性、高性能、生产级的 Java RPC 框架, 提供了丰富的模型抽象和可扩展接口
Dubbo
Dubbo官方网站
-Dubbo
官方网站dubbo实现原理简单介绍
-dubbo
实现原理简单介绍
Thrift
Thrift官方网站
- 官方网站Thrift RPC详解
-Thrift RPC
详解
gRPC
服务端可以认证加密,在外网环境下,可以保证数据安全。
apollo
- 阿波罗是携程框架部门研发的分布式配置中心基于zookeeper实现统一配置管理
- 基于zookeeper
实现统一配置管理Spring Cloud Config 分布式配置中心使用教程
-Spring Cloud Config
分布式配置中心使用教程Servlet3.0 新特性——异步处理
-servlet
3.0 异步特性可用于配置中心的客户端
graylog2-server
-Graylog
是一个开源日志管理平台docker-elk
- 由Docker
和Compose
驱动的ELK
堆栈jenkinsci/ansicolor-plugin
-Jenkins ANSI Color Plugin
搭建ELKB日志收集系统
- 从零开始搭建一个ELKB
日志收集系统用ELK搭建简单的日志收集分析系统
- 用ELK
搭建简单的日志收集分析系统日志收集系统-探究
- 日志收集系统探究
主要职责:请求转发、安全认证、协议转换、容灾。
API网关
-API
网关介绍谈API网关的背景、架构以及落地方案
- 谈API
网关的背景、架构以及落地方案使用Zuul构建API Gateway
- 使用Zuul
构建API Gateway
Spring Cloud Gateway 源码解析
-Spring Cloud Gateway
源码解析HTTP API网关选择之一Kong介绍
-Kong
介绍
硬件负载均衡
负载均衡器技术Nginx和F5的优缺点对比
- 主要是和F5
对比软/硬件负载均衡产品
- 软/硬件负载均衡产品 你知多少?
软件负载均衡
几种负载均衡算法
- 轮寻、权重、负载、最少连接、QoS
DNS负载均衡
- 配置简单,更新速度慢Nginx负载均衡
- 简单轻量、学习成本低;主要适用于Web
应用借助LVS+Keepalived实现负载均衡
- 配置比较负载、只支持到4层,性能较高HAProxy用法详解 全网最详细中文文档
- 支持到七层(比如HTTP
)、功能比较全面,性能也不错Haproxy+Keepalived+MySQL实现读均衡负载
- 主要是用户读请求的负载均衡rabbitmq+haproxy+keepalived实现高可用集群搭建
- 高可用集群搭建
聊聊分布式存储——图解Paxos
- 图解Paxos
fescar
-Fescar
是一种易于使用,高性能,基于Java
的开源分布式事务解决方案
搜索引擎原理:倒排索引
- 搜索引擎原理:倒排索引——搜索引擎入门Lucene入门简介
-Lucene
入门简介Elasticsearch学习,请先看这一篇
-Elasticsearch
学习,请先看这一篇Elasticsearch索引原理
-Elasticsearch
索引原理Apache Solr入门教程
-Apache Solr
入门教程Elasticsearch与Solr比较
-Elasticsearch
与Solr
比较Sphinx 的介绍和原理探索
-Sphinx
的介绍和原理探索Elasticsearch
- 开源,分布式,RESTful
搜索引擎
分布式文件存储系统基本架构
- 说说分布式文件存储系统基本架构各种分布式文件系统的比较
-HDFS
:大批量数据读写,用于高吞吐量的场景,不适合小文件;FastDFS
:轻量级、适合小文件
高并发分布式系统中生成全局唯一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
开发
永不失联!如何实现微服务架构中的服务发现?
- 客户端服务发现模式:客户端直接查询注册表,同时自己负责负载均衡。Eureka
采用这种方式;服务器端服务发现模式:客户端通过负载均衡查询服务实例SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka
-CAP
支持:Consul(CA)
、zookeeper(cp)
、etcd(cp)
、euerka(ap)
;作者认为目前Consul
对Spring cloud
的支持比较好基于Zookeeper的服务注册与发现
- 优点:API
简单、Pinterest
,Airbnb
在用、多语言、通过watcher
机制来实现配置PUSH
,能快速响应配置变化使用javassist修改字节码实现eureka-client监听服务启动
- 使用javassist
修改字节码实现eureka-client
监听服务启动微服务注册中心 Eureka 架构深入解读
- 微服务注册中心Eureka
架构深入解读ZooKeeper
- 一个分布式的,开放源码的分布式应用程序协调服务,使用Paxos
算法Etcd
- 一个键值存储仓库,用于配置共享和服务发现, 使用Raft
算法Consul
-HashiCorp
公司推出的开源工具,用于实现分布式系统的服务发现与配置,使用Raft
算法Eureka
-Netflix
开源的,java
开发,基于restful
分布式服务框架学习笔记4 服务路由
- 原则:透明化路由;负载均衡策略:随机、轮询、服务调用延迟、一致性哈希、粘滞连接;本地路由有限策略:injvm
(优先调用jvm
内部的服务),innative
(优先使用相同物理机的服务),原则上找距离最近的服务;配置方式:统一注册表;本地配置;动态下发
VPS的三种虚拟技术OpenVZ、Xen、KVM优缺点比较
-VPS
的三种虚拟技术OpenVZ、Xen、KVM
优缺点比较KVM详解,经典详细深入
-KVM详解,经典详细深入讲解
KVM 虚拟机安装详解
-KVM
虚拟机安装详解Xen虚拟化基本原理详解
-Xen
虚拟化基本原理详解开源Linux容器 OpenVZ 快速上手指南
- 开源Linux
容器OpenVZ
快速上手指南Wayne
- 一个通用的基于Web
的Kubernetes
多集群管理平台vagrant-disksize
- 用于调整VirtualBox
中磁盘大小的Vagrant
插件
理解 docker 基本原理及快速入门
- 几张图帮你理解docker
基本原理及快速入门Docker 核心技术与实现原理
-Docker
核心技术与实现原理Docker 教程
-Docker
教程docker-cheat-sheet
-docker
学习教程yeasy/docker_practice
-docker
--从入门到实践docker/labs
- 这是一个学习如何使用Docker
和各种工具的教程的集合
chef-cookbooks/docker
-Docker
的chef
食谱dive
- 用于探索或查看docker
镜像中每个图层的工具docker-swarm-visualizer
-Docker Swarm
模式的可视化工具,使用Docker Remote API
、Node.JS
和D3
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-diff
:Google
开源Docker
镜像差异分析工具Kubernetes
- 谷歌开源用于自动化部署,扩展和管理集装箱化应用程序的系统
kafka-docker
-Apache Kafka
的Dockerfile
swarmprom
-Docker Swarm
仪器与Prometheus/Grafana/cAdvisor
,节点导出器和警报管理器dockprom
- 单机模式下的监控google/gvisor
- 容器运行时沙箱docker-selenium
-Selenium Grid Server
(独立,集线器和节点)的Docker
镜像oracle/docker-images
-Docker
配置,图像以及Dockerfiles for Oracle
产品和项目示例的官方来源dockerfiles
- 在桌面和服务器上使用的各种Dockerfiles
yeasy/docker-compose-files
- 一些典型的docker
组成模板。
OpenStack构架知识梳理
-OpenStack
构架知识梳理一分钟告诉你究竟DevOps是什么
- 一分钟告诉你究竟DevOps
是什么鬼?DevOps详解
-DevOps
详解
graphite-web
- 高度可扩展的实时图形系统grafana
- 用于Graphite
,InfluxDB
和Prometheus
等的精美监控和度量分析和仪表板的工具prometheus
- 监测系统和时间序列数据库sentry
- 跨平台应用程序监控,重点是错误报告incubator-skywalking
- 分布式跟踪系统和APM
(应用程序性能监视)edex-ui
- 跨平台,可定制的科幻终端模拟器,具有先进的监控和触摸屏支持监控 Linux 系统性能
- 20个命令行工具监控Linux
系统性能常用命令行监控工具 top、sar、tsar、nload
- 常用命令行监控工具开源还是商用?十大云运维监控工具横评
-Zabbix
、Nagios
、Ganglia
、Zenoss
、Open-falcon
、监控宝、 360网站服务监控、阿里云监控、百度云观测、小蜜蜂网站监测等监控报警系统案例
- 监控报警系统搭建及二次开发经验腾讯业务系统监控的修炼之路
- 控的方式:主动、被动、旁路(比如舆情监控);监控类型: 基础监控、服务端监控、客户端监控、 监控、用户端监控;监控的目标:全、块、准;核心指标:请求量、成功率、耗时
Netflix/Hystrix
-Hystrix
是一个延迟和容错库,旨在隔离对远程系统,服务和第三方库的访问点,停止级联故障,并在复杂的分布式系统中实现弹性,在这些系统中,故障是不可避免的XSS攻击原理与解决方法
-XSS
攻击原理与解决方法CSRF原理及防范
-CSRF
原理及防范SQL注入
-SQL
注入邪恶的JAVA HASH DOS攻击
- 防止邪恶的JAVA HASH DOS
攻击,利用JsonObject
上传大Json
,JsonObject
底层使用HashMap
;不同的数据产生相同的hash
值,使得构建Hash
速度变慢,耗尽CPU
一种高级的DoS攻击-Hash碰撞攻击
- 一种高级的DoS
攻击-Hash
碰撞攻击关于Hash Collision DoS漏洞:解析与解决方案
- 关于Hash Collision DoS
漏洞:解析与解决方案脚本注入:上传文件漏洞原理及防范
- 上传文件漏洞原理及防范
漏洞扫描
漏洞扫描工具: DVWA
- 漏洞扫描工具:DVWA
漏洞扫描工具: W3af
- 漏洞扫描工具:W3af
漏洞扫描工具: OpenVAS详解
- 漏洞扫描工具:OpenVAS
详解
验证码
验证码原理分析及实现
- 验证码原理分析及实现验证码滑动的实现原理详解
- 滑动验证码是根据人在滑动滑块的响应时间,拖拽速度,时间,位置,轨迹,重试次数等来评估风险淘宝滑动验证码研究
- 淘宝滑动验证码研究
DDoS
防范
学习手册:DDoS的攻击方式及防御手段
-DDoS
的攻击方式及防御手段免费DDoS攻击测试工具大合集
- 免费DDoS
攻击测试工具大合集
防雪崩利器:熔断器 Hystrix 的原理与使用
- 雪崩效应原因:硬件故障、硬件故障、程序Bug
、重试加大流量、用户大量请求;雪崩的对策:限流、改进缓存模式(缓存预加载、同步调用改异步)、自动扩容、降级;Hystrix
设计原则:资源隔离:Hystrix通过将每个依赖服务分配独立的线程池进行资源隔离, 从而避免服务雪崩;熔断开关:服务的健康状况 = 请求失败数 / 请求总数,通过阈值设定和滑动窗口控制开关;命令模式:通过继承 HystrixCommand 来包装服务调用逻辑缓存穿透,缓存击穿,缓存雪崩解决方案分析
- 缓存穿透,缓存击穿,缓存雪崩解决方案分析缓存击穿、失效以及热点key问题
- 主要策略:失效瞬间:单机使用锁;使用分布式锁;不过期;热点数据:热点数据单独存储;使用本地缓存;分成多个子key
;
“异地多活”多机房部署经验谈
- 通过自研中间件进行数据同步异地多活(异地双活)实践经验
- 注意延迟问题,多次跨机房调用会将延时放大数倍;建房间专线很大概率会出现问题,做好运维和程序层面的容错;不能依赖于程序端数据双写,要有自动同步方案;数据永不在高延迟和较差网络质量下,考虑同步质量问题;核心业务和次要业务分而治之,甚至只考虑核心业务;异地多活监控部署、测试也要跟上;业务允许的情况下考虑用户分区,尤其是游戏、邮箱业务;控制跨机房消息体大小,越小越好;考虑使用docker
容器虚拟化技术,提高动态调度能力容灾技术及建设经验介绍
- 容灾技术及建设经验介绍- 容灾演练流程 - 依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验:常见故障画像;案例:预案有效性、预案有效性、故障复现、架构容灾测试、参数调优、参数调优、故障突袭、联合演练
平滑重启应用思路:1、端流量(如vip
层);2、flush
数据(如果有)、3、重启应用
JVM安全退出(如何优雅的关闭java服务)
- 推荐推出方式:System.exit
,Kill SIGTERM
;不推荐kill-9
;用Runtime.addShutdownHook
注册钩子常见Java应用如何优雅关闭
-Java
、Spring
、Dubbo
优雅关闭方式
arthas
-Java
诊断利器Arthas
metrics
- 捕获JVM
和应用程序级指标。所以你知道发生了什么RxJava
-JVM
的Reactive Extensions
- 一个使用Java VM
的可观察序列组成异步和基于事件的程序的库Supervisor
-Supervisor
进程管理工具,是通过fork/exec
的方式将这些被管理的进程当作supervisor
的子进程来启动。TProfiler
- 一个阿里开源可以在生产环境长期使用的JVM性能分析工具greys-anatomy
-Java
问题在线诊断工具
用户隐私保护
个人隐私包括哪些
- 个人隐私包括哪些在互联网上,隐私的范围包括哪些?
- 在互联网上,隐私的范围包括哪些用户密码保存
- 用户密码保存
序列化
Lib之过?Java反序列化漏洞通用利用分析
-Lib
之过?Java
反序列化漏洞通用利用分析
加密解密
常见对称加密算法
-DES
、3DES
、Blowfish
、AES
;DES
采用 56位秘钥,Blowfish
采用1到448位变长秘钥,AES
128,192和256位长度的秘钥;DES
秘钥太短(只有56位)算法目前已经被AES
取代,并且AES
有硬件加速,性能很好常用的哈希算法
-MD5
和SHA-1
已经不再安全,已被弃用;目前SHA-256
是比较安全的基于Hash摘要签名的公网URL签名验证设计方案
- 基于Hash
摘要签名的公网URL
签名验证设计方案常见非对称加密算法
-RSA、DSA、ECDSA
(螺旋曲线加密算法);和RSA
不同的是DSA
仅能用于数字签名,不能进行数据加密解密,其安全性和RSA
相当,但其性能要比RSA
快;256
位的ECC
秘钥的安全性等同于3072位的RSA
秘钥区块链的加密技术
- 区块链的加密技术
Linux
安全
15步打造一个安全的Linux服务器
-Linux
强化论:15步打造一个安全的Linux
服务器
数据备份
网络隔离
内外网分离
- 内外网分离登录跳板机——搭建简易堡垒机
- 在内外环境中通过跳板机登录到线上主机
RBAC基于组织角色的权限设计
- 基于组织角色的权限设计权限系统与RBAC模型概述
- 权限系统与RBAC
模型概述Spring整合Shiro做权限控制模块详细案例分析
-Spring
整合Shiro
做权限控制模块详细案例分析理解OAuth 2.0
- 理解OAuth 2.0
一张图搞定OAuth2.0
- 一张图搞定OAuth2.0
双因素认证(2FA)教程
- 双因素认证(2FA
)教程单点登录原理与简单实现
- 单点登录原理与简单实现CAS单点登录框架
-CAS
单点登录框架
工欲善其事必先利其器,不管是小白,还是资深开发,玩Java
技术体系,选择好的工具,提升开发效率和团队协作效率,是必不可少的
介绍常用的开发工具IDE
ansi-econsole
-Eclipse
插件,它理解ANSI
转义序列以为Eclipse
控制台输出着色jadx
- 反编译alibaba/p3c
- 阿里巴巴Java
编码指南pmd
实现和IDE
插件
drawio-desktop
-draw.io
的官方电子版本
eleme/UETool
- 在屏幕上显示/编辑任何视图的属性。
介绍一下常用热门的文档、文件编辑器
mermaid
- 以与markdown
类似的方式生成图表和流程图editor.md
- 开源嵌入式在线markdown
编辑器(组件)markdown-toc
- 生成markdown
文件的markdown TOC
(目录)github-markdown-toc
- 为GitHub README.md
创建简单的TOC
ghtoc
- 为markdown
文件生成toc
vim-galore-zh_cn
-Vim
从入门到精通SpaceVim
- 社区驱动的模块化vim
发行版 - 最终的vim
配置Vim快捷键
- 快捷键
-
proxyee-down
-http
下载工具,基于http
代理,支持多连接分块下载。支持百度云文件分块下载 -
selenium
- 封装了各种工具和库,可实现Web
浏览器自动化 -
ChromeAppHeroes -
Chrome
插件英雄榜, 为优秀的Chrome
插件写一本中文说明书
httpie
- 现代命令行HTTP
客户端一样简单 - 用户友好的卷曲替代方案,具有直观的UI
,JSON
支持,语法突出显示,类似wget
的下载,扩展等
Maven,
持续集成是什么?
- 持续集成是什么?8个流行的持续集成工具
- 8个流行的持续集成工具开发环境、生产环境、测试环境的基本理解和区
- 开发环境、生产环境、测试环境的基本理解和区
使用Jenkins进行持续集成
- 使用Jenkins
进行持续集成jenkins
- 自动化服务器jenkinsci/ansicolor-plugin
-Jenkins ANSI Color Plugin
ansible
-Ansible
是一个极其简单的IT
自动化平台,可使您的应用程序和系统更易于部署ansible-tuto
-Ansible
教程,脚本自动化工具ansible-for-devops
- 使用Vagrant
部署到本地VM
的Ansible
示例ansible-examples
- 一些ansible playbooks
的初学者例子,展示功能以及它们如何协同工作Ansible中文权威指南
-Ansible
中文权威指南Ansible基础配置和企业级项目实用案例
-Ansible
基础配置和企业级项目实用案例
Chef的安装与使用
-Chef
的安装与使用
自动化运维工具puppet详解
- 自动化运维工具puppet
详解
Sonar,
git-recipes
- 高质量的Git
中文教程github-cheat-sheet
-Git
教程github-contributions-chart
- 生成所有Github
贡献的图像git-flight-rules
-Git
的使用方法,在遇到问题后如何处理emoji
- 提交注释添加表情muan/emoji
- 找到时候你的表情符号gitmoji
- 提交消息的表情符号指南
Confluence-收费文档管理系统
- 收费文档管理系统GitLab
Wiki
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(测试驱动开发)
- 基于测试用例编码功能代码,XP(Extreme Programming)
的核心实践;好处:一次关注一个点,降低思维负担;迎接需求变化或改善代码的设计;提前澄清需求;快速反馈
Java单元测试之JUnit篇
-Java
单元测试之JUnit
篇JUnit 4 与 TestNG 对比
-TestNG
覆盖JUnit
功能,适用于更复杂的场景单元测试主要的测试功能点
- 模块接口测试、局部数据结构测试、路径测试 、错误处理测试、边界条件测试
Apache ab 测试使用指南
-Apache ab
测试使用指南大型网站压力测试及优化方案
- 大型网站压力测试及优化方案10大主流压力/负载/性能测试工具推荐
- 10大主流压力/负载/性能测试工具推荐真实流量压测工具 tcpcopy应用浅析
- 真实流量压测工具tcpcopy
应用浅析nGrinder 简易使用教程
-nGrinder
简易使用教程
京东618:升级全链路压测方案
- 京东618:升级全链路压测方案,打造军演机器人ForceBot
饿了么全链路压测的探索与实践
- 饿了么全链路压测的探索与实践四大语言,八大框架|滴滴全链路压测解决之道
- 四大语言,八大框架|滴滴全链路压测解决之道全链路压测经验
- 全链路压测经验
技术干货 | AB 测试和灰度发布探索及实践
- 技术干货 |AB
测试和灰度发布探索及实践nginx 根据IP 进行灰度发布
-nginx
根据IP
进行灰度发布蓝绿部署、A/B 测试以及灰度发布
- 蓝绿部署、A/B
测试以及灰度发布
有关系统的设计和操作相关的知识点
计算机原理
- 操作系统基础知识——操作系统的原理,类型和结构多级缓存:从Java视角理解CPU缓存和伪共享
- 典型的CPU
有三级缓存,距离核心越近,速度越快,空间越小。L1
一般32k
,L2
一般256k
,L3 一般12M
。内存速度需要200
个CPU
周期,CPU
缓存需要1个CPU
周期。线程
- 线程的生命周期及状态转换详解协程
- 终结python
协程:从yield
到actor
模型的实现。线程的调度是由操作系统负责,协程调度是程序自行负责。与线程相比,协程减少了无谓的操作系统切换。实际上当遇到IO
操作时做切换才更有意义,(因为IO
操作不用占用CPU
),如果没遇到IO
操作,按照时间片切换。
system-design-primer
- 了解如何设计大型系统,准备系统设计面试,包括Anki
抽认卡
firecracker
- 安全、快速的microVM
,适用于无服务器计算
os-tutorial
- 如何从头开始创建操作系统
30-seconds-of-interviews
- 精选的常见面试问题集,帮助您准备下一次面试
架构设计之如何评审架构设计说明书
- 如何评审架构设计说明书人人都是架构师:非功能性需求
- 非功能性需求
架构之重构的12条军规
- 架构之重构的12
条军规
阿里巴巴Java开发手册
- 阿里巴巴Java
开发手册
为什么你做不好 Code Review?
- 为什么你做不好Code Review
,代码review
做的好,在于制度建设从零开始Code Review
- 从零开始Code Review
Code Review Checklist
- 代码审查清单Java Code Review Checklist
- 代码审查清单如何用 gitlab 做 code review
- 如何用gitlab
做code review
说说看板在项目中的应用
- 说说看板在项目中的应用
3
个角色:Product Owner(PO)
产品负责人;Scrum Master(SM)
,推动Scrum
执行;Team
开发团队
3
个工件:Product Backlog
产品TODOLIST
,含优先级;Sprint Backlog
功能开发 TODO LIST
;燃尽图;
五个价值观:专注、勇气、公开、承诺、尊重;
敏捷项目管理流程-Scrum框架最全总结!
- 敏捷项目管理流程敏捷其实很简单3---敏捷方法之scrum
- 敏捷其实很简单主流敏捷开发方法:极限编程XP
- 是一种指导开发人员的方法论
- 4大价值:
- 沟通:鼓励口头沟通,提高效率。
- 简单:够用就好。
- 反馈:及时反馈、通知相关人。
- 勇气:提倡拥抱变化,敢于重构。
- 5个原则:快速反馈、简单性假设、逐步修改、提倡更改(小步快跑)、优质工作(保证质量的前提下保证小步快跑)。
- 5个工作:阶段性冲刺;冲刺计划会议;每日站立会议;冲刺后
review
;回顾会议。
结对编程
- 边写码,边review
。能够增强代码质量、减少bug
架构师图谱
- 业务理解和抽象能力
- NB的代码能力
- 全面:1. 在面对业务问题上,架构师脑海里是否会浮现出多种技术方案;2. 在做系统设计时是否考虑到了足够多的方方面面;3. 在做系统设计时是否考虑到了足够多的方方面面;
- 全局:是否考虑到了对上下游的系统的影响。
- 权衡:权衡投入产出比;优先级和节奏控制;
关于架构优化和设计,架构师必须知道的事情
- 要去考虑的细节:模块化、轻耦合、无共享架构;减少各个组件之前的依赖、注意服务之间依赖所有造成的链式失败及影响等;基础设施、配置、测试、开发、运维综合考虑;考虑人、团队、和组织的影响如何才能真正的提高自己,成为一名出色的架构师?
- 提高自己,成为一名出色的架构师架构师的必备素质和成长途径
- 素质:业务理解、技术广度、技术深度、丰富经验、沟通能力、动手能力、美学素养;成长路径:2年积累知识、4年积累技能和组内影响力、7年积累部门内影响力、7年以上积累跨部门影响力架构设计师—你在哪层楼?
- 第一层的架构师看到的只是产品本身;第二层的架构师不仅看到自己的产品,还看到了整体的方案;第三层的架构师看到的是商业价值
- 阿里中间件博客
- 美团点评技术团队博客
- 阮一峰的网络日志
- 酷壳 - COOLSHELL-陈皓
- hellojava-阿里毕玄
- Cm's Blog
- 程序猿DD-翟永超-《Spring Cloud微服务实战》作者
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
- 免费书单推荐