软件设计师必背知识点
- 格式:doc
- 大小:91.50 KB
- 文档页数:11
软件设计师必背知识点
一、计算机组成与体系结构。
1. 数据的表示。
- 进制转换:
- 二进制、八进制、十进制、十六进制之间的相互转换。例如,十进制转二进制可以采用除2取余法,将十进制数不断除以2,取余数,直到商为0,然后将余数从右到左排列得到二进制数。
- 二进制数的运算,包括算术运算(加、减、乘、除)和逻辑运算(与、或、非、异或)。
- 原码、反码、补码:
- 原码:最高位为符号位,0表示正数,1表示负数,其余位表示数值的绝对值。
- 反码:正数的反码与原码相同,负数的反码是在原码的基础上,符号位不变,其余位取反。
- 补码:正数的补码与原码相同,负数的补码是其反码加1。计算机中通常采用补码来表示和运算数据,因为补码可以简化减法运算,将减法转换为加法。
2. 计算机的基本组成。
- 冯·诺依曼结构:由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
- 运算器:进行算术和逻辑运算的部件,如加法器、乘法器等。
- 控制器:指挥计算机各部件协调工作的部件,它从存储器中取出指令,分析指令并产生相应的控制信号,控制计算机各部件执行指令。 - 存储器:用于存储程序和数据。分为内存储器(主存)和外存储器(辅存)。内存储器包括随机存取存储器(RAM)和只读存储器(ROM)。RAM是可读可写的存储器,断电后数据丢失;ROM是只读存储器,断电后数据不丢失,常用于存储BIOS等基本系统程序。
- 输入设备:如键盘、鼠标等,用于向计算机输入数据和指令。
- 输出设备:如显示器、打印机等,用于将计算机处理的结果输出。
3. 指令系统。
- 指令的格式:一般包括操作码和操作数两部分。操作码表示指令要执行的操作,操作数表示操作的对象。
- 指令的寻址方式:
- 立即寻址:操作数直接包含在指令中。
- 直接寻址:操作数的地址直接包含在指令中。
- 间接寻址:指令中给出的是操作数地址的地址。
- 寄存器寻址:操作数存放在寄存器中,指令中给出寄存器编号。
- 寄存器间接寻址:操作数的地址存放在寄存器中,指令中给出寄存器编号。
4. CPU的性能指标。
- 主频:CPU的时钟频率,单位为Hz,表示CPU每秒钟能产生的时钟脉冲个数,主频越高,CPU的运算速度越快。
- 字长:CPU一次能处理的二进制数据的位数,字长越长,CPU的运算精度越高。
- 缓存(Cache):位于CPU和主存之间的高速缓冲存储器,用于解决CPU和主存之间速度不匹配的问题。缓存的命中率越高,CPU访问主存的次数就越少,计算机的性能就越高。 二、操作系统。
1. 操作系统的基本概念。
- 操作系统的定义:操作系统是管理计算机硬件与软件资源的系统软件,它为用户和应用程序提供了一个方便、高效、安全的使用计算机的环境。
- 操作系统的功能:
- 进程管理:包括进程的创建、撤销、调度等。进程是程序在计算机中的一次执行过程,它是操作系统进行资源分配和调度的基本单位。
- 存储管理:负责内存的分配、回收和保护等。常见的存储管理方式有分区存储管理、页式存储管理、段式存储管理和段页式存储管理。
- 文件管理:对文件的存储空间、目录结构、文件的读写等进行管理。文件是具有名称的一组相关信息的集合。
- 设备管理:对计算机的输入输出设备进行管理,包括设备的分配、驱动程序的安装等。
2. 进程管理。
- 进程的状态:一般有就绪、运行、阻塞三种基本状态。
- 就绪状态:进程已分配到除CPU以外的所有必要资源,只要获得CPU就可以立即执行。
- 运行状态:进程正在CPU上执行。
- 阻塞状态:进程因等待某一事件(如I/O操作完成)而暂时不能运行。
- 进程的同步与互斥: - 同步:多个进程之间为了协调工作,需要按照一定的顺序执行,这种协调关系称为同步。例如,生产者 - 消费者问题中,生产者生产产品后,消费者才能消费产品,需要通过同步机制来保证。
- 互斥:多个进程在竞争同一资源时,不能同时使用该资源,这种关系称为互斥。例如,多个进程同时访问打印机时,需要通过互斥机制来保证同一时刻只有一个进程使用打印机。常见的同步与互斥机制有信号量、管程等。
3. 存储管理。
- 分区存储管理:
- 固定分区:将内存划分为若干个固定大小的分区,每个分区只能装入一个作业。这种方式容易造成内存空间的浪费,因为分区大小可能与作业大小不匹配。
- 可变分区:根据作业的大小动态地划分内存分区。这种方式可以提高内存的利用率,但会产生碎片问题,包括外部碎片(内存中未被利用的小分区)和内部碎片(分区内未被利用的空间)。
- 页式存储管理:将内存划分为大小相等的页面,将程序也划分为大小相等的页,以页为单位进行内存的分配和管理。页式存储管理可以有效地解决碎片问题,但存在页表占用内存空间和地址转换开销等问题。
- 段式存储管理:按照程序的逻辑段(如代码段、数据段、堆栈段等)进行内存的分配和管理。段式存储管理有利于程序和数据的共享和保护,但也存在段表占用内存空间和段的长度不固定导致的管理复杂等问题。
- 段页式存储管理:结合了段式和页式的优点,先将程序划分为若干个段,每个段再划分为若干个页,然后进行内存的分配和管理。
4. 文件系统。
- 文件的逻辑结构:
- 无结构文件(流式文件):文件中的数据是一串字符流,没有结构。 - 有结构文件(记录式文件):文件由若干个记录组成,每个记录具有相同的结构。常见的有结构文件的组织方式有顺序文件、索引文件、索引顺序文件等。
- 文件的物理结构:
- 连续分配:文件的所有数据块在磁盘上连续存放。这种方式的优点是读写速度快,缺点是容易产生碎片,文件的扩展不方便。
- 链接分配:通过指针将文件的各个数据块链接起来。分为隐式链接和显式链接。隐式链接的优点是文件的扩展方便,缺点是随机访问速度慢;显式链接通过文件分配表(FAT)来管理文件的链接关系,提高了随机访问速度。
- 索引分配:为文件建立一个索引表,索引表中记录了文件的数据块在磁盘上的地址。这种方式的优点是既支持随机访问,又支持文件的扩展,缺点是索引表占用一定的磁盘空间。
三、程序设计语言基础。
1. 程序设计语言的分类。
- 机器语言:计算机能够直接识别和执行的二进制指令代码,它是计算机硬件唯一能理解的语言,执行效率高,但编写难度大,可读性差。
- 汇编语言:用助记符代替机器指令的操作码,用地址符号代替指令的操作数地址的一种面向机器的程序设计语言。汇编语言编写的程序需要经过汇编程序翻译成机器语言才能执行,它比机器语言的可读性好,但仍然依赖于具体的计算机硬件。
- 高级程序设计语言:与人类自然语言和数学表达式接近的程序设计语言,如C、C++、Java、Python等。高级语言编写的程序需要经过编译程序或解释程序翻译成机器语言才能执行。编译程序将高级语言源程序一次性翻译成目标程序,然后可以多次执行目标程序;解释程序则是边解释边执行高级语言源程序。
2. 程序设计语言的基本成分。
- 数据类型: - 基本数据类型:如整型、浮点型、字符型等。不同的程序设计语言对基本数据类型的定义和表示可能有所不同。
- 构造数据类型:如数组、结构体(在C语言中)、类(在面向对象语言中)等。构造数据类型是由基本数据类型按照一定的规则组合而成的。
- 表达式:由操作数和运算符组成的式子,用于计算值或执行操作。不同的程序设计语言有不同的运算符优先级和结合性规则。
- 语句:用于控制程序的执行流程。常见的语句有赋值语句、条件语句(如if -
else语句)、循环语句(如for循环、while循环)等。
- 函数(或过程):是实现特定功能的一段独立的程序代码,可以被其他程序代码调用。函数可以提高程序的模块化程度和代码的复用性。
3. 面向对象程序设计的基本概念。
- 类和对象:
- 类:是对具有相同属性和行为的一组对象的抽象描述,它定义了对象的属性(数据成员)和行为(成员函数)。
- 对象:是类的实例,它具有类所定义的属性和行为。
- 封装:将数据和操作数据的方法封装在一起,形成一个类,对外隐藏类的内部实现细节,只提供对外的接口。封装可以提高代码的安全性和可维护性。
- 继承:是一种类与类之间的关系,子类可以继承父类的属性和行为,并且可以在父类的基础上进行扩展和修改。继承可以提高代码的复用性。
- 多态:指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态分为编译时多态(如函数重载)和运行时多态(如虚函数)。
四、数据结构与算法。
1. 数据结构的基本概念。 - 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括逻辑结构、存储结构和数据的运算三个方面。
- 逻辑结构:
- 线性结构:数据元素之间存在一对一的线性关系,如线性表、栈、队列等。
- 非线性结构:数据元素之间存在一对多或多对多的关系,如树、图等。
- 存储结构:
- 顺序存储:将数据元素存放在地址连续的存储单元中,它的优点是可以随机访问数据元素,缺点是插入和删除操作可能需要移动大量的数据元素。
- 链式存储:通过指针将数据元素链接起来,数据元素的存储单元可以不连续。它的优点是插入和删除操作比较方便,不需要移动大量的数据元素,缺点是不能随机访问数据元素,只能通过指针依次访问。
- 索引存储:在存储数据元素的同时,建立一个索引表,索引表中的每个元素包含数据元素的关键字和其存储地址。索引存储可以提高数据的查找速度。
- 散列存储:根据数据元素的关键字通过散列函数计算出其存储地址,散列存储可以快速地查找数据元素,但可能会出现散列冲突的问题,需要采用一定的解决方法,如开放定址法、链地址法等。
2. 线性表。
- 线性表的定义:是由n(n≥0)个数据元素组成的有限序列,数据元素之间存在线性关系。
- 线性表的顺序存储结构:
- 用数组来实现线性表的顺序存储,定义一个数组来存储线性表的数据元素,同时需要记录线性表的长度。 - 顺序表的基本操作,如插入、删除、查找等。插入操作需要将插入位置之后的元素依次向后移动;删除操作需要将删除位置之后的元素依次向前移动;查找操作可以采用顺序查找或二分查找(当线性表是有序表时)。
- 线性表的链式存储结构:
- 单链表:每个节点包含数据域和指针域,指针域指向下一个节点。单链表的基本操作包括链表的创建、插入、删除等。插入操作需要修改指针的指向;删除操作也需要修改指针的指向。
- 双链表:每个节点包含数据域、前驱指针域和后继指针域,前驱指针域指向前一个节点,后继指针域指向后一个节点。双链表在某些操作上比单链表更方便,如在链表中查找前驱节点。
- 循环链表:将单链表或双链表的最后一个节点的指针域指向链表的第一个节点,形成一个环形结构。循环链表在某些特定的应用场景下有优势,如约瑟夫环问题。
3. 栈和队列。
- 栈:
- 栈的定义:是一种只能在一端进行插入和删除操作的线性表,它遵循后进先出(LIFO)的原则。
- 栈的顺序存储结构:可以用数组来实现栈的顺序存储,定义一个数组和一个栈顶指针来表示栈。栈的基本操作包括入栈、出栈、判断栈空和栈满等。
- 栈的链式存储结构:用链表来实现栈的存储,称为链栈。链栈的入栈和出栈操作只需要修改指针的指向。