常见的软件工程知识点

1.软件版本命名java

软件版本号由四部分组成:web

第一部分            软件架构或软件界面变化数据库

第二部分            软件功能新增编程

第三部分            软件bug修复c#

第四部分           1.编译版本号加日期版本号 它是编译时的版本标记,通常序号都是递增的。(如windows系统版本号)
windows

                          2.日期版本号加希腊字母版本号 用于记录修改项目的当前日期,天天对项目的修改都须要更改日期版本号。设计模式

                         希腊字母版本号常见有3种,分别为:alpha(内测版)、beta(公测版)、release(正式版)。缓存

                         例如:1.1.1.20160101_beta安全

 

2.软件开发模型服务器

边作边改型

瀑布模型---->敏捷开发(演变)          

快速原型模型          

增量模型            

迭代(演化)模型        

螺旋模型

极限编程模式

 

3.web软件结构模式

B/S模式

C/S模式

 

4.软件编程设计模式

mvc模式

mvp模式

mvvm(mvvc)模式

 

5.单例与原型(属于软件设计模式)

单例只有一个实例。(世界上只有独一无二的我)                

原型根据一个原型建立N个对象。(根据“人”,创造“男人”与“女人”)

 

6.软件编程范式(思想)

面向过程编程 / 过程式编程(POP)

面向过程编程按照函数步骤一步步往下执行。

以功能函数(funtion)为中心编程。

 

面向对象编程(OOP)

面向对象编程把事物拆分红各类对象,在各类对象里面封装了一些方法,对象之间相互调用并执行。

以对象数据(data)为中心编程。

 

面向切面编程(面向侧面)

函数式编程

函数响应式编程

逻辑编程

 

7.软件架构风格 

rest风格:经过url来定义资源位置与操做。

如:http://example.com/resources/    或者    http://example.com/order

 

8.软件设计架构

面向服务架构

微服务架构

 

9.软件设计范式

约定优于配置 (惯例重于配置),目的按照约定的规范编程(约定软件目录结构,代码命名),减小软件开发人员需作决定的数量(大幅度减小配置的工做量),提升开发效率。

PS:并不是一切都是积极的。任何结构化软件项目都存在两个基本问题。

        会增长学习成本,学习软件编程规则,强迫软件开发人员必须遵照此规则。(代码文件必定要这样子命名,代码文件必定要放在这里)

        会让软件开发人员忽略一些软件实现的基本原理。(不知道为何要这样作,是怎么实现的)

   

10.UML基本模型图

结构UML图

类图                面向对象编程中类与类之间关系、属性。例如:User class 与 vendor Class关系
组件图            描述系统软件之间交互关系,接口。例如:Apache+Tomcat+webApp1+webApp2+dataBase结构
复合结构图     面向对象编程中类与结构化分类器、部件、端口、链接器和协做。例如,user类经过login接口登录user界面
部署图            描述系统软件部署的节点。例如:数据库服务器集群。
对象图            面向对象编程中类具体某个实例。例如:user类中若是common user角色就进入common user界面。若是admin user角色就进入admin user界面。
包装图            面向对象包名(命名空间)的关系。例如:Dao包里面包含UserDao类。

行为UML图(交互UML图)

活动图           描述系统软件的业务功能,流程图。例如:用户第一步作什么,第二步作什么。
通信图           描述用户对象之间的协做,而不是时间序列,相似于序列图,只是新增人物角色在序列图里面。
交互概览图    序列图与活动图的混合图。
状态图           系统软件的不一样状况下,执行什么样的动做。例如:用户登录失败状态,用户登录成功状态,用户登录过时状态会出现什么的操做。
序列图           面向开发人员介绍用户在一个时间轴(生命线)上操做行为。例如:用户进入登录页面,未注册用户点击“注册”按钮注册页面,填写信息后提交表单,再进入登录页面进行登录。
定时图           描述多条生命线上的操做行为。相似于序列图。
用例图           面向普通人员介绍用户与系统软件的交互。例如:登录用户拥有什么操做权限,未登录用户拥有什么权限。

PS:这是UML 2.x的13种图表。
        在实际建模中,结构图是必需,但行为图(交互图)只需序列图用例图活动图

 

11.字节流与字符流
以InputStream(输入)/OutputStream(输出)为后缀的是字节流。
以Reader(输入)/Writer(输出)为后缀的是字符流。

