自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

西木空间

Java架构师所需要的一切技术

  • 博客(118)
  • 收藏
  • 关注

原创 Java 9并发编程指南 目录

历时半年翻译完的《Packt.Java.9.Concurrency.Cookbook.2nd.Edition.2017.4》,一直忙于工作没将翻译书籍整理成博客,现完整列出。我认为Java多线程是Java中很重要的知识点,Java新版本对多线程编程尤其流式的多线程方面做了非常大的改进,翻译这本书也是对多线程编程原理加深基础知识印象,希望对大家有帮助。以下是目录链接:第一章:线程管理创建、运...

2018-11-25 21:10:47 349

原创 模块划分-4 模块划分

1、设计思维融合把层、功能模块、细粒度模块三个概念分清楚。功能模块是粗粒度的,一般对应一个功能组,最大的用途是基于功能模块进行开发小组分工。 层也是粗粒度的,UI交互层封装人机交互、系统交互层封装硬件访问和外部系统交互、数据管理层封装DB和File和Flsh存储。 模块划分设计需要进一步设计到细粒度模块一级。 一个细粒度模块,必然位于架构的某一层中。 一个细粒度模块,一般也都会属...

2019-01-25 17:20:51 5423

原创 模块划分-3 用例驱动

描述需求的序列图,描述的是“内外对话”。 描述设计的序列图,描述的是“内部协作”。1、划分原理用例是需求,架构师设计。用例驱动的架构设计,从用例到模块划分结构,关键过渡是一组对象的相互协作。所谓协作,是一组对象为了实现某个目的而进行的交互。从“需求层”到“设计层”的总体思维路径,简称“两环节、四步骤”:需求分析环节 一方面用例图定义系统能提供给外部Actor的功能,此步在先。 ...

2019-01-25 17:20:23 927

原创 模块划分-2 分层设计

1、分层架构1.1、展现层、业务层、数据层层的职责 展现层,或称为表现层,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。 业务层,或称为业务逻辑层,用来处理各种功能请求,实现系统的业务功能,是一个系统最为核心的部分。 数据层,或称为数据访问层,主要与数据存储打交道。 层间关系 展现层会向业务层传递参数,发出服务请求,并获取业务层返回的信息显示在界面上。...

2019-01-25 17:19:32 1139

原创 模块划分-1 功能划分

1、功能树作为需求分析的手段,功能树是一种框架性工具,有助于需求分析人员一层一层地选择确定系统必须具有的各项功能与特性。作为需求分析的结果,功能树是一种功能表达结构,将“功能大类”、“功能组”和“功能项”的隶属于支持关系以“树”的形式呈现出来。1.1、与功能模块区别功能树是一种功能分解结构,功能模块则是对系统进行结构分解的结果示意图。 功能树刻画的是问题领域,功能模块刻画的是解决方案...

2019-01-25 17:18:07 6478

原创 详细架构-5 架构验证

1、原型法准确来说是“垂直演进原型”:为了真实地验证架构的表现,必须将选定的功能特性完整地实现;另一方面,这个原型不是验证单个技术的运用是否可行的垂直抛弃原型,而是要对一组架构设计决策“对系统要求的非功能需求的满足程度”进行验证,所以这个垂直原型应该是演进型的,将直接作为后面分头开发的基础。2、框架法将架构设计方案用框架的形式实现,并在此基础上进行评估验证。3、具体步骤测试运行...

2019-01-23 17:13:50 950

原创 详细架构-4 原型技术

水平原型:在一定程度上实现用户交互层的界面布局和界面流转逻辑。低保真原型往往是在白板上或文档中画出界面的草图。又称行为原型。 垂直原型:往往涉及到不同的层,将为数不多的(甚至一个)功能真正地展现。又称结构原型。 抛弃原型:用过之后注定要被抛弃的。又称探索原型。 演进原型:保留下来作为正式开发的基础。 ...

2019-01-23 17:13:26 522

原创 详细架构-3 5视图方法实践

1、逻辑架构逻辑架构关注职责划分和接口定义。不同粒度的职责需要被关注,它们可能是逻辑层、功能子系统、模块、关键类等。不同通用程度的职责要分离,分别封装到专门模块、通用模块或通用机制中。如果使用UML来描述架构的逻辑架构,则该视图的静态方面由包图、类图、对象图来描述,动态方面由序列图、协作图、状态图和活动图来描述。核心设计任务是:模块划分、接口定义、领域模型细化。2、开发架构包括...

