(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可以快速建立索引。
《LSM树 VS B+树》
《LSM树(Log-Structured Merge Tree)存储引擎》
经常用于大规模数据的排重检查。
TODO
按照个位、十位、百位、...依次来排。
《二分查找(java实现)》
《java实现二分查找-两种方式》
常用于大数据的排重,比如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并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。
《JAVA中写时复制(Copy-On-Write)Map实现》
《聊聊并发-Java中的Copy-On-Write容器》
《可重入锁和不可重入锁》
《ReenTrantLock可重入锁(和synchronized的区别)总结》
互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 共享锁:可以有多个线程同时或的锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。
《“死锁”四个必要条件的合理解释》
Java如何查看死锁?
java多线程系列:死锁及检测
典型的 CPU 有三级缓存,距离核心越近,速度越快,空间越小。L1 一般 32k,L2 一般 256k,L3 一般12M。内存速度需要200个 CPU 周期,CPU 缓存需要1个CPU周期。
TODO
《细数JDK里的设计模式》
结构型模式:
创建模式:
行为模式:
《Spring-涉及到的设计模式汇总》
《Mybatis使用的设计模式》
TODO
《微服务架构的理论基础 - 康威定律》
《微服务架构核⼼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 指令。
TODO
《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 将不会使用索引
《MySQL查询where条件的顺序对查询效率的影响》
自适应哈希索引(AHI)
《简明 HBase 入门教程(开篇)》
《深入学习HBase架构原理》
《传统的行存储和(HBase)列存储的区别》
《Hbase与传统数据库的区别》
《HBase Rowkey设计》
《15天的性能优化工作,5方面的调优经验》
《系统性能优化的几个方面》
例如:
《验证码原理分析及实现》
《详解滑动验证码的实现原理》
《淘宝滑动验证码研究》
《个人隐私包括哪些》
《在互联网上,隐私的范围包括哪些?》
《用户密码保存》
《常用的哈希算法》
《基于Hash摘要签名的公网URL签名验证设计方案》
RSA、DSA、ECDSA(螺旋曲线加密算法)
和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。
256位的ECC秘钥的安全性等同于3072位的RSA秘钥。
《区块链的加密技术》
TODO
TODO
在内外环境中通过跳板机登录到线上主机。
2FA - Two-factor authentication,用于加强登录验证
常用做法是 登录密码 + 手机验证码(或者令牌Key,类似于与网银的 USB key)
《开源协议的选择》
如何选择一个开源软件协议
MyBatis:
《mybatis缓存机制详解》
《MyBatis学习之代码生成器Generator》
TODO
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, 重启应用
《JVM安全退出(如何优雅的关闭java服务)》 推荐推出方式:System.exit,Kill SIGTERM;不推荐 kill-9;用 Runtime.addShutdownHook 注册钩子。
《常见Java应用如何优雅关闭》 Java、Spring、Dubbo 优雅关闭方式。
《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 分布式锁方案》
PAXOS
Zab
Raft
Gossip
两阶段提交、多阶段提交
《高并发分布式系统中生成全局唯一Id汇总》
《TDDL 在分布式下的SEQUENCE原理》
《浅谈我对DDD领域驱动设计的理解》
《领域驱动设计的基础知识总结》
《领域驱动设计(DDD)实现之路》
《领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处》
CQRS — Command Query Responsibility Seperation
《领域驱动设计系列 (六):CQRS》
《DDD CQRS架构和传统架构的优缺点比较》
《CQRS架构简介》
《深度长文:我对CQRS/EventSourcing架构的思考》
TODO
TODO
TODO
TODO
无需过多关系服务器的服务架构理念。
《什么是Serverless无服务器架构?》
《如何理解Serverless?》
制度还是制度! 另外,每个公司需要根据自己的需求和目标制定自己的 check list
《为什么你做不好 Code Review?》
《从零开始Code Review》
《Code Review Checklist》
《Java Code Review Checklist》
《如何用 gitlab 做 code review》
SCRUM - 争球
3个角色:Product Owner(PO) 产品负责人;Scrum Master(SM),推动Scrum执行;Team 开发团队。
3个工件:Product Backlog 产品TODOLIST,含优先级;Sprint Backlog 功能开发 TODO LIST;燃尽图;
五个价值观:专注、勇气、公开、承诺、尊重。
《敏捷项目管理流程-Scrum框架最全总结!》
《敏捷其实很简单3---敏捷方法之scrum》
TODO
XP - eXtreme Programming