前言
近期的牛客网学习内容有Linux专题,以下记录一些笔试题中的Linux的知识点。
知识点
-u 用户号 指定用户的用户号;因为系统用户的用户号为 0,故指定用户号为 0;
如果同时有 -o 选项,则可以重复使用其他用户的标识号,因为系统本身存在用户号为 0 的系统用户,故应该使用该参数。
linux操作系统包括三种不同类型的进程:
交互进程:由shell启动的进程,既可在前台运行,也可在后台运行;
批处理进程:与终端没有联系,是一个进程序列;
守护进程:linux系统启动时启动的进程,并在后台运行;
tar是操作.tar的命令 gzip是压缩.gz压缩包的命令 compress:压缩.Z文件 uncompress:解压缩.Z文件
du 和 df 命令作用不相同。
du(disk usage)命令用于显示目录或文件的大小,du 会显示指定的目录或文件所占用的磁盘空间。
df(disk 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命令后加参数代表什么
-x:extract files from an archive 即从归档文件中释放文件;
-v:verbosely list files processed 即详细列出要处理的文件;
-z:filter the archive through gzip 即通过gzip解压文件;
-f:use archive file or device ARCHIVE 即使用档案文件或设备;
通常情况下解压 .tar.gz 和 .tgz 等格式的归档文件就可以直接使用 tar xvzf;
因为要解压到指定目录下,所以还应在待解压文件名后加上 -C(change 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,否则不能正常启动;
使用什么命令把两个文件的合并成一个文件?
方法1:cat file1 file2 > file3 是将两个文件拼接在一起生成一个新的文件
方法2:cat 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)数据冗余程度最小。但是,范式级别越高,存储同样数据就需要分解成更多张表,范式级别提高则需要访问的表增多,因此性能(速度)将下降。从实用角度看来,在大多数场合选用第三范式都比较恰当。
**SAX(simple API for XML)**是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它 逐行扫描 文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于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:**用户进入平台需经历的五个环节的典型的漏斗模型;
5W2H:5w2h是指七问分析法,是五个以w开头的英语单词和两个以h开头的英语单词组成,为什么(why)、做什么(what)、何人做(who)、何时(when)、何地(where)、如何(how )、多少(how much)。通过7个问题设问,从而发现解决问题的线索,寻找发明思路,进行设计构思。
CPM:关键路径法(Critical Path Method,CPM)是一种网络图方法,用于在进度模型中估算项目最短工期,确定逻辑网络路径的进度灵活性大小。