- 博客(161)
- 资源 (2)
- 收藏
- 关注
原创 从核心到边界:六边形、洋葱与COLA架构的深度解析
在COLA架构中,我们制定了一系列的命名规范,以便通过名称就能知晓该类的作用和职责范围,从而极大地提升代码的可理解性,提升代码审查(Code Review)的效率。因此,在COLA的设计中,汲取了很多前文中介绍的典型应用架构的优秀思想。只有一个业务的简单场景对扩展性的要求并不突出,这也是扩展设计常被忽略的原因,因为我们大部分的系统都是从单一业务开始的。洋葱架构提供了一个完全独立的对象模型(领域模型),该模型位于架构的核心,不依赖其他任何层次,我们可以在不影响内层的情况下改变外层的灵活性。
2024-08-03 21:27:16 1793
原创 大型网站核心架构要素
性能、可用性、伸缩性、扩展性和安全性是网站架构最核心的几个要素,这几个问题解决了,大型网站架构设计的大部分挑战也就克服了。
2024-07-20 16:53:57 1028 2
原创 整洁架构SOLID-依赖反转原则(DIP)
在系统架构图中,DIP通常是最显而易见的组织原则。抽象工厂设计图中的那条曲线称为架构边界,而跨越边界的、朝向抽象层的单向依赖关系则会成为一个设计守则——依赖守则。
2024-07-14 17:40:17 1057
原创 整洁架构SOLID-里氏替换原则(LSP)
LSP可以且应该被应用于软件架构层面,因为一旦违背了可替换性,该系统架构就不得不为此增添大量复杂的应对机制。
2024-07-13 17:42:34 850
原创 整洁架构SOLID-开闭原则(OCP)
设计良好的计算机软件应该易于扩展,同时抗拒修改。换句话说,一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展。如果对原始需求的小小延伸就需要对原有的软件系统进行大幅修改,那么这个系统的架构设计显然是失败的。在软件架构层面,这项原则的意义重大。
2024-07-07 09:12:00 1143
原创 整洁架构SOLID-单一职责原则(SRP)
SRP是SOLID五大设计原则中最容易被误解的一个。也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。
2024-07-06 08:31:04 915
原创 大型网站架构模式
为了解决大型网站面临的**高并发访问、海量数据处理、高可靠运行**等一系列问题与挑战,大型互联网公司在实践中提出了许多解决方案,以实现网站高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标。
2024-06-19 23:00:22 1163
原创 大型网站架构演化
网站技术是为业务而存在的,除此毫无意义。在技术选型和架构设计中,脱离网站业务发展的实际,一味追求时髦的新技术,可能会将网站技术发展引入崎岖小道,架构之路越走越难。
2024-06-05 22:29:07 1108
原创 层次式架构设计-体系结构概述
软件体系结构可定义为:软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件层次式体系结构是最通用的架构,也被叫作N层架构模式(n-tier architecture pattern),这也是Java EE(J2EE)应用经常采用的标准模式。分层架构的一个特性就是关注分离(separation of concerns)。该层中的组件只负责本层的逻辑,组件的划分很容易明确组件的角色和职责。
2024-04-06 21:50:58 410
原创 信息系统架构设计-以服务为中心的企业整合实践
描绘了和Ramp Control相关的IT系统的状况,包括周围应用和应用提供的接口,这些应用和Ramp Control交互的类型和数据格式。本文将以Ramp Control系统中的Ramp Coordination流程为例,说明如何用以服务为中心的企业集成技术一步步解决该公司IT技术人员面临的企业集成问题。很明显,如此多的流程之间共享着一个业务活动的集合,如此多种类型的流程都是这些业务活动的不同组装方式。实际上,Ramp Coordination的流程因航班类型的不同,机型的不同有很大的差异。
2024-04-05 23:18:17 1096
原创 什么是数据库的三级模式两级映象?
外模式/概念模式映象(逻辑映象):是表和视图之间的映象,存在于概念模式和外模式之间;若表中的数据发生了修改,只需修改此映象,而无需修改应用代码。概念模式/内模式映象(物理映象):是表和数据的物理存储之间的映象,存在于概念模式和内模式之间;若修改了数据的存储方式,只需要修改此映象,而无需修改应用代码
2024-01-27 18:45:00 1018
原创 什么是Restful?
REST是英文representational state transfer(表象性状态转变)或者表述性状态转移。Rest是web服务的一种架构风格。使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议。轻量级,跨平台,跨语言的架构设计。它是一种设计风格,不是一种标准,是一种思想。对应的中文是rest式的Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务。
2023-12-10 19:49:52 980
原创 如何理解java中的context对象?
首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境;其 次,在web.xml中会提供有contextLoaderListener。
2023-12-10 19:48:05 2496
原创 什么是java枚举?为什么要用java枚举?
创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。/*** 枚举测试类。
2023-11-18 21:35:59 177
原创 你真的了解java中的Class对象吗?
为了在使用泛化的Class引用时放松限制,可以使用通配符,它是java泛型的一部分。为了创建一个Class引用,它被限定为某种类型,或该类型的任何子类型,你需要将通配符与extends关键字相结合,创建一个范围。比如程序创建第一个对类的静态成员的引用时,就会加载这个类。为了生成这个类的对象,运行这个程序的JVM,会使用“类加载器”的子系统。因此,使用new操作符创建类的新对象也会被当作对类的静态成员的引用。一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象。(同名的.class文件中)。
2023-11-18 21:30:25 130
原创 什么是java反射机制?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Class对象的由来是将class文件读入内存,并为之创建一个Class对象。
2023-11-18 21:29:37 145
原创 什么是静态代理、JDK动态代理、cglib动态代理?
静态代理的缺点很明显:一个代理类只能对一个业务接口的实现类进行包装,如果有多个业务接口的话就要定义很多实现类和代理类才行。而且,如果代理类对业务方法的预处理、调用后操作都是一样的(比如:调用前输出提示、调用后自动关闭连接),则多个代理类就会有很多重复代码。这时我们可以定义这样一个代理类,它能代理所有实现类的方法调用:根据传进来的业务实现类和方法名进行具体调用。——那就是动态代理。
2023-11-18 21:25:38 125
原创 git基础命令
git是一种分布式版本控制系统。版本库是集中存放在中央服务器。集中式版本控制系统必须联网才能工作,本地电脑从中央服务器获取最新的版本,修改之后再推送给中央服务器。中央服务器出现问题,会影响所有人的工作。分布式版本控制系统没有中央服务器,每个人的电脑上都是一个版本库。分布式版本控制系统有一台用于交换大家修改的远程服务器,例如gitHub,gitLab。与本地版本库的操作不需要联网。初始化git版本库之后会生成一个隐藏文件.git,可以理解为git的版本库repository。
2023-11-18 21:16:25 326
原创 二叉树:有了如此高效的散列表,为什么还需要二叉树?
上一节我们学习了树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是 O(1)。
2023-10-28 21:29:01 155
原创 二叉树:什么样的二叉树适合用数组来存储?
前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。
2023-10-28 21:28:11 225
原创 哈希算法:如何防止数据库中的用户信息被脱库?
散列表也叫哈希表,散列函数也叫哈希函数、哈希算法,都源于英文Hash。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大不相同散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值。
2023-10-28 21:25:25 219
原创 散列表:为什么散列表和链表经常会一起使用?
链表那一节,我们用链表来实现LRU缓存淘汰算法,但是链表实现的LRU时间复杂度是O(n),可以通过散列表将时间复杂度降低为O(1)跳表那一节,Redis的有序集合是使用跳表来实现的,跳表可以看成一种改进版的链表。Redis有序集合不仅使用了跳表,还用到了散列表。java中LinkedHashMap这样一个常用的容器,也用到了散列表和链表两种数据结构。
2023-10-22 18:17:13 156
原创 散列表:如何打造一个工业级水平的散列表?
开放寻址法的缺点:开放寻址法解决冲突的散列表,删除数据比较麻烦,需要特殊标记已经删掉的数据。在开放寻址法中,所有的数据都存储在一个数组中,比起链表法来说,冲突的代价更高。所以,使用开放寻址法解决冲突的散列表,装载因子的上限不能太大。这也导致这种方法比链表法更浪费内存空间。总结:当数据量比较小、装载因子小的时候,适合采用开放寻址法。这是java中的ThreadLocalMap使用开放寻址法解决散列冲突的原因。
2023-10-22 18:16:13 175
原创 散列表:Word文档中的单词拼写检查功能是如何实现的?
散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。散列表的两个核心问题是散列函数设计和散列冲突解决。散列函数设计的好坏决定了散列冲突的概率,也就决定了散列表的性能。
2023-10-22 18:15:18 176
基于springMVC+spring+mybatis+mysql框架的增删改查demo
2016-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人