2019-01-23 17:12:58 191

原创 详细架构-2 系统级思考

对软件研发而言,系统思考是以整体的观点对复杂系统构成部分之间的联系进行研究。1、从需求到设计“概念设计”是“细化架构设计”活动的输入。 各种“需求”是“细化架构设计”活动的输入。 “领域模型”是“细化架构设计”的输入。2、5视图设计过程2.1、开发架构程序单元 + 编译依赖关系程序单元 源文件、配置文件 程序库、框架 目标单元 程序单元组织 Projec...

2019-01-23 17:12:31 174

原创 详细架构-1 架构视图

架构视图是一种设计架构、描述架构的核心手段。通过“架构视图”作为分而治之的手段,使架构师分别专注于架构的不同方面、相对独立地分析和设计不同“子问题”。1、2视图方法逻辑视图+物理视图。1.1、逻辑架构软件的逻辑架构规定了软件系统由哪些逻辑元素组成以及这些逻辑元素之间的关系。具体而言,组成软件系统的逻辑元素可以是逻辑层(Layer)、功能子系统、模块。设计逻辑架构的核心任务,是比...

2019-01-23 17:11:41 502

原创 概要架构-4 设计实践

1、设计要领1.1、1个决定,4个选择决定 如何划分顶级子系统。 选择 架构风格选型 开发技术选型 二次开发技术选型 集成技术选型 上述5项设计任务顺序:首先,选择架构风格、划分顶级子系统。这2项设计任务是相互影响、相辅相成的。 然后,开发技术选型、集成技术选型、二次开发技术选型。这3项设计任务紧密相关、同时进行。也可能不需要集成支持,也可以决定不支持二次开...

2019-01-17 16:26:24 256

原创 概要架构-3 关键质量设计

1、场景思维场景是一种将笼统需求明确化的需求刻画技术。性能、持续可用性、安全性、可扩展性等笼统的非功能需求,通过建立场景来明确,并最终进行设计决策。这是以场景为“跳板”的非功能目标设计思维。场景应包含5要素:影响来源:来自系统外部或系统内部的触发因素。 如何影响:影响来源施加了什么影响。 受影响对象:默认的受影响对象为“本系统”。 问题或价值:受影响对象因此而出现什么问题,或...

2019-01-17 16:25:48 175

原创 概要架构-2 关键功能设计

1、需求过渡到设计功能需求使用用例规约等技术描述功能,阐明待开发系统的使用方法,但并没有以类、包、组件、子系统等元素形式描述系统的内部结构。从用例规约向概要设计过渡之所以困难,是因为:用例是面向问题域的,设计师面向机器域的。 用例技术本身不是面向对象的,而设计应该是面向对象的,这是两种不同的思维方式。 用例规约采用自然语言描述,而设计采用形式化的模型描述,描述手段也不同。使用鲁棒图建...

2019-01-17 16:24:44 329

原创 概要架构-1 设计概述

1、基础概念概要架构满足“架构 = 组件 + 交互”的基本定义,只不过概要架构仅关注高层组件。 概要架构对高层组件的“职责”进行笼统的界定,并给出了高层组件之间的相互关系。 概要架构不应涉及接口细节。直指目标的设计思想、重大选择,是关乎任何复杂系统成败的最关键的、指向性的设计。具有针对性,三大特征分别为:直指目标 设计思想 重大选择2、关键需求->概要架构以关键需求为...

2019-01-17 16:23:52 314

原创 需求分析-7 关键需求

