天天看点

字节面试准备大全!(操作系统+计算机网络)

操作系统

  • 线程与进程的区别

根本区别:进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位

资源开销:每个进程都有独立的代码和数据空间,程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,线程之间切换的开销小。

包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻量级进程。

内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间是相互独立的

影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

二、实现多线程的方式Java多线程实现方式:继承Thread类、实现Runnable接口

三、rip是什么

RIP(路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统内路由信息的传递。RIP基于距离矢量算法,使用“跳数”来衡量到达目标地址的路由距离。

四、进程调度算法

1、先来先服务调度算法2、短作业(进程)优先调度算法3、时间片轮转法4、多级反馈队列调度算法5、优先权调度算法1) 非抢占式优先权算法2) 抢占式优先权调度算法

五、操作系统有哪些功能

操作系统有五大功能1、处理机管理 2、存储管理 3、设备管理4、文件管理5、进程管理

六、进程管理

进程的状态,进程状态就绪和等待状态的区别是什么

进程控制模块(PCB):PCB与进程同生死,创建一个进程就是为其建立一个PCB,当进程被撤消时,系统就回收它的PCB;对进程管理也通过对PCB管理来实现,所以进程控制块是进程存在的唯一实体。PCB的信息:进程标识符:它用于唯一地标识一个进程。

七、进程通信的方式:

可以分为直接通信和间接通信。

直接通信:进程必须正确的命名对方,必须有明确的发送方,message,接收方。

间接通信:进程定向地从消息队列接收消息,每个消息都有一个唯一的ID,只有他们共享了一个消息队列,进程才能通信。具体的通信方式有信号,管道,消息队列,共享内存。

八、磁盘管理

空闲块管理:通常有三种方式:一种是采用磁盘块表法,一种是采用磁盘块链法,另一种可选办法是采用位示图表示法。

空闲表法适合于文件的连续分配方式。操作系统为每个文件分配一个连续的存储空间,并为所有的存储空间建立一个空闲表,每个空闲区对应一个空闲表项,表项包括空闲区第一块号和空闲区空闲块数等信息。

空闲链法在每个空闲块下设置了指向下一个空闲物理块的指针,所有的空闲块连接构成了一个空闲块链表。

位示图法为了表示磁盘块的使用情况,位示图表示法对每个磁盘块用一个比特位记录其使用情况,n个块的磁盘需要采用n位位图。

九、线程之间共享数据的方式

代码一致:可以用 Runnable 对象,这个 Runnable 对象中存放共享数据(卖票系统)

每个线程执行的代码不相同:

方法1:将需要共享的数据封装成一个对象,将该对象传给执行不同代码的Runnable对象。

方法2:将这些执行不同代码的Runnable对象作为内部类。

十、用共享存储方式通信会有什么问题,如何解决

两个进程对共享空间的访问必须是互斥的,即同一时间只允许一个进程访问该共享空间。进程用这种方式通信时,操作系统只负责提供共享空间和同步互斥工具。(如 P、V操作)其实,共享存储方式还分为了两种,分别是基于数据结构的共享、基于存储区的共享。

十一、临界区是什么

临界区指的是一个访问共用资源的程序片段,这些共用资源又无法同时被多个线程访问。当有线程进入临界区段时,其他线程或是进程必须等待,以确保这些共用资源是被互斥获得使用。只能被单一线程访问的设备,例如:打印机。

十二、死锁是什么。死锁产生的条件是什么、如何预防死锁,避免死锁,死锁发生的检查

产生死锁的原因:(1)系统资源不足(2)进程运行推进的顺序(3)资源分配不当

产生死锁的四个必要条件:(1) 互斥条件(2) 占有且等待(3)不可强行占有(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

  1. 死锁预防:通过确保死锁的一个必要条件不会满足,保证不会发生死锁2)死锁检测:允许死锁的发生,但是可以通过系统设置的检测结构及时的检测出死锁的发生,采取一些措施,将死锁清除掉3)死锁避免:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁4)死锁解除:与死锁检测相配套的一种措施。

十三、存储管理:内存空间的分配

  1. 分区式存储管理:分区式存储管理最大的缺点是碎片问题严重,内存利用率低。究其原因,主要在于连续分配的限制,即它要求每个作用在内存中必须占一个连续的分区。有分区大小相等和大小不等两种。

2.分页式存储管理

3.分段式存储管理

4.段页式存储管理

十四、内存泄漏和内存溢出

内存溢出:简单地说内存溢出就是指程序运行过程中申请的内存大于系统能够提供的内存,导致无法申请到足够的内存,于是就发生了内存溢出。

内存泄漏:内存泄漏指程序运行过程中分配内存给临时变量,用完之后却没有被GC回收,始终占用着内存,既不能被使用也不能分配给其他程序,于是就发生了内存泄漏。

十五、内存空间的扩充:覆盖、交换、虚拟存储技术

虚拟内存的概念;这是一种利用虚拟存储器来逻辑扩充物理内存的技术。其基本思想是用软硬件技术把内存与外存这两级存储器当成一级存储器来用,从而给用户提供了一个比内存也比任何应用程序大得多的虚拟存储器。虚拟内存技术的实现也利用了自动覆盖和交换技术。

所谓覆盖,是指同一主存区可以被不同的程序段重复使用。

所谓交换,就是系统根据需要把主存中暂时不运行的作业部分或全部移到外存,而把外存中的作业移到相应的主存区,并使其投入运行。因此,交换是一种用时间换空间的技术。

十六、什么是线程同步,如何实现线程同步

线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。

十七、线程池

就是一个容纳多个线程的容器,其中的线程可以反复使用,无需反复创建线程消耗过多资源。

十八、互斥锁、读写锁,应用场景

互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。

读写锁:rwlock,区分读和写,处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写优先于读。

十九、堆和栈的区别以及存储模式有什么区别

1、栈:栈用于维护函数调用的上下文, 栈通常在用户空间的最高地址处分配2、堆:堆用来容纳应用程序动态分配的内存区域,我们使用new分配内存时,得到的内存来自堆里。

二十、线程安全的实现方式

多个线程并发执行,当第一个线程读取这个值的时候是3,当正在处理的时候另外一个线程将这个变量的值改为了9,这个时候就可能会出现问题。所以需要用到线程的同步方法,一般有互斥量,互斥量与条件变量配合使用(生产者与消费者模型),信号量,读写锁;

二十一、进程和线程的上下文切换

上下文切换就是从当前执行任务切换到另一个任务执行的过程,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。线程上下文切换比进程快的多。

进程切换时,需要存储什么上下文?只能发生在内核态。进程的上下文不仅包括了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态。PC程序计数器和CPU寄存器,保存在PCB中。

同一进程中的用户级线程切换的时候,当前后切换的两个线程是属于同一个进程,两个线程的资源基本是共享的,切换上下文时共享的资源不需要动,只有当线程有私有数据时,切换这些不共享的数据即可;前后切换两个进程不属于同一个进程,跟切换进程的上下文时一样

线程上下文切换发生的条件:1.中断处理 2.多任务处理:每个程序都有相应的时间处理片,当前任务的时间片用完之后,系统CPU正常调度下一个任务3.用户状态切换

二十二、协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

二十三、虚拟地址、逻辑地址、线性地址、物理地址有什么区别

虚拟地址是指由程序产生的段内偏移。有时直接把逻辑地址当成虚拟地址,

线性地址是指虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间中的地址。逻辑地址加上相应段基址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。若没有采用分页机制,那么线性地址就是物理地址。

物理地址是地址变换的最终结果。

二十四、wait()和sleep()的关键的区别在于

wait()是用于线程间通信的,而sleep()是用于短时间暂停当前线程。 区别在于,当一个线程调用wait()方法的时候,会释放它锁持有的对象的管程和锁,但是调用sleep()方法的时候,不会释放他所持有的管程。

二十五、并发和并行区别

并行:指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。

并发:指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

二十六、文件管理

计算机网络

一、浏览器输入www.baidu.com后发生了什么?

(1) 浏览器获取输入的域名www.baidu.com(2) 浏览器向DNS请求解析www.baidu.com的IP地址(3) 域名系统DNS解析出百度服务器的IP地址(4) 浏览器与该服务器建立TCP连接(默认端口号80)(5) 浏览器发出HTTP请求,请求百度首页(6) 服务器通过HTTP响应把首页文件发送给浏览器(7) TCP连接释放(8) 浏览器将首页文件进行解析,并将Web页显示给用户。涉及到的协议:

(1) 应用层:HTTP(WWW访问协议),DNS(域名解析服务)

(2) 传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输)

(3) 网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址)

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

二、tcp和udp的特点:

三、TCP三次握手的过程\TCP四次挥手 

四、TIME_WAIT出现在哪;为什么客户端要在TIME_WAIT状态等待一段时间

第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。

五、http有哪些请求方法?说一下get和post的区别。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

get方法不会修改服务器上的资源,而post有可能会修改服务器上的资源。

get把请求附在url上,而post把参数附在HTTP包的包体中。因为get参数暴露在url上,所以安全性不能保证,还有长度的限制。  

get方法更快,因为get方法和post方法请求流程不同。get方法是将头和包体一次性发给服务端,然后服务端回复一个200 OK;而post方法是先发送头部,服务端回复一个100 continue,然后浏览器再继续发送包体,服务端回复一个200 OK。

六、http和https的区别

https协议需要到CA申请证书,因而需要一定费用。

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

  • http状态码

100继续其请求//200OK请求成功//301资源(网页等)被永久转移到其他URL //302 临时移动。但资源只是临时被移动。客户端应继续使用原有URI//404没找到服务器无法根据客户端的请求找到资源//505不支持http

  • http劫持/dns劫持

HTTP劫持:你DNS解析的域名的IP地址不变。在和网站交互过程中的劫持了你的请求。在网站发给你信息前就给你返回了请求。HTTP劫持很好判断,当年正常访问一个无广告的页面时,页面上出现广告弹窗,

DNS劫持有这三种情况:1.错误域名解析到纠错导航页面,导航页面存在广告。判断方法:访问的域名是错误的,而且跳转的导航页面也是官方的,如电信的114,联通移网域名纠错导航页面。2.错误域名解析到非正常页面,3.直接将特点站点解析到恶意或者广告页面,这种情况比较恶劣,而且出现这种情况未必就是运营商所为。

  • URL统一资源定位符

格式:http://host[:port][abs_path]其中http表示要通过HTTP协议来定位网络资源。

host表示合法的Internet主机域名或IP地址;

port用于指定一个端口号,拥有被请求资源的服务器主机监听该端口的TCP连接。

abs_path指定请求资源的URI

十、DNS

DNS 的作用非常简单,就是根据域名查出IP地址。DNS的过程

1、在浏览器中输入www  . qq  .com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。 2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。 3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。 4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。 5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(http://qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找http://qq.com域服务器,重复上面的动作,进行查询,直至找到www  . qq  .com主机。 6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

十一、无效链接

死链接(Dead Links)指的是无效链接,也就是那些不可到达的链接。通俗地理解是以前可以通过点击这个链接到达网站页面,后续可能由于网站迁移、改版或操作不当等原因,使得链接指向的目标页面不存在而无法访问所遗留的链接,即称为死链接。访问死链接时,一般会出现“抱歉,您所访问的页面不存在”的提示信息或者 404 状态页面。

十二、https的加密方式

为什么需要加密?

因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。

什么是对称加密?简单说就是有一个密钥,它可以加密一段信息,也可以对加密后的信息进行解密,和我们日常生活中用的钥匙作用差不多。

什么是非对称加密?简单说就是有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。

十三、HTTP

HTTP请求报文由3部分组成( 请求行+请求头+请求体 )

请求行:请求方法字段、URL字段和HTTP协议版本字段,GET /index.html HTTP/1.1。

请求头部:由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

HTTP响应也由三个部分组成,分别是:状态行(状态码)、消息报头、响应正文。

十四、IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

十五、TCP如何保证可靠传输

流量控制:流量控制是为了控制发送方发送速率,保证接收方来得及接收。TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。(TCP 利用滑动窗口实现流量控制)

拥塞控制:当网络拥塞时,减少数据的发送。

TCP的拥塞控制采用了四种算法,即慢开始、拥塞避免、快重传和快恢复。

慢开始:慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。2N

拥塞避免:让拥塞窗口cwnd缓慢增大,每经过一个往返时间RTT就把发送方cwnd加1.

快重传与快恢复:在 TCP/IP 中,快速重传和恢复是一种拥塞控制算法,它能快速恢复丢失的数据包。如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。 当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

ARQ协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。

超时重传:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

十六、UDP想要可靠怎么实现 RUDP

RUDP 提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,从而在包丢失和网络拥塞的情况下, RTP 客户机(实时位置)面前呈现的就是一个高质量的 RTP 流。在不干扰协议的实时特性的同时,可靠 UDP 的拥塞控制机制允许 TCP 方式下的流控制行为。

十七、半连接攻击

发生在TCP 3次握手中。如果A向B发起TCP请求,B也按照正常情况进行响应了,但是A不进行第3次握手,这就是半连接攻击。SYN攻击数据DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。

十八、CLOSING状态

CLOSING:这个状态是一个比较特殊的状态,也比较少见,正常情况下不会出现,但是当双方同时都作为主动的一方,调用close() 关闭连接的时候,两边都进入FIN_WAIT_1 的状态,此时期望收到的是ACK包,进入 FIN_WAIT_2 的状态,但是却先收到了对方的FIN包,这个时候,就会进入到 CLOSING 的状态,然后给对方一个ACK,接收到 ACK 后直接进入到 CLOSED 状态。

十九、无状态和无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。

二十、cookie和session是什么,为什么要用cookie和session

Session是在服务端保存的一个数据结构,用来跟踪用户的状态;

Cookie是客户端保存用户信息的一种机制,自动登录、未登录时的购物车

二十一、ARP协议作用、工作方式

所谓“地址解析”就是主机在发送帧前将目标ip地址转换成目标mac地址的过程。以保证通信的顺利进行。 arp解析是通过广播的方式向局域网发送arp请求,广播是网关向这个网段的所有电脑发送同一个数据包,以更新mac地址表。

二十二、web攻击的CSRF攻击

攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。 CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,甚至盗取你的账号。

二十三、长连接和短连接以及他们分别适用的场景

短链接:连接->传输数据->关闭连接

比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。短连接是指SOCKET连接后,发送接收完数据后马上断开连接。长连接:连接->传输数据->保持连接 -> 传输数据-> ...........->直到一方关闭连接,多是客户端关闭连接。长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

二十四、知道什么是端口号吗?

所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号

二十五、系统资源包括哪些?

计算机系统的资源包括两大类:硬件资源和软件资源。硬件资源主要有处理器、主存储器、辅助存储器和各种输入输出设备。软件资源有编译程序、编辑程序等各种程序以及有关数据

二十六、添加购物车请求后发生了什么

首先初次进入页面时,客户端发送get请求,服务端在响应的set-cookie返回给客户端一个商品列表,用户点击【将某商品添加到购物车】,客户端发送请求携带cookie发送请求,并且在请求体中携带商品id,服务端接受到请求后,从请求头的cookie中取出商品列表,从请求体中取出本次商品id,然后查找商品列表是否包含该商品id,如果包含,那对应商品id增加;如果不存在,则从数据库查找该商品,并添加该商品信息和数量,并更新到cookie

二十七、TCP/IP 

意味着 TCP 和 IP 在一起协同工作。

TCP 负责应用软件(比如您的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。

TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。IP 负责将包发送至接受者。