xingshaocheng / architect-awesome

后端架构师技术图谱
59.79k stars 17.83k forks source link

互联网大厂内推

《后端架构师技术图谱》

:thumbsup: :thumbsup: :thumbsup: 推荐一个在线搜课程的神器,“课程搜”:https://www.kcsou.com/s_架构师/


推荐: 《Java技术书籍大全》 - awesome-java-books

从初级开发者到资深架构师,看这些书就够了


知识共享协议(CC协议) GitHub stars GitHub forks GitHub watchers GitHub followers

(Toc generated by simple-php-github-toc

数据结构

队列

集合

链表、数组

字典、关联数组

二叉树

每个节点最多有两个叶子节点。

完全二叉树

平衡二叉树

左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉查找树(BST)

二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。

红黑树

B,B+,B*树

MySQL是基于B+树聚集索引组织表

LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。

BitSet

经常用于大规模数据的排重检查。

常用算法

排序、查找算法

选择排序

冒泡排序

插入排序

快速排序

希尔排序

TODO

堆排序

计数排序

桶排序

基数排序

按照个位、十位、百位、...依次来排。

二分查找

布隆过滤器

常用于大数据的排重,比如email,url 等。 核心原理:将每条数据通过计算产生一个指纹(一个字节或多个字节,但一定比原始数据要少很多),其中每一位都是通过随机计算获得,在将指纹映射到一个大的按位存储的空间中。注意:会有一定的错误率。 优点:空间和时间效率都很高。 缺点:随着存入的元素数量增加,误算率随之增加。

字符串比较

KMP 算法

KMP:Knuth-Morris-Pratt算法(简称KMP) 核心原理是利用一个“部分匹配表”,跳过已经匹配过的元素。

深度优先、广度优先

贪心算法

回溯算法

剪枝算法

动态规划

朴素贝叶斯

推荐算法

最小生成树算法

最短路径算法

并发

Java 并发

多线程

线程安全

一致性、事务

事务 ACID 特性

事务的隔离级别

MVCC

Java中的锁和同步类

公平锁 & 非公平锁

公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。

悲观锁

悲观锁如果使用不当(锁的条数过多),会引起服务大面积等待。推荐优先使用乐观锁+重试。

乐观锁 & CAS

ABA 问题

由于高并发,在CAS下,更新后可能此A非彼A。通过版本号可以解决,类似于上文Mysql 中提到的的乐观锁。

CopyOnWrite容器

可以对CopyOnWrite容器进行并发的读,而不需要加锁。CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。

RingBuffer

可重入锁 & 不可重入锁

互斥锁 & 共享锁

互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 共享锁:可以有多个线程同时或的锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。

死锁

操作系统

计算机原理

CPU

多级缓存

典型的 CPU 有三级缓存,距离核心越近,速度越快,空间越小。L1 一般 32k,L2 一般 256k,L3 一般12M。内存速度需要200个 CPU 周期,CPU 缓存需要1个CPU周期。

进程

TODO

线程

协程

Linux

设计模式

设计模式的六大原则

23种常见设计模式

应用场景

单例模式

责任链模式

TODO

MVC

IOC

AOP

UML

微服务思想

康威定律

运维 & 统计 & 技术支持

常规监控

命令行监控工具

APM

APM — Application Performance Management

统计分析

持续集成(CI/CD)

Jenkins

环境分离

开发、测试、生成环境分离。

自动化运维

Ansible

puppet

chef

测试

TDD 理论

单元测试

压力测试

全链路压测

A/B 、灰度、蓝绿测试

虚拟化

KVM

Xen

OpenVZ

容器技术

Docker

云技术

OpenStack

DevOps

文档管理

中间件

Web Server

Nginx

OpenResty

Tengine

Apache Httpd

Tomcat

架构原理

调优方案

Jetty

缓存

本地缓存

客户端缓存

服务端缓存

Web缓存

Memcached

Redis

架构

回收策略

Tair

几种存储引擎:

消息队列

消息总线

消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。

消息的顺序

RabbitMQ

支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。

RocketMQ

Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。

ActiveMQ

纯Java实现,兼容JMS,可以内嵌于Java应用中。

Kafka

高吞吐量、采用拉模式。适合高IO场景,比如日志同步。

Redis 消息推送

生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。

ZeroMQ

TODO

定时调度

单机定时调度

分布式定时调度

RPC

Dubbo

SPI TODO

Thrift

gRPC

服务端可以认证加密,在外网环境下,可以保证数据安全。

数据库中间件

Sharding Jdbc

日志系统

日志搜集

配置中心

servlet 3.0 异步特性可用于配置中心的客户端

API 网关

主要职责:请求转发、安全认证、协议转换、容灾。

网络

协议

OSI 七层协议

TCP/IP

HTTP

HTTP2.0

HTTPS

网络模型

Epoll

Java NIO

kqueue

连接和短连接

框架

零拷贝(Zero-copy)

序列化(二进制协议)

Hessian

Protobuf

数据库

基础理论

关系数据库设计的三大范式

MySQL

原理

InnoDB

优化

索引

聚集索引, 非聚集索引

MyISAM 是非聚集,InnoDB 是聚集

复合索引

自适应哈希索引(AHI)

explain

NoSQL

MongoDB

Hbase

搜索引擎

搜索引擎原理

Lucene

Elasticsearch

Solr

sphinx

性能

性能优化方法论

容量评估

CDN 网络

连接池

性能调优

大数据

流式计算

Storm

Flink

Kafka Stream

应用场景

例如:

Hadoop

HDFS

MapReduce

Yarn

Spark

安全

web 安全

XSS

SQL 注入

Hash Dos

脚本注入

漏洞扫描工具

验证码

DDoS 防范

用户隐私信息保护

  1. 用户密码非明文保存,加动态salt。
  2. 身份证号,手机号如果要显示,用 “*” 替代部分字符。
  3. 联系方式在的显示与否由用户自己控制。
  4. TODO

序列化漏洞

加密解密

对称加密

哈希算法

非对称加密

服务器安全

数据安全

数据备份

TODO

网络隔离

内外网分离

TODO

登录跳板机

在内外环境中通过跳板机登录到线上主机。

授权、认证

RBAC

OAuth2.0

OIDC

SAML

双因素认证(2FA)

2FA - Two-factor authentication,用于加强登录验证

常用做法是 登录密码 + 手机验证码(或者令牌Key,类似于与网银的 USB key)

单点登录(SSO)

常用开源框架

开源协议

日志框架

Log4j、Log4j2

Logback

ORM

MyBatis:

网络框架

TODO

Web 框架

Spring 家族

Spring

Spring Boot

Spring Cloud

工具框架

分布式设计

扩展性设计

稳定性 & 高可用

硬件负载均衡

软件负载均衡

限流

应用层容灾

跨机房容灾

容灾演练流程

平滑启动

数据库扩展

读写分离模式

分片模式

服务治理

服务注册与发现

服务路由控制

分布式一致

CAP 与 BASE 理论

分布式锁

分布式一致性算法

PAXOS

Zab

Raft

Gossip

两阶段提交、多阶段提交

幂等

分布式一致方案

分布式 Leader 节点选举

TCC(Try/Confirm/Cancel) 柔性事务

分布式文件系统

唯一ID 生成

全局唯一ID

一致性Hash算法

设计思想 & 开发模式

DDD(Domain-driven Design - 领域驱动设计)

命令查询职责分离(CQRS)

CQRS — Command Query Responsibility Seperation

贫血,充血模型

Actor 模式

TODO

响应式编程

Reactor

TODO

RxJava

TODO

Vert.x

TODO

DODAF2.0

Serverless

无需过多关系服务器的服务架构理念。

Service Mesh

项目管理

架构评审

重构

代码规范

代码 Review

制度还是制度! 另外,每个公司需要根据自己的需求和目标制定自己的 check list

RUP

看板管理

SCRUM

SCRUM - 争球

敏捷开发

TODO

极限编程(XP)

XP - eXtreme Programming

结对编程

边写码,边review。能够增强代码质量、减少bug。

PDCA 循环质量管理

P——PLAN 策划,D——DO 实施,C——CHECK 检查,A——ACT 改进

FMEA管理模式

TODO

通用业务术语

TODO

技术趋势

TODO

政策、法规

法律

严格遵守刑法253法条

我国刑法第253条之一规定:

  • 国家机关或者金融、电信、交通、教育、医疗等单位的工作人员,违反国家规定,将本单位在履行职责或者提供服务过程中获得的公民个人信息,出售或者非法提供给他人,情节严重的,处3年以下有期徒刑或者拘役,并处或者单处罚金。
  • 窃取或者以其他方法非法获取上述信息,情节严重的,依照前款的规定处罚。
  • 单位犯前两款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚。

最高人民法院、最高人民检察院关于执行《中华人民共和国刑法》确定罪名的补充规定(四)规定:触犯刑法第253条之一第1款之规定,构成“出售、非法提供公民个人信息罪”;触犯刑法第253条之一第2款之规定,构成“非法获取公民个人信息罪”

避风港原则

“避风港”原则是指在发生著作权侵权案件时,当ISP(网络服务提供商)只提供空间服务,并不制作网页内容,如果ISP被告知侵权,则有删除的义务,否则就被视为侵权。如果侵权内容既不在ISP的服务器上存储,又没有被告知哪些内容应该删除,则ISP不承担侵权责任。 后来避风港原则也被应用在搜索引擎、网络存储、在线图书馆等方面。

架构师素质

团队管理

TODO

招聘

资讯

行业资讯

公众号列表

TODO

博客

团队博客

个人博客

综合门户、社区

国内:

国外:

问答、讨论类社区

行业数据分析

专项网站

其他类

推荐参考书

在线电子书

纸质书

更多架构方面书籍参考: awesome-java-books

开发方面

架构方面

技术管理方面

基础理论

工具方面

TODO

大数据方面

技术资源

开源资源

手册、文档、教程

国内:

国外:

在线课堂

会议、活动

活动发布平台:

常用APP

找工作

工具

代码托管

文件服务

综合云服务商

VPS