【回眸】牛客网刷刷刷(三) Linux(续)&软件工程(专题)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言

近期的牛客网学习内容有Linux专题以下记录一些笔试题中的Linux的知识点。

知识点

-u 用户号 指定用户的用户号因为系统用户的用户号为 0故指定用户号为 0
如果同时有 -o 选项则可以重复使用其他用户的标识号因为系统本身存在用户号为 0 的系统用户故应该使用该参数。

linux操作系统包括三种不同类型的进程
交互进程由shell启动的进程既可在前台运行也可在后台运行
批处理进程与终端没有联系是一个进程序列
守护进程linux系统启动时启动的进程并在后台运行

tar是操作.tar的命令 gzip是压缩.gz压缩包的命令 compress压缩.Z文件 uncompress解压缩.Z文件
du 和 df 命令作用不相同。
dudisk usage命令用于显示目录或文件的大小du 会显示指定的目录或文件所占用的磁盘空间。
dfdisk free命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。

cat由第一行开始显示文件所有内容
tac从最后一行开始显示文件的所有内容注意 tac 与cat 写法正好相反
more一页一页的显示文件内容只能向后翻页
less也是一页一页显示文件内容但是可以通过键盘上的【pagedown】【pageup】控制向后向前翻页
head显示一个文件的前几行
tail显示一个文件的后几行

usermod -l 修改账号名称使用格式usermod -l new_name old_name

du(disk usage) 命令功能说明统计目录(或文件)所占磁盘空间的大小
df(disk free) 命令功能说明 用于显示文件系统的磁盘使用情况
free 命令功能说明 可以显示当前系统未使用的和已使用的内存数目还可以显示被内核使用的内存缓冲区
vmstat 命令功能说明 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息

在linux中线程同步的方式包括互斥锁或称互斥量Mutex)读写锁(rdlock)条件变量(cond)信号量(Semophore)。临界区只是用来对共享资源的保护临界区在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区那么有线程进入后其他线程试图访问时将被挂起直到进入临界区的线程离开临界区并不能保证线程的执行顺序先到先得。

export 设置环境变量
echo查看是否成功
env显示所有的环境变量
set显示所有本地定义的Shell变量
unset清除环境变量

gcc命令后加参数代表什么
-o参数用于指定输出的文本如果不指定输出文件则默认输出.out文件
-c参数将对源程序test.c进行预处理、编译、汇编操作生成test.0文件
-S参数将对源程序test.c进行预处理、编译生成test.s文件
-g选项加入GDB能够使用的调试信息,使用GDB调试时比较方便

/etc/mtab文件的作用记载的是现在系统已经装载的文件系统包括操作系统建立的虚拟文件等而/etc/fstab是系统准备装载的
etc/fstab文件的作用 记录了计算机上硬盘分区的相关信息启动 Linux 的时候检查分区的 fsck 命令和挂载分区的 mount 命令都需要 fstab 中的信息来正确的检查和挂载硬盘。

Binwalk是用于搜索给定二进制镜像文件以获取嵌入的文件和代码的工具。
Linux file命令用于辨识文件类型。
firmware-mod-kit工具的功能和binwalk工具的类似
Netstat 命令用于显示各种网络相关信息如网络连接路由表接口状态 (Interface Statistics)masquerade 连接多播成员 (Multicast Memberships) 等等。

tar命令后加参数代表什么
-xextract files from an archive 即从归档文件中释放文件
-vverbosely list files processed 即详细列出要处理的文件
-zfilter the archive through gzip 即通过gzip解压文件
-fuse archive file or device ARCHIVE 即使用档案文件或设备
通常情况下解压 .tar.gz 和 .tgz 等格式的归档文件就可以直接使用 tar xvzf
因为要解压到指定目录下所以还应在待解压文件名后加上 -Cchange to directory参数。

$0 脚本启动名(包括路径)
$n 第n个参数,n=1,2,…9
$* 所有参数列表(不包括脚本本身)
$@ 所有参数列表(独立字符串)
$# 参数个数(不包括脚本本身)
$$ 当前程式的PID
$! 执行上一个指令的PID
$? 执行上一个指令的返回值

$? 最后一次执行命令的返回状态。如果这个变量的值为0证明上一个命令正确执行如果这个变量的值为非0具体是哪个数由命令自己决定则证明上一个命令执行不正确。

touch /etc/nolgoin 禁止所有普通用户登录
init3完全的多用户状态有NFS登录后进入控制台命令行模式
iptable -s INPUT -t tcp -s !127.0.0.1 -j DROP:屏蔽非127.0.0.1请求
init6系统正常关闭并重启默认运行级别不能设为6否则不能正常启动

