Booogu Blog

「胸中丘壑,眼中星河」

Java内存模型

可见性 | 有序性 | 原子性

并发编程的源头 现代计算机体系中,随着CPU、内存、I/O 设备快速迭代,有一个核心矛盾一直存在,就是这三者的速度差异。 根据木桶理论,程序整体的性能取决于最慢的操作——读写 I/O 设备,也就是说单方面提高 CPU 性能是无效的。为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡献,主要体现为: CPU:增加缓存,均衡与内存的速度差异...

进程缓存与分布式缓存

进程级缓存 | 分布式缓存 | 透明多级分流系统

前言:服务端缓存,也是一种通用的技术组件,它用于减少多个客户端相同的资源请求,缓解或降低服务器的负载压力。所以,说它是一种分流手段也是很合理的。 引入缓存的内在原因 软硬件缓存的差异 我们说的缓存特指软件层面的缓存,与硬件层面缓存(CPU L1/L2/L3缓存、磁盘缓存等)相比,有很大差别。 服务端缓存是程序的一部分,而硬件缓存是一种从硬件层面对软件运行效率的优化手段。引入软件...

WIP内容分发网络与负载均衡

CDN | Load Balance | 透明多级分流系统

前言:内容分发网络的工作过程,主要涉及到路由解析、内容分发、负载均衡和它所能支持的应用内容四个方面。

传输链路-优化HTTP传输速度的小技巧

传输链路 | HTTP | 透明多级分流系统

前言:在开发过程中没有太多存在感的DNS,其实就很符合“透明多级分流”的特点。 优化传输链路的前端设计原则 本节前言:随着HTTP协议的发展,从上世纪90年代的HTTP1.0和HTTP1.1,到2015年发布的HTTP2,再到2019年发布的HTTP3,适合HTTP传输的请求的特征也在不断变化,未来,以下这些以优化传输链路为目的的前端设计原则,或许会成为奇技淫巧,甚至成为反...

客户端缓存如何帮助服务器分担流量?

缓存 | 透明多级分流系统

前言:HTTP协议针对人们要求服务端与客户端之间“无状态”的交互原则所带来的请求需携带额外数据、网络性能降低的问题,采用了客户端缓存的解决方案,从HTTP1.0/1.1/2.0的演进过程中,逐步形成了现在被称为“状态缓存”、“强制缓存”和“协商缓存”三种HTTP缓存机制,而利用好客户端的缓存,能够节省大量网络流量,这是为后端系统分流,以实现更高并发的第一步。 状态缓存 所谓状态缓存...

DNS-优化HTTP性能的第一步

DNS | 透明多级分流系统

前言:在开发过程中没有太多存在感的DNS,其实就很符合“透明多级分流”的特点。 多级分流系统设计原则 一条完整的用户请求路径如下:浏览器->DNS指引找到系统入口->经过网关->负载均衡器->缓存->服务集群等一系列设施,最后接触到位于系统末端存储于数据库服务器的信息,然后再逐级返回到用户的浏览器中。 这个过程需要许多技术部件的协作,作为系统的设计者...

如何做代码审查(Code Review)?

Programing Specification |Code Review

快速改善代码质量的20条编程规范 关于命名 命名的关键是能准确达意。对于不同作用域的命名,我们可以适当地选择不同的长度。 我们可以借助类的信息来简化属性、函数的命名,利用函数的信息来简化函数参数的命名。 命名要可读、可搜索。不要使用生僻的、不好读的英文单词来命名。命名要符合项目的统一规范,也不要用些反直觉的命名。 接口有两种命名方式:一种是在接口中带前缀“I”;另一种是在...

面向对象设计与需求分析与系统设计

面向对象设计 |需求分析 | 系统设计

如何做面向对象设计(OOD)? 我们把OOD设计环节拆解细化一下,主要包含以下几个部分: 划分职责进而识别出有哪些类 根据需求描述,我们把其中涉及的功能点,一个一个罗列出来,然后再去看哪些功能点职责相近,操作同样的属性,可否归为同一个类。 定义类及其属性和方法 我们识别出需求描述中的动词,作为候选的方法,再进一步过滤筛选出真正的方法,把...

设计原则导读

常用设计原则解读 | 区别 | 联系

SOLID五大原则 单一职责原则——SRP 如何理解SRP Single Responsibility Principle:一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。 如何判断类的职责是否单一? 不同的应用场景、不同阶段的需求背景、不同的业务层面,对同一个类的职责...

面向对象(OO/OOD/OOP)思想导读

面向对象特征 | 设计原则 | 设计模式

学习面向对象设计原则的意义 作为基础知识,应对面试 代码即名片,告别烂代码 提高复杂代码的设计和开发能力 让读源码、学框架事倍功半 优秀框架,类结构、个数、关系复杂,为了保证代码扩展性、灵活性可维护性,经常用到设计模式、设计思想 基本功不够,根本不足以看懂优秀框架的源码 可能觉得看懂了,但其实不得要领,不悟精髓 —— 一台集各种...