计算机考研复试问题总结

文章目录

一 . 计算机网络

1.TCP连接建立(三次握手)

第一次握手:客户机的TCP首先向服务器的TCP发送连接请求报文段。客户端发送syn包(syn=x)到服务器,并进入同步已发送状态,等待服务器确认;


第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入同步收到状态


第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入已建立连接状态,完成三次握手。

2.TCP连接释放(四次挥手)

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,但是,此时主动关闭方还可以接受数据。


第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。


第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送。


第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1。

3.计算机网络的主要功能?

1、数据通信
用来实现联网计算机之间各种信息的传输,并将分散在不同地理位置的计算机联系起来,进行统一的调配、控制、管理。


2、资源共享
可以是软件共享、数据共享、硬件共享,极大提高资源利用率。


3、提高可靠性
计算机网络中的各台计算机可以通过网络互为替代。


4、分布式处理
当计算机网络中某个计算机系统负荷过重时,可以将其处理的某个复杂任务分配给网络中的其他计算机系统,从而利用空闲计算机资源以提高整个系统的利用率。
5、负载均衡
将工作任务均衡地分配给计算机网络中的各台计算机。

4.谈下你对五层网络协议体系结构的理解?

应用层解决通过 应用进程 的交互来实现特定网络应用的问题
运输层解决 进程 之间基于网络的 通信 问题
网络层解决分组在 多个网络上传输(路由) 的问题
数据链路层解决分组在 一个网络(或一段链路)上传输 的问题
物理层解决使用何种 信号来传输比特 的问题

七层协议理解

1)物理层:传递比特数据流(硬件接口等)
2)数据链路层:数据帧的传输(节点到节点)
3)网络层:数据分组的传输(路由选择,寻址,检验等)
4)传输层:数据报文的传输(端到端)
5)会话层:负责数据单元的管理(连接,通信控制等)
6)表示层:数据表示的处理(编码,加密,解压缩等)
7)应用层:面向应用的管理(网络和应用程序得交互等)

5.流量控制的常见方式?

1、停止-等待流量控制方式基本原理(发送窗口大小=1,接受窗口大小=1)
2、后退N帧协议(GBN)(发送窗口大小>1,接收窗口大小=1)
3、选择重传协议(SR)(发送窗口大小>1,接收窗口大小>1)

6.可靠传输机制有哪些?

数据链路层的可靠传输通常使用确认超时重传两种机制来完成。

7.虚电路和数据报的区别(物理层提供的两种服务,比较其优缺点)

虚电路和数据报都是物理层的分组交换技术(除此之外还有电路交换、报文交换)。


(1)数据报是无连接的服务,而虚电路是面向连接的;


(2)数据报的分组都是通过独立的路由选择和转发,而同属于一条虚电路的分组按照同一路由转发;


(3)数据报服务中每个分组都有完整的目的地址,但虚电路中每个分组仅存放长度较短的虚电路号。


4)数据报不保证数据的可靠交付,虚电路可靠性由网络保证;


(5)数据报不保证分组的有序到达,虚电路保证分组的有序到达。

8.端到端通信和点到点通信的区别?

由物理层、数据链路层和网络层组成的通信子网为网络环境中的主机提供点到点的服务, 而传输层为网络中的主机提供端到端的通信。


直接相连的结点之间的通信称为点到点通信, 它只提供一台机器到另一台机器之间的通信,不涉及程序或进程的概念。同时,点到点通信并不能保证数据传输的可靠性。


端到端通信建立在点到点通信的基础上,完成应用程序(进程) 之间的通信。”端” 是指用户程序的端口,端口号标识了应用层中不同的进程。

9.MAC地址与IP地址的区别

地址性质不同:MAC地址是物理地址,IP地址是逻辑地址。
可变性不同:MAC地址具有唯一性,每个硬件出厂时候的MAC地址是固定的;而IP地址是不固定的。
工作层次不同:数据链路层基于MAC地址转发数据帧,网络层基于IP地址转发报文。
长度不同:MAC地址为48位,IPv4是32位长,IPv6是128位。
分配依据不同:IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商。

10.解决IPv4地址紧缺的办法

1.网络地址转换NAT:在自治系统内部的专用主机使用互联网提供的专用IP地址,该IP地址只能在专用网内部使用,任何路由器对于专用IP地址都不予转发,同时利用网络地址转换NAT路由器将专用IP地址转换成在全球范围唯一的IP地址与互联网上的其他主机进行通信。


2.CIDR构成超网:CIDR消除了子网划分的概念,将IP地址由原来的三级编址又转换成二级编址,每个地址都属于一个CIDR地址块,根据CIDR地址块进行路由转发,更加有效地分配IPv4的地址空间。


3.动态分配


4.升级IPv6(隧道技术,双协议栈技术):IPv6 并不是 IPv4 的简单升级版,他们是两个互不相干的协议,彼此并不兼容。而 IPv6 用 16 个字节 128 个比特位来表示一个地址。

11.TCP与UDP的区别

1、TCP 面向连接,UDP 是无连接的;


2、TCP 提供可靠的服务,也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,不保证可靠交付


3、TCP 的逻辑通信信道是全双工的可靠信道;UDP 则是不可靠信道。每一条 TCP 连接只能是点到点的(一对一);UDP 支持一对一,一对多,多对一和多对多的交互通信


4、TCP 面向字节流;UDP 是面向报文的


5、UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等)


6、TCP 首部开销20字节;UDP 的首部开销 8 字节

12.对于视频网站和视频聊天,用 TCP 还是用 UDP

对于视频网站,完全可以缓冲20秒再播放,不会带来什么影响,可以用TCP。


而对于视频聊天,如果缓冲5秒,相信整个聊天已经没法愉快的进行了,而这时出现一些画面质量的损失是可以接受的,所以用UDP。

13.TCP的可靠性如何保证?

(1)确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。


(2)数据校验:检测数据在传输过程中是否发生变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据超时后会重发数据。


(3)数据合理分片和排序:TCP会根据最大传输单元合理分片,以防止在传输过程中进行二次分片。接收方会缓存未按序到达的数据,重新排序后再交给应用层。


(4)流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出。TCP使用的流量控制协议是可变大小的滑动窗口协议。


(5)拥塞控制:当网络拥塞时,TCP会减少数据的发送,以防止全网中网络负载过重。

14.TCP拥塞控制的四种算法