使用什么命令把两个文件的合并成一个文件
方法1cat file1 file2 > file3 是将两个文件拼接在一起生成一个新的文件
方法2cat file1 >> file2 是将文件1直接接在文件2的结尾就可以了

软件需求分析方法包括结构化分析方法和面向对象的分析方法两大类前者常用工具为数据流图 DFD 、数据字典 DD 、判定表、判定树等。

在20世纪80年代之前瀑布模型一直是唯一被广泛采用的生命周期模型现在它仍然是软件工程中应用的最广泛的过程模型。传统软件工程方法学的软件过程基本上都可以用瀑布模型来描述。

瀑布模型的优缺点

1、瀑布模型有以下优点

1为项目提供了按阶段划分的检查点。

2当前一阶段完成后您只需要去关注后续阶段。

3可在迭代模型中应用瀑布模型。

迭代模型中应用瀑布模型

增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。

2、瀑布模型有以下缺点

1在项目各个阶段之间极少有反馈。

2只有在项目生命周期的后期才能看到结果。

3通过过多的强制完成日期和里程碑来跟踪各个项目阶段。

开发阶段包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段

strlen统计的时候\n是一个字节

软件需求包括三个层次–业务需求、用户需求和功能需求也包括非功能需求
软件系统需求常常分为–功能需求、非功能需求、领域需求。

如果发生下列情形两个模块之间就发生了内容耦合
(1) 一个模块直接访问另一个模块的内部数据
(2) 一个模块不通过正常入口转到另一模块内部
(3) 两个模块有一部分程序代码重叠(只可能出现在汇编语言中)
(4) 一个模块有多个入口。

软件危机的表现
软件开发进度难以预测
软件开发成本难以控制
用户对产品功能难以满足
软件产品质量无法保证
软件产品难以维护
软件缺少适当的文档资料

黑盒测试又叫功能测试检查程序的功能是符合功能说明。

程序的三种基本控制结构是顺序、选择和循环重复。子程序只是程序设计一种方法递归则是一种算法都算不上是控制结构。

快速原型模型的第一步是迅速构建一个可以运行的软件模型实现客户与系统的交互由用户对系统进行评价并进一步细化待开发软件的需求。

jackson图既可以表示数据结构也可以表示程序结构

软件工程中
系统需要具有什么功能由需求分析决定
模块需要具有什么功能由总体设计决定

表驱动法 一种编程模式从表里面查找信息而不使用逻辑语句if、case。事实上凡是能通过逻辑语句来选择的事物都可以通过查表来选择。对简单的情况而言使用简单的逻辑语句更为容易和直白但随着逻辑链的越来越复杂查表法也就愈发显得更具吸引力。

McCabe度量法是由托马斯·麦克凯提出的一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量。它认为程序的复杂性很大程度上取决于程序图的复杂性。单一的顺序结构最为简单循环和选择所构成的环路越多程序就越复杂。

一般模块之间可能的连接方式有七种构成耦合性的七种类型。它们之间的关系为耦合性性由强到弱

内容耦合(Content Coupling)
如果发生下列情形两个模块之间就发生了内容耦合。

一个模块直接访问另一个模块的内部数据
一个模块不通过正常入口转到另一模块内部
两个模块有一部分程序代码重叠(只可能出现在汇编语言中)
一个模块有多个入口。
公共耦合(Common Coupling)
若一组模块都访问同一个公共数据环境则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。

外部耦合(External Coupling)
一组模块都访问同一全局简单变量而不是同一全局数据结构而且不是通过参数表传递该全局变量的信息则称之为外部耦合。

控制耦合(Control Coupling)
如果一个模块通过传送开关、标志、名字等控制信息明显地控制选择另一模块的功能就是控制耦合。

印记耦合(Stamp Coupling)
如果一组模块通过参数表传递记录信息就是标记耦合。它是某一数据结构的子结构而不是简单变量。

数据耦合(Data Coupling)
如果一个模块访问另一个模块时彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的则称这种耦合为数据耦合。

非直接耦合(Nondirect Coupling)
如果两个模块之间没有直接关系它们之间的联系完全是通过主模块的控制和调用来实现的这就是非直接耦合。这种耦合的模块独立性最强。

内聚有如下的种类它们之间的内聚度由弱到强排列如下
1 偶然内聚。模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能这种模块称为巧合强度模块。
2 逻辑内聚。这种模块把几种相关的功能组合在一起 每次被调用时由传送给模块参数来确定该模块应完成哪一种功能
3 时间内聚把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
4 过程内聚构件或者操作的组合方式是允许在调用前面的构件或操作之后马上调用后面的构件或操作即使两者之间没有数据进行传递。
5 通信内聚指模块内所有处理元素都在同一个数据结构上操作有时称之为信息内聚或者指各处理使用相同的输入数据或者产生相同的输出数据。
6 顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行前一功能元素输出就是下一功能元素的输入。即一个模块完成多个功能这些模块又必须顺序执行。
7 功能内聚这是最强的内聚指模块内所有元素共同完成一个功能联系紧密缺一不可。

