- 笔记52
- Java213
- 编程12
- 设计80
- DevOps23
- 算法17
- 数据库115
- 网络19
- 操作系统15
- 分布式78
- 大数据32
- 软件工程3
- 工作8
- 面试13
- 人工智能1
- JavaCore65
- JavaWeb6
- 中间件9
- 工具50
- 服务器8
- 框架74
- 软件20
- 编程范式3
- 编程语言8
- UML4
- 架构23
- 解决方案8
- 设计模式28
- 重构7
- 监控2
- KV数据库21
- 关系型数据库21
- 列式数据库15
- 搜索引擎数据库22
- 数据库中间件3
- 数据库综合4
- 文档数据库12
- 网络分层6
- 网络协议6
- 网络技术4
- Linux11
- 分布式协同17
- 分布式存储8
- 分布式理论15
- 分布式调度7
- 分布式通信30
- Flink9
- Hadoop5
- Hive9
- 综合14
- 器1
- 术4
- 法1
- IO11
- JVM9
- 基础特性13
- 容器7
- 并发11
- 高级特性7
- 其他9
- 流量控制2
- 缓存5
- JavaBean2
- 模板引擎4
- 测试5
- Tomcat6
- ORM4
- Spring63
- 安全9
- IDE4
- 构建9
- 监控诊断6
- Python6
- 微服务5
- Docker5
- Git3
- Kubernetes3
- Nginx6
- Redis19
- MySQL15
- HBase13
- Elastic5
- Elasticsearch16
- MongoDB11
- ZooKeeper7
- MQ18
- RPC5
- SpringIO4
- SpringWeb8
- Spring其他4
- Spring安全1
- Spring数据10
- Spring核心24
- Spring综合4
- Spring集成4
- Maven7
- Kafka10
- RocketMQ4
如何设计系统
系统设计过程
步骤一、约束和用例
对于任何系统设计,第一件应该做的事是:阐明系统的约束并确定系统需要满足哪些用例。
永远不要假设没有明确说明的事情。一定要尽力收集、理解需求,并设计一个很好地涵盖这些要求的解决方案。
例如,URL 缩短服务可能只为几千个用户提供服务,但每个用户都可能共享数百万个 URL。它可能旨在处理对缩短的 URL 的数百万次点击或数十次点击。该服务可能必须提供有关每个缩短的 URL 的大量统计信息(这会增加您的数据大小),或者可能根本不需要统计信息。
您还必须考虑预期会发生的用例。您的系统将根据其预期功能进行设计。不要忘记确保你知道面试官一开始没有告诉你的所有要求。
系统架构面试
如何设计一个秒杀系统?
秒杀系统的挑战
秒杀的核心问题就是极高并发处理,由于系统要在瞬时承受平时数十倍甚至上百倍的流量,这往往超出系统上限,因此处理秒杀的核心思路是限流和缓存。
秒杀系统的解决思路
- 系统上有拦截流量:尽可能在上游拦截和限制请求,限制流入后端的量,保证后端系统正常。 因为无论多少人参与秒杀,实际成交往往是有限的,而且远小于参加秒杀的人数,因此可以通过前端系统进行拦截,限制最终流入系统的请求数量,来保证系统正常进行。
- 充分利用缓存:这是一个典型的读多写少的应用场景(一趟火车其实只有 2000 张票,200w 个人来买,最多 2000 个人下单成功,其他人都是查询库存,写比例只有 0.1%,读比例占 99.9%),非常适合使用缓存。
大数据学习路线
大数据简介
移动计算
传统的软件计算处理模型,都是“输入 -> 计算 -> 输出”模型。
如何解决 PB 级数据进行计算的问题呢?
采用分布式集群的解决方案,用数千台甚至上万台计算机构建一个大数据计算处理集群,利用更多的网络带宽、内存空间、磁盘容量、CPU 核心数去进行计算处理。
大数据计算处理通常针对的是网站的存量数据,网站大数据系统要做的就是将这些统计规律和关联关系计算出来,并由此进一步改善网站的用户体验和运营决策。
将程序分发到数据所在的地方进行计算,也就是所谓的移动计算比移动数据更划算。
系统测试架构
软件测试描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
现代软件开发项目中,分工明确,基本上都会有研发、测试、QA 等角色。不同角色由于关注的视角不同,测试目标和测试方法也不完全相同。本文主要从研发、测试的视角去考量软件测试技术。
注意:
- 为了方便,只有测试人员需要关注的测试点用【测试】标注;
- 而只有研发人员需要关注的测试点用【研发】标注;
- 都需要关注的测试点则不作标注。
大数据简介
简介
什么是大数据
大数据是指超出传统数据库工具收集、存储、管理和分析能力的数据集。与此同时,及时采集、存储、聚合、管理数据,以及对数据深度分析的新技术和新能力,正在快速增长,就像预测计算芯片增长速度的摩尔定律一样。
- Volume - 数据规模巨大
- Velocity - 生成和处理速度极快
- Variety - 数据规模巨大
- Value - 生成和处理速度极快
大型系统核心技术
大型系统的设计目标就是为了快速、高效、稳定的处理海量的数据以及高并发的请求。
单机服务受限于硬件,客观存在着资源瓶颈,难以应对不断增长的数据量和请求量,为了打破瓶颈,大型系统基本上都被设计为分布式系统。
分布式系统由于其面临的共性问题,在很多场景下的解决方案往往也存在着共性。因此,我们会发现,很多优秀的大型系统在设计方案上存在着很多的共同点。
本文主要讨论应对分布式系统共性问题的解决方案,这既可以加深对分布式系统运作原理的理解,也可以作为设计大型分布式系统时的借鉴。
系统伸缩性架构
伸缩性架构是指不需要改变系统的软硬件设计,仅通过改变部署服务器数量就可以扩大或缩小系统的服务处理能力。
系统架构的伸缩性设计
不同功能进行物理分离实现伸缩
- 纵向分离(分层后分离) - 将业务处理流程上的不同部分分离部署,实现系统伸缩性。
- 横向分离(业务分割后分离) - 将不同的业务模块分离部署,实现系统伸缩性。
单一功能通过集群规模实现伸缩
系统安全性架构
关键词:XSS、CSRF、SQL 注入、DoS、消息摘要、加密算法、证书
认证
SSO
SSO(Single Sign On),即单点登录。所谓单点登录,就是同平台的诸多应用登陆一次,下一次就免登陆的功能。
SSO 需要解决多个异构系统之间的问题:
- Session 共享问题
- 跨域问题
Session 共享问题
分布式 Session 的几种实现策略: