计算机导论

1、存储单位

  • 位(bit):一个二进制数 0 或 1,法定单位符号 b
  • 字节(byte):bit x 8,一个英文字母 1 字节,一个汉字 2 字节,法定单位 B
  • 千字节(KB): 1KB = 1024B

2、简述冯·诺依曼体系结构的基本内容

  • 1、计算机由运算器、存储器、控制器和输入、输出五大部件组成;
  • 2、指令和数据都用二进制代码表示;
  • 3、指令和数据都以同等地位存放在存储器内,并可按地址寻访;

3、根据功能的不同,系统总线可以分为: 数据总线、地址总线、控制总线

总线是PC中数据传输或交换的通道。

4、十六进制:0x123abc 使用 0x 开头表示十六进制

5、utf-8编码

  • 字母:1字节;
  • 常用汉字:3字节;

6、TCP/IP 协议

  • 物理层、数据链路层、网络层、传输层、应用层

  • 应用层: 将要传输的信息转为数据流,可以实现多种网络应用,如web服务、文件传输、电子邮件等。

  • 传输层:TCP 协议工作在传输层,将应用层提供的数据流分段(段头+数据),段头包含该数据由哪个程序发出、使用什么协议等控制信息,对网络中传输的数据提供必要的传输质量保障。

  • 网络层:IP 协议工作在网络层,将传输层提供的数据段包装成数据包(网络头+数据段),网络头包含源IP、目标IP、使用什么协议等控制信息,不同网络之间以统一的数据分组格式传递数据信息和控制信息 。

  • 数据链路层:将数据封装成数据帧(帧头+数据包),帧头包含源MAC地址、目标MAC地址、使用什么协议等控制信息。

  • 物理层:数据帧传输到物理层形成比特流。

7、TCP 协议和 UDP 协议

  • TCP协议对所接收到的IP数据包通过差错校验、确认重传及流量控制等机制实现可靠的数据传输;
  • UDP协议不能提供可靠传输,只是一种基本的网络传输服务;

8、对称加密和非对称加密

  • 对称加密:文件加密和解密使用相同的密钥;
  • 非对称加密:需要公钥和私钥,用公钥对数据进行加密,必须使用对应的私钥才能解密;如果使用私钥对数据进行加密,必须使用对应的公钥进行解密;
  • 非对称加密模型:发送方在发送数据时,使用公钥进行加密,接收方收到密文,使用私钥进行解密;

9、TCP 三次握手、四次挥手

  • 握手阶段:
    • 1、客户端向服务端发送一段 TCP 报文,请求连接;
    • 2、服务端在确认连接有效时,返回一段 TCP 报文,表示能正常接收客户端消息并同意创建连接;
    • 3、客户端收到来自服务端的确认TCP报文之后,再次向服务端发送报文,表示可以正常接收服务端的响应信息,并正式建立连接;
  • 挥手阶段:
    • 1、客户端向服务端发送TCP报文,表示准备释放连接,处于半关闭状态;
    • 2、服务器向客户端发送 TCP 报文,表示已收到准备释放连接的消息;
    • 3、数据发送完毕后,服务端再次发送TCP报文;
    • 4、客户端收到确认数据完全发送的报文之后,发送 TCP报文确认连接关闭;

10、HTTP2

优点:

  • 突破 TCP 连接数量限制;
  • 多路复用:一个连接上有多个 stream,并且响应时不会阻塞;
  • 头部压缩:通过算法压缩头部数据,重复数据不发送,减少传输量;
  • 二进制格式:取代了 HTTP1.x 的文本格式,二进制格式解析更高效;
  • 服务端推送;

在 HTTP/2 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。

缺点:

  • HTTP2 出现丢包时,整个 TCP 都要等待重传,那么就会阻塞该 TCP 连接中的所有请求;
  • 多路复用导致服务器压力上升;
  • 不适合资源合并(雪碧图) 的场景,直接加载小文件即可,合并还会造成资源浪费的情况;

11、浏览器中的缓存策略、http 的缓存策略(Cache-Control)

  • 浏览器缓存策略仅针对 get 请求;
  • 通常 HTTP 缓存策略分为两种:强缓存和协商缓存;
  • 强缓存不会向服务器发送请求,直接从缓存中读取资源;
  • 协商缓存会先向服务器发送一个请求,服务器会根据这个请求的 request header 的一些参数来判断是否命中协商缓存,如果命中,则返回 304 状态码并带上新的 response header 通知浏览器从缓存中读取资源;
  • HTTP/1.0 提出缓存概念,即强缓存 Expires 和协商缓存 Last-Modified。后 HTTP/1.1 又有了更好的方案,即强缓存 Cache-Control 和协商缓存 ETag

12、浏览器从输入地址到打开页面的过程

  • 1、用户在浏览器中输入url地址;
  • 2、如果是域名访问,通过 DNS 服务器解析域名,得到 ip 地址;
  • 3、TCP三次握手建立客户端和服务器的连接;
  • 4、客户端发送HTTP请求获取服务器端的静态资源,如果是 https 请求,那么需要进行 TSL 连接;
  • 5、服务器响应静态资源请求;
  • 6、浏览器解析文档资源并渲染页面;
    • (1)解析html资源,构建DOM Tree
    • (2)解析css资源,构建CSS Tree
    • (3)DOM Tree和CSS Tree 结合生成Render Tree,计算每个元素的位置,这个过程就是回流
    • (4)调用操作系统Native GUI的绘制
    • (5)页面绘制完成

13、什么是 AST 抽象语法树?

  • 是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。抽象语法树并不依赖于源语言的语法抽象语法树在很多领域有广泛的应用,比如浏览器,智能编辑器,编译器等,代码压缩、css预处理器、elint、pretiier等功能的实现。

  • esprima 可以将字符串转为js抽象语法树。

  • estraverse 可以遍历更新抽象语法树,做一些自定义调整。

  • escodegen 可以将抽象语法树转为代码字符串。

14、如何减少回流和重绘?

尽量在一个 dom 操作中完成属性修改,比如 vDOM 。

15、TLS/SSL 连接过程

HTTPS 连接过程需要在正式收发数据前建立 TLS 连接,确保安全性。TLS 建立在 HTTP 之下 TCP 之上,在连接中要完成秘钥交换加密及认证。TLS1.0 约等于 SSL3.0,是 SSL 标准化的产物。

16、ArrayBuffer 和 Float32Array 、Uint8Array 的区别?

  • ArrayBuffer 用于在内存中分配特定数量的字节空间;
  • Float32Array 是一个固定长度,用来存储浮点类型数据的数组; 每个元素是 32 位,4 个字节;
  • Uint8Array 表示一个8位无符号整型数组; 每个元素是 8 位,1 个字节;
const aa = new ArrayBuffer(256) // aa 为 256 个字节空间的数据
const bb = new Float32Array(aa)  // [0,0,...]  bb.length = 64
const cc = new Uint8Array(aa)  // [0,0,...]  cc.length = 256

17、内存溢出和内存泄漏的区别?

  • 内存溢出指没有足够的内存;
  • 内存泄漏指使用过内存后无法释放;