黑盒测试方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。
白盒测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。

白盒测试又称为结构测试或逻辑驱动测试它允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例对程序所有的逻辑路径进行测试

瀑布模型提供一种结构化的、自顶向下的软件开发方法是所有软件生命周期模型的基础。

演化模型针对实现不能完整定义需求的软件项目利用迭代的思想使软件逐步开发、逐步完善的机制产品需求分解成多组分批循环开发。

螺旋模型遵从瀑布模型迭代和风险驱动的开发过程将瀑布模型的多个阶段转化到多个迭代过程中适合大型系统的开发。过程需求、架构、设计、开发、测试。

喷泉模型主要用于面向对象软件技术开发项目特点是各项活动之间没有明显界限。过程为分析、设计、实现、确认、维护和演化。

喷泉模型fountain model是一种以用户需求为动力以对象为驱动的模型主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。

Model模型是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View视图是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller控制器是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据控制用户输入并向模型发送数据。
控制器接受用户的输入并调用模型和视图去完成用户的需求所以当单击Web页面中的超链接和发送HTML表单时控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求然后再确定用哪个视图来显示返回的数据。

系统软件包括操作系统语言系统和工具系统工具系统也称为实用系统

计算机之所以能按人们的意图自动进行工作最直接的原因是因为采用了
存储程序控制.存储程序控制即为存储程序和程序控制.

度量效益的方法
货币的时间价值
投资回收期
纯收入
投资回收率

系统流程图是用图形符号来表示系统中的各个元素例如人工处理、数据库、设备等流程图表达了系统中各个元素之间的信息流动情况。是描绘物理系统的传统工具。

变更控制包括建立控制点和建立报告与审查制度其过程中的“检出”和“登入”处理实现了存取控制和同步控制存取控制管理各个用户存取和修改一个特定软件配置对象的权限同步控制可用来确保由不同用户所执行任务的并发变更

面向对象分析主要由对象模型、动态模型、功能模型组成其中对象模型是最基本、最重要、最核心的
面向对象建模得到的模型包含系统的三个要素静态结构对象模型、交互次序动态模型、数据变换功能模型
对象模型的五个层次主题层、类与对象层、结构层、属性层、服务层

UML图分为以下几种
(1) 用例图(Use Case Diagram)描述系统功能 用于描述系统与外部系统及用户之间的交互
(2) 类图(Class Diagram)描述系统的静态结构
(3) 对象图(Object Diagram)描述系统在某个时刻的静态结构
(4) 组件图(Component Diagram)描述了实现系统的元素的组织
(5) 配置图(Deployment Diagram)描述了环境元素的配置并把实现系统的元素映射到配置上用于描述系统物理架构并主要由软件实施工程师使用;
(6) 状态图(State Diagram)描述了系统元素的状态条件和响应
(7) 时序图(Sequence Diagram)按时间顺序描述系统元素间的交互
(8) 协作图(Collaboration Diagram)按照时间和空间顺序描述系统元素间的交互和它们之间的关系
(9) 活动图(Activity Diagram)描述了系统元素的活动

WEB前端运行时的各种交互行为或获取数据基本上来源于网络,磁盘存储的问题会影响app类应用

软件=程序+数据+文档所以软件开发≠用编程语言写代码

第一范式(1 NF)数据冗余程度最大第五范式(5 NF)数据冗余程度最小。但是范式级别越高存储同样数据就需要分解成更多张表范式级别提高则需要访问的表增多因此性能(速度)将下降。从实用角度看来在大多数场合选用第三范式都比较恰当。

**SAXsimple API for XML**是一种XML解析的替代方法。相比于DOMSAX是一种速度更快更有效的方法。它 逐行扫描 文档一边扫描一边解析。而且相比于DOMSAX可以在解析文档的任意时刻停止解析但任何事物都有其相反的一面对于SAX来说就是操作复杂。

值对象模式的本质是封装数据。

聚合aggregation关系是一种弱的整体和部分的关系整体和部分可以相互独立。
组合composition关系是一种强的整体和部分的关系整体和部分具有相同的生命周期同生共死。

电气和电子工程师协会( IEEE全称是Institute of Electrical and Electronics Engineers)是一个国际性的电子技术与信息科学工程师的协会是目前全球最大的非营利性专业技术学会其会员人数超过40万人遍布160多个国家。IEEE致力于电气、电子、计算机工程和与科学有关的领域的开发和研究在太空、计算机、电信、生物医学、电力及消费性电子产品等领域已制定了900多个行业标准现已发展成为具有较大影响力的国际学术组织。
所以有关软件工程的标准IEEE是属于行业标注

