Jarvis's Blog


  • Home

  • Tags

  • Categories

  • Archives

  • others

软件系统分析与设计-状态建模

Posted on 2018-05-06 | In Software Engneering

领域建模 - 状态建模

状态图

状态图描述一个 事物或对象 受 事件或消息 刺激产生 可见的状态(属性/属性组合) 的数据变化。

  • 基础符号
    • 起始状态(Initial)
    • 终止状态(Final)
    • 取消/对象取消(Termination)
    • 状态(State)
    • 变迁(Transform),含条件(Condition)、事件(Event)和事件处理动作(Action/Handler)
  • 扩展符号
    • 复合状态
    • 信号

states-notation

绘图注意事项:

  • 必须有起始状态,通常有终止和取消状态
  • 状态命名要用名词短语、动词过去时或正在进行时等具有延续性的词汇
  • 在需求分析过程中,尽可能不涉及动作
Read more »

软件系统分析与设计-领域建模与数据库建模

Posted on 2018-04-29 | In Software Engneering

领域建模

  • 阅读 Asg_RH 文档,按用例构建领域模型。

    Read more »

软件系统分析与设计-用例建模

Posted on 2018-04-21 | In Software Engneering

用例建模实践

用例建模

Asg_RH文档用例图

去哪儿网酒店预订用例图

创新用例和子用例以黄色标注,外部系统和服务以蓝色标注。

对比两个时代、不同地区产品的用例图,在项目早期,发现创新最适合的切入点就是从用户角度入手。

Read more »

Docker 入门实战

Posted on 2018-04-13 | In Docker

Docker基础知识

Docker是什么

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

为什么要用Docker

环境配置一直是软件开发的麻烦之一。用户计算机的环境都不相同,同样的软件,换了一台机器可能根本无法运行。环境包括操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。

环境配置如此麻烦,换一台机器,就要重来一次,让人身心俱疲。那么,软件可不可以附带环境安装?也就是说,安装的时候,能否把可运行的原始环境复制过来? Docker就是来解决这个问题的。

Docker 与 虚拟机

这么听起来,Docker与虚拟机好像是一个东西。确实,它们都是带环境安装的不同解决方案,然而,虚拟机有以下几个劣势:

  • 资源占用多

    虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。

  • 冗余步骤多

    虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

  • 启动慢

    启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。显然,直接对进程隔离,容器的几大优势就体现出来了:

  • 启动快
  • 资源占用少
  • 体积小

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

虚拟机与Docker对比:

virtualization

docker

安装Docker

以下以 ubuntu Xenial 16.04 (LTS) 为例,安装Docker社区版(Docker CE),

其它操作系统下的安装可能略有不同,详见Get Docker CE for Ubuntu

首先,如果需要卸载旧版Docker:

1
$ sudo apt-get remove docker docker-engine docker.io containerd runc

在一台新主机上安装Docker时,官方推荐使用Docker仓库来安装,此后可以很方便地从仓库安装和更新Docker。由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

1
2
3
4
5
6
7
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
Read more »

软件项目管理入门

Posted on 2018-03-18 | In Software Engneering

软件团队管理基础

简答题

  1. 简述瀑布模型、增量模型、螺旋模型(含原型方法)的优缺点。

    • 瀑布模型:

      • 优点

        1. 降低软件开发的复杂程度,提高软件开发过程的透明性,提高软件开发过程的可管理性。
        2. 推迟软件实现,强调在软件实现前必须进行分析和设计工作。
        3. 以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导,保证了阶段之间的正确衔接,能够及时发现并纠正开发过程中存在的缺陷,使产品达到预期的质量要求。
      • 缺点

        1. 强调过程活动的线性顺序。
        2. 缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。
        3. 风险控制能力较弱。
        4. 瀑布模型中的软件活动是文档驱动的,当阶段之间规定过多的文档时,会极大地增加系统的工作量。
        5. 管理人员如果仅仅以文档的完成情况来评估项目完成程度,往往会产生错误的结论。
    • 增量模型:
      • 优点
        1. 增强客户对系统的信心。
        2. 降低系统失败风险。
        3. 提高系统可靠性。
        4. 提高系统的稳定性和可维护性。
      • 缺点
        1. 增量粒度难以选择。
        2. 确定所有的基本业务服务比较困难。
    • 螺旋模型:
      • 优点
        1. 强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。
        2. 将瀑布模型的多个阶段转化到多个迭代过程中,减少项目的风险。
      • 缺点
        1. 风险分析需要相当的成本耗费,因此螺旋模型只适合于投
          资较大的规模软件项目。
        2. 失误的风险分析可能带来更大的风险。
