- HTML(HyperText Markup Language,超文本标记语言)不是一种编程语言,而是一种标记语言(Markup Language)。
- 是的,CSS 的 float 属性最初的设计目的是实现文字环绕图片的排版效果,
📋 HTTP请求方法总览
| 方法 | 描述 | 幂等性 | 安全性 |
|---|---|---|---|
| GET | 请求获取指定资源 | ✅ 是 | ✅ 是 |
| POST | 向指定资源提交数据进行处理 | ❌ 否 | ❌ 否 |
| PUT | 替换指定资源的所有当前表示 | ✅ 是 | ❌ 否 |
| PATCH | 对资源进行部分修改 | ❌ 否 | ❌ 否 |
| DELETE | 删除指定资源 | ✅ 是 | ❌ 否 |
| HEAD | 获取资源的头部信息 | ✅ 是 | ✅ 是 |
| OPTIONS | 获取服务器支持的HTTP方法 | ✅ 是 | ✅ 是 |
| TRACE | 回显服务器收到的请求 | ✅ 是 | ✅ 是 |
| CONNECT | 建立隧道连接 | ✅ 是 | ❌ 否 |
VUE2 响应式
原因:Vue 2 无法检测到通过数组索引直接设置值的变化。
Vue 2 使用 Object.defineProperty 来劫持数组的方法,但无法劫持数组索引操作。
Vue 2 无法检测到对象新属性的添加。
由于 Vue 2 在初始化时对已有属性进行响应式处理,新增的属性没有 getter/setter。
🎯 Vue 2 响应式原理要点
数组的响应式限制
Vue 2 无法检测以下数组变动:
- 通过索引直接设置项:
items[index] = newValue - 修改数组长度:
items.length = newLength
对象的响应式限制
Vue 2 无法检测以下对象变动:
- 添加新属性:
obj.newProperty = value - 删除属性:
delete obj.property
解决方案
- 使用
Vue.set()或this.$set() - 使用数组的变异方法
- 对于对象,使用新对象替换旧对象
✅ 响应式的操作
B. this.items.push(newItem) ✅
原因:Vue 2 重写了数组的变异方法(push、pop、shift、unshift、splice、sort、reverse),这些方法能够触发视图更新。
n = 1000 个元素时:
冒泡排序: O(n²) = 1,000,000 次操作
快速排序: O(n log n) ≈ 10,000 次操作
归并排序: O(n log n) ≈ 10,000 次操作
二分查找: O(log n) ≈ 10 次操作
A. 混合使用对称和非对称加密 ✅
正确原因:HTTPS 确实采用了混合加密机制:
- 非对称加密:用于密钥交换和身份验证(使用公钥/私钥)
-
对称加密:用于实际数据传输(使用会话密钥)
这种组合既保证了安全性又提高了性能。
B. 端口号是443 ✅
正确原因:HTTPS 的标准端口确实是 443,而 HTTP 使用的是 80 端口。
D. SSL证书用于验证服务器身份 ✅
正确原因:SSL/TLS 证书由可信的证书颁发机构(CA)签发,用于:
- 验证服务器的真实身份
- 建立客户端对服务器的信任
- 防止域名欺骗和钓鱼攻击
C. 可以完全防止中间人攻击 ❌
错误原因:虽然 HTTPS 大大增强了安全性,但不能完全防止所有中间人攻击:
证书伪造或被盗
客户端忽略证书警告
某些降级攻击
恶意证书颁发机构
HTTPS 显著提高了攻击难度,但不是绝对免疫。Vue.js 的核心库主要关注视图层
vue中用于响应式更新视图的核心功能是 A?A虚拟DOM B数据双向绑定C 组件系统
📊 主要区别总结
| 特性 | var |
let |
|---|---|---|
| 作用域 | 函数作用域 | 块级作用域 |
| 变量提升 | 提升且初始化为undefined
|
提升但不初始化(暂时性死区) |
| 重复声明 | 允许 | 不允许 |
| 全局声明 | 成为全局对象的属性 | 不在全局对象上 |
| 循环中的表现 | 有问题(共享变量) | 正常(每次迭代新变量) |
✅ 总结
| 情景 | 推荐使用 |
|---|---|
| 需要改变的变量 | let |
| 不需要改变的常量 | const |
| 旧代码维护 |
var(仅限遗留系统) |
| 新项目开发 | 避免使用 var
|
主要建议:
- 默认使用
const - 需要重新赋值时使用
let -
避免使用
var(除非维护旧代码)
单选题 vue3的 A.逻辑关注点分离 B.更好的typescript支持 C.更简单的组件通信 D.更小的打包体积
一、三次握手的核心流程
-
第一次握手(SYN)
-
客户端 → 服务器:发送
SYN=1(同步序列号)、随机生成seq=x(初始序列号)。 - 作用:客户端告知服务器自己的初始序列号,并请求建立连接。
-
状态变化:客户端进入
SYN_SENT状态,服务器进入SYN_RECV状态。
-
客户端 → 服务器:发送
-
第二次握手(SYN + ACK)
-
服务器 → 客户端:回复
SYN=1、ACK=1(确认号)、ack=x+1(确认客户端的序列号)、随机生成seq=y(服务器的初始序列号)。 - 作用:服务器确认客户端的请求,并告知自己的初始序列号。
-
状态变化:客户端和服务器均保持
SYN_RECV和ESTABLISHED过渡状态。
-
服务器 → 客户端:回复
-
第三次握手(ACK)
-
客户端 → 服务器:发送
ACK=1、ack=y+1(确认服务器的序列号)、seq=x+1(客户端序列号递增)。 - 作用:客户端确认服务器的响应,连接正式建立。
-
状态变化:双方进入
ESTABLISHED状态,可开始传输数据。
-
客户端 → 服务器:发送
三、关键字段解析
| 字段 | 作用 |
|---|---|
SYN |
同步序列号,表示请求建立连接(仅第一次和第二次握手有效)。 |
ACK |
确认号,表示响应已收到(第二次和第三次握手必须为 1)。 |
seq |
发送方的序列号,用于数据排序和去重。 |
ack |
确认号,值为 对方序列号 + 1,表示“已收到对方序列号为 ack-1 的数据”。 |
总结
- 三次握手是 TCP 可靠性的基石,通过同步序列号和确认机制,确保双方具备双向通信能力。
- 核心目的:防止历史连接干扰、同步初始序列号、合理分配资源。
- 对比:与 UDP 的无连接特性形成鲜明对比,TCP 更适合需要可靠传输的场景。