关键需求决定架构。关键需求横跨功能需求、质量属性,以及约束这三类需求。其余需求用来验证架构。1、确定关键质量需要做如下三方面工作:为了提高要开发软件系统受认可的程度,应着重提高哪些方面的质量属性要求。 充分考虑这些质量属性的相互制约或相互促进关系,以调整不同质量属性的要求标准。 同时,必须满足各种约束性需求。确定关键质量时考虑质量属性之间的矛盾关系。采用质量属性关系矩阵(“+...

2019-01-16 17:22:48 1391

原创 需求分析-6 领域模型

领域模型试讲领域概念以可视化的方式抽象成一个或一套模型。1、作用为需求定义提供了领域知识和领域词汇。 软件界面的设计往往和领域模型关系密切。 领域模型是否合理将严重影响软件系统的可扩展性。 领域模型经过精化之后会成为业务层的核心。 是设计持久化数据模型的良好基础。1.1、需求人员视角促进用户沟通、领域模型提供的词汇表应当成为所有团队成员所使用语言的核心,在需求活动以及其他活...

2019-01-16 17:22:22 1622

原创 需求分析-5 分析流程

1、小型流程 需求工作项 提交的文档 所处需求层次 业务目标 《目标列表》 业务需求 绘制用例图 《需求规约》或《用例模型》 用户需求 编写用例规约 行为需求 2、...

2019-01-16 17:21:54 1816

原创 需求分析-4 用例分析

1、用例技术1.1、用例图用例图描述软件系统为用户或外部系统提供的服务。用例图最重要的元素是参与者(Actor)和用例(Use Case),以此体现系统能为外部参与者(Actor)提供的功能(Use Case)。 参与者是与系统交互的角色或系统,既可以是系统的用户(User),也可以是和系统有直接交互关系的系统(System)。 用例的名称应该从参与者的角度进行描述,并以动词开头,...

2019-01-16 17:21:24 9551

原创 需求分析-3 实际应用

需求分析主线中所包含的关键步骤,可以概括为“三横两纵”。三横 确定系统目标。 研究高层需求。 建立用例模型。 两纵 需求沟通、需求启发、需求验证。 确定非功能需求。 所谓“纵”,指的是实践中需要持续不断地进行。所谓“横”,则是有先后之分的。1、第1步:明确系统目标产品的“根”是系统的业务目标,我们要把业务目标写入《愿景文档》,成为《愿景文档》的关键部分。2...

2019-01-16 17:20:41 349

原创 需求分析-2 需求分析

IEEE软件工程标准术语表将需求定义为:用户所需的解决某个问题或达到某个目标所要具备的条件或能力。 系统或系统组件为符合合同、标准、规范或其他正式文档而必须满足的条件或必须具备的能力。 上述第一项或第二项中定义的条件和能力的文档表述。RUP将需求定义为:需求描述了系统必须满足的情况或提供的能力,可以直接来自客户需要,也可以来自合同、标准、规范或其他有正规约束力的文档。 1、需...

2019-01-16 17:19:48 1852

原创 需求分析-1 愿景分析

1、愿景要解决项目、产品或解决方案的起源问题。明确愿景,就是针对系统的目标、主要特性、功能范围和成功要素等进行构思并达成一致。愿景分析应阐明业务需求、描述需求产生的背景和理由等。 愿景分析最重要的工作成果是《愿景与范围文档》,产品型公司称为《市场需求文档》(MRD)或《产品需求文档》(PRD),项目型公司称为《项目立项书》。 典型《愿景与范围文档》包括下列内容:业务需求 ...

2019-01-16 17:17:51 2165

翻译 技巧和窍门

技巧和窍门更多关注在最后一节,我们总结一些前面章节中没有讲解过的技巧和窍门:尽可能使用并发设计模式:软件开发中,设计模式是常见问题的解决方案。它们通常用于软件开发和并发应用中,且无异常。诸如信令、汇合和互斥锁之类的模式定义了如何在具体情况下实现并发应用,并且它们已经应用到并发编程中。在最高级别实现并发:像Java并发API这种具有丰富的线程API,提供不同的类实现应用中的并发。尝试使用提供...

2018-12-04 00:08:05 156

翻译 使用流处理大数据集

Java 9并发编程指南 目录使用流处理大数据集准备工作实现过程工作原理更多关注Stream接口是可以进行筛选和转换的元素序列,以顺序或并行的方式得到最终结果。此结果可以是原始数据类型(整型、长整型…),对象或者数据结构。如下特性更好的定义了Stream:流是数据序列,不是数据结构。可以将不同的源创建成流,例如集合(列表、数组…)、文件、字符串或提供流元素的类。无法访问单独的流元素。...

2018-12-04 00:07:58 185

翻译 使用执行器代替线程组

Java 9并发编程指南 目录使用执行器代替线程组扩展学习ThreadGroup类为分层结构中的线程提供了一种分组机制,对属于线程组的所有线程进行操作,只需调用一次即可。默认情况下,所有线程属于相同组,但在创建线程时可以指定不同的线程组。不管怎样,线程组没有提供任何有用的特性:需要创建线程且管理线程的状态控制线程组中所有线程状态的方法已经被废弃,不鼓励使用这些方法如果需要在公共结构...

2018-12-04 00:07:49 115

翻译 避免使用废弃方法

Java 9并发编程指南 目录避免使用废弃方法Java并发API也有废弃方法,它们是API早期版本提供但现在不应该使用的方法。废弃方法已经被更好的方式实现的方法所取代。关键的废弃操作是Thread类提供的操作,如下所示:destroy():之前此方法销毁线程,实际上它抛出NoSuchMethodError异常。suspend():此方法在线程恢复之前,暂停线程执行。stop():此方...

2018-12-04 00:07:42 254

翻译 避免在锁中使用阻塞操作

Java 9并发编程指南 目录避免在锁中使用阻塞操作准备工作实现过程工作原理更多关注阻塞操作是在事件发生之前,阻止当前线程执行。典型的阻塞操作是那些涉及控制台、文件或网络的输入或输出操作。如果在锁临界区内部使用阻塞操作,则会使应用性能恶化。当一个线程等待将结束阻塞操作的事件时,应用的其它部分可能也在等待相同的事件。然而其余线程无法访问临界区且执行其代码(临界区的代码)。本节将实现这种情况的...

2018-12-04 00:07:34 856 1

翻译 使用fork/join框架代替执行器

Java 9并发编程指南 目录使用fork/join框架代替执行器准备工作实现过程工作原理扩展学习使用执行器无需创建和管理线程,只要通过实现Runnable或Callable接口创建任务,并将任务发送给执行器,其线程池会分配一个线程来执行任务。Java 7引入fork/join框架的执行器,此框架在ForkJoinPool类中实现,使用分治技术将问题分割成更小的部分。当为fork/join框...

2018-12-04 00:07:24 179

翻译 使用延迟初始化进行预防

Java 9并发编程指南 目录使用延迟初始化进行预防准备工作实现过程工作原理延迟初始化是一种常见的编程技术,直到第一次使用对象时才创建。通常会在操作实现中初始化对象,而不是在类构造函数中初始化。这种技术的主要优点是节省内存,因为只创建执行应用所需的必要对象。在一个类中肯能要声明大量对象,但每次程序执行中不会用到所有对象,所以不需要为程序执行中未使用的对象提供内存。这种优势在资源有限的环境中非常...

2018-12-04 00:07:11 118

翻译 使用并发数据结构

Java 9并发编程指南 目录使用并发数据结构扩展学习更多关注数据结构是程序的重要组成部分,我们总是需要管理存储在数据结构中的数据。数组、列表或者树是通用数据结构范例。Java API提供了大量随时可用的数据结构。但当处理并发应用时,由于Java API提供的所有结构并不都是线程安全的,所以需要非常谨慎使用。如果选择的数据结构不是线程安全的,那么应用中的数据可能不一致。在并发应用中使用数据结...

2018-12-04 00:07:01 208

翻译 将线程管理委托给执行器

Java 9并发编程指南 目录将线程管理委托给执行器准备工作实现过程工作原理更多关注在Java 5之前,在使用Java并发API实现并发应用时,需要自己管理线程。首先实现Runnable接口或者继承Thread类,然后创建thread对象并使用其start()方法开始执行。我们还需要控制线程状态,来了解线程是否已经结束执行或者依然在运行。Java版本5中,出现了作为执行线程池提供者的执行器概...

2018-12-04 00:06:51 90

翻译 保持锁的时间尽可能短

Java 9并发编程指南 目录保持锁的时间尽可能短准备工作实现过程工作原理锁与其它同步机制一样,定义了一次只能执行一个线程的临界区。必须非常谨慎的定义临界区,它必须只包含真正需要互斥的指令。尤其是其包含长操作,如果临界区包含不使用共享资源的冗长操作,则性能将更差。本节将实现分别在临界区内和临界区外执行长操作任务的范例,查看这两种情况下的性能差异。准备工作本范例通过Eclipse开发工具实...

2018-12-03 09:41:32 254 1

翻译 使用原子变量代替同步

Java 9并发编程指南 目录使用原子变量代替同步准备工作实现过程扩展学习更多关注当在多个线程之间共享数据时,必须使用同步机制保护对数据块的访问。可以在修改数据的方法声明中使用synchronized关键字,这样每次只能有一个线程修改数据。另一种方式是使用Lock类创建具有修改数据指令的临界区。自从版本5开始,Java引入原子变量。当线程使用原子变量执行操作时,类的实现检查操作是否在一个步骤...

2018-12-03 09:34:02 242

翻译 通过排序避免死锁

Java 9并发编程指南 目录通过排序避免死锁实现过程工作原理扩展学习更多关注当需要在应用方法中获取多个锁时,必须非常小心控制锁的顺序,错误的选择会导致死锁情形。本节将实现死锁情形的范例,然后学习如何解决死锁。实现过程通过如下步骤实现本范例:创建名为BadLocks的类,包含两个方法,名为operation1()和operation2():public class BadLock...

2018-12-03 09:32:35 1334 1

翻译 尽可能使用不可变对象

Java 9并发编程指南 目录尽可能使用不可变对象准备工作实现过程工作原理扩展学习更多关注在Java中使用面向对象编程开发应用时,需要创建由属性和方法组成的类。类方法决定对类执行的操作,属性存储定义对象的数据。通常,每个类都实现一些方法来建立属性值。当应用运行时对象也改变,并且使用这些方法改变它们的属性值。当开发并发应用时,需要特别注意多个线程共享的对象,我们必须要使用同步机制来保护访问这种...

2018-12-03 09:31:16 129

翻译 生成并发随机数

Java 9并发编程指南 目录生成并发随机数准备工作实现过程工作原理扩展学习更多关注ThreadLocalRandom类在Java版本7中引入,是Java并发API提供的特定类,在并发应用中生成伪随机数。此类作为线程的局部变量使用,每个要生成随机数的线程都有不同的生成器,但是它们都是通过此类以透明的方式管理给程序员。使用这种机制,性能要比使用共享Random对象生成所有线程的随机数更好。本节...

2018-12-03 09:25:34 543

翻译 监控信号量类

Java 9并发编程指南 目录监控信号量类准备工作实现过程扩展学习更多关注信号量是一个计数器,保护对一个或多个共享资源的访问。1965年Edsgar Dijkstra引入信号量概念,并在THEOS操作系统中第一次使用。当线程想要使用共享资源时,它必须获得一个信号量。如果信号量的内部计数器大于0,信号量递减计数器值并允许访问共享资源。如果信号量计数器等于0,则阻塞线程,直到计数器大于0。...

2018-12-03 09:24:45 177

翻译 监控线程类

Java 9并发编程指南 目录监控线程类准备工作实现过程工作原理扩展学习更多关注线程是Java并发API中最基本的元素,每个Java程序都至少有一个执行main()方法的线程,反过来main()方法启动应用的执行。当启动一个新的Thread类时,它将与应用程序的其他线程以及操作系统上的其他进程并行执行。进程和线程之间有一个关键的区别,进程是正在运行的应用实例(例如在文本处理器中编辑文件)。一个...

2018-12-03 09:23:40 342

翻译 使用阻塞线程安全队列与生产者和消费者通信

Java 9并发编程指南 目录使用阻塞线程安全队列与生产者和消费者通信准备工作实现过程工作原理扩展学习更多关注生产者/消费者问题是并发编程中的经典问题。有一个或多个数据生产者,它们将数据存储在缓冲区中。还有一个或多个从相同缓冲区获取数据的消费者。生产者和消费者共享相同的缓冲区,因此必须控制对缓冲区的访问以避免数据不一致的问题。当缓冲区为空时,消费者等待直到缓冲区里有元素,如果缓冲区已满,生产者...

2018-12-03 09:22:41 159

翻译 ForkJoinPool类中处理不受控异常

Java 9并发编程指南 目录ForkJoinPool类中处理不受控异常实现过程工作原理扩展学习更多关注fork/join框架能够为ForkJoinPool类的工作线程抛出的异常设置处理器。当使用ForkJoinPool类时,需要理解任务和工作线程之间的区别。为了使用fork/join框架,需要实现继承ForkJoinTask类、RecursiveAction或者RecursiveTask类...

2018-12-03 09:21:29 1562

翻译 Executor框架中Runnable对象的处理结果

Java 9并发编程指南 目录Executor框架中Runnable对象的处理结果准备工作实现过程工作原理扩展学习更多关注Executor框架通过使用Callable和Future方法执行返回结果的并发任务。Java中传统的并发编程是基于Runnable对象实现,此对象不返回结果。本节讲学习如何调整Runnable对象来模拟Callable对象,允许并发任务返回结果。准备工作本范例通过E...

2018-12-03 09:17:20 427

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除