Read more »

KMP算法

Posted on 2018-03-13 | In Algorithm

KMP概述

KMP算法是由D.E.Knuth、J.H.Morris和V.R.Pratt三个人共同提出的,就取三个人名字的首字母作为该算法的名字。KMP主要解决的是目标字符串(target)中的模式(pattern)定位问题,例如:

有一个模式串P,如果它在一个主串T中出现,则返回它第一次出现的起始位置,否则返回-1。

KMP算法与暴力解法的区别就在于KMP算法巧妙的消除了指针i(主串中的指针)的回溯问题,只需确定下次匹配j(模式串中的指针)的位置即可,使得问题的复杂度由O(m * n)下降到O(m + n)。

从暴力解法入手:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int pattern_match(string T, string P) {
int i = 0, j = 0;
while (i < T.length() && j < P.length()) {
if (T[i] == P[i]) {
i++;
j++
} else {
i = i - j + 1;
j = 0;
}
}

return j == P.length ? i - j : -1;
}

再考虑下面这种情况:

kmp1

此时发生了字符串的不匹配后,按照暴力解法,还需要将i设置为1,j设置为0,显然是不合理的,因为在遍历过程中,我们已经“知道”T中有“ABC”串,而P也是由“ABC”串开头,理想情况下下一步的移动应该是这样:

kmp2

而这,也正是KMP想解决的问题。这样,可以有效的避免了i的回溯,即i不会向前移动了,只需要移动j的位置即可。

Read more »

软件工程基本概念

Posted on 2018-03-12 | In Software Engneering

软件工程入门

简单题

  • 软件工程的定义

    1)将系统化、规范化、可度量的方法应用与软件的开发、运行和维护的过程,即将工程化应用于软件中。

    2)研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。

  • Software Crisis(软件危机)

    软件危机是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短,甚至夭折。软件开发是一项高难度,高风险的活动,由于它的高失败率,故有所谓“软件危机”之说。

  • COCOMO模型(构造性成本模型)

    全称为Constructive Cost Model,是由巴里·勃姆(Barry Boehm)提出的一种软件成本估算方法。这种模型使用一种基本的回归分析公式,使用从项目历史和现状中的某些特征作为参数来进行计算。它是一种在软件项中估算工作量、成本以及时间表的模型。

  • 软件生命周期

    计算机软件有一个孕育、诞生、成长、成熟、衰亡的生存过程,即软件的生命周期(也称软件开发生命周期SDLC 或软件开发过程)。软件生命周期可分为六个阶段:

    • 可行性分析与计划阶段
    • 需求分析阶段
    • 设计阶段
    • 实现阶段
    • 测试阶段
    • 运行与维护阶段
    Read more »

Sector Coloration

Posted on 2018-03-07 | In Algorithm

题目描述

圆盘染色问题

现将一个圆盘分成n个扇形,要求使用m种颜色来对这些扇形进行染色,相邻的两个扇形必须染上不同的颜色。问:一共有多少种不同的染色方法?

Example

input: m = 3, n = 3
output: 6

input: m = 5, n = 5
output: 1020

算法分析

首先考虑一个更简单的问题:对单列的方格进行染色。显然,这种情况下,染色方案数量为:

1
m * (m - 1)^(n - 1)

而圆盘问题,在此之上的变化只有一个,就是第1块和第n块的问题。第n块的染色不仅要考虑第n-1块,还有第1块。再进一步,其实决定性因素在于第n-1块。以下用color[i]表示第i块的颜色:

  1. 当color[1] == color[n-1],此时第n块的可选颜色有m-1种。
  2. 当color[1] != color[n-1],此时第n块的可选颜色有m-2种。

解决了第n块的颜色选择问题后,整个问题就很简单了,因为当m相同时,前n-2块的染色方案是不会因为块数的增加而改变的。因此,考虑使用动态规划的来解决问题。

Read more »
123…6
Jarvis Wong

Jarvis Wong

Ideas worth spreading.

43 posts
9 categories
30 tags
Ace-0 Gmail w674--7 Twitter
© 2018 — 2019 Zhijun Wang. All rights reserved.
Powered by Hexo
|
Theme — NexT.Gemini v6.0.3