二叉树
每个节点最多有两个叶子节点。
完备二叉树

平衡二叉树
旁边两个子树的高度差的绝对值不超过1,并且旁边两个子树都是一棵平衡二叉树。
《浅谈数据构造-平衡二叉树》《浅谈算法和数据构造: 八 平衡查找树之2-3树》二叉查找树(BST)
二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。
《浅谈算法和数据构造: 七 二叉查找树》红黑树
《最随意马虎懂得红黑树》添加阶段后,左旋或者右旋从而再次达到平衡。《浅谈算法和数据构造: 九 平衡查找树之红黑树》B,B+,B树
MySQL是基于B+树聚拢索引组织表
《B-树,B+树,B树详解》《B-树,B+树与B树的优缺陷比较》B+树的叶子节点链表构造比较于 B-树便于扫库,和范围检索。LSM 树
LSM(Log-Structured Merge-Trees)和 B+ 树比较,是捐躯了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采取 LSM 树的构造。LSM可以快速建立索引。
《LSM树 VS B+树》B+ 树读性能好,但由于须要有序构造,当key比较分散时,磁盘寻道频繁,造成写性能较差。LSM 是将一个大树拆分成N棵小树,先写到内存(无寻道问题,性能高),在内存中构建一颗有序小树(有序树),随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历(二分查找)所有的小树,但在每颗小树内部数据是有序的。《LSM树(Log-Structured Merge Tree)存储引擎》极度的说,基于LSM树实现的HBase的写性能比MySQL高了一个数量级,读性能低了一个数量级。优化办法:Bloom filter 替代二分查找;compact 小数位大树,提高查询性能。Hbase 中,内存中达到一定阈值后,整体flush到磁盘上、形成一个文件(B+数),HDFS不支持update操作,以是Hbase做整体flush而不是merge update。flush到磁盘上的小树,定期会合并成一个大树。BitSet
常常用于大规模数据的排重检讨。
《Java Bitset类》《Java BitSet(位集)》常用算法《常见排序算法及对应的韶光繁芜度和空间繁芜度》排序、查找算法
《常见排序算法及对应的韶光繁芜度和空间繁芜度》选择排序
《Java中的经典算法之选择排序(SelectionSort)》每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列末了,直到全部记录排序完毕。冒泡排序
《冒泡排序的2种写法》相邻元素前后交流、把最大的排到末了。韶光繁芜度 O(n²)插入排序
《排序算法总结之插入排序》快速排序
《坐在马桶上看算法:快速排序》一侧比其余一侧都大或小。归并排序
《图解排序算法(四)之归并排序》分而治之,分成小份排序,在合并(重修一个新空间进行复制)。希尔排序
TODO
堆排序
《图解排序算法(三)之堆排序》排序过程便是构建最大堆的过程,最大堆:每个结点的值都大于或即是其旁边孩子结点的值,堆顶元素是最大值。计数排序
《计数排序和桶排序》和桶排序过程比较像,差别在于桶的数量。桶排序
《【啊哈!算法】最快最大略的排序——桶排序》《排序算法(三):计数排序与桶排序》桶排序将[0,1)区间划分为n个相同的大小的子区间,这些子区间被称为桶。每个桶单独进行排序,然后再遍历每个桶。
基数排序
按照个位、十位、百位、...依次来排。
《排序算法系列:基数排序》《基数排序》二分查找
《二分查找(java实现)》哀求待查找的序列有序。韶光繁芜度 O(logN)。《java实现二分查找-两种办法》while + 递归。Java 中的排序工具
《Arrays.sort和Collections.sort实现事理解析》Collections.sort算法调用的是合并排序。Arrays.sort() 采取了2种排序算法 -- 基本类型数据利用快速排序法,工具数组利用归并排序。布隆过滤器
常用于大数据的排重,比如email,url 等。 核心事理:将每条数据通过打算产生一个指纹(一个字节或多个字节,但一定比原始数据要少很多),个中每一位都是通过随机打算得到,在将指纹映射到一个大的按位存储的空间中。把稳:会有一定的缺点率。 优点:空间和韶光效率都很高。 缺陷:随着存入的元素数量增加,误算率随之增加。
《布隆过滤器 -- 空间效率很高的数据构造》《大量数据去重:Bitmap和布隆过滤器(Bloom Filter)》《基于Redis的布隆过滤器的实现》基于 Redis 的 Bitmap 数据构造。《网络爬虫:URL去重策略之布隆过滤器(BloomFilter)的利用》利用Java中的 BitSet 类 和 加权和hash算法。字符串比较
KMP 算法
KMP:Knuth-Morris-Pratt算法(简称KMP) 核心事理是利用一个“部分匹配表”,跳过已经匹配过的元素。
《字符串匹配的KMP算法》深度优先、广度优先
《广度优先搜索BFS和深度优先搜索DFS》贪心算法
《算法:贪婪算法根本》《常见算法及问题场景——贪心算法》回溯算法
《 五大常用算法之四:回溯法》剪枝算法
《α-β剪枝算法》动态方案
《详解动态方案——邹博讲动态方案》《动态方案算法的个人理解》朴素贝叶斯
《带你搞懂朴素贝叶斯分类算法》P(B|A)=P(A|B)P(B)/P(A)《贝叶斯推断及其互联网运用1》《贝叶斯推断及其互联网运用2》推举算法
《推举算法综述》《TOP 10 开源的推举系统简介》最小天生树算法
《算法导论--最小天生树(Kruskal和Prim算法)》最短路径算法
《Dijkstra算法详解》并发Java 并发
Java 并发知识合集JAVA并发知识图谱多线程
《40个Java多线程问题总结》线程安全
《Java并发编程——线程安全及办理机制简介》同等性、事务
事务 ACID 特性
《数据库事务ACID特性》事务的隔离级别
未提交读:一个事务可以读取另一个未提交的数据,随意马虎涌现脏读的情形。读提交:一个事务等其余一个事务提交之后才可以读取数据,但会涌现不可重复读的情形(多次读取的数据不一致),读取过程中涌现UPDATE操作,会多。(大多数数据库默认级别是RC,比如SQL Server,Oracle),读取的时候不可以修正。可重复读: 同一个事务里确保每次读取的时候,得到的是同样的数据,但不保障原始数据被其他事务更新(幻读),Mysql InnoDB 便是这个级别。序列化:所有事物串行处理(捐躯了效率)《理解事务的4种隔离级别》数据库事务的四大特性及事务隔离级别《MySQL的InnoDB的幻读问题 》幻读的例子非常清楚。通过 SELECT ... FOR UPDATE 办理。《一篇文章带你读懂MySQL和InnoDB》图解脏读、不可重复读、幻读问题。MVCC
《【mysql】关于innodb中MVCC的一些理解》innodb 中 MVCC 用在 Repeatable-Read 隔离级别。MVCC 会产生幻读问题(更新时非常。)《轻松理解MYSQL MVCC 实现机制》通过隐蔽版本列来实现 MVCC 掌握,一列记录创建韶光、一列记录删除韶光,这里的韶光每次只操作比当前版本小(或即是)的 行。锁
Java中的锁和同步类
《Java中的锁分类》紧张包括 synchronized、ReentrantLock、和 ReadWriteLock。《Java并发之AQS详解》《Java中旗子暗记量 Semaphore》有数量掌握申请用 acquire,申请不要则壅塞;开释用 release。《java开拓中的Mutex vs Semaphore》大略的说 便是Mutex是排它的,只有一个可以获取到资源, Semaphore也具有排它性,但可以定义多个可以获取的资源的工具。公正锁 & 非公正锁
公正锁的浸染便是严格按照线程启动的顺序来实行的,不许可其他线程插队实行的;而非公正锁是许可插队的。
《公正锁与非公正锁》默认情形下 ReentrantLock 和 synchronized 都是非公正锁。ReentrantLock 可以设置成公正锁。悲观锁
悲观锁如果利用不当(锁的条数过多),会引起做事大面积等待。推举优先利用乐不雅观锁+重试。
《【MySQL】悲观锁&乐不雅观锁》乐不雅观锁的办法:版本号+重试办法悲观锁:通过 select ... for update 进行行锁(不可读、不可写,share 锁可读不可写)。《Mysql查询语句利用select.. for update导致的数据库去世锁剖析》mysql的innodb存储引擎实务锁虽然是锁行,但它内部是锁索引的。锁相同数据的不同索引条件可能会引起去世锁。《Mysql并发时经典常见的去世锁缘故原由及办理方法》乐不雅观锁 & CAS
《乐不雅观锁的一种实现办法——CAS》和MySQL乐不雅观锁办法相似,只不过是通过和原值进行比较。ABA 问题
由于高并发,在CAS下,更新后可能此A非彼A。通过版本号可以办理,类似于上文Mysql 中提到的的乐不雅观锁。
《Java CAS 和ABA问题》《Java 中 ABA问题及避免》AtomicStampedReference 和 AtomicStampedReference。CopyOnWrite容器
可以对CopyOnWrite容器进行并发的读,而不须要加锁。CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适宜须要数据强同等性的场景。
《JAVA中写时复制(Copy-On-Write)Map实现》实现读写分离,读取发生在原始数据上,写入发生在副本上。不用加锁,通过终极同等实现同等性。《聊聊并发-Java中的Copy-On-Write容器》RingBuffer
《线程安全的无锁RingBuffer的实现【一个读线程,一个写线程】》可重入锁 & 不可重入锁
《可重入锁和不可重入锁》通过大略代码举例解释可重入锁和不可重入锁。可重入锁指同一个线程可以再次得到之前已经得到的锁。可重入锁可以用户避免去世锁。Java中的可重入锁:synchronized 和 java.util.concurrent.locks.ReentrantLock《ReenTrantLock可重入锁(和synchronized的差异)总结》synchronized 利用方便,编译器来加锁,是非公正锁。ReenTrantLock 利用灵巧,锁的公正性可以定制。相同加锁场景下,推举利用 synchronized。互斥锁 & 共享锁
互斥锁:同时只能有一个线程得到锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 共享锁:可以有多个线程同时或的锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。
《ReadWriteLock场景运用》去世锁
《“去世锁”四个必要条件的合理解释》互斥、持有、不可剥夺、环形等待。Java如何查看去世锁?JConsole 可以识别去世锁。java多线程系列:去世锁及检测jstack 可以显示去世锁。操作系统打算机事理
《操作系统根本知识——操作系统的事理,类型和构造》CPU
多级缓存
范例的 CPU 有三级缓存,间隔核心越近,速率越快,空间越小。L1 一样平常 32k,L2 一样平常 256k,L3 一样平常12M。内存速率须要200个 CPU 周期,CPU 缓存须要1个CPU周期。
《从Java视角理解CPU缓存和伪共享》进程
TODO
线程
《线程的生命周期及状态转换详解》协程
《闭幕python协程----从yield到actor模型的实现》线程的调度是由操作系统卖力,协程调度是程序自行卖力与线程比较,协程减少了无谓的操作系统切换.实际上当碰着IO操作时做切换才更故意义,(由于IO操作不用占用CPU),如果没碰着IO操作,按照韶光片切换.Linux
《Linux 命令大全》设计模式设计模式的六大原则
《设计模式的六大原则》开闭原则:对扩展开放,对修正关闭,多利用抽象类和接口。里氏更换原则:基类可以被子类更换,利用抽象类继续,不该器具体类继续。依赖倒转原则:要依赖于抽象,不要依赖于详细,针对接口编程,不针对实现编程。接口隔离原则:利用多个隔离的接口,比利用单个接口好,建立最小的接口。迪米特法则:一个软件实体应该尽可能少地与其他实体发生相互浸染,通过中间类建立联系。合成复用原则:只管即便利用合成/聚合,而不是利用继续。23种常见设计模式
《设计模式》《23种设计模式全解析》《设计模式类图与示例》运用处景
《细数JDK里的设计模式》构造型模式:适配器:用来把一个接口转化成另一个接口,如 java.util.Arrays#asList()。桥接模式:这个模式将抽象和抽象操作的实现进行理解耦,这样使得抽象和实现可以独立地变革,如JDBC;组合模式:使得客户端看来单个工具和工具的组合是同等的。换句话说,某个类型的方法同时也接管自身类型作为参数,如 Map.putAll,List.addAll、Set.addAll。装饰者模式:动态的给一个工具附加额外的功能,这也是子类的一种替代办法,如 java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap。享元模式:利用缓存来加速大量小工具的访问韶光,如 valueOf(int)。代理模式:代理模式是用一个大略的工具来代替一个繁芜的或者创建耗时的工具,如 java.lang.reflect.Proxy创建模式:抽象工厂模式:抽象工厂模式供应了一个协议来天生一系列的干系或者独立的工具,而不用指定详细工具的类型,如 java.util.Calendar#getInstance()。建造模式(Builder):定义了一个新的类来构建另一个类的实例,以简化繁芜工具的创建,如:java.lang.StringBuilder#append()。工厂方法:便是 一个返 回详细工具的方法,而不是多个,如 java.lang.Object#toString()、java.lang.Class#newInstance()。原型模式:使得类的实例能够天生自身的拷贝、如:java.lang.Object#clone()。单例模式:全局只有一个实例,如 java.lang.Runtime#getRuntime()。行为模式:任务链模式:通过把要求从一个工具通报到链条中下一个工具的办法,直到要求被处理完毕,以实现工具间的解耦。如 javax.servlet.Filter#doFilter()。命令模式:将操作封装到工具内,以便存储,通报和返回,如:java.lang.Runnable。阐明器模式:定义了一个措辞的语法,然后解析相应语法的语句,如,java.text.Format,java.text.Normalizer。迭代器模式:供应一个同等的方法来顺序访问凑集中的工具,如 java.util.Iterator。中介者模式:通过利用一个中间工具来进行分发以及减少类之间的直接依赖,java.lang.reflect.Method#invoke()。空工具模式:如 java.util.Collections#emptyList()。不雅观察者模式:它使得一个工具可以灵巧的将发送给感兴趣的工具,如 java.util.EventListener。模板方法模式:让子类可以重写方法的一部分,而不是全体重写,如 java.util.Collections#sort()。《Spring-涉及到的设计模式汇总》《Mybatis利用的设计模式》单例模式
《单例模式的三种实现 以及各自的优缺陷》《单例模式--反射--防止序列化毁坏单例模式》利用列举类型。任务链模式
TODO
MVC
《MVC 模式》模型(model)-视图(view)-掌握器(controller)IOC
《理解 IOC》《IOC 的理解与阐明》正向掌握:传统通过new的办法。反向掌握,通过容器注入工具。浸染:用于模块解耦。DI:Dependency Injection,即依赖注入,只关心资源利用,不关心资源来源。AOP
《轻松理解AOP(面向切面编程)》《Spring AOP详解》《Spring AOP的实现事理》Spring AOP利用的动态代理,紧张有两种办法:JDK动态代理和CGLIB动态代理。《Spring AOP 实现事理与 CGLIB 运用》Spring AOP 框架对 AOP 代理类的处理原则是:如果目标工具的实现类实现了接口,Spring AOP 将会采取 JDK 动态代理来天生 AOP 代理类;如果目标工具的实现类没有实现接口,Spring AOP 将会采取 CGLIB 来天生 AOP 代理类UML
《UML教程》微做事思想
《微做事架构设计》《微做事架构技能栈选型手册》康威定律
《微做事架构的理论根本 - 康威定律》定律一:组织沟通办法会通过系统设计表达出来,便是说架构的布局和组织构造会有相似。定律二:韶光再多一件事情也不可能做的完美,但总有韶光做完一件事情。一口气吃不成胖子,先搞定能搞定的。定律三:线型系统和线型组织架构间有潜在的异质同态特性。种瓜得瓜,做独立自治的子系统减少沟通本钱。定律四:大的系统组织总是比小系统更方向于分解。合久必分,分而治之。《微做事架构核⼼20讲》运维 & 统计 & 技能支持常规监控
《腾讯业务系统监控的修炼之路》监控的办法:主动、被动、旁路(比如舆情监控)监控类型: 根本监控、做事端监控、客户端监控、 监控、用户端监控监控的目标:全、块、准核心指标:要求量、成功率、耗时《开源还是商用?十大云运维监控工具横评》Zabbix、Nagios、Ganglia、Zenoss、Open-falcon、监控宝、 360网站做事监控、阿里云监控、百度云不雅观测、小蜜蜂网站监测等。《监控报警系统搭建及二次开拓履历》命令行监控工具
《常用命令行监控工具》top、sar、tsar、nload《20个命令行工具监控 Linux 系统性能》《JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof利用详解》APM
APM — Application Performance Management
《Dapper,大规模分布式系统的跟踪系统》CNCF OpenTracing,中文版紧张开源软件,按字母排序Apache SkyWalkingCATCNCF jaegerPinpointZipkin《开源APM技能选型与实战》紧张基于 Google的Dapper(大规模分布式系统的跟踪系统) 思想。统计剖析
《流量统计的根本:埋点》常用指标:访问与访客、勾留时长、跳出率、退出率、转化率、参与度《APP埋点常用的统计工具、埋点目标和埋点内容》第三方统计:友盟、百度移动、魔方、App Annie、talking data、神策数据等。《美团点评前端无痕埋点实践》所谓无痕、即通过可视化工具配置采集节点,在前端自动解析配置并上报埋点数据,而非硬编码。持续集成(CI/CD)
《持续集成是什么?》《8个盛行的持续集成工具》Jenkins
《利用Jenkins进行持续集成》环境分离
开拓、测试、天生环境分离。
《开拓环境、生产环境、测试环境的基本理解和区》自动化运维
Ansible
《Ansible中文威信指南》《Ansible根本配置和企业级项目实用案例》puppet
《自动化运维工具——puppet详解》chef
《Chef 的安装与利用》测试
TDD 理论
《深度解读 - TDD(测试驱动开拓)》基于测试用例编码功能代码,XP(Extreme Programming)的核心实践.好处:一次关注一个点,降落思维包袱;欢迎需求变革或改进代码的设计;提前澄清需求;快速反馈;单元测试
《Java单元测试之JUnit篇》《JUnit 4 与 TestNG 比拟》TestNG 覆盖 JUnit 功能,适用于更繁芜的场景。《单元测试紧张的测试功能点》模块接口测试、局部数据构造测试、路径测试 、缺点处理测试、边界条件测试 。压力测试
《Apache ab 测试利用指南》《大型网站压力测试及优化方案》《10大主流压力/负载/性能测试工具推举》《真实流量压测工具 tcpcopy运用浅析》《nGrinder 大略单纯利用教程》全链路压测
《京东618:升级全链路压测方案,打造军演机器人ForceBot》《饿了么全链路压测的探索与实践》《四大措辞,八大框架|滴滴全链路压测办理之道》《全链路压测履历》A/B 、灰度、蓝绿测试
《技能干货 | AB 测试和灰度发布探索及实践》《nginx 根据IP 进行灰度发布》《蓝绿支配、A/B 测试以及灰度发布》虚拟化
《VPS的三种虚拟技能OpenVZ、Xen、KVM优缺陷比较》KVM
《KVM详解,太详细太深入了,经典》《【图文】KVM 虚拟机安装详解》Xen
《Xen虚拟化基本事理详解》OpenVZ
《开源Linux容器 OpenVZ 快速上手指南》容器技能
Docker
《几张图帮你理解 docker 基本事理及快速入门》《Docker 核心技能与实现事理》《Docker 教程》云技能
OpenStack
《OpenStack构架知识梳理》DevOps
《一分钟见告你究竟DevOps是什么鬼?》《DevOps详解》文档管理
Confluence-收费文档管理系统GitLab?Wiki中间件Web Server
Nginx
《Ngnix的基本学习-多进程和Apache的比较》Nginx 通过异步非壅塞的事宜处理机制实现高并发。Apache 每个要求独占一个线程,非常花费系统资源。事宜驱动适宜于IO密集型做事(Nginx),多进程或线程适宜于CPU密集型做事(Apache),以是Nginx适宜做反向代理,而非web做事器利用。《nginx与Apache的比拟以及优缺陷》nginx只适宜静态和反向代理,不适宜处理动态要求。OpenResty
官方网站《浅谈 OpenResty》通过 Lua 模块可以在Nginx上进行开拓。agentzh 的 Nginx 教程Tengine
官方网站Apache Httpd
官方网站Tomcat
架构事理
《TOMCAT事理详解及要求过程》《Tomcat做事器事理详解》《Tomcat 系统架构与设计模式,第 1 部分: 事情事理》《四张图带你理解Tomcat系统架构》《JBoss vs. Tomcat: Choosing A Java Application Server》Tomcat 是轻量级的 Serverlet 容器,没有实现全部 JEE 特性(比如持久化和事务处理),但可以通过其他组件代替,比如Spring。Jboss 实现全部了JEE特性,软件开源免费、文档收费。调优方案
《Tomcat 调优方案》启动NIO模式(或者APR);调度线程池;禁用AJP连接器(Nginx+tomcat的架构,不须要AJP);《tomcat http协议与ajp协议》《AJP与HTTP比较和剖析》AJP 协议(8009端口)用于降落和前端Server(如Apache,而且须要支持AJP协议)的连接数(前端),通过长连接提高性能。并发高时,AJP协议优于HTTP协议。Jetty
《Jetty 的事情事理以及与 Tomcat 的比较》《jetty和tomcat上风比较》架构比较:Jetty的架构比Tomcat的更为大略。性能比较:Jetty和Tomcat性能方面差异不大,Jetty默认采取NIO结束在处理I/O要求上更占上风,Tomcat默认采取BIO处理I/O要求,Tomcat适宜处理少数非常繁忙的链接,处理静态资源时性能较差。其他方面:Jetty的运用更加快速,修正大略,对新的Servlet规范的支持较好;Tomcat 对JEE和Servlet 支持更加全面。缓存
《缓存失落效策略(FIFO 、LRU、LFU三种算法的差异)》本地缓存
《HashMap本地缓存》《EhCache本地缓存》堆内、堆外、磁盘三级缓存。可按照缓存空间容量进行设置。按照韶光、次数等过期策略。《Guava Cache》大略轻量、无堆外、磁盘缓存。《Nginx本地缓存》《Pagespeed—《浏览器端缓存》紧张是利用 Cache-Control 参数。《H5 和移动端 WebView 缓存机制解析与实战》做事端缓存
Web缓存
nuster - nuster cachevarnish - varnish cachesquid - squid cacheMemcached
《Memcached 教程》《深入理解Memcached事理》采取多路复用技能提高并发性。slab分配算法: memcached给Slab分配内存空间,默认是1MB。分配给Slab之后 把slab的切分成大小相同的chunk,Chunk是用于缓存记录的内存空间,Chunk 的大小默认按照1.25倍的速率递增。好处是不会频繁申请内存,提高IO效率,坏处是会有一定的内存摧残浪费蹂躏。《Memcached软件事情事理》《Memcache技能分享:先容、利用、存储、算法、优化、命中率》《memcache 中 add 、 set 、replace 的差异》差异在于当key存在还是不存在时,返回值是true和false的。《memcached全面阐发》Redis
《Redis 教程》《redis底层事理》利用 ziplist 存储链表,ziplist是一种压缩链表,它的好处是更能节省内存空间,由于它所存储的内容都是在连续的内存区域当中的。利用 skiplist(跳跃表)来存储有序凑集工具、查找上先从高Level查起、韶光繁芜度和红黑树相称,实现随意马虎,无锁、并发性好。《Redis持久化办法》RDB办法:定期备份快照,常用于灾害规复。优点:通过fork出的进程进行备份,不影响主进程、RDB 在规复大数据集时的速率比 AOF 的规复速率要快。缺陷:会丢数据。AOF办法:保存操作日志办法。优点:规复时数据丢失少,缺陷:文件大,回答慢。也可以两者结合利用。《分布式缓存--序列3--原子操作与CAS乐不雅观锁》架构
《Redis单线程架构》回收策略
《redis的回收策略》Tair
官方网站《Tair和Redis的比拟》特点:可以配置备份节点数目,通过异步同步到备份节点同等性Hash算法。架构:和Hadoop 的设计思想类似,有Configserver,DataServer,Configserver 通过心跳来检测,Configserver也有主备关系。几种存储引擎:
MDB,完备内存性,可以用来存储Session等数据。Rdb(类似于Redis),轻量化,去除了aof之类的操作,支持Restfull操作LDB(LevelDB存储引擎),持久化存储,LDB 作为rdb的持久化,google实现,比较高效,理论根本是LSM(Log-Structured-Merge Tree)算法,现在内存中修正数据,达到一定量时(和内存汇总的旧数据一同写入磁盘)再写入磁盘,存储更加高效,县比喻Hash算法。Tair采取共享内存来存储数据,如果做事挂掉(非做事器),重启做事之后,数据亦然还在。行列步队
《行列步队-推/拉模式学习 & ActiveMQ及JMS学习》RabbitMQ 消费者默认是推模式(也支持拉模式)。Kafka 默认是拉模式。Push办法:优点是可以尽可能快地将发送给消费者,缺陷是如果消费者处理能力跟不上,消费者的缓冲区可能会溢出。Pull办法:优点是消费端可以按处理能力进行拉去,缺陷是会增加延迟。《Kafka、RabbitMQ、RocketMQ等中间件的比拟 —— 发送性能和差异》总线
总线相称于在行列步队之上做了一层封装,统一入口,统一管控、简化接入本钱。
《总线VS行列步队》的顺序
《如何担保消费者吸收的顺序》RabbitMQ
支持事务,推拉模式都是支持、适宜须要可靠性传输的场景。
《RabbitMQ的运用处景以及基本事理先容》《行列步队之 RabbitMQ》《RabbitMQ之确认机制(事务+Confirm)》RocketMQ
Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以担保顺序。
《RocketMQ 实战之快速入门》《RocketMQ 源码解析》ActiveMQ
纯Java实现,兼容JMS,可以内嵌于Java运用中。
《ActiveMQ行列步队先容》Kafka
高吞吐量、采取拉模式。适宜高IO场景,比如日志同步。
官方网站《各行列步队比拟,Kafka深度解析,众人推举,精彩好文!》《Kafka分区机制先容与示例》
Redis 推送
生产者、消费者模式完备是客户端行为,list 和 拉模式实现,壅塞等待采取 blpop 指令。
《Redis学习条记之十:Redis用作行列步队》ZeroMQ
TODO
定时调度
单机定时调度
《linux定时任务cron配置》《Linux cron运行事理》fork 进程 + sleep 轮询《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-Cloud 源码解析》RPC
《从零开始实现RPC框架 - RPC事理及实现》核心角色:Server: 暴露做事的做事供应方、Client: 调用远程做事的做事消费方、Registry: 做事注册与创造的注册中央。《分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较》Dubbo
官方网站dubbo实现事理大略先容SPI TODO
Thrift
官方网站《Thrift RPC详解》支持多措辞,通过中间措辞定义接口。gRPC
做事端可以认证加密,在外网环境下,可以担保数据安全。
官方网站《你该当知道的RPC事理》数据库中间件
Sharding Jdbc
官网源码解析日志系统
日志搜集
《从零开始搭建一个ELKB日志网络系统》《用ELK搭建大略的日志网络剖析系统》《日志网络系统-探究》配置中央
Apollo - 携程开源的配置中央运用Spring Boot 和 Spring Cloud支持推、拉模式更新配置支持多种措辞《基于zookeeper实现统一配置管理》《 Spring Cloud Config 分布式配置中央利用教程》servlet 3.0 异步特性可用于配置中央的客户端
《servlet3.0 新特性——异步处理》API 网关
紧张职责:要求转发、安全认证、协议转换、容灾。
《API网关那些儿》《谈API网关的背景、架构以及落地方案》《利用Zuul构建API Gateway》《Spring Cloud Gateway 源码解析》《HTTP API网关选择之一Kong先容》网络协议
OSI 七层协议
《OSI七层协议模型、TCP/IP四层模型学习条记》TCP/IP
《深入浅出 TCP/IP 协议》《TCP协议中的三次握手和四次挥手》HTTP
《http协议详解(超详细)》HTTP2.0
《HTTP 2.0 事理详细剖析》《HTTP2.0的基本单位为二进制帧》利用二进制帧卖力传输。多路复用。HTTPS
《https事理普通理解》利用非对称加密协商加密算法利用对称加密办法传输数据利用第三方机构签发的证书,来加密公钥,用于公钥的安全传输、防止被中间人串改。《八大免费SSL证书-给你的网站免费添加Https安全加密》网络模型
《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的差异》《两种高效的做事器设计模型:Reactor和Proactor模型》Epoll
《epoll利用详解(精髓)》Java NIO
《深入理解Java NIO》《Java NIO编写Socket做事器的一个例子》kqueue
《kqueue用法简介》连接和短连接
《TCP/IP系列——长连接与短连接的差异》框架
《Netty事理阐发》Reactor 模式先容。Netty 是 Reactor 模式的一种实现。零拷贝(Zero-copy)
《对付 Netty ByteBuf 的零拷贝(Zero Copy) 的理解》多个物理分离的buffer,通过逻辑上合并成为一个,从而避免了数据在内存之间的拷贝。序列化(二进制协议)
Hessian
《Hessian事理剖析》 Binary-RPC;不仅仅是序列化Protobuf
《Protobuf协议的Java运用例子》 Goolge出品、占用空间和效率完胜其他序列化类库,如Hessian;须要编写 .proto 文件。《Protocol Buffers序列化协议及运用》关于协议的阐明;缺陷:可读性差;《大略的利用 protobuf 和 protostuff》protostuff 的好处是不用写 .proto 文件,Java 工具直接就可以序列化。数据库根本理论
关系数据库设计的三大范式
《数据库的三大范式以及五大约束》第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,也便是确保每一列的原子性;第二范式(2NF):知足1NF后,哀求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也便是说一个表只描述一件事情;第三范式:必须先知足第二范式(2NF),哀求:表中的每一列只与主键直接干系而不是间接干系,(表中的每一列只能依赖于主键);MySQL
事理
《MySQL的InnoDB索引事理详解》《MySQL存储引擎--MyISAM与InnoDB差异》两种类型最紧张的差别便是Innodb 支持事务处理与外键和行级锁《myisam和innodb索引实现的不同》InnoDB
《一篇文章带你读懂Mysql和InnoDB》优化
《MySQL36条军规》《MYSQL性能优化的最佳20+条履历》《SQL优化之道》《mysql数据库去世锁的产生缘故原由及办理办法》《导致索引失落效的可能情形》《 MYSQL分页limit速率太慢优化方法》原则上便是缩小扫描范围。索引
聚拢索引, 非聚拢索引
《MySQL 聚拢索引/非聚拢索引简述》《MyISAM和InnoDB的索引实现》MyISAM 是非聚拢,InnoDB 是聚拢
复合索引
《复合索引的优点和把稳事变》文中有一处缺点:对付复合索引,在查询利用时,最好将条件顺序按找索引的顺序,这样效率最高; select from table1 where col1=A AND col2=B AND col3=D 如果利用 where col2=B AND col1=A 或者 where col2=B 将不会利用索引
原文中提到索引是按照“col1,col2,col3”的顺序创建的,而mysql在按照最左前缀的索引匹配原则,且会自动优化 where 条件的顺序,当条件中只有 col2=B AND col1=A 时,会自动转化为 col1=A AND col2=B,以是依然会利用索引。《MySQL查询where条件的顺序对查询效率的影响》自适应哈希索引(AHI)
《InnoDB存储引擎——自适应哈希索引》explain
《MySQL 性能优化神器 Explain 利用剖析》NoSQL
MongoDB
MongoDB 教程《Mongodb相对付关系型数据库的优缺陷》优点:弱同等性(终极同等),更能担保用户的访问速率;内置GridFS,支持大容量的存储;Schema-less 数据库,不用预先定义构造;内置Sharding;比较于其他NoSQL,第三方支持丰富;性能优胜;缺陷:mongodb不支持事务操作;mongodb占用空间过大;MongoDB没有如MySQL那样成熟的掩护工具,这对付开拓和IT运营都是个值得把稳的地方;Hbase
《简明 HBase 入门教程(开篇)》《深入学习HBase架构事理》《传统的行存储和(HBase)列存储的差异》《Hbase与传统数据库的差异》空数据不存储,节省空间,且适用于并发。《HBase Rowkey设计》rowkey 按照字典顺序排列,便于批量扫描。通过散列可以避免热点。搜索引擎搜索引擎事理
《倒排索引--搜索引擎入门》Lucene
《Lucene入门简介》Elasticsearch
《Elasticsearch学习,请先看这一篇!》《Elasticsearch索引事理》
Solr
《 Apache Solr入门教程》《elasticsearch与solr比较》sphinx
《Sphinx 的先容和事理探索》性能性能优化方法论
《15天的性能优化事情,5方面的调优履历》代码层面、业务层面、数据库层面、做事器层面、前端优化。《系统性能优化的几个方面》容量评估
《联网性能与容量评估的方法论和范例案例》《互联网架构,如何进行容量设计?》评估总访问量、评估均匀访问量QPS、评估高峰QPS、评估系统、单机极限QPSCDN 网络
《CDN加速事理》《海内有哪些比较好的 CDN?》连接池
《主流Java数据库连接池比较与开拓配置实战》性能调优
《九大Java性能调试工具,必备至少一款》大数据流式打算
Storm
官方网站《最详细的Storm入门教程》Flink
《Flink之一 Flink基本事理先容》Kafka Stream
《Kafka Stream调研:一种轻量级流打算模式》运用处景
例如:
广告干系实时统计;推举系统用户画像标签实时更新;线上做事康健状况实时监测;实时榜单;实时数据统计。Hadoop
《用普通易懂的话说下hadoop是什么,能做什么》《史上最详细的Hadoop环境搭建》HDFS
《【Hadoop学习】HDFS基本事理》MapReduce
《用普通易懂的大口语讲解Map/Reduce事理》《 大略的map-reduce的java例子》Yarn
《初步节制Yarn的架构及事理》Spark
《Spark(一): 基本架构及事理》《子雨大数据之Spark入门教程(Python版)》安全web 安全
XSS
《xss攻击事理与办理方法》CSRF
《CSRF事理及戒备》SQL 注入
《SQL注入》Hash Dos
《邪恶的JAVA HASH DOS攻击》利用JsonObject 上传大Json,JsonObject 底层利用HashMap;不同的数据产生相同的hash值,使得构建Hash速率变慢,耗尽CPU。《一种高等的DoS攻击-Hash碰撞攻击》《关于Hash Collision DoS漏洞:解析与办理方案》脚本注入
《上传文件漏洞事理及戒备》漏洞扫描工具
《DVWA》W3afOpenVAS详解验证码
《验证码事理剖析及实现》《详解滑动验证码的实现事理》滑动验证码是根据人在滑动滑块的相应韶光,拖拽速率,韶光,位置,轨迹,重试次数等来评估风险。《淘宝滑动验证码研究》DDoS 戒备
《学习手册:DDoS的攻击办法及防御手段》《免费DDoS攻击测试工具大合集》用户隐私信息保护
用户密码非明文保存,加动态salt。身份证号,手机号如果要显示,用 “” 替代部分字符。联系办法在的显示与否由用户自己掌握。TODO《个人隐私包括哪些》《在互联网上,隐私的范围包括哪些?》《用户密码保存》序列化漏洞
《Lib之过?Java反序列化漏洞通用利用剖析》加密解密
对称加密
《常见对称加密算法》DES、3DES、Blowfish、AESDES 采取 56位秘钥,Blowfish 采取1到448位变长秘钥,AES 128,192和256位长度的秘钥。DES 秘钥太短(只有56位)算法目前已经被 AES 取代,并且 AES 有硬件加速,性能很好。哈希算法
《常用的哈希算法》MD5 和 SHA-1 已经不再安全,已被弃用。目前 SHA-256 是比较安全的。《基于Hash择要署名的公网URL署名验证设计方案》非对称加密
《常见非对称加密算法》RSA、DSA、ECDSA(螺旋曲线加密算法)和 RSA 不同的是 DSA 仅能用于数字署名,不能进行数据加密解密,其安全性和RSA相称,但其性能要比RSA快。256位的ECC秘钥的安全性等同于3072位的RSA秘钥。《区块链的加密技能》做事器安全
《Linux强化论:15步打造一个安全的Linux做事器》数据安全
数据备份
TODO
网络隔离
内外网分离
TODO
登录跳板机
在内外环境中通过跳板机登录到线上主机。
《搭建大略单纯堡垒机》授权、认证
RBAC
《基于组织角色的权限设计》《权限系统与RBAC模型概述》《Spring整合Shiro做权限掌握模块详细案例剖析》OAuth2.0
《理解OAuth 2.0》《一张图搞定OAuth2.0》双成分认证(2FA)
2FA - Two-factor authentication,用于加强登录验证
常用做法是 登录密码 + 手机验证码(或者令牌Key,类似于与网银的 USB key)
【《双成分认证(2FA)教程》】(http://www.ruanyifeng.com/blog/2017/11/2fa-tutorial.html)单点登录(SSO)
《单点登录事理与大略实现》CAS单点登录框架常用开源框架开源协议
《开源协议的选择》如何选择一个开源软件协议日志框架
Log4j、Log4j2
《log4j 详细讲解》《log4j2 实际利用详解》《Log4j1,Logback以及Log4j2性能测试比拟》Log4J 异步日志性能精良。Logback
《最全LogBack 详解、含java案例和配置解释》ORM
《ORM框架利用优缺陷》紧张目的是为了提高开拓效率。MyBatis:
《mybatis缓存机制详解》一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,以是对SqlSession是共享的;利用 LRU 机制清理缓存,通过 cacheEnabled 参数开启。《MyBatis学习之代码天生器Generator》网络框架
TODO
Web 框架
Spring 家族
Spring
Spring 简明教程Spring Boot
官方网站《Spring Boot根本教程》Spring Cloud
Spring Boot 中文索引站Spring Cloud 中文文档《Spring Cloud根本教程》工具框架
《Apache Commons 工具类先容及大略利用》《Google guava 中文教程》分布式设计扩展性设计
《架构师不可不知的十大可扩展架构》总结下来,通用的套路便是分布、缓存及异步处理。《可扩展性设计之数据切分》水平切分+垂直切分利用中间件进行分片如,MySQL Proxy。利用分片策略进行切分,如按照ID取模。《说说如何实现可扩展性的大型网站架构》分布式做事+行列步队。《大型网站技能架构(七)--网站的可扩展性架构》稳定性 & 高可用
《系统设计:关于高可用系统的一些技能方案》可扩展:水平扩展、垂直扩展。 通过冗余支配,避免单点故障。隔离:避免单一业务占用全部资源。避免业务之间的相互影响 2. 机房隔离避免单点故障。解耦:降落掩护本钱,降落耦合风险。减少依赖,减少相互间的影响。限流:滑动窗口计数法、漏桶算法、令牌桶算法等算法。碰着突发流量时,担保系统稳定。降级:紧急情形下开释非核心功能的资源。捐躯非核心业务,担保核心业务的高可用。熔断:非常情形超出阈值进入熔断状态,快速失落败。减少不稳定的外部依赖对核心做事的影响。自动化测试:通过完善的测试,减少发布引起的故障。灰度发布:灰度发布是速率与安全性作为妥协,能够有效减少发布故障。《关于高可用的系统》设计原则:数据不丢(持久化);做事高可用(做事副本);绝对的100%高可用很难,目标是做到尽可能多的9,如99.999%(整年累计只有5分钟)。硬件负载均衡
《转!!
负载均衡器技能Nginx和F5的优缺陷比拟》紧张是和F5比拟。《软/硬件负载均衡产品 你知多少?》
软件负载均衡
《几种负载均衡算法》 轮寻、权重、负载、最少连接、QoS《DNS负载均衡》配置大略,更新速率慢。《Nginx负载均衡》大略轻量、学习本钱低;紧张适用于web运用。《借助LVS+Keepalived实现负载均衡 》配置比较负载、只支持到4层,性能较高。《HAProxy用法详解 全网最详细中文文档》支持到七层(比如HTTP)、功能比较全面,性能也不错。《Haproxy+Keepalived+MySQL实现读均衡负载》紧张是用户读要求的负载均衡。《rabbitmq+haproxy+keepalived实现高可用集群搭建》限流
《谈谈高并发系统的限流》计数器:通过滑动窗口计数器,掌握单位韶光内的要求次数,大略粗暴。漏桶算法:固定容量的漏桶,漏桶满了就丢弃要求,比较常用。令牌桶算法:固定容量的令牌桶,按照一定速率添加令牌,处理要求前须要拿到令牌,拿不到令牌则丢弃要求,或进入丢行列步队,可以通过掌握添加令牌的速率,来掌握整体速率。Guava 中的 RateLimiter 是令牌桶的实现。Nginx 限流:通过 limit_req 等模块限定并发连接数。运用层容灾
《防雪崩利器:熔断器 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 优雅关闭办法。数据库扩展
读写分离模式
《Mysql主从方案的实现》《搭建MySQL主从复制经典架构》《Haproxy+多台MySQL从做事器(Slave) 实现负载均衡》《DRBD+Heartbeat+Mysql高可用读写分离架构》DRDB 进行磁盘复制,避免单点问题。《MySQL Cluster 办法》分片模式
《分库分表须要考虑的问题及方案》中间件: 轻量级:sharding-jdbc、TSharding;重量级:Atlas、MyCAT、Vitess等。问题:事务、Join、迁移、扩容、ID、分页等。事务补偿:对数据进行对帐检讨;基于日志进行比对;定期同标准数据来源进行同步等。分库策略:数值范围;取模;日期等。分库数量:常日 MySQL 单库 5千万条、Oracle 单库一亿条须要分库。《MySql分表和表分区详解》分区:是MySQL内部机制,对客户端透明,数据存储在不同文件中,表面上看是同一个表。分表:物理上创建不同的表、客户端须要管理分表路由。做事管理
做事注册与创造
《永不失落联!如何实现微做事架构中的做事创造?》客户端做事创造模式:客户端直接查询注册表,同时自己卖力负载均衡。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,能快速相应配置变革。
做事路由掌握
《分布式做事框架学习条记4 做事路由》原则:透明化路由负载均衡策略:随机、轮询、做事调用延迟、同等性哈希、粘滞连接本地路由优先策略:injvm(优先调用jvm内部的做事),innative(优先利用相同物理机的做事),原则上找间隔最近的做事。配置办法:统一注册表;本地配置;动态下发。分布式同等
CAP 与 BASE 理论
《从分布式同等性谈到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-->Fast Paxos-->Zookeeper剖析》《【分布式】Zookeeper与Paxos》Zab
《Zab:Zookeeper 中的分布式同等性协议先容》Raft
《Raft 为什么是更易理解的分布式同等性算法》三种角色:Leader(领袖)、Follower(群众)、Candidate(候选人)通过随机等待的办法发出投票,得票多的得胜。Gossip
《Gossip算法》两阶段提交、多阶段提交
《关于分布式事务、两阶段提交协议、三阶提交协议》幂等
《分布式系统---幂等性设计》幂等特性的浸染:该资源具备幂等性,要求方无需担心重复调用会产生缺点。常见担保幂等的手段:MVCC(类似于乐不雅观锁)、去重表(唯一索引)、悲观锁、一次性token、序列号办法。分布式同等方案
《分布式系统事务同等性办理方案》《担保分布式系统数据同等性的6种方案》分布式 Leader 节点选举
《利用zookeeper实现分布式leader节点选举》TCC(Try/Confirm/Cancel) 柔性事务
《传统事务与柔性事务》基于BASE理论:基本可用、柔性状态、终极同等。办理方案:记录日志+补偿(正向补充或者回滚)、重试(哀求程序要幂等);“无锁设计”、采取乐不雅观锁机制。分布式文件系统
说说分布式文件存储系统-基本架构 ?《各种分布式文件系统的比较》 ?HDFS:大批量数据读写,用于高吞吐量的场景,不适宜小文件。FastDFS:轻量级、适宜小文件。唯一ID 天生
全局唯一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区间,用完再取,利用乐不雅观锁机制掌握并发。同等性Hash算法
《同等性哈希算法》设计思想 & 开拓模式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的观点、差异和用途》命令查询职责分离(CQRS)
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。这种模式该当避免。作者主见利用血虚模式。Actor 模式
TODO
相应式编程
Reactor
TODO
RxJava
TODO
Vert.x
TODO
DODAF2.0
《DODAF2.0方法论》《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》项目管理架构评审
《架构设计之如何评审架构设计解释书》《大家都是架构师:非功能性需求》重构
《架构之重构的12条军规》代码规范
《阿里巴巴Java开拓手册》代码 Review
制度还是制度! 其余,每个公司须要根据自己的需求和目标制订自己的 check list
《为什么你做不好 Code Review?》代码 review 做的好,在于制度培植。《从零开始Code Review》《Code Review Checklist》《Java Code Review Checklist》《如何用 gitlab 做 code review》RUP
《利用RUP 4+1视图方法进行软件架构设计》看板管理
《说说看板在项目中的运用》SCRUM
SCRUM - 争球
3个角色:Product Owner(PO) 产品卖力人;Scrum Master(SM),推动Scrum实行;Team 开拓团队。3个工件:Product Backlog 产品TODOLIST,含优先级;Sprint Backlog 功能开拓 TODO LIST;燃尽图;五个代价不雅观:专注、勇气、公开、承诺、尊重。《敏捷项目管理流程-Scrum框架最全总结!》《敏捷实在很大略3---敏捷方法之scrum》
敏捷开拓
TODO
极限编程(XP)
XP - eXtreme Programming
《主流敏捷开拓方法:极限编程XP》是一种辅导开拓职员的方法论。4大代价:沟通:鼓励口头沟通,提高效率。大略:够用就好。反馈:及时反馈、关照干系人。勇气:提倡拥抱变革,敢于重构。5个原则:快速反馈、大略性假设、逐步修正、提倡变动(小步快跑)、优质事情(担保质量的条件下担保小步快跑)。5个事情:阶段性冲刺;冲刺操持会议;逐日站立会议;冲刺后review;回顾会议。结对编程
边写码,边review。能够增强代码质量、减少bug。
《结对编程》PDCA 循环质量管理
P——PLAN 策划,D——DO 履行,C——CHECK 检讨,A——ACT 改进
《PDCA》FMEA管理模式
TODO
通用业务术语TODO
技能趋势TODO
政策、法规法律
《中华公民共和国网络安全法》2016年11月7日发布,自2017年6月1日起施行《个人信息保护法》个人信息保护法是一部保护个人信息的法律条款,现尚在订定中,2019全国两会信息安全干系提案中,有政协委员呼吁关注大数据时期隐私保护,加速立法。《最高公民法院、最高公民审查院关于办理陵犯公民个人信息刑事案件适用法律多少问题的阐明》《阐明》共十三条,自2017年6月1日起施行1、对付行踪轨迹信息、通信内容、征信信息、财产信息,造孽获取、出售或者供应50条以上即算“情节严重”;2、对付住宿信息、通信记录、康健生理信息、交易信息等其他可能影响人身、财产安全的公民个人信息,标准则是 500条以上;3、对付其他公民个人信息,标准为 5000条以上。《中华公民共和国电子商务法》2018年8月31日,十三届全国人大常委会第五次会议表决通过《电子商务法》,自2019年1月1日起施行解读电子商务法(一)什么是电商解读电子商务法(二)电商经营者解读电子商务法(三)电商行为规范解读电子商务法(四)电商的法律关系解读电子商务法(外传)电商挣钱的秘密解读电子商务法(外传)电商模式程序员须要知道的法律知识口语法律42讲-为程序员打造的专属法律武器严格遵守刑法253法条
我国刑法第253条之一规定:
国家机关或者金融、电信、交通、教诲、医疗等单位的事情职员,违反国家规定,将本单位在履行职责或者供应做事过程中得到的公民个人信息,出售或者造孽供应给他人,情节严重的,处3年以下有期徒刑或者拘役,并处或者单惩罚金。盗取或者以其他方法造孽获取上述信息,情节严重的,依照前款的规定惩罚。单位犯前两款罪的,对单位判惩罚金,并对其直接卖力的主管职员和其他直接任务职员,依照各该款的规定惩罚。最高公民法院、最高公民审查院关于实行《中华公民共和国刑法》确定罪名的补充规定(四)规定:触犯刑法第253条之一第1款之规定,构成“出售、造孽供应公民个人信息罪”;触犯刑法第253条之一第2款之规定,构成“造孽获取公民个人信息罪”
《造孽获取公民个人信息罪》避风港原则
“避风港”原则是指在发生著作权侵权案件时,当ISP(网络做事供应商)只供应空间做事,并不制作网页内容,如果ISP被奉告侵权,则有删除的责任,否则就被视为侵权。如果侵权内容既不在ISP的做事器上存储,又没有被奉告哪些内容该当删除,则ISP不承担侵权任务。 后来避风港原则也被运用在搜索引擎、网络存储、在线图书馆等方面。
《避风港原则》架构师本色《架构师画像》业务理解和抽象能力NB的代码能力全面:1. 在面对业务问题上,架构师脑海里是否会浮现出多种技能方案;2. 在做系统设计时是否考虑到了足够多的方方面面;3. 在做系统设计时是否考虑到了足够多的方方面面;全局:是否考虑到了对高下游的系统的影响。权衡:权衡投入产出比;优先级和节奏掌握;《关于架构优化和设计,架构师必须知道的事情》要去考虑的细节:模块化、轻耦合、无共享架构;减少各个组件之前的依赖、把稳做事之间依赖所有造成的链式失落败及影响等。根本举动步伐、配置、测试、开拓、运维综合考虑。考虑人、团队、和组织的影响。《如何才能真正的提高自己,成为一名出色的架构师?》《架构师的必备本色和成长途径》本色:业务理解、技能广度、技能深度、丰富履历、沟通能力、动手能力、美学素养。发展路径:2年积累知识、4年积累技能和组内影响力、7年积累部门内影响力、7年以上积累跨部门影响力。《架构设计师—你在哪层楼?》第一层的架构师看到的只是产品本身第二层的架构师不仅看到自己的产品,还看到了整体的方案第三层的架构师看到的是商业代价团队管理TODO
招聘
资讯行业资讯
36krTechweb"大众号列表
TODO
博客
团队博客
阿里中间件博客美团点评技能团队博客个人博客
阮一峰的网络日志酷壳 - COOLSHELL-陈皓hellojava-阿里毕玄Cm's Blog程序猿DD-翟永超-《Spring Cloud微做事实战》作者其他类
程序员技能图谱推举参考书
在线电子书
《深入理解Spring Cloud与微做事构建》《阿里技能参考图册-研发篇》《阿里技能参考图册-算法篇》《2018美团点评技能年货(合辑)》70MInfoQ《架构师》月刊《架构师之路》纸质书
更多架构方面书本参考: awesome-java-books
开拓方面
《阿里巴巴Java开拓手册》详情架构方面
《软件架构师的12项修炼:技能技能篇》详情《架构之美》详情《分布式做事架构》详情《聊聊架构》 详情《云原生运用架构实践》详情《亿级流量网站架构核心技能》详情《淘宝技能这十年》详情《企业IT架构转型之道-中台计策思想与架构实战》 详情《高可用架构(第1卷)》详情技能管理方面
《CTO说》详情《技能管理之巅》详情《网易一千零一夜:互联网产品项目管理实战》详情根本理论
《数学之美》详情《编程珠玑》详情找事情
Boss直聘拉勾网猎聘100Offer