Update README.md
推荐一个在线搜课程的神器,“课程搜”:https://www.kcsou.com/s_架构师/
推荐: 《Java技术书籍大全》 - awesome-java-books
从初级开发者到资深架构师,看这些书就够了
(Toc generated by simple-php-github-toc )
《java队列——queue详细分析》
《LinkedList、ConcurrentLinkedQueue、LinkedBlockingQueue对比分析》
每个节点最多有两个叶子节点。
左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。
MySQL是基于B+树聚集索引组织表
LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。
经常用于大规模数据的排重检查。
TODO
按照个位、十位、百位、…依次来排。
《二分查找(java实现)》
《java实现二分查找-两种方式》
《Arrays.sort和Collections.sort实现原理解析》
常用于大数据的排重,比如email,url 等。 核心原理:将每条数据通过计算产生一个指纹(一个字节或多个字节,但一定比原始数据要少很多),其中每一位都是通过随机计算获得,在将指纹映射到一个大的按位存储的空间中。注意:会有一定的错误率。 优点:空间和时间效率都很高。 缺点:随着存入的元素数量增加,误算率随之增加。
KMP:Knuth-Morris-Pratt算法(简称KMP) 核心原理是利用一个“部分匹配表”,跳过已经匹配过的元素。
《带你搞懂朴素贝叶斯分类算法》
《贝叶斯推断及其互联网应用1》
《贝叶斯推断及其互联网应用2》
未提交读:一个事务可以读取另一个未提交的数据,容易出现脏读的情况。
读提交:一个事务等另外一个事务提交之后才可以读取数据,但会出现不可重复读的情况(多次读取的数据不一致),读取过程中出现UPDATE操作,会多。(大多数数据库默认级别是RC,比如SQL Server,Oracle),读取的时候不可以修改。
可重复读: 同一个事务里确保每次读取的时候,获得的是同样的数据,但不保障原始数据被其他事务更新(幻读),Mysql InnoDB 就是这个级别。
序列化:所有事物串行处理(牺牲了效率)
《理解事务的4种隔离级别》
数据库事务的四大特性及事务隔离级别
《MySQL的InnoDB的幻读问题 》
《一篇文章带你读懂MySQL和InnoDB》
《【mysql】关于innodb中MVCC的一些理解》
《轻松理解MYSQL MVCC 实现机制》
《Java中的锁分类》
《Java并发之AQS详解》
《Java中信号量 Semaphore》
《java开发中的Mutex vs Semaphore》
公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。
悲观锁如果使用不当(锁的条数过多),会引起服务大面积等待。推荐优先使用乐观锁+重试。
《【MySQL】悲观锁&乐观锁》
《Mysql查询语句使用select.. for update导致的数据库死锁分析》
《Mysql并发时经典常见的死锁原因及解决方法》
由于高并发,在CAS下,更新后可能此A非彼A。通过版本号可以解决,类似于上文Mysql 中提到的的乐观锁。
可以对CopyOnWrite容器进行并发的读,而不需要加锁。CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。
《可重入锁和不可重入锁》
《ReenTrantLock可重入锁(和synchronized的区别)总结》
互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 共享锁:可以有多个线程同时或的锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。
典型的 CPU 有三级缓存,距离核心越近,速度越快,空间越小。L1 一般 32k,L2 一般 256k,L3 一般12M。内存速度需要200个 CPU 周期,CPU 缓存需要1个CPU周期。
《细数JDK里的设计模式》
《Spring-涉及到的设计模式汇总》
《Mybatis使用的设计模式》
《微服务架构的理论基础 - 康威定律》
《微服务架构核⼼20讲》
《腾讯业务系统监控的修炼之路》
《开源还是商用?十大云运维监控工具横评》
《监控报警系统搭建及二次开发经验》
命令行监控工具
《常用命令行监控工具》
《20个命令行工具监控 Linux 系统性能》
《JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解》
APM — Application Performance Management
《Dapper,大规模分布式系统的跟踪系统》
CNCF OpenTracing,中文版
主要开源软件,按字母排序
《开源APM技术选型与实战》
《流量统计的基础:埋点》
《APP埋点常用的统计工具、埋点目标和埋点内容》
《美团点评前端无痕埋点实践》
开发、测试、生成环境分离。
《技术干货 | AB 测试和灰度发布探索及实践》
《nginx 根据IP 进行灰度发布》
《蓝绿部署、A/B 测试以及灰度发布》
《Ngnix的基本学习-多进程和Apache的比较》
《nginx与Apache的对比以及优缺点》
《TOMCAT原理详解及请求过程》
《Tomcat服务器原理详解》
《Tomcat 系统架构与设计模式,第 1 部分: 工作原理》
《四张图带你了解Tomcat系统架构》
《JBoss vs. Tomcat: Choosing A Java Application Server》
《Tomcat 调优方案》
《tomcat http协议与ajp协议》
《AJP与HTTP比较和分析》
《HashMap本地缓存》
《EhCache本地缓存》
《Guava Cache》
《Nginx本地缓存》
《Pagespeed—懒人工具,服务器端加速》
《浏览器端缓存》
《H5 和移动端 WebView 缓存机制解析与实战》
《Memcached 教程》
《深入理解Memcached原理》
《Memcached软件工作原理》
《Memcache技术分享:介绍、使用、存储、算法、优化、命中率》
《memcache 中 add 、 set 、replace 的区别》
《memcached全面剖析》
《Redis 教程》
《redis底层原理》
《Redis持久化方式》
《分布式缓存–序列3–原子操作与CAS乐观锁》
几种存储引擎:
《消息队列-推/拉模式学习 & ActiveMQ及JMS学习》
《Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别》
消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。
支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。
Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。
纯Java实现,兼容JMS,可以内嵌于Java应用中。
高吞吐量、采用拉模式。适合高IO场景,比如日志同步。
生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。
《linux定时任务cron配置》
《Linux cron运行原理》
《Quartz使用总结》
《Quartz源码解析 —- 触发器按时启动原理》
《quartz原理揭秘和源码解读》
《这些优秀的国产分布式任务调度系统,你用过几个?》
《Quartz任务调度的基本实现原理》
《Elastic-Job-Lite 源码解析》
《Elastic-Job-Cloud 源码解析》
《从零开始实现RPC框架 - RPC原理及实现》
《分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较》
** SPI ** TODO
服务端可以认证加密,在外网环境下,可以保证数据安全。
Apollo - 携程开源的配置中心应用
《基于zookeeper实现统一配置管理》
《 Spring Cloud Config 分布式配置中心使用教程》
servlet 3.0 异步特性可用于配置中心的客户端
主要职责:请求转发、安全认证、协议转换、容灾。
《API网关那些儿》
《谈API网关的背景、架构以及落地方案》
《使用Zuul构建API Gateway》
《Spring Cloud Gateway 源码解析》
《HTTP API网关选择之一Kong介绍》
《https原理通俗了解》
《八大免费SSL证书-给你的网站免费添加Https安全加密》
《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》
《select、poll、epoll之间的区别总结》
《select,poll,epoll比较 》
《深入理解Java NIO》
《BIO与NIO、AIO的区别》
《两种高效的服务器设计模型:Reactor和Proactor模型》
《Protobuf协议的Java应用例子》 Goolge出品、占用空间和效率完胜其他序列化类库,如Hessian;需要编写 .proto 文件。
《Protocol Buffers序列化协议及应用》
* 关于协议的解释;缺点:可读性差;
《简单的使用 protobuf 和 protostuff》
《MySQL的InnoDB索引原理详解》
《MySQL存储引擎--MyISAM与InnoDB区别》
《myisam和innodb索引实现的不同》
《MySQL36条军规》
《MYSQL性能优化的最佳20+条经验》
《SQL优化之道》
《mysql数据库死锁的产生原因及解决办法》
《导致索引失效的可能情况》
《 MYSQL分页limit速度太慢优化方法》
MyISAM 是非聚集,InnoDB 是聚集
对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高; select * from table1 where col1=A AND col2=B AND col3=D 如果使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引
《Hbase与传统数据库的区别》
《HBase Rowkey设计》
《15天的性能优化工作,5方面的调优经验》
《系统性能优化的几个方面》
例如:
《验证码原理分析及实现》
《详解滑动验证码的实现原理》
《淘宝滑动验证码研究》
《个人隐私包括哪些》
《在互联网上,隐私的范围包括哪些?》
《用户密码保存》
《常见非对称加密算法》
RSA、DSA、ECDSA(螺旋曲线加密算法)
和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。
256位的ECC秘钥的安全性等同于3072位的RSA秘钥。
《区块链的加密技术》
在内外环境中通过跳板机登录到线上主机。
2FA - Two-factor authentication,用于加强登录验证
常用做法是 登录密码 + 手机验证码(或者令牌Key,类似于与网银的 USB key)
《开源协议的选择》
如何选择一个开源软件协议
MyBatis:
《mybatis缓存机制详解》
《MyBatis学习之代码生成器Generator》
Spring
Spring Boot
Spring Cloud
《架构师不可不知的十大可扩展架构》
《可扩展性设计之数据切分》
《说说如何实现可扩展性的大型网站架构》
《大型网站技术架构(七)–网站的可扩展性架构》
《转!!负载均衡器技术Nginx和F5的优缺点对比》
《软/硬件负载均衡产品 你知多少?》
《几种负载均衡算法》 轮寻、权重、负载、最少连接、QoS
《DNS负载均衡》
《Nginx负载均衡》
《借助LVS+Keepalived实现负载均衡 》
《HAProxy用法详解 全网最详细中文文档》
《Haproxy+Keepalived+MySQL实现读均衡负载》
《rabbitmq+haproxy+keepalived实现高可用集群搭建》
limit_req
《防雪崩利器:熔断器 Hystrix 的原理与使用》
《缓存穿透,缓存击穿,缓存雪崩解决方案分析》
《缓存击穿、失效以及热点key问题》
《“异地多活”多机房部署经验谈》
《异地多活(异地双活)实践经验》
容灾技术及建设经验介绍
1.端流量(如vip层)、2. flush 数据(如果有)、3, 重启应用
《Mysql主从方案的实现》
《搭建MySQL主从复制经典架构》
《Haproxy+多台MySQL从服务器(Slave) 实现负载均衡》
《DRBD+Heartbeat+Mysql高可用读写分离架构》
《MySQL Cluster 方式》
《分库分表需要考虑的问题及方案》
《MySql分表和表分区详解》
《永不失联!如何实现微服务架构中的服务发现?》
《SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka》
《基于Zookeeper的服务注册与发现》
《分布式锁的几种实现方式》
《基于Zookeeper的分布式锁》
《jedisLock—redis分布式锁实现》
《Memcached 和 Redis 分布式锁方案》
《高并发分布式系统中生成全局唯一Id汇总》
《TDDL 在分布式下的SEQUENCE原理》
《浅谈我对DDD领域驱动设计的理解》
《领域驱动设计的基础知识总结》
《领域驱动设计(DDD)实现之路》
《领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处》
CQRS — Command Query Responsibility Seperation
《领域驱动设计系列 (六):CQRS》
《DDD CQRS架构和传统架构的优缺点比较》
《CQRS架构简介》
《深度长文:我对CQRS/EventSourcing架构的思考》
无需过多关系服务器的服务架构理念。
《什么是Serverless无服务器架构?》
《如何理解Serverless?》
制度还是制度! 另外,每个公司需要根据自己的需求和目标制定自己的 check list
《为什么你做不好 Code Review?》
《从零开始Code Review》
《Code Review Checklist》
《Java Code Review Checklist》
《如何用 gitlab 做 code review》
SCRUM - 争球
《敏捷项目管理流程-Scrum框架最全总结!》
《敏捷其实很简单3—敏捷方法之scrum》
XP - eXtreme Programming
边写码,边review。能够增强代码质量、减少bug。
P——PLAN 策划,D——DO 实施,C——CHECK 检查,A——ACT 改进
《中华人民共和国网络安全法》
《个人信息保护法》
《最高人民法院、最高人民检察院关于办理侵犯公民个人信息刑事案件适用法律若干问题的解释》
1、对于行踪轨迹信息、通信内容、征信信息、财产信息,非法获取、出售或者提供50条以上即算“情节严重”; 2、对于住宿信息、通信记录、健康生理信息、交易信息等其他可能影响人身、财产安全的公民个人信息,标准则是 500条以上; 3、对于其他公民个人信息,标准为 5000条以上。
《中华人民共和国电子商务法》
程序员需要知道的法律常识
白话法律42讲-为程序员打造的专属法律武器
我国刑法第253条之一规定:
国家机关或者金融、电信、交通、教育、医疗等单位的工作人员,违反国家规定,将本单位在履行职责或者提供服务过程中获得的公民个人信息,出售或者非法提供给他人,情节严重的,处3年以下有期徒刑或者拘役,并处或者单处罚金。 窃取或者以其他方法非法获取上述信息,情节严重的,依照前款的规定处罚。 单位犯前两款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚。
最高人民法院、最高人民检察院关于执行《中华人民共和国刑法》确定罪名的补充规定(四)规定:触犯刑法第253条之一第1款之规定,构成“出售、非法提供公民个人信息罪”;触犯刑法第253条之一第2款之规定,构成“非法获取公民个人信息罪”
“避风港”原则是指在发生著作权侵权案件时,当ISP(网络服务提供商)只提供空间服务,并不制作网页内容,如果ISP被告知侵权,则有删除的义务,否则就被视为侵权。如果侵权内容既不在ISP的服务器上存储,又没有被告知哪些内容应该删除,则ISP不承担侵权责任。 后来避风港原则也被应用在搜索引擎、网络存储、在线图书馆等方面。
《架构师画像》
《关于架构优化和设计,架构师必须知道的事情》
《如何才能真正的提高自己,成为一名出色的架构师?》
《架构师的必备素质和成长途径》
《架构设计师—你在哪层楼?》
国内:
CSDN 老牌技术社区、不必解释。
51cto.com
ITeye
博客园
ChinaUnix
开源中国社区
InfoQ
深度开源
伯乐在线
ITPUB
腾讯云— 云+社区
阿里云— 云栖社区
IBM DeveloperWorks
开发者头条
LinkedKeeper
国外:
艾瑞网
QUEST MOBILE
国家数据
TalkingData
测试:
运维:
* [运维派](http://www.yunweipai.com/) * [Abcdocker](https://www.abcdocker.com/)
Java:
安全
大数据
其他专题网站:
《阿里技术参考图册-研发篇》
《阿里技术参考图册-算法篇》
《2018美团点评技术年货(合辑)》70M
InfoQ《架构师》月刊
《架构师之路》
更多架构方面书籍参考: awesome-java-books
《软件架构师的12项修炼:技术技能篇》详情
《架构之美》详情
《分布式服务架构》详情
《聊聊架构》 详情
《云原生应用架构实践》详情
《亿级流量网站架构核心技术》详情
《淘宝技术这十年》详情
《企业IT架构转型之道-中台战略思想与架构实战》 详情
《高可用架构(第1卷)》详情
github
Apache 软件基金会
W3Cschool
Runoob.com
Love2.io
gitbook.cn
ApacheCN
活动发布平台:
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
《后端架构师技术图谱》
推荐: 《Java技术书籍大全》 - awesome-java-books
从初级开发者到资深架构师,看这些书就够了
(Toc generated by simple-php-github-toc )
数据结构
队列
《java队列——queue详细分析》
《LinkedList、ConcurrentLinkedQueue、LinkedBlockingQueue对比分析》
集合
链表、数组
字典、关联数组
栈
树
二叉树
每个节点最多有两个叶子节点。
完全二叉树
平衡二叉树
左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
二叉查找树(BST)
二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。
红黑树
B,B+,B*树
MySQL是基于B+树聚集索引组织表
LSM 树
LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。
BitSet
经常用于大规模数据的排重检查。
常用算法
排序、查找算法
选择排序
冒泡排序
插入排序
快速排序
归并排序
希尔排序
TODO
堆排序
计数排序
桶排序
基数排序
按照个位、十位、百位、…依次来排。
二分查找
《二分查找(java实现)》
《java实现二分查找-两种方式》
Java 中的排序工具
《Arrays.sort和Collections.sort实现原理解析》
布隆过滤器
常用于大数据的排重,比如email,url 等。 核心原理:将每条数据通过计算产生一个指纹(一个字节或多个字节,但一定比原始数据要少很多),其中每一位都是通过随机计算获得,在将指纹映射到一个大的按位存储的空间中。注意:会有一定的错误率。 优点:空间和时间效率都很高。 缺点:随着存入的元素数量增加,误算率随之增加。
字符串比较
KMP 算法
KMP:Knuth-Morris-Pratt算法(简称KMP) 核心原理是利用一个“部分匹配表”,跳过已经匹配过的元素。
深度优先、广度优先
贪心算法
回溯算法
剪枝算法
动态规划
朴素贝叶斯
《带你搞懂朴素贝叶斯分类算法》
《贝叶斯推断及其互联网应用1》
《贝叶斯推断及其互联网应用2》
推荐算法
最小生成树算法
最短路径算法
并发
Java 并发
多线程
线程安全
一致性、事务
事务 ACID 特性
事务的隔离级别
未提交读:一个事务可以读取另一个未提交的数据,容易出现脏读的情况。
读提交:一个事务等另外一个事务提交之后才可以读取数据,但会出现不可重复读的情况(多次读取的数据不一致),读取过程中出现UPDATE操作,会多。(大多数数据库默认级别是RC,比如SQL Server,Oracle),读取的时候不可以修改。
可重复读: 同一个事务里确保每次读取的时候,获得的是同样的数据,但不保障原始数据被其他事务更新(幻读),Mysql InnoDB 就是这个级别。
序列化:所有事物串行处理(牺牲了效率)
《理解事务的4种隔离级别》
数据库事务的四大特性及事务隔离级别
《MySQL的InnoDB的幻读问题 》
《一篇文章带你读懂MySQL和InnoDB》
MVCC
《【mysql】关于innodb中MVCC的一些理解》
《轻松理解MYSQL MVCC 实现机制》
锁
Java中的锁和同步类
《Java中的锁分类》
《Java并发之AQS详解》
《Java中信号量 Semaphore》
《java开发中的Mutex vs Semaphore》
公平锁 & 非公平锁
公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。
悲观锁
悲观锁如果使用不当(锁的条数过多),会引起服务大面积等待。推荐优先使用乐观锁+重试。
《【MySQL】悲观锁&乐观锁》
《Mysql查询语句使用select.. for update导致的数据库死锁分析》
《Mysql并发时经典常见的死锁原因及解决方法》
乐观锁 & CAS
ABA 问题
由于高并发,在CAS下,更新后可能此A非彼A。通过版本号可以解决,类似于上文Mysql 中提到的的乐观锁。
CopyOnWrite容器
可以对CopyOnWrite容器进行并发的读,而不需要加锁。CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。
RingBuffer
可重入锁 & 不可重入锁
《可重入锁和不可重入锁》
《ReenTrantLock可重入锁(和synchronized的区别)总结》
互斥锁 & 共享锁
互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 共享锁:可以有多个线程同时或的锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。
死锁
操作系统
计算机原理
CPU
多级缓存
典型的 CPU 有三级缓存,距离核心越近,速度越快,空间越小。L1 一般 32k,L2 一般 256k,L3 一般12M。内存速度需要200个 CPU 周期,CPU 缓存需要1个CPU周期。
进程
TODO
线程
协程
Linux
设计模式
设计模式的六大原则
23种常见设计模式
应用场景
《细数JDK里的设计模式》
《Spring-涉及到的设计模式汇总》
《Mybatis使用的设计模式》
单例模式
责任链模式
TODO
MVC
IOC
AOP
UML
微服务思想
康威定律
《微服务架构的理论基础 - 康威定律》
《微服务架构核⼼20讲》
运维 & 统计 & 技术支持
常规监控
《腾讯业务系统监控的修炼之路》
《开源还是商用?十大云运维监控工具横评》
《监控报警系统搭建及二次开发经验》
命令行监控工具
《常用命令行监控工具》
《20个命令行工具监控 Linux 系统性能》
《JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解》
APM
APM — Application Performance Management
《Dapper,大规模分布式系统的跟踪系统》
CNCF OpenTracing,中文版
主要开源软件,按字母排序
《开源APM技术选型与实战》
统计分析
《流量统计的基础:埋点》
《APP埋点常用的统计工具、埋点目标和埋点内容》
《美团点评前端无痕埋点实践》
持续集成(CI/CD)
Jenkins
环境分离
开发、测试、生成环境分离。
自动化运维
Ansible
puppet
chef
测试
TDD 理论
单元测试
压力测试
全链路压测
A/B 、灰度、蓝绿测试
《技术干货 | AB 测试和灰度发布探索及实践》
《nginx 根据IP 进行灰度发布》
《蓝绿部署、A/B 测试以及灰度发布》
虚拟化
KVM
Xen
OpenVZ
容器技术
Docker
云技术
OpenStack
DevOps
文档管理
中间件
Web Server
Nginx
《Ngnix的基本学习-多进程和Apache的比较》
《nginx与Apache的对比以及优缺点》
OpenResty
Tengine
Apache Httpd
Tomcat
架构原理
《TOMCAT原理详解及请求过程》
《Tomcat服务器原理详解》
《Tomcat 系统架构与设计模式,第 1 部分: 工作原理》
《四张图带你了解Tomcat系统架构》
《JBoss vs. Tomcat: Choosing A Java Application Server》
调优方案
《Tomcat 调优方案》
《tomcat http协议与ajp协议》
《AJP与HTTP比较和分析》
Jetty
缓存
本地缓存
《HashMap本地缓存》
《EhCache本地缓存》
《Guava Cache》
《Nginx本地缓存》
《Pagespeed—懒人工具,服务器端加速》
客户端缓存
《浏览器端缓存》
《H5 和移动端 WebView 缓存机制解析与实战》
服务端缓存
Web缓存
Memcached
《Memcached 教程》
《深入理解Memcached原理》
《Memcached软件工作原理》
《Memcache技术分享:介绍、使用、存储、算法、优化、命中率》
《memcache 中 add 、 set 、replace 的区别》
《memcached全面剖析》
Redis
《Redis 教程》
《redis底层原理》
《Redis持久化方式》
《分布式缓存–序列3–原子操作与CAS乐观锁》
架构
回收策略
Tair
几种存储引擎:
消息队列
《消息队列-推/拉模式学习 & ActiveMQ及JMS学习》
《Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别》
消息总线
消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。
消息的顺序
RabbitMQ
支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。
RocketMQ
Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。
ActiveMQ
纯Java实现,兼容JMS,可以内嵌于Java应用中。
Kafka
高吞吐量、采用拉模式。适合高IO场景,比如日志同步。
Redis 消息推送
生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。
ZeroMQ
TODO
定时调度
单机定时调度
《linux定时任务cron配置》
《Linux cron运行原理》
《Quartz使用总结》
《Quartz源码解析 —- 触发器按时启动原理》
《quartz原理揭秘和源码解读》
分布式定时调度
《这些优秀的国产分布式任务调度系统,你用过几个?》
《Quartz任务调度的基本实现原理》
《Elastic-Job-Lite 源码解析》
《Elastic-Job-Cloud 源码解析》
RPC
《从零开始实现RPC框架 - RPC原理及实现》
《分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较》
Dubbo
** SPI ** TODO
Thrift
gRPC
服务端可以认证加密,在外网环境下,可以保证数据安全。
数据库中间件
Sharding Jdbc
日志系统
日志搜集
配置中心
Apollo - 携程开源的配置中心应用
《基于zookeeper实现统一配置管理》
《 Spring Cloud Config 分布式配置中心使用教程》
servlet 3.0 异步特性可用于配置中心的客户端
API 网关
主要职责:请求转发、安全认证、协议转换、容灾。
《API网关那些儿》
《谈API网关的背景、架构以及落地方案》
《使用Zuul构建API Gateway》
《Spring Cloud Gateway 源码解析》
《HTTP API网关选择之一Kong介绍》
网络
协议
OSI 七层协议
TCP/IP
HTTP
HTTP2.0
HTTPS
《https原理通俗了解》
《八大免费SSL证书-给你的网站免费添加Https安全加密》
网络模型
《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》
《select、poll、epoll之间的区别总结》
《select,poll,epoll比较 》
《深入理解Java NIO》
《BIO与NIO、AIO的区别》
《两种高效的服务器设计模型:Reactor和Proactor模型》
Epoll
Java NIO
kqueue
连接和短连接
框架
零拷贝(Zero-copy)
序列化(二进制协议)
Hessian
Protobuf
《Protobuf协议的Java应用例子》 Goolge出品、占用空间和效率完胜其他序列化类库,如Hessian;需要编写 .proto 文件。
《Protocol Buffers序列化协议及应用》
《简单的使用 protobuf 和 protostuff》
数据库
基础理论
关系数据库设计的三大范式
MySQL
原理
《MySQL的InnoDB索引原理详解》
《MySQL存储引擎--MyISAM与InnoDB区别》
《myisam和innodb索引实现的不同》
InnoDB
优化
《MySQL36条军规》
《MYSQL性能优化的最佳20+条经验》
《SQL优化之道》
《mysql数据库死锁的产生原因及解决办法》
《导致索引失效的可能情况》
《 MYSQL分页limit速度太慢优化方法》
索引
聚集索引, 非聚集索引
MyISAM 是非聚集,InnoDB 是聚集
复合索引
自适应哈希索引(AHI)
explain
NoSQL
MongoDB
Hbase
《Hbase与传统数据库的区别》
《HBase Rowkey设计》
搜索引擎
搜索引擎原理
Lucene
Elasticsearch
Solr
sphinx
性能
性能优化方法论
《15天的性能优化工作,5方面的调优经验》
《系统性能优化的几个方面》
容量评估
CDN 网络
连接池
性能调优
大数据
流式计算
Storm
Flink
Kafka Stream
应用场景
例如:
Hadoop
HDFS
MapReduce
Yarn
Spark
安全
web 安全
XSS
CSRF
SQL 注入
Hash Dos
脚本注入
漏洞扫描工具
验证码
《验证码原理分析及实现》
《详解滑动验证码的实现原理》
《淘宝滑动验证码研究》
DDoS 防范
用户隐私信息保护
《个人隐私包括哪些》
《在互联网上,隐私的范围包括哪些?》
《用户密码保存》
序列化漏洞
加密解密
对称加密
哈希算法
非对称加密
《常见非对称加密算法》
RSA、DSA、ECDSA(螺旋曲线加密算法)
和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。
256位的ECC秘钥的安全性等同于3072位的RSA秘钥。
《区块链的加密技术》
服务器安全
数据安全
数据备份
TODO
网络隔离
内外网分离
TODO
登录跳板机
在内外环境中通过跳板机登录到线上主机。
授权、认证
RBAC
OAuth2.0
OIDC
SAML
双因素认证(2FA)
2FA - Two-factor authentication,用于加强登录验证
常用做法是 登录密码 + 手机验证码(或者令牌Key,类似于与网银的 USB key)
单点登录(SSO)
常用开源框架
开源协议
《开源协议的选择》
如何选择一个开源软件协议
日志框架
Log4j、Log4j2
Logback
ORM
MyBatis:
《mybatis缓存机制详解》
《MyBatis学习之代码生成器Generator》
网络框架
TODO
Web 框架
Spring 家族
Spring
Spring Boot
Spring Cloud
工具框架
分布式设计
扩展性设计
《架构师不可不知的十大可扩展架构》
《可扩展性设计之数据切分》
《说说如何实现可扩展性的大型网站架构》
《大型网站技术架构(七)–网站的可扩展性架构》
稳定性 & 高可用
硬件负载均衡
《转!!负载均衡器技术Nginx和F5的优缺点对比》
《软/硬件负载均衡产品 你知多少?》
软件负载均衡
《几种负载均衡算法》 轮寻、权重、负载、最少连接、QoS
《DNS负载均衡》
《Nginx负载均衡》
《借助LVS+Keepalived实现负载均衡 》
《HAProxy用法详解 全网最详细中文文档》
《Haproxy+Keepalived+MySQL实现读均衡负载》
《rabbitmq+haproxy+keepalived实现高可用集群搭建》
限流
limit_req等模块限制并发连接数。应用层容灾
《防雪崩利器:熔断器 Hystrix 的原理与使用》
《缓存穿透,缓存击穿,缓存雪崩解决方案分析》
《缓存击穿、失效以及热点key问题》
跨机房容灾
《“异地多活”多机房部署经验谈》
《异地多活(异地双活)实践经验》
容灾技术及建设经验介绍
容灾演练流程
平滑启动
1.端流量(如vip层)、2. flush 数据(如果有)、3, 重启应用
数据库扩展
读写分离模式
《Mysql主从方案的实现》
《搭建MySQL主从复制经典架构》
《Haproxy+多台MySQL从服务器(Slave) 实现负载均衡》
《DRBD+Heartbeat+Mysql高可用读写分离架构》
《MySQL Cluster 方式》
分片模式
《分库分表需要考虑的问题及方案》
《MySql分表和表分区详解》
服务治理
服务注册与发现
《永不失联!如何实现微服务架构中的服务发现?》
《SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka》
《基于Zookeeper的服务注册与发现》
服务路由控制
分布式一致
CAP 与 BASE 理论
分布式锁
《分布式锁的几种实现方式》
《基于Zookeeper的分布式锁》
《jedisLock—redis分布式锁实现》
《Memcached 和 Redis 分布式锁方案》
分布式一致性算法
PAXOS
Zab
Raft
Gossip
两阶段提交、多阶段提交
幂等
分布式一致方案
分布式 Leader 节点选举
TCC(Try/Confirm/Cancel) 柔性事务
分布式文件系统
唯一ID 生成
全局唯一ID
《高并发分布式系统中生成全局唯一Id汇总》
《TDDL 在分布式下的SEQUENCE原理》
一致性Hash算法
设计思想 & 开发模式
DDD(Domain-driven Design - 领域驱动设计)
《浅谈我对DDD领域驱动设计的理解》
《领域驱动设计的基础知识总结》
《领域驱动设计(DDD)实现之路》
《领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处》
命令查询职责分离(CQRS)
CQRS — Command Query Responsibility Seperation
《领域驱动设计系列 (六):CQRS》
《DDD CQRS架构和传统架构的优缺点比较》
《CQRS架构简介》
《深度长文:我对CQRS/EventSourcing架构的思考》
贫血,充血模型
Actor 模式
TODO
响应式编程
Reactor
TODO
RxJava
TODO
Vert.x
TODO
DODAF2.0
Serverless
无需过多关系服务器的服务架构理念。
《什么是Serverless无服务器架构?》
《如何理解Serverless?》
Service Mesh
项目管理
架构评审
重构
代码规范
代码 Review
制度还是制度! 另外,每个公司需要根据自己的需求和目标制定自己的 check list
《为什么你做不好 Code Review?》
《从零开始Code Review》
《Code Review Checklist》
《Java Code Review Checklist》
《如何用 gitlab 做 code review》
RUP
看板管理
SCRUM
SCRUM - 争球
《敏捷项目管理流程-Scrum框架最全总结!》
《敏捷其实很简单3—敏捷方法之scrum》
敏捷开发
TODO
极限编程(XP)
XP - eXtreme Programming
结对编程
边写码,边review。能够增强代码质量、减少bug。
PDCA 循环质量管理
P——PLAN 策划,D——DO 实施,C——CHECK 检查,A——ACT 改进
FMEA管理模式
TODO
通用业务术语
TODO
技术趋势
TODO
政策、法规
法律
《中华人民共和国网络安全法》
《个人信息保护法》
《最高人民法院、最高人民检察院关于办理侵犯公民个人信息刑事案件适用法律若干问题的解释》
《中华人民共和国电子商务法》
程序员需要知道的法律常识
白话法律42讲-为程序员打造的专属法律武器
严格遵守刑法253法条
我国刑法第253条之一规定:
最高人民法院、最高人民检察院关于执行《中华人民共和国刑法》确定罪名的补充规定(四)规定:触犯刑法第253条之一第1款之规定,构成“出售、非法提供公民个人信息罪”;触犯刑法第253条之一第2款之规定,构成“非法获取公民个人信息罪”
避风港原则
“避风港”原则是指在发生著作权侵权案件时,当ISP(网络服务提供商)只提供空间服务,并不制作网页内容,如果ISP被告知侵权,则有删除的义务,否则就被视为侵权。如果侵权内容既不在ISP的服务器上存储,又没有被告知哪些内容应该删除,则ISP不承担侵权责任。 后来避风港原则也被应用在搜索引擎、网络存储、在线图书馆等方面。
架构师素质
《架构师画像》
《关于架构优化和设计,架构师必须知道的事情》
《如何才能真正的提高自己,成为一名出色的架构师?》
《架构师的必备素质和成长途径》
《架构设计师—你在哪层楼?》
团队管理
TODO
招聘
资讯
行业资讯
公众号列表
TODO
博客
团队博客
个人博客
综合门户、社区
国内:
CSDN 老牌技术社区、不必解释。
51cto.com
ITeye
博客园
ChinaUnix
开源中国社区
InfoQ
深度开源
伯乐在线
ITPUB
腾讯云— 云+社区
阿里云— 云栖社区
IBM DeveloperWorks
开发者头条
LinkedKeeper
国外:
问答、讨论类社区
行业数据分析
艾瑞网
QUEST MOBILE
国家数据
TalkingData
专项网站
测试:
运维:
Java:
安全
大数据
其他专题网站:
其他类
推荐参考书
在线电子书
《阿里技术参考图册-研发篇》
《阿里技术参考图册-算法篇》
《2018美团点评技术年货(合辑)》70M
InfoQ《架构师》月刊
《架构师之路》
纸质书
更多架构方面书籍参考: awesome-java-books
开发方面
架构方面
《软件架构师的12项修炼:技术技能篇》详情
《架构之美》详情
《分布式服务架构》详情
《聊聊架构》 详情
《云原生应用架构实践》详情
《亿级流量网站架构核心技术》详情
《淘宝技术这十年》详情
《企业IT架构转型之道-中台战略思想与架构实战》 详情
《高可用架构(第1卷)》详情
技术管理方面
基础理论
工具方面
TODO
大数据方面
技术资源
开源资源
github
Apache 软件基金会
手册、文档、教程
国内:
W3Cschool
Runoob.com
Love2.io
gitbook.cn
ApacheCN
国外:
在线课堂
会议、活动
活动发布平台:
常用APP
找工作
工具
代码托管
文件服务
综合云服务商
VPS