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 WebDuGuQiuBai/Java- 27天成为Java大神
30-seconds-of-python-code- 30秒掌握Python实现的代码LearnPython- 以撸代码的形式学习Pythongeekcomputers/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- 通过测试驱动开发学习Gothe-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- 七天学会NodeJSN-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 UIspring-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学习之代码生成器GeneratorSpring data JPA-Hibernate二次封装,开发效率高,自动帮你完成很多东西JOOQ-DSL写法,有点类似动态语言了,感觉中小项目用起来会很爽spring data mongo- 类似spring data jpa,开发效率高,复杂操作使用MongoTemplate
jsoup-Java HTML Parser,具有最好的DOM、CSS和jqueryantlr4-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 ValidatorBean 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表达式移植到Java7、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或者方法加个@ResponseBodyjersey- 实现了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客户端的gRPCdayjs-Day.js 2KB不可变日期库替代Moment.js,具有相同的现代APIReLaXed- 使用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上构建UIelement- 适用于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:背压和FlowableRxJava2:使用 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 MesIstio-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,申请不要则阻塞;释放用releaseJava开发中的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 NIOJava 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和InnoDBInnoDB并发如此高,原因竟然在这?-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、AntaresQuartz任务调度的基本实现原理-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-rpcincubator-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 新特性——异步处理-servlet3.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 GatewaySpring Cloud Gateway 源码解析-Spring Cloud Gateway源码解析HTTP API网关选择之一Kong介绍-Kong介绍
硬件负载均衡
负载均衡器技术Nginx和F5的优缺点对比- 主要是和F5对比软/硬件负载均衡产品- 软/硬件负载均衡产品 你知多少?
软件负载均衡
几种负载均衡算法- 轮寻、权重、负载、最少连接、QoSDNS负载均衡- 配置简单,更新速度慢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实现了一些新的功能,并将其命名为Dubboxfinatra-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和D3dockerize- 简化在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的Dockerfileswarmprom-Docker Swarm仪器与Prometheus/Grafana/cAdvisor,节点导出器和警报管理器dockprom- 单机模式下的监控google/gvisor- 容器运行时沙箱docker-selenium-Selenium Grid Server(独立,集线器和节点)的Docker镜像oracle/docker-images-Docker配置,图像以及Dockerfiles for Oracle产品和项目示例的官方来源dockerfiles- 在桌面和服务器上使用的各种Dockerfilesyeasy/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诊断利器Arthasmetrics- 捕获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位变长秘钥,AES128,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创建简单的TOCghtoc- 为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-收费文档管理系统- 收费文档管理系统GitLabWiki
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 ReviewCode 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- 免费书单推荐