数据库
1、数据库的发展阶段?
人工管理阶段>>文件系统阶段>>数据库系统阶段
1、数据:数据库中存储的基本对象。
数据库:长期存储在计算机内的、有组织的、可共享的数据集合。
数据库管理系统:专门用于建立和管理数据库的一套软件。对外部程序提供访问数据库的方法,对内进行数据管理。
数据库系统:与和数据库相关的整个系统,一般由数据库、数据库管理系统、应用程序、数据库管理员和用户组成。
2、触发器的作用?
答:主要是通过事件来触发而被执行的。可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
3、什么是存储过程?用什么来调用?
答:存储过程是一组SQL语句,优点是允许模块化的设计,可以在程序中调用多次。而且存储过程只编译一次,如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
可以用一个命令对象来调用存储过程。
4、索引的作用?和它的优点缺点是什么?
答:索引就一种特殊的查询表,索引指定列的数据用某种数据结构进行排序。例如B+树
优点:加快数据库的检索速度。
缺点:需要额外的空间,且插入删除需要额外的时间
MySQL数据库几个基本的索引类型:
1、普通索引:没有任何限制
2、唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
3、主键索引:不允许有空值
4、全文索引:进行模糊查询
5、什么是事务?什么是锁?
答:事务一组sql语句,逻辑上构成一个整体。如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,也就是说要么全部执行,要么全部不执行。
锁:锁可以保证事务的完整性和并发性。在某段时间内不能使用某些数据或数据结构。
共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页;通常是该页被读取完毕,S锁立即被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。
6、数据库的乐观锁和悲观锁是什么?
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
出现死锁的原因:
7、什么叫视图?游标是什么?
答:视图是一种虚拟的表,只能进行查询和修改操作。只存储了原表的结构而不存储数据。对视图的修改不影响基本表。
优点:简化操作,安全性,可将重要的信息不加入视图
缺点:对视图的操作还是建立在原表上的,性能较差
游标是数据库为用户开设的一个数据缓冲区,存放SQL语句的执行结果
8、DBMS是什么
数据库管理系统是管理数据库的软件(Mysql,Oracle)。用户就可以在抽象意义下处理数据,而不必顾及这些数据在计算机中的布局和物理位置。
9、数据库的三级模式
外模式 概念模式 内模式
1)外模式:以视图的形式展现给用户的。
2)概念模式:整个数据库中的逻辑结构,用来描述实体,以及它们之间的关系。
3)内模式:数据库的物理结构
10、范式是什么,内容有那些
在设计数据库时,为了使其冗余较小、结构合理,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则被称为范式。范式是符合某一设计规则的总结。
第一范式(1NF)数据库表中的所有字段值都是不可分割的原子值
第二范式(2NF)数据库表中的每一列都与主键完全相关,而不能只与主键的部分相关。
第三范式(3NF)数据库表中的每一列和主键直接相关,而不是间接相关。
11、超键、候选键分别是什么?
超键:在关系中能唯一标识元组的属性集称为关系模式的超键。
候选键:是最小超键,即没有冗余元素的超键。
12、数据库四大特性?
原子性:事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
一致性:数据库在事务执行前后都保持一致性状态。
隔离性:一个事务所做的修改在最终提交以前,对其它事务是不可见的。
持久性:一旦事务提交,则其所做的修改将会永远保存到数据库中。
13、数据库与文件系统的比较?
相同:都是用来存储和访问数据的
不同点:1.管理对象不同:数据库管理的是数据,而文件系统管理的是文件;
2.存储数据方式不同:数据库有统一的存储方式,而文件系统有多种方式,文件系统存储方式以及格式更加自由,数据库更加规范,共享性较好
14、数据模型?
层次数据模型:利用树来组织数据
网状数据模型:利用图来组织数据
关系数据模型:使用二维表格来存储数据
15、完整性约束?
实体完整性约束:主键字段不能为空且不能重复;
参照完整性:相关联的表的数据一致性;
用户定义的完整性约束
16、主键和外键的区别?
主键在本表中是唯一的、不可为空的,外键可以重复可以为空
17、几种表连接方式,有什么区别?
内连接是保证两个表中所有的行都要满足连接条件(类似与交集)
在外连接中,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接三种
18、mysql和oracle的区别?
1、对事务的提交:MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,
2、MySQL是轻量型数据库,并且免费;Oracle是重量型数据库,收费
19、触发器的触发类型?
行级触发器:相应的语句有影响到几行记录,就执行几次触发器
语句级触发器:只会在相应的语句执行前或者是执行之后执行一次
20、如何优化MySQL?
MySQL的优化主要涉及SQL语句及索引的优化、数据表结构的优化、系统配置的优化和硬件的优化四个方面
21、Mysql存储引擎?
MylSAM、MEMORY、InnoDB、Archive
只有InnoDB支持事务,其他都不支持;只有InnoDB支持外键,其他都不支持
1、如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB是一个很好的选择。
2、如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。
3、如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL 中使用该引擎作为临时表,存放查询的中间结果。
4、如果只有 INSERT 和 SELECT 操作,可以选择Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用 Archive 引擎。
22、nosql数据库的特点
特点:
1、数据之间无关系,这样就非常容易扩展
2、大数据量,高性能
3、NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式
23、nosql和sql的比较?
1、存储方式:sql的存储方式是表格型的,nosql比较多
2、存储结构:sql是结构化数据,nosql是非结构化数据
3、存储规范
4、查询方式:sql的查询方式使用sql语言,nosql查询是以每个数据块为单位的
5、nosql对事务的处理不是很好
6、nosql支持的数据量比较大
7、nosql的性能比较强
24、除了mysql数据库,你还知道哪些数据库?
答:数据库主要分为关系型数据库和非关系型数据库
Nosql就是非关系型数据库
软件工程
1、软件重用
指的是利用已经存在的软件元素建立新的软件系统,这其中的软件元素既可以是软件产品、源程序,也可以是文档、设计思想甚至是领域知识
2、什么是软件工程?
软件工程是指导软件开发和维护的工程学科。是采用工程的概念、原理、技术和方法来开发与维护软件。
3、数据流图的作用是什么?它有哪些基本成分?
数据流图是用于描绘信息流和数据从输入移动到输出的过程中所经受的变换
组成部分:数据流,变换数据的处理,数据存储,数据的源点和终点。
4、可行性研究主要研究什么问题?
技术可行性、经济可行性、操作可行性。
5、数据流图和数据字典
数据流图:描绘数据在软件中流动和被处理的逻辑过程。
数据字典:关于数据的信息的集合,也就是对数据流图中所包含的所有元素的定义的集合,其目的是对数据流图中的各个元素做出详细的说明。
6、软件工程的三要素
方法(开发方法)、工具(支持方法的工具)、过程(管理过程):需求、设计、实现、测试、验收
7、软件工程开发模型
1、瀑布模型:明确规定每个阶段的任务
2、快速原型模型:不带反馈环的,使得采用这种模型的软件产品的开发基本上是线性顺序的
3、渐增模型:从部分需求出发,先建立一个不全面的系统,通过测试这个系统,进一步是系统扩充和完善
4、螺旋模型:螺旋模型基本做法是在瀑布模型的每一个开发阶段前,引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。
5、喷泉模型:从软件需求的形式规格说明出发,经过一系列的程序变化,得到最终结果
8、MVC模式:是一种软件架构模式
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
View(视图)是应用程序中处理数据显示的部分。
Controller(控制器)是应用程序中处理用户交互的部分。
9、常见的设计模式:
单例模式、工厂模式、适配器模式、观察者模式
10、软件工程步骤:问题的定义及规划、需求分析、概要设计、详细设计、编码、测试、验收、维护
11、软件测试类型:
白盒测试:了解程序内部的设计结构及具体的代码实现过程
黑盒测试:黑盒测试时是不考虑程序内部的结构和处理过程,只根据软件说明书来检查是否符合预期的功能要求
α测试:模拟各类用户对即将面市软件产品(称为α版本)进行测试(软件还未面世)
β测试:用户在不同场所进行测试(软件已经面试,用户已在使用,当有错误时自定提交错误报告)
12、瀑布模型:将软件生存周期的各项活动按顺序进行连接。是将上一项活动的输出作为该项活动的输入。
优点:
1、有按阶段划分的检查点
2、只需关注后续的阶段
3、可在迭代模型中应用瀑布模型。
迭代模型:开发迭代是一次完整地经过所有工作流程的过程:(至少包括)需求工作流程、分析设计工作流程、实施工作流程和测试工作流程。实质上,迭代模型是类似小型的瀑布式项目。
每一个迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集
缺点:
1、各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2、因为开发模型是线性的,用户只有在最后才能见到成果,开发风险比较大
3、很难适应用户需求的变化。
4、早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
13、单例模式介绍?
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
优点:
1、提供了对唯一实例的受控访问。
2、由于在系统内存中只存在一个对象,因此可以节约系统资源。
3、允许可变数目的实例。
缺点:
1、单例类的扩展有很大的困难。
操作系统:
1、 进程与线程的概念以及区别?进程的组成?
进程是正在运行的程序的实例
线程的概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
进程是由程序控制块(PCB)、程序段、数据段组成。
操作系统是通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息,如进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息。
程序段:程序代码存放的位置。
数据段:程序运行时使用、产生的运算数据。如全局变量、局部变量、宏定义的常量就存放在数据段内。
进程与线程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 (3)处理机分给线程,即真正在处理机上运行的是线程。 (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.
2、 进程和程序的区别?
(1)进程是动态的,而程序是静态的。
(2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。
(3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。
3、 中断和轮询的特点
程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预选安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为相应的服务程序去处理,这个过程称为程序中断。
轮询(Polling)I/O方式或程序控制I/O方式,是让CPU以一定的周期按次序查询每一个外设,看它是否有数据输入或输出的要求
轮询——效率低,等待时间很长,CPU利用率不高,不太可靠
中断——容易遗漏一些问题,CPU利用率高,可靠性高
4、什么是临界区?如何解决冲突?(也就是临界区的调度原则)
临界区:进程中访问资源的那段代码
临界资源:一次只能允许一个进程访问的共享资源
互斥访问,让权等待,有限等待,
5、分段和分页?
共同点:两者都采用离散分配方式,且都地址映射机构来实现地址的转换
不同点:
1:页是信息的物理单位采用分页存储管理方式是为了实现离散分配方法。提高内存的利用率,采用分段目的主要在于能更好的满足用户的需求
2:页的大小固定且有系统决定,在采用分页存储管理方式中直接由硬件实现。而段的大小不固定,决定于用户所编写的程序
3:分页的地址空间是一维的,分页完全是系统完全是行为,分段系统中是二维的。
段页式存储管理方式
基本原理是分段和分页相结合,其地址结构由:段号、段内页号、页内地址三部分组成。在段页式系统中获得一条指令需要三次访问内存,第一次访问内存中的段表,第二次访问内存中的页表,第三次访问内存中的数据。
6、保持进程同步的方法?
信号量机制、管程、原子操作
7、什么是中断?中断时CPU在做什么?
中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
当外部中断,需要cpu暂停当前的任务,做相应的处理,cpu需要判断中断源,保存现场状态,以便能够处理完后继续执行中断的任务。
1、改变工作模式至中断模式
2、保存当前PC,敏感数据入栈
3、PC被赋值中断起始地址
4、CPU跳到中断起始地址处理中断
5、返回到原来模式
6、恢复PC,数据出栈,程序继续执行。
关中断 保存断点,保护现场 查询中断向量地址 开中断 执行中断服务程序 关中断 恢复现场,恢复断点 开中断 返回断点
8、操作系统主要功能?
处理器管理、存储管理、文件管理、设备管理、操作系统与用户接口
9、什么是虚拟内存?
将程序的一部分装入内存,其余部分留在外存,当程序所需要的信息不在内存时,系统将外存的信息调入内存继续执行,好像为用户提供了一个比实际大得多的内存。
10、线程是否具有相同的堆栈?
每个线程有自己的堆栈。
11、什么是缓冲区溢出?有什么危害?
缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
危害有以下两点:
1、程序崩溃,导致拒绝服务
2、跳转并且执行一段恶意代码
原因:造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。
12、什么是死锁?
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进
13、死锁和饥饿的区别?
死锁:两个及以上
饥饿:>=1
15、进程间的通信方法?
1、管道通信,半双工
2、消息队列
3、共享内存
16、进程同步与互斥的区别?
同步:直接制约关系,是由于协调进程之间的工作次序而产生的制约关系
互斥:间接制约关系,协调对互斥资源的访问产生的制约关系
17、进程调度算法
先来先调度算法、短作业优先、优先级调度、高响应比优先(响应比 =(等待时间+要求服务时间)/ 要求服务时间)、时间片轮转、多级反馈队列
18、操作系统的四个特征
并发、共享、虚拟、异步
19、根据操作系统内核是否对线程感知,分为用户级线程和内核级线程
20、进程的状态以及之间的转换?
运行态、就绪态、阻塞态
21、用户态和核心态的区别?
处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理机是可被抢占的 ;
而处于核心态执行中的进程,则能访问所有的内存空间和对象,且所占有的处理机是不允许被抢占的。
22、用户态进管方式?
系统调用、中断、异常
23、页面置换算法?
OPT(最佳置换算法)、FIFO、LRU、CLOCK
24、局部性原理
时间局部性原理和空间局部性原理
25、解决死锁的基本方法如下:
预防死锁、避免死锁、检测死锁、解除死锁
26、产生死锁的原因?
系统资源竞争、进程推进顺序非法
27、解决死锁的基本办法?
1、预防死锁:
资源一次性分配(破坏请求和保持条件)
可剥夺资源,即新的资源未满足时,释放已有的资源(破坏不可剥夺条件)
资源有序分配法(破坏循环等待条件)
2、避免死锁:
安全性检查
3、解除死锁
资源剥夺法
撤销进程法
进程回退法
28、抖动
频繁的产生缺页中断
29、文件的逻辑结构有哪些?
1、无结构文件
2、有结构文件
顺序文件
索引文件
索引顺序文件
散列文件
30、文件共享方式?他们的区别?
硬连接:新增一个指针指向源文件,会产生空指针的可能,但是速度较快
软连接:创建一个文件用来存储到源文件的路径,没有空指针,但是速度较慢,而且还要浪费一定的空间
31、文件系统层次结构?
用户调用接口
文件目录系统
存取控制验证
逻辑文件系统
物理文件系统
进行辅存和设备的管理
32、文件物理分配方式
连续分配、隐示链接分配、显示链接分配、索引分配
隐式链接指针在磁盘上,每一次都要读取磁盘。显示链接将磁盘上文件的链式结构用内存的一张FAT表去描述,查找时可以在内存中进行。定位后再读磁盘。速度比隐式快很多。
33、空闲块分配?
空闲表法、空闲链表法、位示图法、成组链接法
34、磁盘调度算法?
先来先服务、最短寻道时间、扫描算法、循环扫描算法
35、I/O控制方式?
程序直接控制、中断驱动、DMA、通道
36、I/O子系统的层次结构
用户层I/O软件、设备独立性软件、设备驱动程序、中断处理程序、硬件设备
37、缓存(cache读)与缓冲(buffer写)的区别
缓存也是为了提升系统性能开辟的一块空间。缓存时将反复使用的数据存储起来,供程序直接调用,避免程序反复从数据库中读取相同的数据。
38、管程?
组成:
1、局部与管程的共享结构数据说明
2、对该数据结构进行操作的一组过程
3、对局部与管程的共享数据设置初始值的语句
特性:
1、管程内的数据只能被管程内的过程访问
2、一个进程只能通过调用管程内的过程才能访问数据
3、每次仅允许一个进程进入管程
计算机组成原理
1、 冯诺依曼体系及特点?
运算器、控制器、存储器、输入设备和输出设备五大部分组成
特点:
1、 计算机处理数据和指令一律使用二进制数表示
2、 顺序执行程序。计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一概念称作顺序执行程序。
2、计算机层次结构?
微程序级、传统机器级、操作系统级、汇编语言级、高级语言级、应用语言级。
微指令级:微指令直接由硬件执行。
传统机器级:用微指令程序解释机器指令。
操作系统级:一般用机器语言程序解释控制语句。
汇编语言级:汇编语言程序经汇编程序翻译成机器语言程序。
高级语言级:高级语言程序经编译程序或解释程序翻译成汇编语言程序或某种 中间语言程序或机器语言程序。
应用语言级:应用语言程序经应用程序包翻译成高级语言程序。
3、计算机系统有哪两部分组成?
硬件、软件
4、编译和解释的区别
编译是现对源文件进行处理,生成一个目标文件,然后执行目标文件
解释是一遍边处理源文件,边执行
5、存储器的最大容量由什么决定?
MAR的位数(寻址范围)
6、机器字长、存储字长、指令字长
机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度。
指令字长:一个指令中包含二进制代码的位数。
存储字长:一个存储单元存储二进制代码的长度,必须是字节的整数倍。
指令字长一般都取存储字长的整数倍,如果指令字长等于存储字长的2倍,就需要2次访存来取出一条指令,因此取指周期是机器周期的2倍,若指令周期等于存储字长,则取指周期等于机器周期。
7、系统总线按照传输信息的不同分为哪几类?
地址总线:单向 CPU是通过地址总线来指定存储单元的。
数据总线:双向
控制总线:双向
8、按存取方式,存储器的分类
随机存取:随机存储区、只读存储器
串行访问:顺序存储器、直接存储器
9、存储系统的层次结构:
主存-辅存、主存-cache
10、什么是DMA、与中断方式的主要区别?
DAM:外设请求传输,DAM向cpu发出总线控制请求,cpu把总线控制下发给DMA控制器。DMA利用总线进行数据的快速传输。传输完毕后把总线控制权交还给cpu。优点:快、能传输大量数据而不降低CPU速度。
DMA方式和中断方式的区别:
1.DMA方式是硬件方式。中断是软件方式。
2.优先级:DMA方式比中断方式高。
3.DMA只占用cpu少部分时间,不浪费cpu资源。但是中断方式全程占有cpu。
4.中断方式能处理异常事件,但是DMA方式只能够传输数据。
11、总线的基本特征?
分时:同一时刻,总线上只能传输一个部件发送的信息;
共享:多个部件连接在同一组总线上,各个部件之间都通过该总线进行数据交换。
12、集中式总线判优控制?
链式查询—结构简单,速度慢,对电路敏感。
计时器定时查询—优先级顺序灵活性加强。
独立请求—速度快,但是增加了总线控制器的复杂性,以控制线的数目为代价
13、同步通信和异步通信的区别
1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
2.同步通信效率高;异步通信效率较低。
3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
4.同步通信可用于点对多点;异步通信只适用于点对点。
5.同步通信面向比特,异步通信面向字符
14、流水线基本原理?
将一个重复的过程分解成若干子过程,每个子过程与其他子过程并行处理
16、控制单元的设计方式?
17、浮点数的加减运算步骤?
对阶、尾数相加、规格化、舍入、溢出判断
18、主存容量的扩展?
位扩展、字扩展、字位同时扩展
19、Cache工作的基本原理?
Cache的工作原理是基于程序访问的局部性(通俗说就是把经常用到的数据放在一个高速的cache里面)。
20、逻辑地址与物理地址?
应用程序角度可以看到的地址,用户编程允许涉及的地址是逻辑地址—逻辑地址并不唯一。
实际的主存单元地址称为物理地址。
21、虚拟存储器与Cache比较
相同:都将数据进行划分、都应用到了局部性原理、都存在地址的映射和替换算法
不同:Cache解决系统速度;而虚存解决主存容量
Cache全由硬件实现,对全部程序员透明;而虚存由OS和硬件共同实现,只对系统程序员不透明,对应用程序员透明
虚存不命中时对系统影响更大
22、指令系统的类别,以及各自的特点?
CISC的指令能力强,但多数指令使用率低却增加了CPU的复杂度,指令是可变长格式;RISC的指令大部分为单周期指令,指令长度固定,操作寄存器,只有Load/Store操作内存
CISC支持多种寻址方式;RISC支持方式少
CISC通过微程序控制技术实现;RISC增加了通用寄存器,硬布线逻辑控制为主,是和采用流水线
CISC的研制周期长
RISC优化编译,有效支持高级语言
23、指令周期?
取指—间指—执行—中断
取指周期:在取指周期中CPU主要完成两个操作:(1)按程序计数器PC的内容取指令(2)形成后继指令的地址;
间址周期:当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数。
执行周期:间址周期是取出操作数的有效地址。执行周期是取出操作数,并执行。
中断周期:当CPU采用中断方式实现主机与I/O交换信息时,CPU在每条指令执行阶段结束前,都要发中断查询信号,以检测是否有某个I/O提出中断请求。如果有请求,CPU则要进入中断响应阶段,又称中断周期。在这阶段, CPU必须将程序断点保存到存储器中。
24、硬布线控制器和微程序控制器的基本概念?及其特点
硬布线控制器由组合逻辑电路根据当前的指令码、状态和时序,即时产生。优点在于速度取决于电路延迟,因此速度快,缺点是很难进行修改。
微程序控制器采用存储逻辑,将每条机器指令转换成一段微程序并存入控制存储器。具有规整性、灵活性、可维护性,缺点是每条指令都要从控制存储器中取,速度较慢。
25、影响流水线的因素?
结构相关、数据相关、控制相关
26、流水线的性能指标
吞吐率、加速比、效率
27、程序中断的作用?
1、实现CPU和I/O的并行工作
2、处理异常
3、实现人机交互
28、中断处理过程
1)关中断。CPU响应中断后,在保护现场的过程中不允许响应更高级的中 断请求。
2)保存断点。保存原来程序的断点(程序计数器PC)。
3)引出中断服务程序。把中断服务程序的入口给到程序计数器。
4)保护现场和屏蔽字。
5)开中断。允许更高级的中断请求
6)执行中断服务程序。(干活儿啦托比昂)
7)关中断。保证在恢复的现场时不被打断
8)恢复现场和屏蔽字。
9)开中断、中断返回。返回到原来程序的断点处。
29、程序中断和子程序调用的区别 ?
1、子程序调用的时间是已知的;中断的时间是随机的
2、子程序完全为主程序服务,属于主从关系;而中断服务程序一般与主程序无关,二者为平行关系
3、主程序调用子程序完全属于软件处理过程;而中断需要硬件配合
30、什么是存取时间?什么是存取周期?哪个大?
存取时间是一次内存写入(读出)数据所需要的所有时间
存取周期是存储器进行连续两次独专立的读(写)操作所需要的最小时间间隔
通常存取属周期大于存取时间
31、当使用寄存器代替指令字中的地址码字段后,有哪些优点?
(1)减少访存次数
(2)提高寻址范围
32、数据在存储器中存储时,为什么要按照边界对齐?
为了减少访存次数
33、随机存储器包含哪两大类?
1、静态SRAM:采用锁存器原理实现;多用于cache
2、动态DRAM:采用电容原理实现,需要刷新。多用于主存
34、x86采用的是哪种存储方式?
x86CPU采用的是小端方式。
35、原码、反码、补码
原码:用最高位表示符号位,其他位存放该数的二进制的绝对值。
反码:为了解决原码做减法的问题,反码的思想是想把两数相减变为一个数加上另一个数的相反数,所以负数的反码就是他的原码除符号位外,按位取反。但是这样子两个负数相加就有问题
补码:为了解决原码做减法的问题,补码的思想是将两数相减变为一个数加上另一个数的同余数
计算机网络
1、为何有MAC地址还要IP地址?
在一个网络中只要MAC地址就行,但是在不同网络中,必须要IP地址
IP地址本质上是终点地址,它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。
2、播放视频用TCP还是UDP?
视频网站:TCP
实时视频:UDP
TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。
UDP—用户数据报协议,是一个简单的面向数据报的运输层协议,不可靠,速度快
3、TCP和HTTP的关系
TCP是网络层协议,用来建立连接;HTTP是应用层协议,规定了传输的数据的规范
4、TCP和UDP对应的协议?
TCP:FTP、SMTP、POP3、HTTP
UDP:DNS、DHCP
5、面向连接和非面向链接的特点?
面向连接的服务,在传送数据前需要建立连接,且连接不断开,数据可以一直传,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。
6、交换机的概念?
交换机内部维护一张交换表(ARP表),它知道每个端口对应的MAC地址,下次传送帧的时候可以根据MAC地址直接发给对应的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。
7、TCP的拥塞控制和流量控制区别?
拥塞控制是全局性的,而流量控制是点对点的
拥塞控制方法:慢启动、拥塞避免、快重传、快恢复
流量控制:根据自己接受缓存的大小,动态的修改发送的发送窗口大小
8、Session和Cookie?
HTTP协议是无状态的协议,说明服务器无法从连接上跟踪会话。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份,通过它们来实现会话跟踪
9、TCP为什么需要三次握手、四次断开?
三次握手原因:
由于TCP是全双工通信,因此要保证两条信道的可靠。第一次握手和第二次握手(ACK部分)建立了从客户端到服务器传送数据的可靠连接;第二次握手(SYN部分)和第三次握手建立了从服务器到客户端传送数据的可靠连接;
第三次握手的必要性:
假如客户端发出连接请求A,由于网络原因,服务端并没有收到A,于是客户端又发送了连接请求B,并建立了连接,完成通信,断开连接。这时候,服务端突然又收到了A,于是看作是一次新的连接请求,进行第二次握手,由于不存在第三次握手,所以这时已经建立了TCP连接。但实际上客户端并没有发起连接,所以不会传递数据,那么这条连接就会变成一条死连接。
四次断开原因:
前两次断开了客户端对服务器的连接;后两次断开了服务器对客户端的连接。因为保证单向通信的可行性,所以多一次握手。
10、TCP和UDP的区别?
可靠有连接/不可靠无连接
面向字节流/面向报文的
有拥塞控制/无拥塞控制
只能1对1/都能
结构不同
11、交换机和路由器的区别?
工作层次:交换机工作在数据链路层,而路由器工作在网络层
隔离域:交换机只能隔离冲突域,路由器可以隔离冲突域也可以隔离广播域
寻址:
速度:
12、ARP(地址解析协议)的工作原理?
每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
网络上的主机接收到ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
当本网络的所有主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。
(C) 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
13、ICMP协议、DHCP协议?
DHCP(动态主机配置协议):
ICMP(网际控制报文协议):
14、网桥的作用?
优点:扩大物理范围、可以使用不同的物理层、互联不同的局域网、隔离碰撞域
缺点:不能隔离广播域、没有流量控制
15、五层协议各自的协议以及设备
物理层:中继器/放大器、集线器;802.3
数据链路层:CSMA/CD、CSMA/CA、PPP;网桥、交换机
网络层:ICMP、RIP、OSPF、BGP;路由器
传输层:TCP、UDP
应用层:DNS,HTTP,FTP,SMTP
16、OSI七层协议的作用?
物理层:透明的传输比特流
数据链路层:成帧、差错控制 、透明传输
网络层:对分组进行路由选择,流量控制、拥塞控制
传输层:流量控制、差错控制
会话层:管理主机间的会话进程,实现数据同步
表示层:处理两个通信系统中交换信息的表示方式,数据压缩、加密解密
应用层:为用于通信的应用程序和用于消息传输的底层网络提供接口。
17、IP地址分类?
A类:以0开头,0-127;
B类:以10开头,128-191;
C类:以110开头,192-223;
18、在浏览器输入www.baidu.com后执行的全部过程
1、客户端浏览器通过DNS解析到www.baidu.com的IP地址202.108.22.5,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到202.108.22.5,然后通过TCP进行封装数据包,输入到网络层。
2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。
19、交换机、路由器、网关的概念?
网关:路由器的IP地址
路由器是一种具有多个输入输出端口的专用计算机,其任务是连接不同的网络(连接异构网络)并完成路由转发。路由器工作在OSI模型的网络层上。
交换机工作在数据链路层,相当于一个多端口的网桥。
20、ARQ协议:
停止-等待、后退N帧、选择重传
21、HTTP长连接、短连接
22、计算机网络的性能指标
带宽、时延、时延带宽积、吞吐量、速率
23、网络的体系结构?
各层以及各层的协议
24、TCP/IP和OSI的比较?
相同:都采取分层的体系结构,都可以解决异构网络的互联
不同:1.TCP/IP把表示层和会话层都归入了应用层。
2.TCP/IP的结构比较简单,因为分层少
3.TCP/IP标准是在Internet网络不断发展的过程中建立的,基于时 间,有很高的信任度。相比较而言,OSI参考模型是基于理论上的,是作为一种向导。
25、计算机网络和分布式计算机系统的区别?
分布式计算机系统:系统中的各个计算机对用户透明
计 算 机 网 络:系统中的各个计算机对用户不透明
26、奈氏准则和香农定理(码元的传输速率)
奈氏准则 (2W *log2V) V代表的是有几种码元:码元传输速率是有上限的,一旦超出,就会有码间串扰;奈氏准则给出了码元的极限传输速率,但没有限制信息传输速率;带宽越大,码元传输速率越大。
香农定理 (W log2(1+S/N) (b/s)) W是带宽:信道的带宽或信噪比越大,信息极限传输速率越大;对一定的带宽和信噪比,信息传输速率是有上限的。
27、电路交换、报文交换、分组交换
• 电路交换:建立连接,整个报文的比特流连续的从源点直达终点,
• 报文交换:整个报文先传输到相邻的结点,全部存储下来后查找转发表,转发到下一个结点。
• 分组交换:单个分组(报文的一部分)传送到相邻结点,存储下来后查找转发表,转发到下一个结点。
28、物理层接口特性:
(1) 机械特性: 指明接口所用的接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。
(2) 电气特性: 指明在接口电缆的各条线上出现的电压的范围。
(3) 功能特性: 指明某条线上出现的某一电平的电压表示何意。
(4)规程特性:定义了各信号线的工作顺序和时序,使得比特流传输得以完成。
29、同步通信和异步通信?
同步通信:通信双方必须先建立同步;效率高
异步通信:发送方可在任意时间内进行发送,接收方是在数据的起始位和停止位的帮助下实现信息同步的;效率低
30、介质访问控制的概念?以及方法?
概念:为使用介质的每个节点隔离来自同一信道其他节点所传送的信号。
方法:
信道划分介质访问控制(频分多路复用、时分多路复用、波分多路复用、码分多路复用)
随机访问介质访问控制(纯ALOHA协议、时隙ALOHA协议、CSMA协议、CSMA/CD协议、CSMA/CA协议):实质是将广播信道转为点对点信道
轮询访问介质访问控制(令牌传递协议)
31、CSMA协议种类?
1-坚持、非坚持、p-坚持
32、CSMA/CD协议的工作流程?
先听后发、边听边发(区别于CSMA)、冲突停发、随机重发(使用二进制指数退避算法)
33、CSMA/CD和CSMA/CA的基本思想以及主要区别?
CSMA/CA:发送数据时先广播告知其他节点,让其他节点在某段时间内不要发送数据,以免出现碰撞
CSMA/CD:发送前侦听,边发送边侦听,一旦出现碰撞停止发送
区别:
1、CSMA/CD用在有线通信中,但是在无线通信中由于存在“隐蔽站”,因此无线通信使用CSMA/CA,其实就是尽可能的降低发生碰撞的概率
2、CSMA/CD可以检测冲突,但无法避免;CSMA/CA发送包的同时不能检测信道上有无冲突
34、局域网的主要特点?
1、为一个单位所拥有,且地理范围和站点数目均有限
2、所有站点共享较高的总宽带、较低的时延和较低的误码率
3、各站为平等关系
4、能进行广播和组播
35、以太网?
逻辑上采用总线型,物理上采用星型,信息以广播方式发送,使用CSMA/CD对总线进行控制。采用无连接,提供的是不可靠的交付
36、RIP/OSPF/BGP协议概念和区别
37、应用层的网络应用模型?
客户/服务器模型、P2P模型
38、DNS域名解析过程
采用的是C/S模型,运行在UDP上
递归查询:
递归与迭代相结合查询:
39、GET和POST的区别?
1、GET参数通过URL传递,POST放在请求体中
2、GET比POST更不安全,因为GET的参数直接暴露在URL上
3、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
4、GET请求只能进行url编码,而POST支持多种编码方式。
但其实,它们没有本质区别,因为它们的底层都是TCP,可以给GET加上请求体,也可以给POST加上URL参数。比较重要的一个区别是:GET产生一个TCP数据包;POST产生两个TCP数据包。GET将请求头和数据一起发送,而POST先发送请求头,再发送数据。但是并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
40、客户端不断进行请求链接会怎样?
1、DDos 攻击
客户端向服务端发送请求链接数据包
服务端向客户端发送确认数据包
客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认,即一直处于半连接状态。
2、DDos 预防 ( 没有彻底根治的办法,除非不使用TCP )
限制同时打开SYN半链接的数目
41、网络协议至少包括三要素:
语法:用来规定信息格式;数据及控制信度息的格式、编码及信号电平等。
语义:用来说明通信双方应当怎么做;用于协调与差错处理的控制信息。
时序:定义了何时进行通信,先讲回什么,后讲什么,讲话的速度等。比如是采用同步传输还答是异步传输!
42、TCP的可靠性?
1、校验和
2、使用了序列号和确认号
3、超时重传机制
4、三次握手和四次断开
5、流量控制和拥塞控制
数据结构
1、动态规划和贪心算法的联系和区别?
联系:都分解成子问题进行解决,两者都具有最优子结构性质。
区别:贪心算法的基本要素除了最优子结构,还有贪心选择性质,它不从整体最优去考虑,只基于当前情况进行最优选择,因此也不要保存之前的解。动态规划除了最优子结构性质,还有重叠子问题性质,它基于相关子问题的解,需要保存之前所有的最优解
2、分治法与动态规划主要区别:
① 分治法将分解后的子问题看成相互独立的.
② 动态规划将分解后的子问题理解为相互间有联系,有重叠部分.
3、图的遍历与树的遍历有什么区别?
1、图的遍历可能会出现循环遍历的情况,要设置标记数组。而树的遍历则不会出现这种情况。
2、图可能存在不连通的情况,而树不存在,所以图的遍历要对所有的顶点都循环一遍。
4、哈希表的特性?如何实现?
哈希表是通过关键字进行查找的一种数据结构。要实现这种特性就需要散列函数把元素散列到某个位置,常用的散列方法包括直接寻址法、除留余数法、数字分析法等。冲突的方法:线性探测法,平方探测法,链地址法等。
5、单链表中,增加头结点的目的
1、防止单链表是空的而设的。当链表为空的时候,带头结点的头指针就指向头结点,如果当链表为空的时候,头结点的指针域的数值为NULL。
2、为了方便单链表的特殊操作,插入在表头或者删除第一个结点。这样就保持了单链表操作的统一性。
3、单链表加上头结点之后,无论单链表是否为空,头指针始终指向头结点,因此空表和非空表的处理统一,方便了单链表的操作,也减少了程序的复杂性和出现bug的机会。
4、对单链表的多数操作应明确对哪个结点以及该结点的前驱。不带头结点的链表对首元结点、中间结点分别处理等;而带头结点的链表因为有头结点,首元结点、中间结点的操作相同,从而减少分支,使算法变得简单,流程清晰。
6、数据的逻辑结构有哪些?物理结构有哪些?
逻辑结构:线性表、树、图、集合
物理结构:顺序存储、链式存储、索引存储、散列存储
7、算法的五个特征
1.可行性 2.确定性3.有限性 4.输入 5.输出
8、DFS和BFS的区别
DFS:使用栈,用于求所有解问题 规模不能太大 n<=200
BFS:使用队列,用于求最优解问题 规模可以稍微大点 n<=1000
9、用循环比递归效率高吗?
一般来说的话,循环效率要比递归高,因为递归里有很多函数的调用。但是代码简洁、清晰 在编译器优化后,对于多次调用的函数处理会有非常好的效率优化,效率未必低于循环。
10、递归的两个条件?
递归表达式、递归出口
11、回溯算法的基本思想是?
从一条路往前走,能进则进,不能进则退回来,换一条路再试。
12、数组和链表的区别?
长度:数组长度是固定的;链表长度是可以动态变化的
访问:数组支持随机访问;而链表只支持顺序访问
作用:数组比较适合查询操作;链表比较适合插入删除操作
存储方式:数组是连续存放的;链表是没有要求的
13、简述下迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法
迪杰斯特拉:使用一个length数组来记录源点到各定点之间的最短距离,每次选出距离最短且还没有被使用过的顶点,来更新源点到其他节点的最短距离。不适用带有负权值边的图
弗洛伊德:使用一个二维方阵来记录点之间的距离,之后在顶点之间加入中间节点,如果加入后的距离更短,就更新。不适用包含负权值的边组成的回路
14、排序算法总结,包括时间复杂度、空间复杂度、稳定性
15、B树和B+树
B树(m阶):
1、除了根节点,每个分支节点的子树个数小于等于m,大于等于(m/2)向上取整
2、非叶根节点最少有2棵子树
3、关键字数量为子树数量减1
4、子树的关键子大小位于子树所在两个关键字之间
5、所有叶节点在同一行,且不存储数据,数据都在非页节点中
B+树(m阶):
1、除了根节点,每个分支节点的子树个数小于等于m,大于等于(m/2)向上取整
2、非叶根节点最少有2棵子树
3、关键字数量等于子树数量
4、关键字大小等于它所指节点的最大关键字
5、所有叶节点都在同一行且包含了全部关键字,而且按顺序进行链接
差异:
1、关键字个数
2、分支节点作用
3、叶节点作用
4、支持查找方式 B+树是有序的树,既能支持随机检索,又能支持顺序检索
16、简述KMP算法?
当前字符匹配时,将主串指针和子串指针同时后移一位比较;当当前字符不匹配时,主串不回退,直接将子串向前移动(当前匹配的长度– 当前匹配子串的部分匹配值)位
部分匹配值:字串相等的前后缀的最大长度
17、冒泡排序法的改进
设置一标志性变量pos,用于记录每趟排序中最后一次进行交换的位置。由于pos位置之后的记录均已交换到位,故在进行下一趟排序时只要扫描到pos位置即可
18、红黑树:
红黑树是一种带有红黑节点的平衡二叉排序树。它必须满足下面性质:
性质1:每个节点要么是黑色,要么是红色。
性质2:根节点是黑色。
性质3:每个叶子节点(NIL)是黑色。
性质4:每个红色结点的两个子结点一定都是黑色。
性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。
红黑树只追求大致平衡,AVL追求完全平衡
C++:
1、New和malloc区别:
1、new是运算符,malloc是库函数
2、new无需指定大小,而malloc必须指定大小
3、new返回的是对象类型的指针,而malloc返回的是void型指针
4、new内存分配失败时,会抛出异常;malloc分配内存失败时返回NULL。
5、new会调用构造函数;而malloc不会调用构造函数
new的基本步骤:
1、首先是分配一块内存空间
2、运行构造函数来构造对象,并进行初始化;
3、返回对象的指针
2、C和C++的区别是什么?
1、C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C的重点在于算法和数据结构,对输入通过合适的运算得到输出;而C++重点在于构造一个对象使之描述一个问题
2、C中函数不能进行重载,C++函数可以重载
重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法,
面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了;而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。
3、struct和class的区别?
struct和class除了默认访问权限外,别的功能几乎都相同。struct的默认访问权限是公有的,class的默认访问权限是私有的
4、关键字static、const、extern作用
static和const的作用在描述时主要从类内和类外两个方面去讲:
static关键字的作用:
(1)函数体内static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;同样,在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(2)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
(3)在模块内的static全局变量和函数可以被模块内的函数访问,但不能被模块外其它函数访问;
const关键字的作用:
(1)阻止一个变量被改变
(2)对于指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const
(3)const修饰形参,表明它是一个输入参数,在函数内部不能改变其值
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量(const成员一般在成员初始化列表处初始化)
extern关键字的作用:
(1)extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
(2)extern "C"的作用是让 C++ 编译器将extern "C"声明的代码当作 C 语言代码处理,可以避免 C++ 因符号修饰导致代码不能和C语言库中的符号进行链接。
5、sizeof和strlen的区别
1、sizeof是运算符,而strlen是函数;
2、sizeof的用法是sizeof(参数),这个参数可以是数组,指针,类型,对象,甚至是函数,其值在编译的时候就计算好了,而strlen的参数必须是字符型指针(char*),其值必须在函数运行的时候才能计算出来;
3、sizeof的功能得到初始建立的对象的长度;而strlen的功能是返回字符串的长度,切记这里的字符串的长度是包括结束符的;
6、指针和引用的区别
1、指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
2、指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化
3、指针的值在初始化后可以改变,即指向其它的存储单元,而引用初始化后就不会再改变。
4、作为参数传递时,指针传参本质上还是值传递,会在栈中创建一个副本;而引用传参会通过一个间接寻址的方式影响实参
7、指针数组、数组指针
指针数组:一个元素是指针的数组,意思是说这个数组的所有元素都是指针类型
数组指针:一个数组的指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。
8、C++内存布局
C/C++程序编译时内存分为5大存储区
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等,其操作方法类似数据结构中的栈。
2、堆区(heap):一般由程序员分配释放,与数据结构中的堆毫无关系,分配方式类似于链表。
3、全局区(static):全局变量和静态变量的存储是放在一起的,在程序编译时分配。
4、文字常量区:存放常量字符串。
5、程序代码区:存放函数体(类的成员函数、全局函数)的二进制代码
9、C/C++内存分配有三种方式:
1、从全局区分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。
栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。
动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏。
另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
10、堆和栈的区别?
1、分配方式:堆由程序员自己申请;栈由系统分配
2、栈是一块连续的内存空间,空间较小;而堆的空间不连续的,它受限于虚拟内存
3、对于堆,频繁的new/delete会造成大量碎片,使程序效率降低,对于栈,它是一个先进后出的队列,进出一一对应,不会产生碎片。
11、常见的内存错误及对策
1、内存尚未分配成功,却使用了它;
解决办法:在使用内存之前检查指针是否为NULL。
2、内存分配虽然成功,但是尚未初始化就引用它;
解决办法:都要赋初值。
3、内存分配成功并初始化,但是超过了内存的边界;
解决办法:这种问题常出现在数组越界,写程序是要仔细。
4、忘记释放内存,造成内存泄露;(程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。)
解决办法:即得释放内存
5、释放了内存却继续使用它
6、使用free或者delete释放了内存后,没有将指针设置为null,导致产生野指针。
解决办法:小心仔细。
11、野指针与垂悬指针的区别:
野指针:就是一个没有经过初始化的指针。野指针的值并不为null,野指针会指向一段实际的内存,只是它指向哪里我们并不知情
垂悬指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。
避免野指针和悬垂指针:在释放空间时将指针设为NULL.
12、内存管理需要遵循的规则
(1)用malloc 或者 new 申请内存之后,应该立即检查指针值是否为 NULL ,防止使用指针值为NULL的内存;
(2)不要忘记数组和动态内存赋初值,防止未被初始化的内存作为右值使用;
(3)避免数组或者指针下标越界
(4)动态内存的申请与释放必须配对,防止内存泄露;
(5)用free或者delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”;
13、字节对齐的原则
1、结构体中每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会填充字节
2、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会填充字节。
14、覆盖、重载
1、重载:是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。
2、覆盖:也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。
15、C++有哪些性质(面向对象特点)
封装,继承和多态。
1、封装是隐藏对象的属性和实现细节,对外提供公共的访问方式,以防止数据的随意访问和修改;
2、继承是通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类;
3、多态指接口的多种不同的实现方式。
16、构造函数,析构函数调用顺序
基类构造函数、对象成员构造函数、派生类本身的构造函数
派生类本身的析构函数、对象成员析构函数、基类析构函数
17、c++的多态怎么体现?
多态:是对于不同对象接收相同消息时产生不同的动作。
主要时重载和虚函数:
重载:函数名相同,但是函数体不同,根据参数区分
虚函数:使用基类和派生类中通过virtual关键字使得同名同参的函数共存,访问时可以借助基类指针对不同的对象进行访问
18、那些函数不能定义为虚函数?
1、友元函数,它不是类的成员函数
2、全局函数
3、静态成员函数,它没有this指针
4、构造函数
19、C++是不是类型安全的?
不是。两个不同类型的指针之间可以强制转换(用reinterpret cast)。C#是类型安全的
20、main 函数执行以前,还会执行什么代码?
答案:全局对象的构造函数会在main 函数之前执行
21、函数、虚函数、纯虚函数
虚函数和普通的函数实际上是存储在不同的区域的
22、C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数
虚函数和纯虚函数的区别:
1、在成员函数声明前加个virtual就变成了虚函数。当基类的某个成员方法,在大多数情形下都应该由子类提供个性化实现,但基类也可以提供一个备选方案的时候,请将其设计为虚函数。
2、在虚函数声明后加个=0就变成了纯虚函数。当基类的某个成员方法,必须由子类提供个性化实现的时候,请将其设计为纯虚函数
3、虚函数既有定义,也有实现;纯虚函数只有定义,没有实现
4、纯虚函数类是不能定义对象的,虚函数的类可以定义对象
23、说几个C++11的新特性
auto类型推导、lambda函数
JAVA提问总结
1、final特点:
1:这个关键字是一个修饰符,可以修饰类,方法,变量。
2:被final修饰的类是一个最终类,不可以被继承。
3:被final修饰的方法是一个最终方法,不可以被覆盖。
4:被final修饰的变量是一个常量,只能赋值一次。
2、抽象类的特点:(使用abstract修饰的类为抽象类)
1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。
2:抽象方法只定义方法声明,并不定义方法实现。
3:抽象类不可以被创建对象(实例化)。
4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
3、抽象关键字abstract和哪些不可以共存?
final , private , static
final 修饰的类/方法/属性均不可再次更改,故而不可以被重写。
private修饰的类只可以定义在内部类;private 修饰的方法/属性只可以在类中调用,重写时是访问不到这些方法和属性的。
static 静态的,其修饰的方法/属性,是随着类的创建而创建,类的消亡而消亡,在编译时就已经确定的东西;但是abstract是dynamic(动态)的,其必须通过类继承或接口实现来动态重写abstract方法。
4、抽象类中可不可以不定义抽象方法?
可以。抽象方法目的仅仅为了不让该类创建对象。
5、什么是接口,接口的特性?
使用interface修饰的类是接口
1、接口只能有抽象方法
2、接口需要被实现
3、一个类可以继承多个接口类,这样就能解决只能一对一继承的限制
6、匿名对象使用场景:匿名对象就是没有名字的对象
当对方法只进行一次调用的时候,可以使用匿名对象。
Car c = new Car();
c.run();
new Car().run();
7、成员变量和局部变量的区别:
1:成员变量直接定义在类中。局部变量定义在方法中。
2:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。
8、构造函数和一般函数有什么区别呢?
构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。
一般函数,是对象创建后,需要调用才执行,可以被调用多次。
9、This:代表对象,就是所在函数所属对象的引用。
10、当子父类中出现一样的属性时,子类型的对象,调用该属性,值是子类的属性值。
如果想要调用父类中的属性值,需要使用一个关键字:super
This:代表是本类类型的对象引用。
Super:代表是子类所属的父类中的内存空间引用。
11、string是最基本的数据类型吗
不是。基本数据类型就只有八个,数值型:byte,short,int,long,浮点型:float,double,字符型:char,布尔型:boolean。String是final类型的
12、string和stringbuff的区别
string的长度和内容不可以改变,stringbuff的长度和内容可以改变
13、sleep()和wait()有什么区别
sleep()是当线程执行到这里的时候,会停止线程,当别的线程执行完之后,它在执行
wait()是当线程执行到这里的时候,会停止,如果还想让它执行,需要使用notify方法唤醒
14、GC是什么,为什么要有GC
GC是java的垃圾自动回收机制
当程序有错误内存时,java会自动启动GC,进行垃圾回收,以保证系统的稳定性
15、线程交互的方法
wait():使一个线程处于等待状态,并且释放所持有对象的lock
notify():唤醒一个处于等待的线程
16、创建多线程有几种实现方法
多线程有几种实现方法,分别是继承thread方法和实现runnable接口,实现callable方法
终止线程:自然终止,使用interrupt()方法中断运行态和阻塞态方法
17、运行时多态的三大前提条件
要有继承
要有方法的重写
父类引用指向子类
18、object类和最终类
object是所有类的父类
最终类:如果一个类被final修饰,意味着它不可被继承
19、说明static关键字
static是关键字,可以修饰变量,方法,代码块
1.用static修饰的变量,为静态变量,也称为类变量,可以通过类和对象来访问
2.用static修饰的方法,是静态方法,静态方法只能访问其他的静态成员,静态方法里没有this关键字
20、java中如何处理异常的
使用throw,throws抛出异常的方法和try catch抓取方法
21、什么是线程池
线程池可以理解为,存放着很多未死亡的线程,当我们要使用线程时,直接去里面取即可,而不用再次创建线程,这样可以节省系统的资源
22、纯虚函数?
被virtual修饰的成员函数,在父类中不能实现,而他的实现放到子类中实现(多态,就是重写)。
23、java怎么处理对象分配和释放的?
java把内存分为堆栈空间存储,在堆中new的空间不用自己收回,自动垃圾收回。
Py跟C有什么区别?
Py是解释型语言,与c不同,py不需要在运行前进行编译,不需要再声明变量时声明变量类型