字节流:程序-直接操做文件-文件
字符流:程序-放入缓存-写入文件-文件

PS:优先使用字节流。

 

12.heap(堆)和stack(栈)

堆是操做系统动态分配内存空间的。访问速度慢,全局访问变量,先进先出。

栈是编程语言固定分配内存空间的。访问速度快,局部访问变量,先进后出。

 

 

13.接口与抽象类

接口就是指一些行为或动做。(有没有这种行为或动做)

抽象类就是指一些事物的本质。(是否是这种东西)

 

14.阻塞与非阻塞

阻塞就是一直等待消息,不等到消息不离开,一直挡道。

非阻塞就是每隔一段时间去看看消息到了没,没到就回去,不挡道。

 

15.异步与同步

异步就是作完一件过后,不须要等待结果,接着干另外一件事。

同步就是作完一件过后,等待结果,拿到结果才能干另外一件的事。

 

16.线程与进程

关系:线程是进程的一部分,线程做为进程的子集存在。

区别:线程相似于一棵树的全部枝干。

          线程共享同一个进程地址空间。(包括内存和其余资源)

          线程之间数据交互快,线程之间切换快。

          进程相似于独立的一棵树。

          进程具备单独的地址空间。

          进程之间数据交互慢,只能经过操做系统提供的机制交互。

 

17.多线程与单线程

     多线程优势:应用程序保持对输入的响应,充分发挥硬件的优点(CPU、内存、硬盘),充分利用空闲资源,并行处理任务。(同步处理任务)

               缺点: 同步处理任务偶尔会发生冲突。(同一个时间线程之间操做相同的数据)

                           线程之间会相互占硬件资源,线程过多,会致使软件性能会降低。

                           线程中某一个线程崩溃就会致使当前整个进程崩溃。

          应用例子:Tomcat、Apache。

       单线程优势: 应用程序不损耗硬件资源,相对线程安全。

                  缺点: 容易发生程序阻塞,若是其中一个任务操做时间过长,就会冻结整个程序。

           应用例子:Nodejs、Nginx、Redis 。

PS:Nodejs是多线程,Nodejs应用程序是单线程。

 

补充:软件应用进程类型

         CPU Bound (国内翻译为CPU密集型): 软件依赖 CPU计算速度

         I/O Bound (国内翻译为I /O密集型) :软件依赖 I /O 计算速度

         以上两种应用进程类型都受 Memory Bound (内存限制)。

 

18.并行和并发

并行指应用程序同一时间把多个任务拆分红子任务而且同时执行任务。(多核CPU执行任务)

并发指应用程序同一时间出现多个任务而且执行任务。(单核CPU执行任务)

并行是并发的一个子集,一个应用程序能够是并发的,也能够是并行的。

 

19.数据持久化
将一些临时产生的数据永久保存到硬盘上,不随系统,内存,时间变化而变化。
 

19.错误与异常

错误表示软件正常状况下,出现不可控制的问题。 好比说内存泄露。

PS: 内存泄漏是一种特殊的编程错误。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,致使在释放该段内存以前就失去了对该段内存的控制,从而形成了

          内存的浪费。有很多人习惯于把任何不须要的内存使用的增长描述为内存泄漏,即便严格意义上来讲这是不许确的。     

 

20. 垃圾收集(垃圾回收)

      垃圾收集机制分为两种,一种是硬盘垃圾收集机制,另外一种是内存垃圾收集机制。

      硬盘垃圾收集机制,存在于一些高端固态硬盘(ssd),针对一些有效数据进行读取与重写操做。(相似与硬盘碎片整理机制)

      内存垃圾收集机制,存在于一些编程语言的编译器,几乎全部的编译器都具有这样的机制(c语言编译器除外),这种机制有效的保证程序运行中,可以必定程度避免出现内存泄漏,达到内

存空间循环利用的目的。

 

21.脚本语言与编程语言

脚本语言/直译语言(解释语言驱动)  

运行原理:         解释---运行(每次都要(解释---运行)这两步)

通俗易懂的例子:说一句,翻译一句。

编译语言(机器语言驱动)     

运行原理:         编译---二进制文件---运行(第一次运行须要编译,以后每次运行只走(二进制文件---运行)这两步)