在计算机中浮点数不能精确的表达出来运算时需要转化为二进制数进行计算

单重继承的类层次结构表现为树型层次结构
多重继承的类层次结构变现为网状层次结构

软件的需求规格说明书 (SRS) 需要讨论的问题包括
功能需求系统应该能够完成哪些功能如何实现这些功能
非功能需求系统在性能、可靠性、安全性、可用性、可维护性等方面的需求
用户界面需求系统应该如何与用户交互用户界面的设计要求
系统限制系统的技术限制和预算限制
接口需求系统应该如何与其他系统或组件交互
数据需求: 系统需要处理的数据、存储需求

结构性的瀑布模型
需求分析-系统测试软件测试中的系统测试阶段的目标
概要设计-集成测试
详细设计-单元测试
在这里插入图片描述

数组只能在初始化的时候整体赋值然后就无法整体赋值

CMMI覆盖的领域包括
软件开发
产品和服务交付
项目管理
信息技术服务管理
知识管理
电子商务
工程和制造
政府和非营利组织

软件的单位缺陷数是基于产品的总体测试总数计算的。单位缺陷数=缺陷总数/软件产品总数。

软件模型选择的原则
1原型模型客户提出一般性的目标不能标出详细的输入处理输出需求或者开发者不能确定算法的项目
2瀑布模型适合需求明确时间要求比较宽松或者规模比较小需求简单的项目
3增量模型适用于需求逐渐清晰的软件项目
4螺旋模型适用于大规模软件项目需求不明朗风险比较高的软件项目

遇到第一个“\0”的时候printf认为已经到字符串末尾打印则结束

对象之间进行通信的构造叫做消息
多态性是指同一个操作可以是不同对象的行为
对象不一定必须有继承性
封装性是指从外面看只能看到对象的外部特征而不知道也无须知道数据的具体结构以及实现操作

结构化程序设计的思想包括自顶向下、逐步求精、模块化、限制使用goto语句

在这里插入图片描述
需求分析阶段的工作可概括为4个方面:
①需求获取。
②需求分析。
③编写需求规格说明书。
④需求审评。

采用瀑布模型进行系统开发的过程中每个阶段都会产生不同的文档。
外部设计评审报告在概要设计和详细设计阶段之后产生
集成测评计划在开发编码完成之后的系统集成阶段产生
系统计划和需求说明在系统设计之前就已产生
在进行编码的同时独立的设计单元测试计划

软件开发的步骤需求、设计、开发、测试、交付、维护
各个步骤的主要任务
需求分析软件功能
设计设计软件架构及功能实现方式
开发编写代码实现功能
测试测试代码是否满足功能
交付交付软件
维护后期维护软件。

软件可维护性可以定性地定义为维护人员理解、改正、改动和改进这个软件的难易程度。
因此影响软件可维护性的因素有
可理解性
可测试性
可修改性

我们如何定义关键的项目特性 W5HH原则 为什么Why要开发这个系统 对这个问题的回答可以使所有参与者评估软件工作的商业理由的有效性。换句话说该系统的商业目的值得花费这些人员、时间和金钱吗 将要做什么What? 对这个问题的回答将制定完成项目所需的任务清单。 什么时候When做 就是标识出何时开展项目任务和何时达到里程碑对这个问题的回答能够帮助团队安排好项目进度。 某功能由谁Who负责 必须规定软件团队的每个成员的角色和责任。 他们的机构组织位于何处Where? 并非所有角色和责任均属于软件团队客户、用户和其他共利益者也有责任。 如何How完成技术工作和管理工作 一旦确定了产品范围必须定义项目的管理策略和技术策略。 每种资源需要多少How much?

MECE是「彼此独立互无遗漏」的英文缩写。MEGE并非一套方法论而比较接近于一个检核的机制让麦肯锡的顾问在针对议题或问题在针对议题或问题进行分析时能够做到不重选、不遺漏的分类藉此有效把握问题的核心
**AARRR**用户进入平台需经历的五个环节的典型的漏斗模型
5W2H5w2h是指七问分析法是五个以w开头的英语单词和两个以h开头的英语单词组成为什么why、做什么what、何人做who、何时when、何地where、如何how 、多少how much。通过7个问题设问从而发现解决问题的线索寻找发明思路进行设计构思。
CPM关键路径法(Critical Path Method,CPM)是一种网络图方法用于在进度模型中估算项目最短工期确定逻辑网络路径的进度灵活性大小。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux