计算机网络核心知识点全解析(面试通关版)
一、网络体系结构:从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快递面单信息(收件…...
表示学习与部分域适应
表示学习(Representation Learning) 表示学习是机器学习的一个分支,旨在自动从原始数据中提取有意义的特征或表示,使得这些表示更适合后续任务(如分类、检测、回归等)。其核心思想是将高维、复杂、冗余的原…...
AI与思维模型【77】——PDCA思维模型
一、定义 PDCA思维模型是一种用于持续改进和优化工作流程、项目实施以及问题解决的科学管理方法。它由四个英文字母组成,分别代表计划(Plan)、执行(Do)、检查(Check)和处理(Act&…...
Flink 系列之七 - Data Stream API的源算子原理
之前做过数据平台,对于实时数据采集,使用了Flink。现在想想,在数据开发平台中,Flink的身影几乎无处不在,由于之前是边用边学,总体有点混乱,借此空隙,整理一下Flink的内容,…...
使用 SSE + WebFlux 推送日志信息到前端
为什么使用 SSE 而不使用 WebSocket, 请看 SEE 对比 Websocket 的优缺点。 特性SSEWebSocket通信方向单向(服务器→客户端)双向(全双工)协议基于 HTTP独立协议(需 ws:// 前缀)兼容性现代浏览器(…...
Java多线程同步有哪些方法?
大家好,我是锋哥。今天分享关于【Java多线程同步有哪些方法?】面试题。希望对大家有帮助; Java多线程同步有哪些方法? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Java 中,多线程同步是确保多个线程在访问共享资源时不会…...
Java—数 组
数组就是一个容器,用来存一批同种类型的数据。 一、静态初始化数组 1.1 定义方式 语法: 完整格式:数据类型 [ ] 数组名 new 数据类型 []{ 元素 1 ,元素 2 ,元素3… };简化格式:数据类型 [ ] 数组名 {…...
iOS/Android 使用 C++ 跨平台模块时的内存与生命周期管理
在移动应用开发领域,跨平台开发已经成为一种不可忽视的趋势。随着智能手机市场的持续扩张,开发者需要同时满足iOS和Android两大主流平台的需求,而这往往意味着重复的工作量和高昂的维护成本。跨平台开发的目标在于通过一套代码库实现多平台的支持,从而降低开发成本、加速产…...
为什么vue的key值,不用index?
在 Vue 中,key 的作用是帮助框架高效地识别和复用 DOM 节点或组件实例。使用数组索引 (index) 作为 key 值可能会导致以下问题,因此通常不建议这样做: 1. 列表数据变化时,可能导致错误的 DOM 复用 问题:当列表的顺序…...
Hi3516CV608 超高清智慧视觉 SoC 芯片 可提供开发资料
Hi3516CV608 超高清智慧视觉SoC 产品简介 总体介绍 Hi3516CV608是一颗面向消费类市场的IPC SoC,在新一代视频编解码标准、网络安全、隐私保护和人工智能方面引领行业发展。主要应用于室内外场景下的云台机、枪机、球机、枪球一体机、双目长短焦机等产品形态&#…...
Flink部署与应用——部署方式介绍
引入 我们通过Flink相关论文的介绍,对于Flink已经有了初步理解,这里简单的梳理一下Flink常见的部署方式。 Flink 的部署方式 StandAlone模式 介绍 StandAlone模式是Flink框架自带的分布式部署模式,不依赖其他的资源调度框架,…...
数据挖掘技术与应用课程论文——数据挖掘中的聚类分析方法及其应用研究
数据挖掘中的聚类分析方法及其应用研究 摘要 聚类分析是数据挖掘技术中的一个重要组成部分,它通过将数据集中的对象划分为多个组或簇,使得同一簇内的对象具有较高的相似性,而不同簇之间的对象具有较低的相似性。 本文系统地研究了数据挖掘中的多种聚类分析方法及其应用。首先…...
SIEMENS PLC程序解读 ST 语言 车型识别
1、ST程序代码 IF #Type1_MIX < #CFG_Type.Type.CT AND #CFG_Type.Type.CT < #Type1_MAX AND #CFG_Type.Type.CT<>0 THEN#Type[1] : 1;FOR #I : 0 TO 39 DOIF #CFG_Type.Type.CT/10 (#Type1_MIX 10 * #I)/10 THEN#Sub_Type."1"[#I 1] : 1;END_IF; E…...
神经网络基础[损失函数,bp算法,梯度下降算法 ]
关于神经网络的基础的概念可以看我前面的文章 损失函数 在深度学习中, 损失函数是用来衡量模型参数的质量的函数, 衡量的方式是比较网络输出和真实输出的差异 作用:指导模型的训练过程,通过反向传播算法计算梯度,从而更新网络的参数,最终使…...
python打印颜色(python颜色、python print颜色、python打印彩色文字、python print彩色、python彩色文字)
文章目录 python怎么打印彩色文字1. 使用ANSI转义码:2. 使用colorama库(更好的跨平台支持):3. 使用termcolor库: python怎么打印彩色文字 在Python中打印彩色文字有几种方法: 1. 使用ANSI转义码ÿ…...
数字域残留频偏的补偿原理
模拟域的频谱搬移一般通过混频器实现。一般情况下模拟域调整完频偏后数字域还会存在一部分残留频偏这部分就需要在数字域补偿。原理比较简单本文进行下粗略总结。首先我们需要了解下采样具体可参考下信号与系统笔记(六):采样 - 知乎。 采样前和采样后,角…...
Linux文件管理2
Linux 文件管理是系统操作的核心内容之一,涉及文件和目录的创建、删除、移动、查看、权限管理等操作。以下是 Linux 文件管理的核心知识点和常用操作总结: 一、文件系统结构 Linux 文件系统采用 树形结构,以 /(根目录࿰…...
C++----模拟实现string
模拟实现string,首先我们要知道成员变量有哪些: class _string{private:char* _str;size_t capacity;//空间有多大size_t size;//有效字符多少const static size_t npos;};const size_t _string::npos-1;//static在外面定义不需要带static,np…...
Python torch.optim.lr_scheduler 常用学习率调度器使用方法
在看学习率调度器之前,我们先看一下学习率的相关知识: 学习率 学习率的定义 学习率(Learning Rate)是深度学习中一个关键的超参数,它决定了在优化算法(如梯度下降法)更新模型参数时࿰…...
从零开始学Python游戏编程39-碰撞处理1
在《从零开始学Python游戏编程38-精灵5》代码的基础上,添加两个敌人的防御塔,玩家的坦克无法移动到防御塔所在的空格中,如图1所示。 图1 游戏中的碰撞处理 1 游戏中空格的坐标 在《从零开始学Python游戏编程36-精灵3》中提到,可…...
同步定时器的用户数要和线程组保持一致,否则jmeter会出现接口不执行’stop‘和‘×’的情况
调试压测时发现了一个问题就是线程计划总是出现‘stop’的按钮无法执行完毕 发现时同步定时器导致的,就是有接口使用了同步定时器,但是这个同步定时器的用户数量设置的<线程组用户数量时,会出现执行无法结束的情况,如下…...
如何在Linux用libevent写一个聊天服务器
废话少说,先看看思路 因为libevent的回调机制,我们可以借助这个机制来创建bufferevent来实现用户和用户进行通信 如果成功连接后我们可以直接在listener回调函数里创建一个bufferevent缓冲区,并为每个缓冲区设置相应的读回调和事件回调&…...
Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法
在ADE仿真中错误问题如下: ERROR (CMI-2440): "xxx.scs" 46338: I2.M1: The length, width, or area of the instance does not fit the given lmax-lmin, wmax-wmin, or areamax-areamin range for any model in the I2.M3.nch_hvt group. The channel w…...
防火墙原理与应用总结
防火墙介绍: 防火墙(Firewall)是一种网络安全设备,其核心目标是通过分析数据包的源地址、端口、协议等内容,保护一个网络区域免受来自另一个网络区域的网络攻击和网络入侵行为,同时允许合法流量自由通行。…...
Graph Database Self-Managed Neo4j 知识图谱存储实践2:通过官方新手例子入门(未完成)
官方入门例子:neo4j-graph-examples/get-started: An introduction to graph databases and Neo4j for new users 官方例子仓库:https://github.com/neo4j-graph-examples 下载数据 git clone https://github.com/neo4j-graph-examples/get-started …...
GIT下载步骤
git官方链接: 添加链接描述...
C++中的vector和list的区别与适用场景
区别 特性vectorlist底层实现动态数组双向链表内存分配连续内存块非连续内存块随机访问支持,通过索引访问,时间复杂度O(1)不支持,需遍历,时间复杂度O(n)插入/删除末尾操作效率高,时间复杂度O(1)任意位置操作效率高&am…...
软件测试入门学习笔记
今天学习新知识,软件测试。 什么是软件测试? 使用人工和自动手段来运行或测试某个系统的过程,目的在于检验它是否满足规定的需求或弄清实际结果与预期结果之间的差别。 软件测试的目的? 1)为了发现程序࿰…...
2025年深度学习模型发展全景透视(基于前沿技术突破与开源生态演进的交叉分析)
2025年深度学习模型发展全景透视 (基于前沿技术突破与开源生态演进的交叉分析) 一、技术突破与能力边界拓展 智能水平跃升 2025年开源模型如Meta Llama-4、阿里Qwen2.5-VL参数规模突破1300亿,在常识推理能力测试中首次超越人类基准线7.2%谷歌…...
时间复杂度分析
复杂度分析的必要性: 当给我们一段代码时,我们是以什么准则来判断代码效率的高低呢?每一段代码都会消耗一段时间,或占据一段数据空间,那么自然是在实现相同功能的情况下,代码所耗时间最少,所占…...
BGE-m3 和 BCE-Embedding 模型对比分析
以下是对 BGE-m3 和 BCE-Embedding 模型在 embedding 领域的多维度对比分析,基于公开的技术文档和实验数据: 1. 基础信息对比 维度BGE-m3 (智源研究院)BCE-Embedding (网易)发布时间2024 年 1 月2023 年 9 月模型架构Transformer-basedTransformer-base…...
题目 3320: 蓝桥杯2025年第十六届省赛真题-产值调整
题目 3320: 蓝桥杯2025年第十六届省赛真题-产值调整 时间限制: 2s 内存限制: 192MB 提交: 549 解决: 122 题目描述 偏远的小镇上,三兄弟共同经营着一家小型矿业公司 “兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用…...
计算机组成原理第二章 数据的表示和运算——2.1数制与编码
计算机组成原理第二章 数据的表示和运算——数制与编码 一、基本概念与核心知识点 1.1 数制系统基础 1.1.1 进位计数制 定义:以固定基数(如2、8、10、16)表示数值的系统核心要素: 基数(R):允…...
基于归纳共形预测的大型视觉-语言模型中预测集的**数据驱动校准**
摘要 本研究通过分离共形预测(SCP)框架,解决了大型视觉语言模型(LVLMs)在视觉问答(VQA)任务中幻觉缓解的关键挑战。虽然LVLMs在多模态推理方面表现出色,但它们的输出常常表现出具有…...
Golang | 自行实现并发安全的Map
核心思路,读写map之前加锁!哈希思路,大map化分为很多个小map...
【Python数据库编程实战】从SQL到ORM的完整指南
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:SQLite基础操作案例2:MySQL连接池案例3:SQLAlchemy ORM …...
深入剖析扣子智能体的工作流与实战案例
前面我们已经初步带大家体验过扣子工作流,工作流程是 Coze 最为强大的功能之一,它如同扣子中蕴含的奇妙魔法工具,赋予我们的机器人处理极其复杂问题逻辑的能力。 这篇文章会带你更加深入地去理解并运用工作流解决实际问题 目录 一、工作流…...
【计算机网络】IP地址
IPv4 五类地址 1.0.0.0 ~ 126.255.255.255A类子网8位,主机24位128.0.0.0 ~ 191.255.255.255B类子网16位,主机16位192.0.0.0 ~ 223.255.255.255C类子网24位,主机8位224.0.0.0 ~ 239.255.255.255D类不分网络地址和主机地址,作为组播…...
基于CATIA参数化管道建模的自动化插件开发实践——NX建模之管道命令的参考与移植
引言 在机械设计领域,CATIA作为行业领先的CAD软件,其强大的参数化建模能力备受青睐。本文介绍如何利用Python的PySide6框架与CATIA二次开发技术,开发一款智能管状体生成工具。该工具借鉴了同类工业软件NX的建模的管道命令,通过Py…...
运维之SSD硬盘(SSD hard Drive for Operation and Maintenance)
背景 SSD的产生背景是计算技术发展和市场需求驱动的结果。早期计算机使用磁芯存储器,后来被半导体存储器取代,提高了速度和可靠性。随着电子设备小型化,对轻便、低功耗存储器的需求增长,SSD因无机械部件、速度快、耗电少而受到关…...
基于javaweb的SSM+Maven红酒朔源管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
HTML 地理定位(Geolocation)教程
HTML 地理定位(Geolocation)教程 简介 HTML5 的 Geolocation API 允许网页应用获取用户的地理位置信息。这个功能可用于提供基于位置的服务,如导航、本地搜索、天气预报等。本教程将详细介绍如何在网页中实现地理定位功能。 工作原理 浏览器可以通过多种方式确定…...
RHEL与CentOS:从同源到分流的开源操作系统演进
RHEL与CentOS:从同源到分流的开源操作系统演进 一、核心关系:源代码的重构与社区化 RHEL(Red Hat Enterprise Linux)与CentOS(Community ENTerprise Operating System)的关系可以概括为“同源异构”。RHE…...
架构师面试(三十六):广播消息
题目 在像 IM、短视频、游戏等实时在线类的业务系统中,一般会有【广播消息】业务,这类业务具有瞬时高流量的特点。 在对【广播消息】业务实现时通常需要同时写 “系统消息库” 和更新用户的 “联系人库” 的操作,用户的联系人表中会有未读数…...
Spine 动画教程:皮肤制作
一、前言 搁了很久的抖音直播小玩法开发,最近又让我想起来了。由于是初次尝试,所以我将开发费用的预算降到为零。不但不买服务器采用 UnitySDK 的指令直推,而且游戏的资产也用 AI 生成,主打省时又省钱。 但是图片有了࿰…...
Rust 学习笔记:函数和控制流
Rust 学习笔记:函数和控制流 Rust 学习笔记:函数和控制流函数(Function)语句和表达式带返回值的函数注释控制流if 表达式使用 else if 处理多个条件在 let 语句中使用 if循环loop从循环中返回值循环标签消除多个循环之间的歧义带 …...
探秘LLM推理模型:hidden states中藏着的self verification的“钥匙”
推理模型在数学和逻辑推理等任务中表现出色,但常出现过度推理的情况。本文研究发现,推理模型的隐藏状态编码了答案正确性信息,利用这一信息可提升推理效率。想知道具体如何实现吗?快来一起来了解吧! 论文标题 Reasoni…...
《Learning Langchain》阅读笔记8-RAG(4)在vector store中存储embbdings
什么是 vector store? 与专门用于存储结构化数据(如 JSON 文档或符合关系型数据库模式的数据)的传统数据库不同,vector stores处理的是非结构化数据,包括文本和图像。像传统数据库一样,vector stores也能执…...
【C/C++】深入理解指针(五)
文章目录 深入理解指针(五)1.回调函数是什么?2.qsort使用举例2.1 使用qsort函数排序整型数据强调 2.2 使用qsort排序结构数据 3.qsort函数的模拟实现 深入理解指针(五) 1.回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指…...
【vue】【element-plus】 el-date-picker使用cell-class-name进行标记,type=year不生效解决方法
typedete,自定义cell-class-name打标记效果如下: 相关代码: <el-date-pickerv-model"date":clearable"false":editable"false":cell-class-name"cellClassName"type"date"format&quo…...