实习要求的基础知识点

0 阅读7分钟

一、HTTP 的完整流程(从输入网址到页面显示)

HTTP(超文本传输协议)是浏览器和服务器之间沟通的 “语言”,整个流程就像你去餐厅点餐,我拆成 8 个核心步骤,新手也能看懂:

1. 核心流程(以访问www.baidu.com为例)

表格

步骤具体操作生活化类比
1. 输入网址并回车你在浏览器输入www.baidu.com并按回车你走进餐厅,告诉服务员 “我要点宫保鸡丁”
2. DNS 解析浏览器把域名www.baidu.com转换成服务器的 IP 地址(比如14.215.177.38服务员查菜单,确认 “宫保鸡丁” 对应的后厨窗口编号
3. 建立 TCP 连接浏览器和百度服务器通过 “三次握手” 建立可靠的网络连接你和服务员确认 “我要下单,你能听到吗?”“能听到,我准备好记录了”“好的,那我开始说”
4. 发送 HTTP 请求浏览器向服务器发送请求(包含:请求方法 GET、请求路径 /、浏览器信息等)你把 “宫保鸡丁、微辣、少放花生” 的需求告诉服务员
5. 服务器处理请求百度服务器接收到请求,查询数据、生成响应内容(HTML 页面)后厨根据你的需求准备宫保鸡丁
6. 服务器返回 HTTP 响应服务器向浏览器返回响应(包含:状态码 200(成功)、响应头(内容类型、长度)、响应体(HTML 代码))服务员把做好的宫保鸡丁端给你
7. 关闭 TCP 连接数据传输完成后,通过 “四次挥手” 关闭连接(HTTP/1.1 默认长连接,可复用)你吃完后,服务员确认 “是否还要加菜?”“不用了”,结束服务
8. 浏览器渲染页面浏览器解析 HTML/CSS/JS,渲染出百度首页你开始吃宫保鸡丁,体验菜品(页面)

2. 关键补充

  • 状态码:服务器返回的 “结果提示”,比如 200 = 成功、404 = 页面不存在、500 = 服务器内部错误。
  • 请求方法:最常用 GET(获取数据,比如查百度)、POST(提交数据,比如登录、注册)。
  • HTTP 是无状态的:服务器不会记住你的上一次请求(比如你第一次访问百度和第二次访问,服务器默认不知道是同一个人),这也是 Cookie/Token 存在的原因。

二、数据库的索引是什么

数据库索引就像书籍的 “目录”,核心是加速查询,同时也要理解它的代价。

1. 核心定义

索引是数据库表中一列 / 多列的值构建的特殊数据结构(比如 B + 树、哈希表),它记录了数据的 “位置信息”,让数据库不用遍历整张表,就能快速找到目标数据。

2. 生活化例子

假设你有一本 1000 页的《新华字典》,想找 “程” 字:

  • 无索引(全表扫描) :从第 1 页翻到 1000 页,直到找到 “程” 字,效率极低。
  • 有索引(目录) :先看字典的拼音目录,找到 “cheng” 对应的页码(比如 300 页),直接翻到 300 页,瞬间找到,这就是索引的作用。

3. 核心要点

(1)索引的好处

  • 极大提升查询速度SELECT语句):比如百万行的表,无索引查一条数据可能要 1 秒,有索引只要 0.001 秒。
  • 辅助排序 / 分组:索引本身是有序的,用索引排序不用额外计算。

(2)索引的代价

  • 占用额外存储空间:索引是独立的数据结构,会消耗磁盘空间(比如字典的目录页也要占页数)。
  • 降低增删改速度(INSERT/UPDATE/DELETE):修改数据时,不仅要改表数据,还要同步更新索引(比如字典里加了新字,目录也要改)。

(3)新手必知的索引类型

  • 主键索引:默认创建(比如id主键),唯一且非空,加速主键查询。
  • 普通索引:最常用,比如给username建索引,加速按用户名查询。
  • 唯一索引:值必须唯一(比如phone手机号),既加速查询,又保证数据唯一性。
  • 联合索引:多列组合的索引(比如(user_id, order_time)),适合多条件查询。

4. 实用建议

  • 不要给所有列建索引:只给经常作为查询条件的列建(比如WHERE里的列)。
  • 小表(几百行)没必要建索引:全表扫描比查索引更快。

三、缓存为什么能够加速

缓存(Cache)的核心是 “把常用数据放在离使用者更近、访问更快的地方” ,本质是用空间换时间,我从 “为什么快” 和 “怎么用” 两方面讲:

1. 核心原理(先懂 “速度层级”)

计算机 / 网络中,不同存储 / 传输介质的速度天差地别,缓存就是把数据从 “慢介质” 搬到 “快介质”:

存储 / 传输类型速度举例
内存(RAM)极快(纳秒级)服务器的内存缓存(Redis)
磁盘(硬盘)慢(毫秒级)数据库存在磁盘里
网络传输很慢(秒级)从远程服务器取数据

2. 生活化例子

你每天上班都要喝一杯咖啡:

  • 无缓存:每次想喝咖啡,都要跑 1 公里去便利店买(对应:每次查数据都去数据库 / 远程服务器取,慢)。
  • 有缓存:你提前买了 10 包咖啡放在办公桌抽屉里(对应:把常用数据存在内存缓存里),想喝的时候直接拿,不用跑远路,速度大幅提升。

3. 缓存加速的具体场景

(1)后端缓存(最常用)

比如电商网站的商品详情:

  • 用户第一次访问商品页:服务器从数据库查商品数据,返回给用户,同时把数据存到 Redis(内存缓存)里。
  • 后续用户访问同一商品页:服务器直接从 Redis 取数据,不用查数据库,响应速度从几十毫秒降到 1 毫秒内。

(2)前端缓存

比如浏览器缓存:

  • 你第一次访问某网站,浏览器下载图片、CSS 文件。
  • 再次访问时,浏览器直接从本地缓存取这些文件,不用重新下载,页面加载更快。

(3)CDN 缓存

比如视频网站的视频资源:

  • 视频文件原本存在北京的服务器,广州用户访问要跨网络传输,卡慢。
  • CDN 把视频缓存到广州的节点服务器,广州用户直接从本地节点取视频,速度大幅提升。

4. 缓存的注意事项

  • 缓存失效:数据更新后,要及时更新缓存(比如商品价格改了,要同步 Redis 里的价格),否则用户会看到旧数据。
  • 缓存穿透:查询不存在的数据(比如查 id=-1 的商品),缓存里没有,每次都查数据库,可能压垮数据库。
  • 缓存雪崩:大量缓存同时过期,所有请求都打到数据库,导致数据库崩溃。

总结

  1. HTTP 流程:核心是 “域名解析→建立连接→发请求→服务器处理→返回响应→渲染页面”,本质是浏览器和服务器的标准化沟通流程。
  2. 数据库索引:像书籍目录,通过特殊数据结构加速查询,但会占用空间、降低增删改速度,需按需创建。
  3. 缓存加速:核心是 “把常用数据放到更快的存储介质(内存)/ 更近的位置”,用空间换时间,是提升系统性能的核心手段。

这三个知识点都是后端 / 全栈开发的基础,尤其是缓存 + 索引,是优化系统性能的两大核心方向。如果想深入某一个点(比如 Redis 缓存的具体用法、索引的创建实操),可以告诉我,我再细化讲解。