从今天起,豆芽有空也尽己所能,帮助一下大家。

面经来源:https://www.nowcoder.com/discuss/699809?source_id=discuss_experience_nctrack&channel=-1


1. 虚拟内存有什么用?为什么要有虚拟内存?

  1. 虚拟内存:操作系统为每一个进程分配一个独立的地址空间,却是虚拟内存。虚拟内存与物理内存存在映射关系,通过页表寻址完成虚拟地址和物理地址的转换。
  1. 为什么要用虚拟内存:因为早期的内存分配方法存在以下问题:

    (1)进程地址空间不隔离。会导致数据被随意修改。

    (2)内存使用效率低。

    (3)程序运行的地址不确定。操作系统随机为进程分配内存空间,所以程序运行的地址是不确定的。

  2. 使用虚拟内存的好处

    (1)扩大地址空间。每个进程独占一个4G空间,虽然真实物理内存没那么多。

    (2)内存保护:防止不同进程对物理内存的争夺和践踏,可以对特定内存地址提供写保护,防止恶意篡改。

    (3)可以实现内存共享,方便进程通信。

    (4)可以避免内存碎片,虽然物理内存可能不连续,但映射到虚拟内存上可以连续。

  3. 使用虚拟内存的缺点

    (1)虚拟内存需要额外构建数据结构,占用空间。

    (2)虚拟地址到物理地址的转换,增加了执行时间。

    (3)页面换入换出耗时。

    (4)一页如果只有一部分数据,浪费内存。


2. CPU拿到地址后取得数据的过程?

CPU的运行原理就是:控制单元在时序脉冲的作用下,将程序计数器里所指向的指令地址送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后CPU把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,最后命令运算单元对数据进行处理加工。这个过程不断重复,直到程序结束。


3. CPU存储器类型

存储器类型 简介 作用
ROM 只读存储器(Read-Only Memory) 是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。
RAM 随机存取存储器(random access memory)又称作“随机存储器” 是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快。
SRAM 静态随机存取存储器(Static Random-Access Memory) 随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。然而,当电力供应停止时,SRAM储存的数据还是会消失。
DRAM 动态随机存取存储器(DRAM) DRAM里面所储存的数据就需要周期性地更新。要刷新充电一次,否则内部的数据即会消失。
EPROM (Erasable Programmable ROM),可擦除可编程ROM 芯片通过紫外线可重复擦除和写入,解决了PROM芯片只能写入一次的弊端。EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线照射而使资料受损。使用并不方便。
PSRAM 全称Pseudo static random access memory。指的是伪静态随机存储器。 内部的内存颗粒跟SDRAM的颗粒相似,但外部的接口跟SDRAM不同,不需要SDRAM那样复杂的控制器和刷新机制,PSRAM的接口跟SRAM的接口是一样的。PSRAM 内部自带刷新机制。
EEPROM (electrically erasable, programmable, read-only )是一种电可擦除可编程只读存储器 其内容在掉电的时候也不会丢失。在平常情况下,EEPROM与EPROM一样是只读的,需要写入时,在指定的引脚加 上一个高电压即可写入或擦除,而且其擦除的速度极快
Flash - 它的主要特点是在不加电的情况下能长期保持存储的信息。就其本质而言,Flash Memory属于EEPROM(电擦除可编程只读存储器)类型。它既有ROM的特点,又有很高的存取速度,而且易于擦除和重写,功耗很小。
NOR Flash - NOR Flash的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NOR Flash的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NAND Flash - NAND Flash结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND Flash的困难在于flash的管理需要特殊的系统接口。

4. 缓存的作用介绍下

高速缓存,多由硬件控制。操作系统一直在使用缓存,例如多数操作系统在缓存中保留频繁使用的文件(的一部分),以避免从磁盘中重复地调取这些文件。这样主要就是为了提升访问的速度,从而带来性能上的提升。


5. 逻辑地址包含哪些信息

段起始地址+段内偏移地址


6. 输入域名到获取页面的过程

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  5. 释放 TCP连接;
  6. 浏览器解析html代码,并请求html代码中的资源,最后对页面进行渲染呈现给用户。

7. TCP怎么连接的

三次握手

  1. Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,等待Server确认。
  2. Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置1,ack=J+1,随机产生一个值seq=K,并将该数据包发给Client以确认连接请求。
  3. Client收到确认后,检测ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server。完成三次握手,随后Client与Server之间可以开始传输数据了。

8. 为什么要三次,两次会带来什么问题

不能两次

假如只进行两次握手,客户端发送连接请求后,会等待服务器端的应答。但是会出现的问题是,假如客户端的SYN迟迟没有到达服务器端,此时客户端超时后,会重新发送一次连接,假如重发的这次服务器端收到了,且应答客户端了,连接建立了。

但是建立后,第一个SYN也到达服务端了,这时服务端会认为这是一个新连接,会再给客户端发送一个ACK,这个ACK当然会被客户端丢弃。但是此时服务器端已经为这个连接分配资源了,而且服务器端会一直维持着这个资源,会造成资源浪费。

两次握手的问题在于服务器端不知道SYN的有效性,所以如果是三次握手,服务器端会等待客户端的第三次握手,如果第三次握手迟迟不来,服务器端就会释放相关资源




以上所有题的答案其实都来源于我的博客面经,欢迎大家围观:https://blog.nowcoder.net/jiangwenbo