写在前面

本人参加20考研,由于复试没有具体要求会问哪几门课,所以我就找了网上一些常见的计算机专业的面试题,整理如下


主要结构:

  • 数据库
  • 软件工程
  • 操作系统
  • 计算机组成原理
  • 计算机网络
  • 数据结构
  • C++
  • Java

数据库

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、什么叫视图?游标是什么?

答:视图是一种虚拟的表,只能进行查询和修改操作。只存储了原表的结构而不存储数据。对视图的修改不影响基本表。
优点:简化操作,安全性,可将重要的信息不加入视图
缺点:对视图的操作还是建立在原表上的,性能较差

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的性能比较强


软件工程

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、进程与线程的概念以及区别?进程的组成?

线程:可以理解为轻量级进程,是进程的一个实体

2、进程和程序的区别?
3、中断和轮询的特点
4、什么是临界区?如何解决冲突?(也就是临界区的调度原则)

临界区:进程中访问资源的那段代码
临界资源:允许多个进程访问,但是一次只能允许一个进程访问

5、分段和分页?

地址空间维度:
用户:
大小:
功能:

6、保持进程同步的方法?

信号量机制、管程、原子操作

7、什么是中断?中断时CPU在做什么?
8、操作系统主要功能?
9、什么是虚拟内存?

将程序的一部分装入内存,其余部分留在外存,当程序所需要的信息不在内存时,系统将外存的信息调入内存继续执行,好像为用户提供了一个比实际大得多的内存。

10、线程是否具有相同的堆栈?
11、什么是缓冲区溢出?有什么危害?
12、什么是死锁?死锁的条件?怎么避免死锁?
13、死锁和饥饿的区别?
14、进程同步遵循的机制?
15、进程间的通信方法?
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、文件物理分配方式

连续分配、隐示链接分配、显示链接分配、索引分配

33、空闲块分配?

空闲表法、空闲链表法、位示图法、成组链接法

34、磁盘调度算法?

先来先服务、最短寻道时间、扫描算法、循环扫描算法

35、I/O控制方式?

程序直接控制、中断驱动、DMA、通道

36、I/O子系统的层次结构

用户层I/O软件、设备独立性软件、设备驱动程序、中断处理程序、硬件设备

37、缓存与缓冲的区别
38、管程?

组成:
1、局部与管程的共享结构数据说明
2、对该数据结构进行操作的一组过程
3、对局部与管程的共享数据设置初始值的语句
特性:
1、管程内的数据只能被管程内的过程访问
2、一个进程只能通过调用管程内的过程才能访问数据
3、每次仅允许一个进程进入管程


计算机组成原理

1、冯诺依曼体系及特点?
2、计算机层次结构?
3、计算机系统有哪两部分组成?

硬件、软件

4、编译和解释的区别

编译是现对源文件进行处理,生成一个目标文件,然后执行目标文件
解释是一遍边处理源文件,边执行

5、存储器的最大容量由什么决定?

MAR的位数(寻址范围)

6、机器字长、存储字长、指令字长
7、系统总线按照传输信息的不同分为哪几类?

地址总线:单向
数据总线:双向
控制总线:双向

8、按存取方式,存储器的分类

随机存取:随机存储区、只读存储器
串行访问:顺序存储器、直接存储器

9、存储系统的层次结构:

主存-辅存、主存-cache

10、什么是DMA、与中断方式的主要区别?

1、占用CPU
2、响应时间
3、传送过程的CPU
4、优先级
5、异常

11、总线的基本特征?

分时:同一时刻,总线上只能传输一个部件发送的信息;
共享:多个部件连接在同一组总线上,各个部件之间都通过该总线进行数据交换。

12、集中式总线判优控制?

链式查询、计时器定时查询、独立请求

13、同步通信和异步通信的区别
14、流水线基本原理?

将一个重复的过程分解成若干子过程,每个子过程与其他子过程并行处理

16、控制单元的设计方式?
17、浮点数的加减运算步骤?

对阶、尾数相加、规格化、舍入、溢出判断

18、主存容量的扩展?

位扩展、字扩展、字位同时扩展

19、Cache工作的基本原理?
20、逻辑地址与物理地址?

应用程序角度可以看到的地址,用户编程允许涉及的地址
实际的主存单元地址称为物理地址

21、虚拟存储器与Cache比较

相同:都将数据进行划分、都应用到了局部性原理、都存在地址的映射和替换算法
不同:Cache解决系统速度;而虚存解决主存容量
Cache全由硬件实现,对全部程序员透明;而虚存由OS和硬件共同实现,只对系统程序员不透明,对应用程序员透明
虚存不命中时对系统影响更大

22、指令系统的类别,以及各自的特点?

CISC:
RISC:

23、指令周期?
24、硬布线控制器和微程序控制器的基本概念?及其特点

硬布线控制器由组合逻辑电路根据当前的指令码、状态和时序,即时产生。优点在于速度取决于电路延迟,因此速度快,缺点是很难进行修改。
微程序控制器采用存储逻辑,将每条机器指令转换成一段微程序并存入控制存储器。具有规整性、灵活性、可维护性,缺点是每条指令都要从控制存储器中取,速度较慢。

25、影响流水线的因素?

结构相关、数据相关、控制相关

26、流水线的性能指标

吞吐率、加速比、效率

27、程序中断的作用?

1、实现CPU和I/O的并行工作
2、处理异常
3、实现人机交互

28、中断处理过程
29、程序中断和子程序调用的区别 ?

1、子程序调用的时间是已知的;中断的时间是随机的
2、子程序完全为主程序服务,属于主从关系;而中断服务程序一般与主程序无关,二者为平行关系
3、主程序调用子程序完全属于软件处理过程;而中断需要硬件配合

30、什么是存取时间?什么是存取周期?哪个大?

存取时间是一次内存写入(读出)数据所需要的所有时间
存取周期是存储器进行连续两次独专立的读(写)操作所需要的最小时间间隔
通常存取属周期大于存取时间

31、当使用寄存器代替指令字中的地址码字段后,有哪些优点?

(1)减少访存次数
(2)提高寻址范围

32、数据在存储器中存储时,为什么要按照边界对齐?

为了减少访存次数

33、随机存储器包含哪两大类?

1、静态SRAM:采用锁存器原理实现;
2、动态DRAM:采用电容原理实现,需要刷新。

34、x86采用的是哪种存储方式?

x86CPU采用的是小端方式。

35、原码、反码、补码

原码:用最高位表示符号位,其他位存放该数的二进制的绝对值。
反码:为了解决原码做减法的问题,反码的思想是想把两数相减变为一个数加上另一个数的相反数,所以负数的反码就是他的原码除符号位外,按位取反。但是这样子两个负数相加就有问题
补码:为了解决原码做减法的问题,补码的思想是将两数相减变为一个数加上另一个数的同余数


计算机网络

1、为何有MAC地址还要IP地址?

在一个网络中只要MAC地址就行,但是在不同网络中,必须要IP地址
IP地址本质上是终点地址,它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。

2、播放视频用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的工作原理?
13、ICMP协议、DHCP协议?
14、网桥的作用?

优点:扩大物理范围、可以使用不同的物理层、互联不同的局域网、隔离碰撞域
缺点:不能隔离广播域、没有流量控制

15、五层协议各自的协议以及设备

物理层:中继器/放大器、集线器;802.3
数据链路层:CSMA/CD、CSMA/CA、PPP;网桥、交换机
网络层:ICMP、RIP、OSPF、BGP;路由器
传输层:TCP、UDP
应用层:

16、OSI七层协议的作用?

物理层:透明的传输比特流
数据链路层:成帧、差错控制 、透明传输
网络层:对分组进行路由选择,流量控制、拥塞控制
传输层:流量控制、差错控制
会话层:管理主机间的会话进程,实现数据同步
表示层:处理两个通信系统中交换信息的表示方式,数据压缩、加密解密
应用层:

17、IP地址分类?

A类:以0开头,0-127;
B类:以10开头,128-191;
C类:以110开头,192-223;

18、在浏览器输入www.baidu.com后执行的全部过程

1、应用层进行DNS请求,在传输层通过UDP传输,在网络层查找路由表到达服务器,在数据链路层通过ARP获得MAC地址,在物理层通过比特流进行传输
2、应用层进行HTTP请求,在传输层通过TCP获得。

19、交换机、路由器、网关的概念?

网关:路由器的IP地址

20、ARQ协议:

停止-等待、后退N帧、选择重传

21、HTTP长连接、短连接
22、计算机网络的性能指标

带宽、时延、时延带宽积、吞吐量、速率

23、网络的体系结构?

各层以及各层的协议

24、TCP/IP和OSI的比较?

相同:都采取分层的体系结构,都可以解决异构网络的互联
不同:TCP/IP和OSI的网络层和传输层差异

25、计算机网络和分布式计算机系统的区别?

分布式:系统中的各个计算机对用户透明
网络:不透明

26、奈氏准则和香农定理

奈氏准则:码元传输速率是有上限的,一旦超出,就会有码间串扰;奈氏准则给出了码元的极限传输速率,但没有限制信息传输速率;带宽越大,码元传输速率越大。
香农定理:信道的带宽或信噪比越大,信息极限传输速率越大;对一定的带宽和信噪比,信息传输速率是有上限的。

27、电路交换、报文交换、分组交换
28、物理层接口特性:机械、电气、功能、规程
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域名解析过程

递归查询:
递归与迭代相结合查询:

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、流量控制
6、拥塞控制


数据结构

1、动态规划和贪心算法的联系和区别?

联系:都分解成子问题进行解决,两者都具有最优子结构性质。
区别:贪心算法的基本要素除了最优子结构,还有贪心选择性质,它不从整体最优去考虑,只基于当前情况进行最优选择,因此也不要保存之前的解。动态规划除了最优子结构性质,还有重叠子问题性质,它基于相关子问题的解,需要保存之前所有的最优解

2、分治法与动态规划主要区别:

① 分治法将分解后的子问题看成相互独立的.
② 动态规划将分解后的子问题理解为相互间有联系,有重叠部分.

3、图的遍历与树的遍历有什么区别?

1、图的遍历可能会出现循环遍历的情况,要设置标记数组。而树的遍历则不会出现这种情况。
2、图可能存在不连通的情况,而树不存在,所以图的遍历要对所有的顶点都循环一遍。

4、哈希表的特性?如何实现?

哈希表是通过关键字进行查找的一种数据结构。要实现这种特性就需要散列函数把元素散列到某个位置,常用的散列方法包括直接寻址法、除留余数法、数字分析法等。

5、单链表中,增加头结点的目的

对第一个结点的操作和其他点一致,对空链表和非空链表的处理一致

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、支持查找方式

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、栈的速度较快;堆的速度较慢

11、常见的内存错误及对策

1、内存尚未分配成功,却使用了它;
解决办法:在使用内存之前检查指针是否为NULL。
2、内存分配虽然成功,但是尚未初始化就引用它;
解决办法:都要赋初值。
3、内存分配成功并初始化,但是超过了内存的边界;
解决办法:这种问题常出现在数组越界,写程序是要仔细。
4、忘记释放内存,造成内存泄露;(程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。)
解决办法:即得释放内存
5、释放了内存却继续使用它
6、使用free或者delete释放了内存后,没有将指针设置为null,导致产生野指针。
解决办法:小心仔细。

11、野指针与垂悬指针的区别:

野指针:访问一个已销毁或者访问受限的内存区域的指针,野指针不能判断是否为NULL来避免。野指针的值并不为null,野指针会指向一段实际的内存,只是它指向哪里我们并不知情
垂悬指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。

避免野指针:在释放空间时将指针设为NULL.

12、内存管理需要遵循的规则

(1)用malloc 或者 new 申请内存之后,应该立即检查指针值是否为 NULL ,防止使用指针值为NULL的内存;
(2)不要忘记数组和动态内存赋初值,防止未被初始化的内存作为右值使用;
(3)避免数组或者指针下标越界
(4)动态内存的申请与释放必须配对,防止内存泄露;
(5)用free或者delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”;

13、字节对齐的原则

1、结构体中每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会填充字节
2、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会填充字节。

14、覆盖、重载

1、重载:是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。
2、覆盖:是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致,只有函数体不同。

15、C++有哪些性质(面向对象特点)

封装,继承和多态。

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
4、抽象类中可不可以不定义抽象方法?可以。抽象方法目的仅仅为了不让该类创建对象。
5、什么是接口,接口的特性?

使用interface修饰的类是接口
接口只能有抽象方法
接口需要被实现
一个类可以继承多个接口类,这样就能解决继承只能一对一继承的限制

6、匿名对象使用场景:

当对方法只进行一次调用的时候,可以使用匿名对象。

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接口

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的空间不用自己收回,自动垃圾收回。

计算机考研常见面试题相关推荐

  1. java多线程常用面试_java的多线程常见面试题

    并行和并发有什么区别? (推荐学习:java常见面试题) 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事 ...

  2. MySQL数据库常见面试题总结

    1.数据库的常用范式: 第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值: 第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必 ...

  3. Unity3D常见面试题

    Unity3D常见面试题 目录 C#问题 4 1.在类的构造函数前加上static会报什么错?为什么? 4 2.C# StringBuilder类型比string类型的优势是什么? 4 3.C# 函数 ...

  4. java 字符串 面试_JAVA中String介绍及常见面试题小结

    字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 深刻认识String 1)String为字符串常量:即String对象一旦 ...

  5. C++常见面试题,来看看你会几个~~

    C++常见面试题汇总: 写在开篇:汇总了一些公司的常见C++面试题~~收藏起来呀!! 正文开始@Assassin 目录: C++常见面试题汇总: 1. 变量的声明和定义有什么区别: 2. 简述#ifd ...

  6. iOS常见面试题总结

    1.objective-c常见面试题: 1.OC 语言的基本特点 OC 语言是 C 语言的一个超集,只是在 C 的基础之上加上了面向对象(oop) 的特性; OC 与 Java 语言相同都是单继承,这 ...

  7. Html5常见面试题总结

    1Html5常见面试题总结 1.SGML.HTML.XML和XHTML之间的关系? SGML(标准通用标记语言)是一种指定文档标记的标准,是一种描述了文档标记应该如何的元语言.HTML是描述使用SGM ...

  8. 计算机网络常见面试题,一网打尽!

    计算机网络常见面试题 一 OSI与TCP/IP各层的结构与功能,都有哪些协议? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这 ...

  9. HTTP协议与HTTPS协议详解(含常见面试题)

    目录 1.HTTP协议 1.1HTTP协议是什么 1.2 HTTP协议工作过程 1.3 HTTP请求方法 1.4.HTTP请求报文和应答报文 1.5 HTTP状态码 2.HTTPS协议 2.1.什么是 ...

最新文章

  1. jQuery-this与$(this)的区别
  2. Yenista光学发布新型无源器件测试平台CTP10
  3. Dart Way 1
  4. 多写写 leetcode 43. 字符串相乘
  5. 从0到1建立一张评分卡之变量分箱
  6. Unity Pixel 人物设计(1)
  7. Python C API 使用详解(二)
  8. mysql 5.7.16安装与给远程连接权限
  9. 有哪些免费的发布信息网站?
  10. 拼多多商品详情百亿补贴数据采集接口代码展示
  11. 用css样式实现返回箭头
  12. 使用ECS和OSS搭建个人网盘
  13. matlab将多项式通分,matlab多项式因式分解
  14. java-net-php-python-jspm酒店自助入住系统计算机毕业设计程序
  15. HTML label标签介绍
  16. 【女人8大隐私部位越丑越健康】
  17. Cisco路由器的安全配置方案
  18. 萝卜家园 Ghost XP 新春装机版 V200801
  19. 【点云配准-4PCS(2008)】4-Points Congruent Sets for Robust Pairwise Surface Registration
  20. 如何将ucgui的汉字库存放到外部的flash memory(ucgui)(汉字库)(外部flash)

热门文章

  1. Git 语法、使用规范及常见bug总结
  2. f1tenth案例学习与调试ros1版本pc端
  3. 酷乐天气开发总结记录7
  4. 浅谈对象数据赋值问题---我遇到的一个坑
  5. mysqlbackup企业版物理备份工具使用
  6. 《学习期货策略的筒子收藏了》国内量化交易平台
  7. 在Linux下安装配置蒲公英 私网环境轻松实现异地SSH远程管理
  8. 美国空军如何在45天内在F-16战斗机上部署Kubernetes与Istio
  9. 开通云闪付有什么好处
  10. php蚂蚁森林的效果,iOS仿支付宝蚂蚁森林动画效果