计算机网络核心知识点全解析(面试通关版)
一、网络体系结构:从OSI到TCP/IP的分层设计
1.1 七层模型与四层模型对比
OSI七层模型 | 核心功能 | TCP/IP四层对应 | 典型协议 | 生活类比 |
---|---|---|---|---|
应用层 | 为应用程序提供服务(如文件传输、邮件、Web浏览) | 应用层 | HTTP、FTP、SMTP、DNS | 快递面单信息(收件人、地址填写) |
表示层 | 数据格式转换(如JSON/XML解析)、加密(如SSL/TLS)、压缩 | 应用层 | - | 包裹打包(将物品转换为标准格式) |
会话层 | 建立/管理通信连接(如断点续传、会话保持) | 应用层 | - | 快递员与收件人电话确认配送流程 |
传输层 | 端到端可靠(TCP)或不可靠(UDP)传输,实现流量控制与差错校验 | 传输层 | TCP、UDP | 快递运输方式(普快/特快选择) |
网络层 | 网络寻址与路由选择(IP寻址、分组转发) | 网络层 | IP、ICMP、OSPF、BGP | 导航系统规划运输路线(高速/省道) |
数据链路层 | 相邻节点间帧传输,实现硬件地址(MAC)寻址与差错检测 | 链路层 | ARP、PPP、Ethernet | 十字路口交通规则(车道选择/纠错) |
物理层 | 二进制比特流传输(电压/光信号转换),定义物理接口标准 | 物理层 | Ethernet、WiFi、光纤 | 实际道路(高速公路/小巷等介质) |
1.2 设计理念差异
- OSI:理论导向,严格分层(适合教学),但协议复杂、实现困难。
- TCP/IP:务实导向,合并表示层/会话层功能到应用层,聚焦效率(如HTTP直接处理数据格式)。
二、传输层核心:TCP与UDP的深度对比
2.1 TCP三次握手:可靠连接的建立
状态转换与报文交互
客户端:CLOSED → SYN_SEND(第一次:SYN=1, seq=x) → ESTABLISHED(第三次:ACK=1, ack=y+1, seq=x+1) 服务器:CLOSED → LISTEN → SYN_RCVD(第二次:SYN=1, ACK=1, seq=y, ack=x+1) → ESTABLISHED
关键细节
- 防历史连接:首次握手SYN报文不携带数据,但消耗1个序号,避免旧连接重复初始化。
- SYN Flood攻击:
- 原理:恶意发送大量SYN报文后断开,耗尽服务器SYN队列(默认存储5次重试,耗时63秒)。
- 防御:Linux启用
TCP Syncookies
,通过源地址+端口+时间戳生成无状态ACK,无需维护半连接表。
2.2 TCP四次挥手:连接的安全释放
状态转换与报文交互
客户端:ESTABLISHED → FIN_WAIT_1(第一次:FIN=1, seq=u) → FIN_WAIT_2(第二次:ACK=1, ack=u+1) → TIME_WAIT(第四次:ACK=1, ack=w+1) → CLOSED 服务器:ESTABLISHED → CLOSE_WAIT(第二次) → LAST_ACK(第三次:FIN=1, seq=w) → CLOSED
核心机制
- TIME_WAIT存在原因:
- 等待
2×MSL
(最长报文段寿命,Linux默认30秒),确保被动关闭方重传的FIN能被接收。 - 避免新旧连接混淆:防止延迟的旧报文段被误认为新连接数据。
- 等待
- CLOSE_WAIT排查:服务器未调用
close()
释放连接,常见于IO流未关闭或线程池资源泄漏。
2.3 滑动窗口:流量控制的核心
窗口机制
- 发送窗口:大小由接收方通告窗口(
rwnd
)和拥塞窗口(cwnd
)决定(取最小值),表示“允许发送但未确认”的数据范围。 - 接收窗口:接收方根据缓冲区剩余空间动态调整,通过ACK的
Window Field
告知发送方。 - 零窗口通知:接收方忙时发送
Window=0
暂停传输,后续通过窗口探测报文
恢复(每60秒一次)。
2.4 拥塞控制:四阶段算法详解
阶段 | cwnd增长方式 | 触发条件 | 核心逻辑 |
---|---|---|---|
慢启动 | 指数增长(初始1 MSS,每RTT翻倍) | 初始连接或超时恢复 | 快速探测网络容量,超过阈值(ssthresh)后进入拥塞避免。 |
拥塞避免 | 线性增长(每RTT+1 MSS) | 达到ssthresh | 避免突发流量拥塞,稳定提升吞吐量。 |
快速重传 | 立即重传3次重复ACK对应的报文 | 收到3个重复ACK | 无需等待超时,直接重传丢失报文,减少延迟(比超时重传快约1个RTT)。 |
快速恢复 | cwnd = ssthresh + 3 MSS | 快速重传后 | 假设3个ACK代表3个报文已接收,直接进入拥塞避免,维持较高传输速率。 |
2.5 TCP vs UDP:协议特性对比
特性 | TCP(面向连接) | UDP(无连接) |
---|---|---|
可靠性 | 可靠(确认重传、流量控制) | 不可靠(尽力而为,无重传) |
有序性 | 保证顺序(序列号+排序重组) | 无序(接收顺序可能乱序) |
数据单位 | 字节流(无边界,按需拆分) | 数据报(保留应用层报文边界) |
首部开销 | 20字节(固定首部) | 8字节(仅端口+长度+校验) |
典型场景 | HTTP文件传输、邮件(可靠优先) | DNS查询、视频直播(低延迟优先) |
2.6 TCP流量控制:滑动窗口的进阶细节
1. 窗口类型与调整策略
-
接收窗口(rwnd):
- 由接收方决定,通过ACK报文的
Window Field
动态通告(16位字段,默认最大65535字节,可通过TCP Window Scale
选项扩展至1GB)。 - 示例:若接收方缓冲区剩余1MB,则通告
Window=1048576
,允许发送方发送最多1MB未确认数据。
- 由接收方决定,通过ACK报文的
-
拥塞窗口(cwnd):
- 由发送方维护,初始值为1 MSS(约1460字节),通过慢启动、拥塞避免算法动态调整。
- 有效窗口:
Effective Window = min(rwnd, cwnd)
,实际可发送的数据量受两者限制。
2. 零窗口与窗口探测
- 零窗口场景:接收方缓冲区满时发送
Window=0
,发送方停止发送数据,进入TCP_KEEPALIVE
状态。 - 窗口探测机制:
- 发送方每60秒发送一个1字节的探测报文(仅含
ACK
标志),触发接收方重新通告窗口大小。 - 若连续3次探测未收到响应,判定连接失效,触发RST重置。
- 发送方每60秒发送一个1字节的探测报文(仅含
3. Nagle算法与延迟ACK
-
Nagle算法:
- 目的:减少小报文段(如1字节数据)的传输,合并成更大的报文段(默认启用)。
- 规则:发送方在收到前一个报文段的ACK前,缓存后续小数据;仅当数据达到MSS或收到ACK时发送。
- 适用场景:交互式应用(如SSH)可能关闭Nagle算法(通过
TCP_NODELAY
选项),避免延迟。
-
延迟ACK:
- 接收方不立即回复ACK,而是等待200ms或收到第二个报文段后再确认,减少ACK数量。
- 与Nagle算法配合:接收方延迟ACK时,发送方可能积累更多数据,提高传输效率。
2.7 UDP的进阶应用:QUIC协议深度解析
1. QUIC核心特性对比TCP/UDP
特性 | TCP | UDP | QUIC |
---|---|---|---|
连接建立 | 3次握手+TLS 2-RTT | 无连接 | TLS 1-RTT(首次)/0-RTT(会话恢复) |
队头阻塞 | 存在(传输层) | 无(但应用层需处理乱序) | 消除(单个流独立,流内有序,流间并行) |
拥塞控制 | 慢启动/拥塞避免 | 无 | 集成TCP优秀算法(如CUBIC),动态调整更灵活 |
可靠性 | 强可靠 | 无 | 可选可靠(基于流的ACK/重传) |
连接迁移 | 依赖IP(更换网络需重连) | 无 | 基于Connection ID(跨网络保持会话) |
2. QUIC的流模型
- 单向流(Unidirectional Stream):只能由发起方发送数据(如客户端→服务器的请求流)。
- 双向流(Bidirectional Stream):双方均可发送数据(如服务器→客户端的响应流)。
- 流优先级:通过流权重动态调整资源分配,确保关键资源(如HTML)优先传输。
三、应用层协议:HTTP/HTTPS的深度解析
3.1 HTTP报文结构:请求与响应
请求报文示例
GET /api/user?name=test HTTP/1.1 # 请求行:方法+URL+版本
Host: www.example.com # 请求头:主机地址
User-Agent: curl/7.68.0 # 客户端信息
Connection: keep-alive # 长连接配置 (空行)
请求正文(GET无正文,POST包含JSON/表单数据)
响应报文示例
HTTP/1.1 200 OK # 状态行:版本+状态码+描述
Content-Type: application/json; charset=utf-8 # 响应头:内容类型
Content-Length: 128 # 正文长度 (空行)
{"code": 200, "message": "OK"} # 响应正文(JSON格式)
3.2 GET vs POST:核心区别
维度 | GET | POST |
---|---|---|
数据位置 | URL参数(明文,可见于地址栏) | 请求体(可加密,如JSON) |
幂等性 | 幂等(多次请求结果一致) | 非幂等(可能修改资源状态) |
安全性 | 低(参数易被劫持) | 高(适合提交密码等敏感数据) |
长度限制 | 受限于浏览器URL长度(如IE 2083字节) | 理论无限制(受服务器配置影响) |
典型场景 | 查询资源(如获取用户列表) | 创建/更新资源(如提交订单) |
3.3 HTTP版本演进:从1.1到3.0
HTTP/1.1:长连接与管线化
- 长连接:默认
Connection: keep-alive
,多个请求复用TCP连接,减少三次握手开销。 - 管线化:客户端可连续发送多个请求,无需等待前一个响应(但服务器需按顺序处理,仍存在队头阻塞)。
HTTP/2:二进制分帧与多路复用
- 二进制分帧:将请求/响应分解为二进制帧(如
HEADERS帧
、DATA帧
),解析更快且支持并行传输。 - 多路复用:单个TCP连接中并发传输多个请求/响应,通过流ID(Stream ID)区分,彻底解决队头阻塞。
- 头部压缩:使用HPACK算法,缓存常用头部(静态/动态字典),平均减少50%-90%的头部开销。
HTTP/3(QUIC):基于UDP的革命性升级
- 核心优势:
- 基于UDP:绕过TCP层队头阻塞,单个流丢包不影响其他流。
- 加密先行:TLS握手与连接建立合并为1-RTT(HTTPS需2-RTT),首次连接更快。
- 连接迁移:切换网络(如Wi-Fi→4G)时,通过连接ID保持会话,无需重新握手。
3.4 HTTPS:安全通信的实现
TLS握手流程
- 客户端Hello:发送支持的加密算法(如TLS 1.3)和随机数
Client Random
。 - 服务器Hello:选择加密算法,返回数字证书(含公钥)、随机数
Server Random
。 - 客户端验证:
- 证书有效性(CA签名、域名匹配、未过期)。
- 生成预主密钥(用服务器公钥加密后发送)。
- 密钥协商:双方通过
Client Random
+Server Random
+预主密钥生成对称密钥(用于数据加密)。 - 安全通信:使用AES-GCM等对称算法加密数据,通过SHA-256校验完整性。
加密算法分类
类型 | 算法示例 | 作用 |
---|---|---|
非对称加密 | RSA、ECDSA | 交换对称密钥(公钥加密,私钥解密) |
对称加密 | AES-256-GCM、ChaCha20 | 数据加密(高效,单密钥) |
摘要算法 | SHA-256、SHA-384 | 生成数据指纹(防篡改) |
3.5 HTTP缓存机制:强缓存与协商缓存
1. 强缓存(本地缓存直接生效)
- 控制字段:
Cache-Control: max-age=604800
(资源有效期7天)。Expires: Thu, 31 Dec 2025 23:59:59 GMT
(绝对过期时间,优先级低于max-age
)。
- 流程:客户端检查缓存有效期,未过期则直接使用本地缓存,无需发送请求。
2. 协商缓存(服务器验证缓存有效性)
- 验证字段:
Last-Modified
/If-Modified-Since
:比较资源最后修改时间(精度秒级)。ETag
/If-None-Match
:比较资源内容哈希(精度字节级,优先级高于Last-Modified
)。
- 流程:
- 客户端发送请求,携带
If-None-Match
(ETag值)。 - 服务器对比ETag,若一致则返回
304 Not Modified
,客户端使用缓存;否则返回200 OK
及新数据。
- 客户端发送请求,携带
3. 缓存策略对比
场景 | 强缓存 | 协商缓存 |
---|---|---|
网络请求 | 无(直接读本地) | 有(发送验证请求) |
服务器参与 | 否 | 是(验证资源是否更新) |
适用场景 | 静态资源(CSS/JS/图片) | 动态资源(用户数据页面) |
3.6 HTTPS证书体系:从申请到验证
1. 证书类型
类型 | 验证级别 | 特点 | 示例 |
---|---|---|---|
自签名证书 | 无 | 无需CA,仅用于测试环境 | 本地开发服务器 |
域名验证(DV) | 低 | 仅验证域名所有权(邮箱/文件) | 免费证书(Let’s Encrypt) |
组织验证(OV) | 中 | 验证企业资质(营业执照) | 企业官网 |
扩展验证(EV) | 高 | 严格审核,地址栏显示绿色锁 | 银行/金融机构网站 |
2. 证书验证流程
- 客户端获取证书:服务器在TLS握手阶段发送证书(.cer文件)。
- 验证证书链:
- 从客户端内置的根CA证书开始,逐级验证证书签名(根CA→中间CA→服务器证书)。
- 检查证书有效期、域名匹配(
Subject Alternative Name
字段)。
- CRL与OCSP:
- CRL(证书吊销列表):CA定期发布吊销证书列表,客户端下载对比(效率低,已逐渐淘汰)。
- OCSP(在线证书状态协议):实时查询CA服务器,确认证书是否有效(如
OCSP Stapling
技术减少延迟)。
四、网络层与链路层:底层寻址与路由
4.1 ARP协议:IP到MAC地址的映射
工作原理
- 广播请求:主机A发送ARP请求(目标IP=B的IP,目标MAC=FF:FF:FF:FF:FF:FF),询问“谁有这个IP?请告知MAC地址”。
- 单播响应:主机B收到后回复ARP响应(包含自己的MAC地址),主机A缓存到ARP表(默认有效期10-30分钟)。
- 更新机制:若B的MAC地址变化,发送免费ARP(目标IP=自己IP)强制更新全网缓存。
攻击与防御
- ARP欺骗:伪造IP-MAC映射,拦截流量(如中间人攻击)。
- 防御措施:
- 静态绑定:
arp -s 网关IP 网关MAC
(防止动态篡改)。 - 交换机启用DAI(动态ARP检测),验证ARP报文的合法性。
- 静态绑定:
4.2 路由协议:从本地到全网的路径选择
类型 | 协议 | 工作原理 | 适用场景 |
---|---|---|---|
静态路由 | 手动配置 | 管理员手工写入路由表 | 小型网络(<10节点) |
距离矢量 | RIP | 向邻居发送路由表(跳数作为度量) | 早期小型网络 |
链路状态 | OSPF | 构建全网链路图(Dijkstra算法) | 大型企业网络 |
路径矢量 | BGP | 自治系统间策略路由(AS间通信) | 互联网核心路由 |
4.3 IPv4分片机制:MTU限制与重组
1. 关键字段
- MTU(最大传输单元):数据链路层允许的最大帧大小(以太网默认1500字节)。
- MF(More Fragments):标识是否为最后一个分片(1=后续还有分片,0=最后一个)。
- Fragment Offset:分片数据在原始IP包中的偏移量(单位8字节)。
2. 分片示例
- 原始IP包:1500字节(MTU=1500),包含20字节IP头+1480字节数据。
- 若需通过MTU=1000的链路:
- 第一个分片:IP头20字节+数据980字节(MF=1,Offset=0)。
- 第二个分片:IP头20字节+数据500字节(MF=0,Offset=122.5→实际122×8=976字节,因Offset单位为8字节)。
3. 分片重组
- 仅接收方负责重组,重组超时时间约60秒(避免内存泄漏)。
- 若分片丢失,整个IP包被丢弃(无部分重组机制),需上层协议(TCP)重传。
4.4 OSPF路由协议:区域划分与LSA类型
1. 区域类型
- 骨干区域(Area 0):必须存在,连接所有非骨干区域,负责区域间路由汇总。
- Stub区域:不允许AS外部路由(Type 5 LSA),减少路由表规模(如企业内网区域)。
- NSSA区域:允许引入外部路由(Type 7 LSA),但需转换为Type 5 LSA注入骨干区域。
2. LSA类型
类型 | 名称 | 传播范围 | 作用 |
---|---|---|---|
Type 1 | 路由器LSA | 单个区域 | 描述路由器接口的IP地址和开销 |
Type 2 | 网络LSA | 单个区域 | 描述广播网络/NBMA网络的DR和成员 |
Type 3 | 汇总LSA | 区域间 | 传递区域间路由(子网信息) |
Type 5 | 外部LSA | 整个AS | 传递AS外部路由(如BGP引入的路由) |
五、基础概念与实战问题
5.1 端口vs接口:易混淆概念
- 端口(Port):
- 传输层概念(16位整数,0-65535),标识主机上的应用程序(如80→HTTP,443→HTTPS)。
- 作用:同一主机上多个应用可通过端口区分,如服务器同时提供HTTP(80)和FTP(21)服务。
- 接口(API):
- 应用层概念,指程序对外暴露的调用入口(如RESTful接口
GET /users/{id}
)。 - 关系:接口通过端口提供服务,一个端口可承载多个接口(通过URL路径区分,如
/api/v1/user
和/api/v2/user
)。
- 应用层概念,指程序对外暴露的调用入口(如RESTful接口
5.2 IPv4 vs IPv6:地址空间革命
特性 | IPv4 | IPv6 |
---|---|---|
地址长度 | 32位(4字节,约43亿地址) | 128位(16字节,地址空间2^128) |
表示方式 | 点分十进制(192.168.1.1) | 冒分十六进制(2001:db8::1) |
安全性 | 无内置加密(需IPSec) | 内置IPSec(强制加密传输) |
自动配置 | 依赖DHCP | 支持无状态自动配置(链路本地地址) |
5.3 PPP协议:拨号网络的核心
1. 组件构成
- LCP(链路控制协议):建立/配置/测试数据链路(如协商最大传输单元MTU)。
- NCP(网络控制协议):为上层协议(如IP、IPX)提供服务(如IPCP协商IP地址)。
- 认证协议:
- PAP:明文传输用户名密码(不安全,已废弃)。
- CHAP:三次握手认证,服务器发送随机挑战值,客户端用密码哈希响应(更安全)。
2. PPPoE(以太网上的PPP)
- 应用场景:ADSL拨号上网,在以太网帧中封装PPP报文。
- 阶段:
- 发现阶段:客户端广播寻找BRAS(宽带远程接入服务器),获取对方MAC地址。
- 会话阶段:建立PPP连接,传输数据(如IP数据包)。
5.4 以太网:CSMA/CD与VLAN影响
1. CSMA/CD(载波监听多路访问/冲突检测)
- 工作原理:
- 发送前监听信道,空闲则发送;若检测到冲突,发送阻塞信号后随机退避(二进制指数退避算法)。
- 退避时间:
随机数×512比特时间
(如第一次冲突后随机0或1,第二次0-3,最大退避1023次)。
- 局限性:仅适用于半双工模式,全双工模式下无需冲突检测(可同时收发)。
2. VLAN对链路层的影响
- 802.1Q标签:在以太网帧中插入4字节标签(包含VLAN ID,12位,支持4094个VLAN)。
- 跨VLAN通信:需通过三层设备(路由器/三层交换机),因为VLAN隔离了二层广播域。
六、面试高频问题深度解析
6.1 为什么TCP三次握手不能是两次?
- 核心原因:两次握手无法确认双方序列号的接收可靠性。
- 假设客户端发送旧SYN报文(序列号x1),服务器回复SYN-ACK(序列号y,确认x1+1),客户端此时若未发送第三次ACK,服务器误以为连接建立,导致资源浪费。
- 三次握手确保客户端和服务器都明确对方已收到自己的初始化序列号,避免历史连接干扰。
6.2 HTTP无状态如何实现会话管理?
- 解决方案:
- Cookie:服务器发送Cookie到客户端(如
JSESSIONID
),后续请求携带Cookie,实现状态跟踪(存在CSRF风险,需设置SameSite=Strict
)。 - Session:服务器存储会话数据(如用户登录信息),返回Session ID给客户端(通过Cookie或URL重写),分布式场景需用Redis等共享存储。
- JWT(JSON Web Token):客户端存储包含用户信息的Token,无需服务器存储,适合微服务架构(需HTTPS防止Token泄露)。
- Cookie:服务器发送Cookie到客户端(如
6.3 HTTPS真的绝对安全吗?
- 局限性:
- 证书信任链问题:若用户信任被篡改的CA证书(如中间人攻击伪造证书),仍可能泄露数据。
- HTTP劫持风险:从
http://
跳转https://
的过程中,可能被植入恶意内容(启用HSTS强制HTTPS可缓解)。 - 性能开销:加密计算增加CPU负载,首次连接延迟(TLS握手1-RTT)高于HTTP。
6.4 常用网络诊断命令
1. 端口与连接排查
- netstat -antp:显示所有TCP/UDP连接,
ESTABLISHED
为已建立连接,TIME_WAIT
为等待释放。 - ss -ltun:更高效的socket统计工具,
-l
显示监听端口,-t
TCP,-u
UDP。 - lsof -i :port:查看占用指定端口的进程(如
lsof -i :80
定位HTTP服务进程)。
2. 路由与DNS排查
- traceroute -I:使用ICMP探测路由路径(
-I
强制使用IPv4)。 - nslookup domain:手动查询DNS解析(如
nslookup www.baidu.com
查看IP映射)。 - dig +trace domain:跟踪DNS解析过程(从根域名服务器到权威服务器的查询路径)。
3. 抓包分析
- tcpdump -i eth0 ‘tcp port 80’:抓取eth0接口80端口的TCP流量。
- Wireshark过滤规则:
- 显示HTTP GET请求:
http.request.method == "GET"
- 显示TCP重传包:
tcp.flags.res == 1
(RST标志)或tcp.analysis.retransmission
- 显示HTTP GET请求:
6.5 性能优化案例
1. TCP参数调优(Linux)
- 增大接收缓冲区:
sysctl -w net.core.rmem_max=16777216
(16MB,提升大文件传输吞吐量)。 - 缩短TIME_WAIT时间:
sysctl -w net.ipv4.tcp_fin_timeout=30
(默认60秒,降低端口占用)。 - 启用TCP BBR拥塞控制:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
(适合高带宽延迟网络)。
2. HTTP/2优化
- 启用HPACK动态字典:服务器缓存客户端常用头部(如
User-Agent
、Accept-Encoding
),减少重复传输。 - 优先级配置:通过
:priority
头指定资源优先级(如HTML优先于图片),确保关键资源先加载。
七、面试问题深度拓展
7.1 深入理解TCP序列号
问:为什么TCP的序列号是按字节编号,而非按报文段编号?
答:
- 可靠性需求:按字节编号可精确标识每个数据单元,支持部分重传(如丢失中间某个字节,仅重传该字节所在的报文段)。
- 流量控制精度:滑动窗口基于字节范围(如
ack=1001
表示前1000字节已接收),比报文段编号更细粒度。 - 兼容性:适应不同MTU的链路,即使报文段被分片,仍可通过字节偏移重组数据。
7.2 HTTPS握手失败排查
问:客户端访问HTTPS网站时提示“证书不可信”,可能的原因有哪些?
答:
- 证书过期:检查证书的
Not Before
和Not After
时间。 - 域名不匹配:证书的
Common Name
或Subject Alternative Name
与访问域名不一致(如证书为www.example.com
,却访问api.example.com
)。 - 根CA缺失:客户端未安装证书链中的根CA(常见于企业自建CA场景)。
- 中间人攻击:攻击者伪造证书,拦截通信(需检查证书签名是否为可信CA)。
相关文章:
计算机网络核心知识点全解析(面试通关版)
一、网络体系结构:从OSI到TCP/IP的分层设计 1.1 七层模型与四层模型对比 OSI七层模型核心功能TCP/IP四层对应典型协议生活类比应用层为应用程序提供服务(如文件传输、邮件、Web浏览)应用层HTTP、FTP、SMTP、DNS快递面单信息(收件…...
使用 Frida 绕过 iOS 应用程序中的越狱检测
在这篇博文中,我们将介绍**Frida**,它是用于移动应用程序安全分析的真正有趣的工具之一。 我们在高级 Android 和 iOS 漏洞利用培训中也深入讲解了这一点,您可以在这里注册 -培训链接 即使您从未使用过 Frida,本文也将作为指南,帮助您进入 Frida 的世界,进行移动应用程…...

【博客系统】博客系统第一弹:博客系统项目配置、MyBatis-Plus 实现 Mapper 接口、处理项目公共模块:统一返回结果、统一异常处理
案例综合练习 - 博客系统 本节目标 从 0 到 1 完成博客系统后端项目的开发。 前言 通过前面课程的学习,我们掌握了 Spring 框架和 MyBatis 的基本使用,并完成了图书管理系统的常规功能开发。接下来我们系统地从 0 到 1 完成一个项目的开发。 项目介绍 …...
如何通过挖掘需求、SEO优化及流量变现成功出海?探索互联网产品的盈利之道
挖掘需求,优化流量,实现变现:互联网出海产品的成功之路 在当今全球化的数字时代,越来越多的企业和个人选择将业务扩展到国际市场。这一趋势不仅为企业带来了新的增长机会,也为个人提供了通过互联网产品实现盈利的途径…...
车载功能测试-车载域控/BCM控制器测试用例开发流程【用例导出方法+优先级划分原则】
目录 1 摘要2 位置灯手动控制简述2.1 位置灯手动控制需求简述2.2 位置灯手动控制逻辑交互图 3 用例导出方法以及优先级原则3.1 用例导出方法3.1.1 用例导出方法介绍3.1.2 用例导出方法关键差异分析 3.2 优先级规则3.2.1 优先级划分的核心原则3.2.2 具体等级定义与判定标准 3.3 …...

基于OpenMV+STM32+OLED与YOLOv11+PaddleOCR的嵌入式车牌识别系统开发笔记
基于OpenMV、STM32与OLED的嵌入式车牌识别系统开发笔记 基于OpenMV、STM32与OLED的嵌入式车牌识别系统开发笔记系统架构全景 一、实物演示二、OpenMV端设计要点1. 硬件配置优化2. 智能帧率控制算法3. 数据传输协议设计 三、PyTorch后端核心实现:YOLOv11与PaddleOCR的…...
MCP实战-本地MCP Server + Client实战
概述 本文开发一个MCP的Client和Server。然后通过本地模式来运行,并获取到server的结果。 MCP Server开发 import anyio import click import mcp.types as types from mcp.server.lowlevel import Server from pydantic import FileUrlSAMPLE_RESOURCES {"…...

w~嵌入式C语言~合集4
我自己的原文哦~ https://blog.51cto.com/whaosoft/13870376 一、STM32怎么选型 什么是 STM32 STM32,从字面上来理解,ST是意法半导体,M是Microelectronics的缩写,32表示32位,合起来理解,STM32就是指S…...
lightrag : from lightrag.utils import EmbeddingFunc 报错
原因: 1. 同时安装了lightrag与lightrag-hku 解决方法: 卸载原有的lightrag与lightrag-hku,只安装lightrag-hku pip install lightrag-hku...
ppt流程图怎么?ppt流程图模板大全
ppt流程图怎么?ppt流程图剪头模板,ppt流程图模板大全: ppt流程图_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...
AWS中国区ICP备案全攻略:流程、注意事项与最佳实践
导语 在中国大陆地区开展互联网业务时,所有通过域名提供服务的网站和应用必须完成ICP备案(互联网内容提供商备案)。对于选择使用AWS中国区(北京/宁夏区域)资源的用户,备案流程因云服务商的特殊运营模式而有所不同。本文将详细解析AWS中国区备案的核心规则、操作步骤及避坑…...

腾讯云服务器安全——服务防火墙端口放行
点击服务进入安全策略 添加规则...
对局匹配--stl+模拟
1.模拟,先找匹配对数,然后减 2.特殊情况,k0 3.stl容器使用,lower_bound https://www.luogu.com.cn/problem/P8656 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair&…...

K8S安全认证
一。用户认证的基本框架 在K8S集群中,客户端通常有两类: 1.User Account:一般独立于K8S之外的其他服务管理的用过户账号 2.Service Account:K8S管理的账号,用于为Pod中的服务进程在访问K8S提供身份标识 ApiServer是…...

mybatis-plus里的com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析
以下是 com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析: 1. 类的作用 MybatisMapperProxy 是 MyBatis-Plus 框架中用于实现 Mapper 接口动态代理的核心类。它继承自 MyBatis 的 MapperProxy,并扩展了以下功能: …...

在java程序中,类,进程,线程他们之间的关系以及main方法与他们之间的关系
在 Java 程序里,类、进程、线程各自有着不同的概念,同时也存在着紧密的联系,下面来详细分析它们之间的关系以及 main 方法和它们的关系。 类 类是 Java 中最基础的编程单元,是一种自定义的数据类型,它定义了对象的属…...

[ACTF2020 新生赛]BackupFile题解
启动环境 进入后只有一段话,没有其他的说法。 解题方法 但是题目命名为backup file,应该是备份文件的意思,那么就用dirsearch工具来扫一下看看。 查看扫描结果 index.php.bak 下载下这个文件,查看文件内容。 进行php代码审计…...

如何修改npm的全局安装路径?
修改 npm 的全局安装路径可以通过以下步骤完成,确保全局包(使用 -g 安装的模块)和缓存文件存储到自定义路径。以下是详细步骤: 1. 创建自定义路径的目录 在目标路径下创建两个文件夹,分别用于存储全局模块和缓存文件…...

巧用 Element - UI 实现图片上传按钮的智能隐藏
引言 在前端开发中,使用 Element - UI 组件库来构建用户界面是非常常见的操作。其中图片上传功能更是在许多项目中频繁出现,比如用户头像上传、商品图片上传等场景。有时候,我们会有这样的需求:当上传图片达到一定数量后…...
Ubuntu18.04 升级最新版本Cmake
1.升级原因 ubuntu18.04默认安装的cmake版本为 3.10.2;在编译一些软件的时候,版本太低导致无法编译 2.从cmake官网下载二进制安装包 地址:https://cmake.org/download/ 包:cmake-4.0.1-linux-x86_64.tar.gz 3.上传下载好的安装包到ubuntu…...
关于mysql的事务和索引
1. 事务四大特性(ACID) 原子性:事务的操作要么全部成功,要么全部失败回滚,不可分割。 一致性:事务执行前后,数据必须满足业务规则(如账户总额不变)。 隔离性࿱…...

从“拼凑”到“构建”:大语言模型系统设计指南!
你有没有试过在没有说明书的情况下组装宜家家具?那种手忙脚乱却又充满期待的感觉,和设计大语言模型(LLM)系统时如出一辙。如果没有一个清晰的计划,很容易陷入混乱。我曾经也一头扎进去,满心期待却又手足无措,被网上那些复杂的架构图搞得晕头转向。于是,我坐下来,把它们…...
mybatis xml中特殊字符处理
1,CDATA区: 它的全称为character data,以"<![CDATA[ "开始,以" ]]>" 结束,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封…...

【数据结构与算法】从完全二叉树到堆再到优先队列
完全二叉树 CBT 设二叉树的深度为 h , 若非最底层的其他各层的节点数都达到最大个数 , 最底层 h 的所有节点都连续集中在左侧的二叉树叫做 完全二叉树 . 特点 对任意节点 , 其右分支下的叶子节点的最底层为 L , 则其左分支下的叶子节点的最低层一定是 L 或 L 1 .完全二叉树…...
【linux】SSH 连接 WSL2 本地环境的完整步骤
SSH 连接 WSL2 本地环境的完整步骤 要在 Windows 的 WSL2 环境中启用 SSH 服务,并允许本地或局域网设备连接,需完成以下步骤: 1. 安装 openssh-server sudo apt update sudo apt install openssh-server -y2. 配置 sshd 修改配置文件 sud…...
vue项目前后端分离设计
在Vue前端架构中,通过分层结构和模块化设计实现高效的前后端分离,需要系统性规划各层职责、接口管理和数据流控制。以下是结合业界最佳实践的完整方案: 一、分层架构设计 1. 分层结构(自上而下) 层级职责示例技术实现…...

【Linux网络】构建类似XShell功能的TCP服务器
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...

Spring Boot 配置源详解(完整版)
Spring Boot 配置源详解(完整版) 一、配置源加载顺序与优先级 配置源类型优先级顺序(从高到低)对应配置类/接口是否可覆盖典型文件/来源命令行参数(--keyvalue)1(最高)SimpleComman…...
JDK 17 与 Spring Cloud Gateway 新特性实践指南
一、环境要求与版本选择 1. JDK 17 的必要性 最低版本要求:Spring Boot 3.x 及更高版本(如 3.4)强制要求 JDK 17,以支持 Java 新特性(如密封类、模式匹配)和性能优化。JDK 17 核心特性: 密封类…...
异构迁移学习(无创脑机接口中的跨脑电帽迁移学习)
本文介绍BCI中的跨脑电帽的迁移学习最新算法。 (发表于2025 arxiv,应该属于投稿阶段,这个场景具有非常不错的研究意义和前景) 最新跨脑电帽异构算法github开源代码 SDDA算法原文 一、脑机接口绪论 脑机接口(BCI)指在人或动物大脑与外部设备之间创建的直接连接,通过脑…...