拥塞控制是指防止过多的数据注入网络,防止网络中的路由器或链路过载。

(1)慢开始算法


在TCP刚刚连接好并开始发送TCP报文段时,先令拥塞窗口为1,即一个最大报文段的长度。每收到一个对新报文段的确认后,拥塞窗口加倍。慢开始一直把拥塞窗口增大到慢开始门限,然后改用拥塞避免算法。


(2)拥塞避免算法
发送端的拥塞窗口每经过一个往返时延就增加1,使拥塞窗口按线性规律缓慢增长,也就是加法增大。而当出现一次超时时,令慢开始门限等于当前拥塞窗口的一半,并重置拥塞窗口为1,也就是乘法减少。


(3)快重传
当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。


(4)快恢复
发送端收到连续三个冗余ACK时,把慢开始门限设置为出现拥塞时发送方拥塞窗口的一半。与慢开始的不同之处是,它把拥塞窗口的值设置为慢开始门限改变后的数值,而不是1,然后开始执行拥塞避免算法使拥塞窗口缓慢地线性增大

15.如果要做简单网络应用OSI哪些层可以不要

一般情况下,可以省略OSI模型中的一些较为基础的层次,比如物理层和数据链路层,因为这些层次主要处理物理传输介质和数据传输的基础细节,对于一些简单的网络应用来说并不需要关注这些细节。

16.数据链路层和网络层怎么实现安全

在数据链路层,常用的安全机制包括:

  1. MAC地址过滤:只允许特定的MAC地址访问网络,可以防止未经授权的设备接入网络。

  2. VLAN隔离:将网络划分为不同的虚拟局域网,可以隔离不同的用户和设备,提高网络安全性。

  3. 802.1X认证:通过认证机制限制网络访问,只有通过认证的设备才能访问网络。

在网络层,常用的安全机制包括:

  1. 防火墙:通过过滤和限制网络流量,保护网络免受恶意攻击和未经授权的访问。

  2. VPN:通过加密和隧道技术,建立安全的远程访问连接,保护数据传输的安全性。

  3. IPsec:通过加密和认证机制,保护IP数据包的安全性,防止数据被窃听、篡改和伪造。

17.计网交换技术包括什么

计算机网络中的交换技术包括以下几种:

  1. 电路交换:在通信开始前,建立一条专用的物理连接,通信过程中一直占用这条连接,直到通信结束后释放连接。电路交换适用于长时间的通信,如电话通话。

  2. 报文交换:将数据分成一段一段的报文,每个报文都带有目的地址和源地址,通过网络传输到目的地,然后再将报文组装成完整的数据。报文交换适用于短时间的通信,如电子邮件。

  3. 分组交换:将数据分成一段一段的数据包(也称为分组),每个数据包都带有目的地址和源地址,通过网络传输到目的地,然后再将数据包组装成完整的数据。分组交换是计算机网络中最常用的交换技术,如互联网中的IP协议。

  4. ATM交换:使用异步传输模式(ATM)进行交换,将数据分成固定长度的小单元(称为ATM单元),每个ATM单元都带有目的地址和源地址,通过网络传输到目的地,然后再将ATM单元组装成完整的数据。ATM交换适用于高速数据传输和实时应用,如视频会议和在线游戏。

18.一台主机是否只能有一个ip?

一台主机可以有多个IP地址。
每个IP地址都是唯一的,用于标识主机在网络中的位置。主机可以拥有多个网卡,每个网卡都可以配置一个IP地址。 此外,主机还可以通过虚拟化技术创建多个虚拟机,每个虚拟机也可以拥有自己的IP地址。

19.流量控制在那层实现

数据链路层,传输层

20.曼彻斯特编码与差分曼彻斯编码的区别

曼彻斯特编码,是一种用电平跳变来表示1或0的编码方法,其变化规则很简单,即每个码元均用两个不同相位的电平信号表示,也就是一个周期的方波,但0码和1码的相位正好相反。由于曼彻斯特编码在每个时钟位都必须有一次变化,因此,其编码的效率仅可达到50%左右。


差分曼彻斯特编码,和曼彻斯特码不同的是,这种编码的码元中间的电平转换边只作为定时信号,而不表示数据。数据的表示在与每一位开始处是否有电平转换,有电平转换表示0,无电平转换表示1。差分曼彻斯特码用在令牌环网中。

21.对称加密算法

数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

DES
初试置换和终止置换
扩展置换
初试置换的64位数据分为32、32,其中一个32位数据扩展为48位
S盒压缩处理
AES
非对称加密算法
A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
A将这个消息发给B(已经用B的公钥加密消息)。
B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
公钥算法
这是一种不对称加密算法。公钥算法包括快速公钥算法与传统公钥算法。快速公钥算法与传统公钥算法相比具有更广泛地应用前景,对快速公钥系统的研究是当前公钥系统研究的一个热点。
REA、ECC椭圆加密算法

链路加密
使用链路加密装置能为某链路上的所有报文提供传输服务。即经过一台节点机的所有网络信息传输均需加、解密,每一个经过的节点都必须有密码装置,以便解密、加密报文。如果报文仅在一部分链路上加密而在另一部分链路上不加密,则相当于未加密,仍然是不安全的。与链路加密类似的节点加密方法,是在节点处采用一个与节点机相连的密码装置(被保护的外围设备),密文在该装置中被解密并被重新加密,明文不通过节点机,避免了链路加密关节点处易受攻击的缺点。

窃听攻击
网络监听是一种监视网络状态、数据流程以及网络上信息传输的管理工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息。也就是说,当黑客登录网络主机并取得超级用户权限后,若要登录其它主机,使用网络监听便可以有效地截获网络上的数据,这是黑客使用最好的方法。但是网络监听只能应用于连接同一网段的主机,通常被用来获取用户密码等。

SQL注入
通过SQL查询漏洞,注入一些非法信息,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

22.CSMA/CD协议(以太网的介质访问控制方式的工作原理)

数据通信前先检测信道是否空闲,如果空闲则发送方开始发送数据并持续监听信道,检测到信道数据冲突后停止发送数据,执行指数退避算法重新发送数据。

23.计算机网络分层优点

  1. 分层使每层都实现一种相对独立的功能,降低系统复杂度
  2. 各层之间界面自然清晰,易于理解,相互交流尽可能少
  3. 保持下层对上层独立,上层单项使用下层的服务
  4. 能够促进标准化工作

24.网络协议特点

  1. 标准化
  2. 分层结构
  3. 开放性
  4. 可靠性
  5. 灵活性
  6. 安全性

25.网络延迟有哪些

排队时延,传播时延,处理时延,发送时延

26.数据链路层的三个问题为什么都必须加以解决

三个问题:封装成帧,透明传输,差错检测
帧定界是分组交换的必然要求;
透明传输避免消息符号与帧定界符号相混淆
差错检测防止差错的无效数据帧浪费后续路由上的传输和处理资源。

27.http与https区别

安全性:HTTPS是安全的,而HTTP不安全。**HTTPS通过使用SSL或TLS协议对数据进行加密来保护数据的传输过程。**这种加密技术可以防止黑客窃取或修改数据。


端口:HTTP使用端口80进行通信,而HTTPS使用端口443进行通信。


证书:HTTPS需要使用数字证书来证明网站的身份,而HTTP没有这个要求。数字证书是由受信任的第三方机构颁发的,用于验证网站的身份和信誉。


性能:**由于HTTPS需要进行加密和解密过程,因此它比HTTP更加耗费计算资源和时间。**因此,HTTPS的性能可能比HTTP略低。

====================================

二 . 操作系统

1.操作系统

定义

控制和管理计算机软件、硬件资源,合理组织计算机工作流程,以供用户使用的程序的集合。

特征

并发,共享,虚拟,异步

功能

处理及管理,存储器管理,文件管理,设备管理,作业管理

2.进程和程序

1.程序是静态的,有序代码集合;进程是动态的,是程序的一次执行
2.程序是永久的、无生命周期、可长久保存;晋城市暂时的、有生命周期、动态变化
3.进程是OS资源分配和保护的基本单位


进程=PCB+程序+数据
PCB是进程存在的唯一标识

3.进程和线程

1.进程从就绪态到运行态包含了线程的运行,就绪态中没有现成的执行,运行态进程实现对线程的执行。线程的调度是在运行进程的内部的调度。


2.线程和进程都有并发性,线程并发度高
3.线程的创建和撤销开销小,切换迅速;进程开销大
4.同一进程中的线程共享进程的资源和状态。但资源和状态不归线程所有。进程是多个线程的集合

4.进程状态

创建态
就绪态
运行态
阻塞态
终止态

就绪态可以到运行态,被CPU调度
运行态可以到就绪态,被抢占、时间片到
运行态到阻塞态,申请的资源不足

5.进程通信

低级通信方式 PV操作
高级通信方式 共享存储、消息传递、管道通信

6.作业调度(获得处理机资源)

高级调度(作业调度):为后被状态的作业建立进程并进入主机
中级调度(对换调度):进程在内存和辅存交换区间的对换,缓解内存资源的紧张状态
低级调度(进程调度):决定内存中哪个进程可以占据CPU,使其处于运行状态

7.进程调度算法

先来先服务进程调度算法
基于优先数的调度
时间片轮转程序调度算法
多级队列算法

8.进程同步和互斥

信号量可以分为整形信号量、记录型信号量(包括资源个数、等待队列)
信号量的值可以通过PV操作改变
信号量可以实现进程的同步和互斥


临界资源 一次仅允许一个进程使用的资源
临界区 进程访问共享资源的那段程序


同步 多个进程因为合作而使得进程的执行有一定的先后顺序
互斥 多个进程在同一时刻只有一个进程能进入临界区

9.进程同步的四个准则

空闲让进 临界区空闲,进程可以进入
忙则等待 临界区已有进程访问,其他进程等待
有限等待 应保证进程等待进入临界区的时间是有限的
让权等待 当进程不能进入临界区时,应释放处理机

10.死锁和饥饿

死锁

死锁是指两个或两个以上的进程执行过程中,因争夺资源而造成的一种互相等待的现象,从而无法继续推进下去。

产生死锁原因

1.进程推进顺序不合理
2.系统资源不足

死锁的四个必要条件

互斥条件
不剥夺条件
零散请求条件
循环等待条件

预防死锁

破坏死锁产生的四个必要条件

破坏互斥条件:SPOOLing技术
破坏不剥夺条件:剥夺
破坏零散请求条件:静态资源分配策略
破坏循环等待条件:系统依据一定的策略给资源编号,进程必须按照从小到大的顺序申请资源

避免死锁

避免系统进入不安全状态,使用安全性算法判断是否存在安全序列,银行家算法

死锁一定是不安全状态,不安全状态不一定死锁

死锁的检测和解除

检测死锁:
资源分配图


解除死锁:
重新启动法
资源剥夺法
撤销进程法
进程回退法

饥饿

进程长时间得不到处理机调度的现象叫做饥饿

饥饿和死锁的区别

饥饿进程可以只有一个,死锁必须有两个
饥饿进程可以是一个就绪进程,而死锁进程必定是阻塞进程

11.存储器管理的功能

内存分配和回收
地址变换
扩充内存
存储保护

12.内存连续分区分配

单一连续分配 只支持单道程序 有内部碎片
固定分区分配 支持多道程序,设置分区表,每个分区装入一道程序 有内部碎片
动态分区分配 支持多道程序,根据进程大小动态建立分区 ** 有外部碎片**

碎片

内部碎片 已经被分配出去却不能被利用的内存空间
外部碎片 未被分配出去且因太小而无法利用的内存空间
拼接技术(紧凑技术) 将分散的外部碎片连成一个大的空闲区,解决碎片问题

13.动态分区分配算法

首次适应
邻近首次适应
最佳适应
最差适应

14.内存非连续分区分配

非连续分区分配可以在内存中离散地分配程序,更好的内存利用和管理

分页(内碎片)
分段(外碎片)
段页式(内碎片)

分段和分页的区别

页是为了实现离散分配,减少外部碎片,提高内存利用率,段是为了能够更好地满足用户需要


页的大小是固定的,由系统决定,段的长度不固定,取决于用户编写的程序


分页的地址空间是一维的,分段的地址空间是二维的


页表项由页号和块号组成,将块号和页内偏移拼接在一起就可以得到物理地址
段表项由由段号、段首址、段长、装入位组成,将段首址和段内偏移拼接在一起得到物理地址

页面置换算法

最佳置换算法OPT
先进先出算法
最近未使用算法NRU
最近最少使用算法LRU
CLOCK算法
改进的CLOCK算法

15.虚拟存储器

基于局部性原理,仅将要运行的少数页面或段装入内存,其余暂时不调入内存。
当程序运行时访问缺页,在利用请求调页功能将页面从外存中调入内存
若此时内存已满,则采用页面置换算法,将内存中暂不使用的页面调入到外存的对换区中(对换)。故从用户角度出发,该系统的内存容量似乎比实际内存容量大得多

覆盖与交换技术

覆盖 将程序运行时不要求同时装入内存的组成一组,成为覆盖段
交换技术 将外存分为对换区和文件区,内存紧张时,将某些进程换出到外存的对换区


覆盖技术需要开发人员给定覆盖结构,交换技术是在在不同进程情况下,覆盖技术在同一进程情况下

16.文件逻辑结构

流式文件
顺序文件
索引文件
索引顺序文件

17.文件物理结构

顺序分配 为文件分配一组连续的磁盘块
隐式链式分配,每个磁盘块都有指向下一个磁盘块的指针
显式链式分配,建立一张文件分配表FAT,根据FAT还有文件的起始块号,我们可以快速的查找到文件的数据
索引分配 为数据块建立索引表

18.文件存储管理

空闲表法 记录每个连续空闲区起始块号和盘块数
空闲盘块链 以块为单位组成一条链
空闲盘区链 以盘区为单位组成一条链
位示图法 用二进制一位表示磁盘使用情况,0表示空闲,1表示已使用

19.Spooling

将独占设备虚拟化为共享设备,采用软件的方式模拟脱机技术,通过预输入、缓输出的方法。使用了多道程序设计技术和通道技术。

20.磁盘调度算法

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

21.windows系统和实时操作系统区别

Windows系统和实时操作系统的主要区别在于其针对的应用场景和处理方式不同。

Windows系统是一种通用的操作系统,主要用于个人电脑、服务器等设备,其主要特点是具有用户友好的图形界面和强大的通用功能,如文件管理、多任务处理、网络连接等。Windows系统的响应时间相对较长,实时性较差,不适合对响应时间要求较高的应用场景,比如工控、航空航天、医疗等领域。
实时操作系统(RTOS)则是一种专用的操作系统,主要用于嵌入式系统、工控系统、航空航天、医疗设备等领域。实时操作系统的主要特点是具有高度可预测性和实时性,可以在规定时间内完成指定任务,保证系统的可靠性和稳定性。实时操作系统的响应时间非常短,可以在微秒或毫秒级别内完成任务,适合对响应时间要求较高的应用场景。
总之,Windows系统注重通用性和易用性,而实时操作系统则注重实时性和可靠性,适用于不同的应用场景。

22.OS为什么提供系统调用

(1)操作系统提供系统调用是为了让应用程序能够访问操作系统的功能和资源。 通过系统调用,应用程序可以请求操作系统执行某些特定的操作,例如读写文件、创建进程、分配内存等。
(2)系统调用提供了一种安全、可控的方式,使应用程序能够与操作系统进行交互,同时也保护了操作系统的稳定性和安全性
(3)系统调用还可以提高应用程序的性能和效率,因为操作系统可以优化系统调用的执行,从而提高整个系统的性能。

23.互斥在临界区的作用

互斥在临界区的作用是保证在同一时间只有一个线程可以进入临界区执行代码,避免多个线程同时访问共享资源而导致的数据竞争和不一致性问题。

24.OS内外碎片如何解决

内碎片是指分配给进程的内存空间中,有一部分空间没有被利用,但是由于大小不足以分配给其他进程使用,因此造成了浪费。外碎片是指空闲内存块之间被占用的内存空间,这些空间虽然总和足够分配给其他进程使用,但是由于分散在不同的内存块中,无法被利用,也造成了浪费。


解决内碎片的方法是采用动态分配内存的方式,即根据进程的实际需要分配内存空间,避免浪费。


解决外碎片常见的方法是内存紧缩。内存紧缩是指将内存中的空闲块合并成更大的块,以便分配给需要内存的进程使用。另外,还可以采用内存池技术,将多个小的内存块合并成一个大的内存块,以减少外碎片的产生。

25. 操作系统如何防止用户使用特权指令

为了防止用户程序中使用特权指令,计算机硬件结构区分两种操作模式:目态和管态
其中目态下只能使用除特权指令以外的指令,管态下可以使用全部指令。 可以把 用户程序置在目态下运行,而操作系统中必须使用特权指令的那部分程序可在管态下运行,这样可保证计算机系统的安全可靠。

26.进程调度两种方式

操作系统中的进程调度有两种方式:

  1. 非抢占式调度:也称为协作式调度,是指进程在运行时不会被强制中断,而是由进程自己决定何时释放CPU资源,让其他进程运行。这种调度方式适用于对实时性要求不高的应用场景,如文本编辑器、计算器等。
  1. 抢占式调度:是指操作系统可以在任何时候强制中断正在运行的进程,将CPU资源分配给其他进程运行。这种调度方式适用于对实时性要求较高的应用场景,如多媒体应用、游戏等。

在实际应用中,操作系统通常采用抢占式调度方式,以保证系统的稳定性和响应性。

三、离散数学

1.简单图和多重图区别

简单图:没有环和平行边
多重图:有环或有平行边

2.群偏序关系并举例

在这里插入图片描述

例子:整除关系,大于等于,小于等于

3.自反闭包是什么

自反闭包是一个自反性最小的关系,使得原来的关系也是它的子集。

4.如何判断一个有向图是欧拉图

判断有向图的所有顶点入度等于出度。
判断是否为强连通图

5.群的性质

封闭,结合律,幺元,逆元

6.集合三要素

确定性、互异性、无序性

在这里插入图片描述
在这里插入图片描述

7.环

在这里插入图片描述

加法(交换群),乘法(结合,半群),乘法对加法满足分配律

无0因子环

不存在a·b=0

整环

乘法可交换,乘法含幺,无0因子环

8.域

在这里插入图片描述

加法,乘法交换群,乘法对加法满足分配律

9.格

在这里插入图片描述

∩,∪均满足交换律,结合律,等幂律,吸收律
偏序集合中每一对元素a,b都有最大下界和最小上界

分配格

格满足分配律

布尔代数

有补分配格

在这里插入图片描述

四、计算机前沿、相关知识

1.人工智能学习方法是什么

监督学习:从标注好的数据中学习模式和规律,比如分类、回归、序列预测等任务。


无监督学习:从未标注的数据中寻找模式和规律,比如聚类、降维等任务。


强化学习:通过试错的方式,不断优化决策策略,比如游戏、机器人控制等任务。


半监督学习:结合有标注和无标注数据进行学习,可以提高学习效果。


迁移学习:将已经学习好的模型应用到新的任务上,可以加速学习和提高效果。


元学习:学习如何学习,自动优化模型的学习算法和超参数。
不同的任务和场景可以采用不同的学习方法,也可以结合多种方法进行学习。

2.对人工智能的未来怎么看

人工智能将催生出更多的应用场景,比如智能家居、智能医疗、智能交通等,人们的生活和工作将会更加智能化和便捷化。


人工智能将会进一步推动自动化和智能化生产,提高生产效率和质量,同时也会改变工业生产的模式和组织形式。


人工智能在医疗领域的应用将会越来越广泛,包括疾病诊断、药物研发、智能医疗设备等,将会为人们的健康保障提供更好的服务。


人工智能将会在教育、金融、文化娱乐等领域得到广泛应用,为人们的学习、生活、娱乐提供更加智能化、个性化的服务。


人工智能的发展将会带来一些新的挑战和问题,比如人工智能的道德和伦理问题、数据隐私和安全问题等,需要人们共同来解决。


总之,人工智能的未来发展前景非常广阔,将会在各个领域发挥重要的作用,同时也需要我们注意其带来的新问题和挑战。

3.人工智能会超越人类智慧吗

这是一个备受争议的话题。人工智能的快速发展和广泛应用,已经在许多领域展现出了惊人的能力,比如在图像识别、语音识别、自然语言处理、游戏等方面已经超过了人类的水平。但是,人工智能是否会超越人类智慧仍然存在很大的不确定性
从目前的发展趋势来看,人工智能在某些特定领域的表现已经非常优秀,但是**人类智慧具有很多独特的特点,比如创造力、情感、道德和价值观等,这些特点目前还无法被人工智能完全取代。**此外,人工智能也存在一些局限性,比如需要大量的数据和计算资源、对环境和输入数据的变化比较敏感等,这些局限性也限制了人工智能的发展。
虽然人工智能在某些方面已经展现出了惊人的能力,但是要超越人类智慧还需要很长时间的发展和探索。无论如何,人工智能的发展仍然需要人类的智慧和创造力来引导和控制,以确保它的发展符合人类的价值观和利益。

4.迁移学习用处

提高模型性能:通过从源领域中迁移学习到的知识和经验,可以提高目标领域中的模型性能,减少数据量和时间成本,提高学习效率。


适应新领域:在新的领域中,可能会遇到数据量不足、数据分布不均、数据质量差等问题,迁移学习可以通过从源领域中学习到的知识和经验,适应新领域的数据特点,提高模型的泛化能力。


融合多领域知识:迁移学习可以将多个领域中的知识和经验进行融合,构建更加全面和准确的模型,提高模型的表现和效果。


降低人工成本:在某些情况下,人工标注数据的成本非常高昂,迁移学习可以通过从源领域中学习到的知识和经验,减少目标领域中需要人工标注的数据量,降低人工成本。


推动科学研究:通过迁移学习,可以将不同领域中的知识和经验进行交叉和融合,推动科学研究的进展和发展,促进学术交流和合作。

5.朴素贝叶斯为什么朴素

朴素贝叶斯算法之所以被称为“朴素”,是因为它做了一个朴素的假设,即假设所有特征之间相互独立

6.软件工程模块与模块之间,模块内部应该怎样

模块与模块之间应该通过接口进行通信,接口应该定义清楚输入和输出的数据格式、数据类型、数据范围等信息,以确保模块之间的数据传递正确无误。


模块内部应该遵循高内聚、低耦合的原则,即模块内部的各个部分应该紧密相关,但与其他模块的关联应该尽可能少。这样可以提高模块的可维护性和可重用性;应该遵循良好的编程规范,包括命名规范、注释规范、代码风格等,以提高代码的可读性和可维护性。

7.C++一个函数如何返回多个值

  1. 使用结构体或类:可以定义一个结构体或类,将多个需要返回的值作为结构体或类的成员变量,然后将结构体或类作为函数的返回值返回。

  1. 使用指针或引用参数:可以将需要返回的值作为指针或引用参数传递给函数,在函数内部修改指针或引用指向的变量的值。

  1. 使用数组或向量:可以定义一个数组或向量,将多个需要返回的值作为数组或向量的元素,然后将数组或向量作为函数的返回值返回。

8.图书管理系统如何保证用户密码安全

  1. 加密存储:将用户密码进行加密处理后再存储到数据库中,防止密码被恶意获取。
  2. 强制修改密码:在用户首次登录或者一段时间后,强制用户修改密码,以防止密码被泄露或猜测。
  3. 密码复杂度要求:要求用户设置复杂度较高的密码,包括数字、字母、符号等,以增加密码的安全性。
  4. 登录失败锁定:在用户连续多次登录失败后,锁定账户一段时间,以防止恶意攻击。

9.数据库如何实现原子性和回滚

原子性

数据库实现原子性的方法是使用事务。事务是一组操作,这些操作要么全部执行成功,要么全部失败回滚。在事务中,所有的操作都被视为一个整体,要么全部执行成功,要么全部失败回滚,保证了数据的原子性。

ACID性质

  1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚。

  2. 一致性(Consistency):事务执行前后,数据库的状态必须保持一致。

  3. 隔离性(Isolation):事务之间是相互隔离的,一个事务的执行不会影响其他事务的执行。

  4. 持久性(Durability):事务执行成功后,对数据库的修改是永久性的,即使系统崩溃也不会丢失。

回滚

数据库实现回滚的方法是使用事务。当一个事务执行失败或者被取消时,数据库会自动回滚到事务开始之前的状态,撤销所有已经执行的操作,保证数据的一致性。

数据库中,回滚操作可以通过以下两种方式实现:

  1. 自动回滚:当一个事务执行失败时,数据库会自动回滚到事务开始之前的状态,撤销所有已经执行的操作。

  1. 手动回滚:在某些情况下,需要手动回滚事务。可以使用ROLLBACK语句来回滚事务,将事务中的所有操作都撤销,恢复到事务开始之前的状态。

10.科研精神是什么

  1. 探索精神:科学家具有强烈的好奇心和求知欲,对未知的领域充满探索的热情,不断地寻求新的知识和发现。
  2. 创新精神:科学家具有创造性思维和创新能力,能够提出新的理论、方法和技术,推动科学的发展和进步。
  3. 严谨精神:科学家具有严谨的科学态度和方法,注重实验设计和数据分析的准确性和可靠性,保证研究结果的科学性和可信度。
    4.== 合作精神==:科学家具有合作精神,能够与其他科学家进行交流和合作,共同推进科学研究的进展。
  4. 坚韧精神:科学家具有坚韧不拔的精神,能够克服困难和挫折,不断地追求科学真理和发现。
    科研精神是科学家必备的素质,也是科学研究的重要保障。只有具备了科研精神,才能够进行高质量的科学研究,取得有意义的科学成果。

11.中断

中断是计算机系统中的一种机制,它允许外部设备或程序在执行过程中打断CPU的正常执行流程,使CPU暂停当前的任务,转而执行与中断相关的处理程序。
中断可以分为硬件中断和软件中断两种类型。
硬件中断是由外部设备发出的信号,例如键盘输入、鼠标移动、网络数据传输等
软件中断则是由程序内部发出的信号,例如系统调用、异常处理等。
中断机制可以提高计算机系统的响应速度和处理能力,使系统更加灵活和可靠

12.人工智能学习方法

  1. 监督学习通过给算法提供带有标签的数据集,让算法学习如何将输入映射到输出。常见的应用包括图像识别、语音识别、自然语言处理等。
  2. 无监督学习不需要给算法提供标签,让算法自己发现数据中的模式和结构。常见的应用包括聚类、降维、异常检测等。
  3. 强化学习通过给算法提供一个环境和一个奖励机制,让算法自己学习如何在环境中采取行动,以获得最大的奖励。常见的应用包括游戏AI、机器人控制等。
  4. 半监督学习结合监督学习和无监督学习的方法,利用少量带标签的数据和大量无标签的数据来训练算法。常见的应用包括图像分类、文本分类等。
  5. 迁移学习将已经学习好的模型应用到新的任务中,可以加快新任务的学习速度和提高准确率。常见的应用包括图像识别、自然语言处理等。
  6. 深度学习利用多层神经网络来学习数据中的特征和模式,可以处理大规模的复杂数据。常见的应用包括图像识别、语音识别、自然语言处理等。

13.对人工智能的未来怎么看

我认为人工智能的未来是非常光明的。随着技术的不断发展和创新,人工智能将会在各个领域发挥越来越重要的作用,包括医疗、金融、教育、交通等等。人工智能将会帮助我们更好地理解和解决各种问题,提高生产效率和生活质量。 同时,人工智能也会带来一些 挑战和风险,比如数据隐私、就业岗位等问题,我们需要在发展人工智能的同时,积极应对这些问题,确保人工智能的发展是有益于人类的。

14.虚析构函数作用

虚析构函数的作用是在继承关系中正确地释放资源。
当一个类被继承时基类的析构函数是虚函数,那么在删除一个派生类对象时,会先调用派生类的析构函数,然后再调用基类的析构函数,这样就能够正确地释放基类中的资源,避免内存泄漏等问题。

15.C++结构体和联合的区别

  1. 结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量,每个成员变量占用不同的内存空间,结构体的大小等于所有成员变量大小之和加上对齐空间的大小。
  2. 联合也是一种用户自定义的数据类型,可以包含多个不同类型的成员变量,但是联合的所有成员变量共用同一块内存空间,联合的大小等于最大成员变量的大小。
  3. 结构体的成员变量可以同时被访问,而联合的成员变量只能访问其中一个。
  4. 结构体的成员变量可以有不同的值,而联合的成员变量只能有一个值。
  5. 结构体的成员变量可以被定义为指针类型,而联合的成员变量不能被定义为指针类型。
  6. 结构体的成员变量可以被初始化,而联合的成员变量只能被初始化其中一个。
  7. 结构体的成员变量可以被定义为静态变量,而联合的成员变量不能被定义为静态变量。

16.数组指针和指针数组区别

数组指针是指一个指向数组的指针变量,它可以指向一个数组的首地址,也可以指向一个数组中的某个元素。
指针数组是指一个数组,其中的每个元素都是一个指针变量,它们可以指向不同的数据类型,也可以指向同一种数据类型。
数组指针是指针变量,指向一个数组;而指针数组是数组,其中的每个元素都是指针变量。

17.C++,java,python区别

  1. 应用领域:C++主要用于系统编程、游戏开发、图形界面等领域;Java主要用于企业级应用开发、Android应用开发等领域;Python主要用于数据分析、人工智能、Web开发等领域。

  2. 性能:C++是一种编译型语言,执行速度快,但需要手动管理内存;Java是一种解释型语言,执行速度比C++慢,但不需要手动管理内存;Python是一种解释型语言,执行速度比Java慢。

18.智能科学与技术和计算机科学与技术区别

智能科学与技术是一门跨学科的科学,它涉及到计算机科学、数学、物理学、生物学、心理学等多个学科领域,旨在研究人工智能、机器学习、自然语言处理、智能控制等方面的问题。
计算机科学与技术则是一门专门研究计算机系统、软件和硬件的学科,它包括计算机体系结构、操作系统、编程语言、数据库、网络等方面的内容。
虽然智能科学与技术和计算机科学与技术有一些重叠的部分,但它们的研究方向和方法不同,前者更注重人工智能的应用和发展,后者则更注重计算机系统和软件的设计和开发。

19.B/S和C/S区别

B/S和C/S是两种不同的软件架构模式,其主要区别如下:

  1. B/S(Browser/Server)架构模式是基于浏览器和服务器的模式,用户通过浏览器访问服务器上的应用程序。C/S(Client/Server)架构模式是基于客户端和服务器的模式,用户通过客户端访问服务器上的应用程序。

  2. B/S架构模式的应用程序可以在任何支持浏览器的设备上运行,如PC、手机、平板等。而C/S架构模式的应用程序需要在特定的客户端上运行,如PC端的Windows应用程序、移动端的iOS或Android应用程序等。

  3. B/S架构模式的应用程序通常具有更好的跨平台性和可移植性,而C/S架构模式的应用程序则更加依赖于特定的操作系统和硬件平台。

  4. B/S架构模式的应用程序通常具有更好的安全性和可维护性,因为应用程序的逻辑和数据都存储在服务器端;而C/S架构模式的应用程序则需要在客户端和服务器端之间进行数据传输和处理,存在一定的安全风险和维护难度。

20.软件设计

软件设计是指在软件开发过程中,根据需求和功能要求,对软件进行结构化的设计和规划,以便于实现高效、可靠、易于维护和扩展的软件系统。软件设计包括以下几个方面:

  1. 需求分析:确定软件的功能和性能要求,以及用户需求和期望。

  2. 架构设计:确定软件的整体结构和组成部分,包括模块、接口、数据结构等。

  3. 模块设计:对软件的每个模块进行详细设计,包括算法、数据结构、接口等。

  4. 数据库设计:设计软件所需的数据库结构和数据存储方式。

  5. 用户界面设计:设计软件的用户界面,包括界面布局、交互方式、图形设计等。

  6. 测试设计:设计软件的测试方案和测试用例,以确保软件的质量和稳定性。

软件设计是软件开发过程中非常重要的一环,它直接影响软件的质量、可维护性和可扩展性。好的软件设计能够提高软件的开发效率,降低开发成本,同时也能够提高软件的用户体验和用户满意度。

18.C++堆和栈的区别?

(1) 堆存放动态分配的对象——即那些在程序运行时动态分配的对象,比如 new 出来的对象,其生存期由程序控制;
(2) 栈用来保存定义在函数内的非static对象,如局部变量,仅在其定义的程序块运行时才存在;
(3) 栈和静态内存的对象由编译器自动创建和销毁

19.堆和自由存储区的区别?

堆是操作系统维护的一块动态分配内存;自由存储是C++中通过new与delete动态分配和释放对象的抽象概念。

20.什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?

用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露。

  1. 使用智能指针:智能指针是一种自动管理内存的指针,可以避免内存泄漏和指针越界问题。
  2. 编写高质量的代码:编写高质量的代码可以避免内存泄漏和指针越界问题,例如使用RAII(资源获取即初始化)等技术。
  3. 使用异常处理机制:在程序中使用异常处理机制可以避免程序因为内存泄漏和指针越界而崩溃。

21.C/C++引用和指针的区别?

(1)指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。
(2)引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向的空间可变。
(3)有多级指针,但是没有多级引用,只能有一级引用。
(4)引用访问一个变量是直接访问,而指针访问一个变量是间接访问。
(5)作为参数时也不同,传指针的实质是传值,传递的值是指针的地址;传引用的实质是传地址,传递的是变量的地址。

22.C和C++的区别

C++是C的扩展,它包含了C语言的所有特性,并且增加了面向对象编程的特性
(1)C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字
(2)C++支持类和对象,而C语言不支持; C++支持函数重载和运算符重载,而C语言不支持;C++支持异常处理机制,而C语言不支持; C++支持命名空间,而C语言不支持;C++支持STL(标准模板库),而C语言不支持; C++支持多态性,而C语言不支持; C++支持模板,而C语言不支持; C++支持引用,而C语言不支持。

23. const 有什么用途

  1. 防止变量被修改:使用const关键字可以防止变量被修改,从而提高程序的安全性和可靠性。
  2. 优化程序性能:在函数参数中使用const关键字可以避免不必要的复制,从而提高程序的性能。
  3. 保护类的成员变量:在类中使用const关键字可以保护类的成员变量不被修改,从而提高类的封装性和安全性。
    const可以提高程序的安全性、可靠性、性能和可读性。

24.野指针是什么?

野指针是指指向未知或无效内存地址的指针,它的成因主要有以下几种:

  1. 指针未初始化:如果一个指针变量没有被初始化,它的值就是未知的,可能指向任意地址

  2. 指针指向已释放的内存:如果一个指针指向已经释放的内存,那么这个指针就成为了野指针

  3. 指针越界访问:如果一个指针指向的地址超出了它所指向的内存块的范围,那么这个指针就成为了野指针

  4. 指针被误修改:如果一个指针被误修改,它就可能指向未知或无效的地址,从而成为野指针。这种情况通常发生在程序员没有正确处理指针的赋值或者传递时。

总之,野指针是程序中常见的错误之一,它可能导致程序崩溃、数据丢失等严重后果。

25.如何避免野指针

  1. 初始化指针:在定义指针变量时,应该将其初始化为 NULL 或者一个有效的地址,以避免指针变量成为野指针。

  2. 检查指针是否为 NULL:在使用指针变量之前,应该检查指针是否为 NULL,以避免访问无效的内存地址。

  3. 避免释放已经释放的内存:在使用 free() 函数释放内存之后,应该将指针变量设置为 NULL,以避免访问已经释放的内存。

  4. 避免指针越界:在使用指针访问数组元素时,应该确保指针不会越界,否则会导致野指针的出现。

  5. 避免指针悬挂:在使用指针访问动态分配的内存时,应该确保在释放内存之前,所有指向该内存的指针都已经被置为 NULL,以避免指针悬挂的问题。

  6. 使用智能指针:使用智能指针可以避免手动管理内存的问题,从而避免野指针的出现。智能指针会自动管理内存,确保内存的正确释放。

智能指针是一种 C++ 中的语言特性,它可以自动管理内存,避免手动管理内存的问题,确保内存的正确释放,从而避免野指针的出现。智能指针是一个类,它封装了一个指针,并提供了一些方法来管理指针所指向的内存。

26.计算智能三个分支

  1. 机器学习:通过让计算机从数据中学习,使其能够自动改进和优化算法,从而实现自主决策和预测。
  2. 自然语言处理:利用计算机技术处理和理解人类语言,包括语音识别、语义分析、机器翻译等。
  3. 计算机视觉:利用计算机技术模拟人类视觉系统,实现图像和视频的分析、识别和理解,包括图像处理、目标检测、人脸识别等。

27.计算智能与AI的关系

计算智能和AI(人工智能)是密切相关的概念,计算智能是AI的一个重要组成部分。计算智能是指利用计算机技术模拟人类智能的能力,包括机器学习、自然语言处理、计算机视觉等技术。而AI则是指让计算机具有类似人类智能的能力,包括感知、推理、学习、决策等方面。因此,计算智能是AI的基础和核心技术之一,是实现AI的重要手段。

28.黑盒测试和白盒测试

黑盒测试是一种测试方法,它不考虑软件内部的实现细节,只关注软件的输入和输出。黑盒测试的目的是验证软件是否符合规格说明和用户需求,以及是否能够正确地处理各种输入情况。黑盒测试通常由测试人员执行,他们不需要了解软件的内部实现细节,只需要了解软件的功能和用户需求。
白盒测试是一种测试方法,它考虑软件的内部实现细节,包括代码、数据结构、算法等。白盒测试的目的是验证软件的内部逻辑是否正确,以及是否能够正确地处理各种边界情况。白盒测试通常由开发人员执行,他们需要了解软件的内部实现细节,以便能够更好地测试软件的内部逻辑。

奈奎斯特频率:是指在数字信号处理中采样频率的一半

29.dp算法(动态规划)

DP全称为动态规划,是一种解决多阶段决策问题的算法。它的基本思想是将问题分解成若干个子问题,先求解子问题,再由子问题的解来求得原问题的解。
DP算法的核心是设计状态和状态转移方程。状态是指问题的子问题中需要记录的信息,状态转移方程则是描述从一个状态到另一个状态的转移过程。
DP算法有以下两个特点:
1.最优子结构性质:问题的最优解可以由子问题的最优解推导出来。
2.无后效性:在推导当前状态时,只关心之前的状态,而不关心之后的状态。
DP算法的应用十分广泛,例如背包问题、最长公共子序列问题、最短路径问题等等。

30.快速排序

是一种基于比较的排序算法,通过将待排序的序列分割成两个子序列,其中一个子序列的所有元素都比另一个子序列的所有元素小,然后对这两个子序列分别进行递归排序,最终将整个序列排序。具体实现包括以下几个步骤:
(1)选取一个基准元素(pivot)。
(2)将序列中所有比基准元素小的元素放在基准元素左边,比基准元素大的元素放在基准元素右边,这个过程称为分区(partition)操作。
(3)对左右两个子序列分别递归执行步骤1和步骤2,直到子序列大小为1时排序结束。
快速排序的时间复杂度为O(nlogn),最差情况下会退化到O(n^2),但平均情况下表现较好,是常用的排序算法之一。实现时需要注意选择基准元素的策略,常用的有随机选取、取头、取尾等方法。

31.普通变量和类变量区别

普通变量是指在方法或代码块内部定义的变量,它们的作用域仅限于该方法或代码块。每次调用该方法或执行该代码块时,都会重新创建一个新的变量,因此不同的方法或代码块中可以定义同名的普通变量而互不干扰。
类变量是指在类内部定义的变量,也称为静态变量。它们被该类的所有对象所共享,可以通过类名直接访问。类变量只会在类加载时被初始化一次,之后所有对象共享同一个值。因此,如果一个对象改变了类变量的值,那么其他所有对象都会受到影响。
总结来说,普通变量和类变量的区别在于作用域和共享性。普通变量的作用域仅限于该方法或代码块,每次调用都会重新创建一个新的变量;而类变量被该类的所有对象所共享,只会在类加载时被初始化一次。

32.空指针必须一定是0吗

不是。
空指针不一定是0,也可以是其他的值。在C语言中,空指针通常被定义为0或者NULL宏。在C++语言中,空指针通常被定义为nullptr关键字。

33.递归与迭代区别

递归是指一个函数在调用自身的过程中,不断地将问题分解为更小的子问题,直到遇到最小的子问题可以直接求解,然后将每个子问题的解合并起来得到原问题的解。递归需要占用大量的栈空间,容易导致栈溢出的问题。递归的实现方式简单,但是有时候效率不高。
迭代是指通过循环来反复执行相同的操作,每次执行都会更新状态和变量,直到满足某个条件后退出循环。迭代不会占用大量的栈空间,因此比递归更加节省内存,而且有时候效率更高。

34.软件工程模块与模块之间,模块与模块内部应该怎样

高内聚、低耦合原则:模块内部应该保持高内聚,即模块内部的各个部分应该紧密相关,实现单一的功能;模块之间应该保持低耦合,即模块之间的接口应该简单明了,模块之间的依赖关系应该尽量减少。

接口设计原则:模块之间的交互通过接口进行,接口应该尽量简单、清晰、易于理解和使用,接口的设计应该注重可扩展性和兼容性。

单一职责原则:每个模块都应该具有单一的职责,只实现一个功能,这样可以使模块之间的关系更加清晰明了,易于维护和扩展。

抽象和封装原则:模块内部的实现应该尽可能地抽象和封装,对外部提供简单的接口,隐藏内部实现细节,提高了代码的可维护性和可重用性。

统一规范原则:模块之间、模块内部应该遵循统一的编码规范和命名规范,使得代码易于理解和维护。
总之,模块之间、模块与模块内部应该遵循以上原则,使得软件系统具有良好的扩展性、可维护性、可重用性和可靠性。

35.数据库如何实现链接

JDBC链接:JDBC是Java数据库连接的标准API,可以通过JDBC链接来访问关系型数据库,如Oracle、MySQL、SQL Server等。

ODBC链接:ODBC是一种通用的数据库访问方式,可以通过ODBC链接来访问各种数据库,如Oracle、MySQL、SQL Server等。

ORM链接:ORM(Object-Relational Mapping)是一种将对象模型和关系模型进行映射的技术,可以通过ORM框架链接数据库,如Hibernate、MyBatis等。

NoSQL数据库链接:NoSQL数据库是一种非关系型数据库,可以通过相应的API或驱动来链接,如MongoDB、Redis等。

36.集成测试,单元测试,系统测试,功能测试

集成测试(Integration Testing)
集成测试是在软件开发过程中的一个阶段,它的目的是确保不同模块之间的交互能够正常工作。集成测试通常在所有单元测试都通过之后进行,它会将单元测试通过的模块组合起来,以确保它们能够正确地与其他模块进行交互,并且整个系统能够正常工作。

单元测试(Unit Testing)
单元测试是针对软件中的最小可测试单元进行测试,通常是针对代码中的函数或方法。单元测试的目的是确保每个单元都能够正常工作,以便在组合成更大的系统时能够更容易地定位和解决问题。

系统测试(System Testing)
系统测试是在整个软件开发过程中的最后一个阶段,它的目的是测试整个系统的功能和性能。系统测试通常涉及到整个系统的所有部分,并且会使用各种测试方法来确保系统的质量和稳定性。

功能测试(Functional Testing)
功能测试是针对软件的各种功能进行测试的过程。它的目的是确保软件的各种功能能够正常工作,并且符合用户需求和规格说明书中的规定。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