- Java207
- 编程14
- 设计79
- DevOps8
- 数据结构和算法17
- 树6
- 综合17
- 线性表4
- 数据库114
- 网络19
- 分布式76
- 大数据32
- 软件工程3
- 工作8
- 笔记52
- JavaCore64
- JavaEE15
- 软件20
- 工具37
- 框架68
- 中间件9
- 编程范式4
- 编程语言3
- Python6
- 架构31
- 设计模式27
- 重构7
- DDD2
- UML4
- 监控2
- 数据库综合3
- 数据库中间件3
- 关系型数据库21
- 文档数据库12
- KV数据库18
- 列式数据库15
- 搜索引擎数据库22
- 网络综合8
- 网络协议6
- 网络技术4
- 操作系统13
- 操作系统应用2
- 分布式综合15
- 分布式协同18
- 分布式调度7
- 分布式通信27
- 分布式存储8
- flink9
- hadoop5
- hive9
- 人工智能1
- 基础特性18
- 高级特性7
- 容器7
- IO9
- 并发11
- JVM9
- 面试11
- JavaWeb6
- 服务器8
- 构建9
- IDE4
- 监控诊断6
- JavaBean2
- 模板引擎4
- 测试5
- 其他9
- Spring61
- ORM3
- 安全8
- 缓存5
- 流量控制2
- 微服务5
- 解决方案8
- Git3
- mysql15
- mongodb11
- redis19
- KV 数据库3
- hbase13
- elastic5
- elasticsearch16
- Linux11
- 命令1
- 分布式协同综合10
- ZooKeeper7
- RPC3
- MQ7
- 效能6
- 方法论2
- 规范3
- Tomcat6
- Maven7
- Spring综合5
- Spring核心24
- Spring数据10
- SpringWeb8
- SpringIO4
- Spring集成4
- Spring安全1
- Spring其他4
- MQ综合1
- mq10
- kafka10
- RocketMQ4
- 其他MQ1
DevOps 简介
什么是 DevOps
什么是 DevOps?DevOps 集文化理念、实践和工具于一身,它强调团队授权、跨团队沟通和协作以及技术自动化,其最终目标是优化质量和交付。
DevOps 理念,旨在打破开发工程师和运维工程师的壁垒,强调两个团队合而为一,在产品的整个生命周期(从开发、测试、部署再到运维、运营)内相互协作,工程师不再限于单一职能。
DevOps 始于 2007 年左右,当时的开发和运维对传统的软件开发模式提出了担忧:在这种模式下,编写代码的开发人员与负责部署的运维人员分开工作。 DevOps 一词是开发(development)和运维(operations)这两个词的组合,反映了将二者合而为一的过程。
复杂度分析
为什么需要复杂度分析
衡量算法的优劣,有两种评估方式:事前估计和后期测试。
后期测试有性能测试、基准测试(Benchmark)等手段。
但是,后期测试有以下限制:
- 测试结果非常依赖测试环境。如:不同机型、不同编译器版本、不同硬件配置等等,都会影响测试结果。
- 测试结果受数据规模的影响很大。
所以,需要一种方法,可以不受环境或数据规模的影响,粗略地估计算法的执行效率。这种方法就是复杂度分析。
如何设计系统
系统设计过程
步骤一、约束和用例
对于任何系统设计,第一件应该做的事是:阐明系统的约束并确定系统需要满足哪些用例。
永远不要假设没有明确说明的事情。一定要尽力收集、理解需求,并设计一个很好地涵盖这些要求的解决方案。
例如,URL 缩短服务可能只为几千个用户提供服务,但每个用户都可能共享数百万个 URL。它可能旨在处理对缩短的 URL 的数百万次点击或数十次点击。该服务可能必须提供有关每个缩短的 URL 的大量统计信息(这会增加您的数据大小),或者可能根本不需要统计信息。
您还必须考虑预期会发生的用例。您的系统将根据其预期功能进行设计。不要忘记确保你知道面试官一开始没有告诉你的所有要求。
系统架构面试
如何设计一个秒杀系统?
秒杀系统的挑战
秒杀的核心问题就是极高并发处理,由于系统要在瞬时承受平时数十倍甚至上百倍的流量,这往往超出系统上限,因此处理秒杀的核心思路是限流和缓存。
秒杀系统的解决思路
- 系统上有拦截流量:尽可能在上游拦截和限制请求,限制流入后端的量,保证后端系统正常。 因为无论多少人参与秒杀,实际成交往往是有限的,而且远小于参加秒杀的人数,因此可以通过前端系统进行拦截,限制最终流入系统的请求数量,来保证系统正常进行。
- 充分利用缓存:这是一个典型的读多写少的应用场景(一趟火车其实只有 2000 张票,200w 个人来买,最多 2000 个人下单成功,其他人都是查询库存,写比例只有 0.1%,读比例占 99.9%),非常适合使用缓存。
大数据学习路线
大数据简介
移动计算
传统的软件计算处理模型,都是“输入 -> 计算 -> 输出”模型。
如何解决 PB 级数据进行计算的问题呢?
采用分布式集群的解决方案,用数千台甚至上万台计算机构建一个大数据计算处理集群,利用更多的网络带宽、内存空间、磁盘容量、CPU 核心数去进行计算处理。
大数据计算处理通常针对的是网站的存量数据,网站大数据系统要做的就是将这些统计规律和关联关系计算出来,并由此进一步改善网站的用户体验和运营决策。
将程序分发到数据所在的地方进行计算,也就是所谓的移动计算比移动数据更划算。
系统测试架构
软件测试描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
现代软件开发项目中,分工明确,基本上都会有研发、测试、QA 等角色。不同角色由于关注的视角不同,测试目标和测试方法也不完全相同。本文主要从研发、测试的视角去考量软件测试技术。
注意:
- 为了方便,只有测试人员需要关注的测试点用【测试】标注;
- 而只有研发人员需要关注的测试点用【研发】标注;
- 都需要关注的测试点则不作标注。
大数据简介
简介
什么是大数据
大数据是指超出传统数据库工具收集、存储、管理和分析能力的数据集。与此同时,及时采集、存储、聚合、管理数据,以及对数据深度分析的新技术和新能力,正在快速增长,就像预测计算芯片增长速度的摩尔定律一样。
- Volume - 数据规模巨大
- Velocity - 生成和处理速度极快
- Variety - 数据规模巨大
- Value - 生成和处理速度极快
大型系统核心技术
大型系统的设计目标就是为了快速、高效、稳定的处理海量的数据以及高并发的请求。
单机服务受限于硬件,客观存在着资源瓶颈,难以应对不断增长的数据量和请求量,为了打破瓶颈,大型系统基本上都被设计为分布式系统。
分布式系统由于其面临的共性问题,在很多场景下的解决方案往往也存在着共性。因此,我们会发现,很多优秀的大型系统在设计方案上存在着很多的共同点。
本文主要讨论应对分布式系统共性问题的解决方案,这既可以加深对分布式系统运作原理的理解,也可以作为设计大型分布式系统时的借鉴。