设计思想

从分而治之的思想到架构的设计

江枫思渺然 提交于 2019-11-29 05:44:28
辛巴当上了国王,他究竟要怎样才能管理好它的王国? 分治与总量控制 在上一篇文章里,我们得到两个信息: 人类大脑的信息实时处理能力存在上限 软件系统的复杂度远超人类大脑的复杂度处理上限 从而引出了人类解决大规模复杂问题的根本方法 分而治之 然而分而治之的需要基于一个前提进行 复杂度总量控制 因为绝大多数人类参与的问题中,分而治之都会引入额外的汇总求解成本。要尽量减少复杂度,有两个方面的思想层次的指导: 子问题在人类可控范围内尽量的大 每个子问题要高内聚,问题间要低耦合 子问题在人类可控范围内尽量大,则有助于减少子问题数量,因而减少合并处理子问题的成本。同时子问题不超过一个人处理能力的上限是因为,一旦超过一个人的能力范围,要多人合作解决同一个平面上问题的不同部分时,必然会因合作之间沟通等原因降低整体开发效率(1 + 1 < 2) 高内聚、低耦合是一体,但从不同角度描述的理念。高内聚,即所需完成的事情所需的资源在内部通过较少的代价即可取得,低耦合则是指代 输出给外部、或者从外部输入的资源尽可能的小。 在存在关联的子问题中,耦合并不可能消除。耦合这个词可能大多数程序员听起来有有点不好的意味,但耦合存在另外一个中性的名字——接口。所以,产生了一个接口就产生了一个耦合,接口参数越多,耦合就越强。 以上是对之前文章的回顾,本文后续将基于个人理解,讲述 分治的隔离级别,如何识别要拆分的点

面向对象设计思想

拈花ヽ惹草 提交于 2019-11-28 23:06:26
本来想去培训的,但是我没有钱,只好自己在网上找视频看。 前段时间,因为一些事,耽误了很长时间,现在再开始学。 想成为一名Java开发工程师,工资7k~9k就足够了。 一、对象用计算机语言对问题域中事物的描述,对象通过属性(attribute)和方法(method) 来分别对应事物所具有的静态属性和动态属性 a、类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所具有的静态和动态属性。 b、类可以看成一类对象的模板,对象可以看成该类的一个具体实例。 考虑问题时,a、先考虑在这个问题中应该有哪些类和哪些对象       b、再考虑每一种类和对象,应该具有哪些属性和方法       c、最后考虑类和类之间具备什么样的关系(关联、聚合、继承……) 二、对象 a、对象是Java程序的核心,在Java程序中“万事万物皆对象” b、对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体 c、类是用来创建同一类型的对象的“模板”,在一个类中定义了该类所具有的成员变量和方法。 三、Java类的定义 1、引用   a、Java语言总除基本类型之外的变量类型都称之为引用类型   b、Java中的对象是通过引用对其操作的 分析语句:String s = new String("hello world"); String s;//声明了一个String类型的引用变量

MVC 设计模式

帅比萌擦擦* 提交于 2019-11-28 17:34:23
  MVC 设计模式:通用的软件编程思想,在MVC设计模式中人为,任何软件都可以分为:控制程序流转的控制器(Controler)、封装数据处理数据的模型(Model)、负责展示数据的试图(view)三部分组成。并且在MVC设计思想中要求一个符合MVC设计思想的软件应该保证上面这三个部分相互独立,互不干扰,每一个部分只负责自己擅长的部分。如果某一个模块发生变化,应该尽量做到不影响其他两个模块。这样做的好处是,软件的结构会变得更加的清溪,可读性强,有利于后期的扩展和维护,并且代码可以实现服用。 来源: https://www.cnblogs.com/gxlaqj/p/11416487.html

Spring IOC/DI 设计思想

ⅰ亾dé卋堺 提交于 2019-11-27 14:10:35
IOC—Inversion of Control(控制反转): 在java开发中,将你设计好的对象交给了容器控制。传统的程序设计,我们是直接在对象内部通过new进行创建对象,是由程序主动去创建依赖关系对象。IOC思想是有专门一个容器来创建这些对象,由IOC容器来控制这些对象的创建。 谁控制了谁?IOC容器控制对象。 控制了什么?主要控制了外部资源获取(不只是对象,包括文件等)。 为何是反转,哪些方面反转了?有反转就有正传。传统应用程序是由我们自己在对象中主动控制去直接获取依赖的对象,这就是正传;而反转则是由容器来帮忙创建和注入依赖的对象。 为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转。 那些方面反转了?依赖对象的获取被反转了。 DI—Dependency InjectionI(依赖注入): 组件之间的依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并不是给应用程序带来更多的功能,而是为了提升组件的重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只要通过简单的配置就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。 谁依赖了谁?应用程序依赖于IOC容器。 为什么需要依赖?应用程序需要IOC容器提供对象需要的外部资源。 谁注入谁

分治法的基本思想

拟墨画扇 提交于 2019-11-26 12:09:18
分治法得基本思想是将一个规模为n的问题分解为k个规模为m的相互独立且与原问题解法相同的子问题,然后将子问题的解合并得到原问题的解。 由此可见,分治法设计出的程序一般是递归算法,设解决一个规模为1的问题需要1个单位时间,再设将k个子问题的解合并为原问题的解所需时间为f(n),则递归算法的时间复杂度为: 解递归方程: , 主定理: 当 时,T(n)=O( ); 当 时,T(n)=O ; (此处logn底数为2) 当 时,T(n)=O(f(n)); 来源: CSDN 作者: FRANKENSTEIN0 链接: https://blog.csdn.net/qq_41678225/article/details/100707762

透彻理解Spring事务设计思想之手写实现

跟風遠走 提交于 2019-11-26 03:41:18
前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)。在实际开发中,我们对事务应用最多就是在数据库操作这一环,特别是Spring对数据库事务进行了封装管理。Spring对事务的支持,确实很强大,但是从本质上来讲:事务是否生效取决数据库底层是否支持(比如MySQL的MyISAM引擎就不支持事务,Spring能奈何!),同时一个事务的多个操作需要在同一个Connection上。事务也往往是在业务逻辑层来控制。本篇博客将通过手写一个Demo来分析Spring事务底层到底是如何帮助我们轻松完成事务管理的! 透彻理解Spring事务设计思想之手写实现 先来看一眼工程结构: ConnectionHolder 在Spring中,有时候我们是不是要配置多个数据源DataSource?很显然,Spring需要通过DataSource来得到操作数据库的管道Connection,这有点类似于JNDI查找。 这里通过ConnectionHolder类来完成这个过程,需要思考的是在多线程下,这显然是存在问题的。为避免多线程问题,难道我们采用线程安全的Map,比如ConcurrentHashMap,其实我们真正的目的是什么