通俗易懂的例子:整理全部的翻译内容,而后再把全部内容翻译出来。            

编译语言性能与能力都优于脚本语言。

补充: Java,c#等兼具编译型语言与解释型语言的特色的。

 

PS:解释器与编译器区别

      

      高级编程语言与低级编程语言

      高级编程语言就是接近天然语言(人类语言),见其名知其义。

      好比:java,c#,Python。 

      低级编程语言就是接近汇编语言或者机器语言,语言精练,不易阅读与理解。

      好比:汇编语言。

 

22.软件位数(32位与64位)

位数越高意味着数据能够在更大的块进行处理,这也意味着更准确。

位数越高意味着系统能够指向或地址的物理内存位置的更大的数字。

以windows系统为例:

 

PS:MAC OS X/MACOS 是64位操做系统。

        电脑主机内存超过4G以上的建议安装64位操做系统,更能发挥内存的做用。(如今大多数的cpu都是64位的)

 

23.bit(位)、(byte)字节、字符区别

bit是计算机存储设备的最小单位。

byte是计算机处理数据的基本单位。

字符是人使用的符号,抽象的,如,a,b,1,2。

 

PS:1byte=8bit,一个汉字两个字节,一个英文一个字节。

 

24.gb(Gigabyte)与gib (Gibibyte) 区别

gb是一种十进制的信息计量单位。

1GB = 1,000(103)MB

gib是一种二进制的信息计量单位。

1GiB = 1,024(210)MiB

 

PS:由于windows系统把这两个单位搞混,致使外存储设备显示的容量与标示的容量不符。windows操做系统显示的gib,不是gb。

      外存储设备的实际容量与标示容量相符,是正确的,并无小。

      硬件厂商采起十进制的换算方法计算。缘由是1k=1000,1k!=1024。

 

25.编码

ASCII(美国信息交换标准代码)是美国制定的,基于26个基本拉丁字母的一种语言编码。(英文语言编码)

Unicode(中文:万国码、国际码、统一码、单一码)是Unicode联盟制定的,拥有全世界的语言的一种语言编码(世界标准编码)

如:UTF-8,UTF-16

GB 2312 或 GB 2312–80 是中华人民共和国国家标准简体中文字符集(中国标准编码)。

如:GBK 是中文字符扩展集(已过期),GB 18030是国内目前最新的中文字符集。

Big5是针对中国使用繁体中文(正体中文)地区的中文字符集(中国港澳、台湾地区标准编码)。

 

26.硬编码与软编码。

硬编码就是使用固定值。

如:

var a, b = 2;
if (a == 2) {
    alert('正确')
}

软编码就是使用变量去代替固定值。

如:

var a, b = 2;
if (a == b) {
    alert('正确')
}

 

27.软件开源协议

GPL协议:GNU General Public License是指GNU通用公共许可协议。开发者必须保证源码的做者或团队能收到或获得源码,而且将这些条款给他们看,使他们知道他们有这样的权利。强制公开全部的代码。

LGPL协议: GNU Lesser General Public License 是指GNU 宽通用公共许可协议。开发者在不修改源码的前提,只引用源码的功能,无需强制开源本身的代码。

BSD协议: Berkly Software Distribution 是指BSD许可证。开发者不能够用原做者或 机构名字和原来产品的名字作市场推广,并且还要开发者的软件带上BSD协议,并在软件文档中声明BSD协议。此协议能够控制。第三方的代码并能够加以修改。

Apache License协议:非盈利开源组织Apache 采用的协议,与BSD相似。

MPL协议:The Mozilla Public License是指非盈利开源组织Mozilla采用的协议,开发者不受专利限制。

EPL协议:Eclipse Public License是指非盈利开源组织Eclipse采用的协议,商业软件可使用,也能够修改EPL协议的代码,但要承担代码产生的侵权责任,与BSD相似。

MIT协议:源自美国麻省理工学院命名,开发者有权利使用、复制、修改、合并、出版发行、散布、再受权及贩售软件,并能够修改协议条款。但必须声明其原做者版权与许可声明。

CDDL协议:Common Development and Distribution License是指通用开发与销售许可协议,实为MPL的拓展协议,容许公共版权使用,无专利费,并提供专利保护,可集成于商业软件中,容许自行发布许可。

相关文章
相关标签/搜索