SMTP和POP3协议
SMTP和POP3协议
SMTP(简单邮件传输协议)和POP3(邮局协议版本3)是电子邮件系统中用于发送和接收邮件的核心协议。以下是它们的详细说明:
1. SMTP(Simple Mail Transfer Protocol)
SMTP和POP3分别负责电子邮件的发送和接收,两者协同实现完整的邮件传输流程。SMTP注重邮件的路由与传递,而POP3侧重离线访问,适合单设备用户。在安全性要求高的场景中,应优先使用加密端口(如587、995)或协议升级(如STARTTLS)。
-
功能:专用于发送电子邮件,将邮件从客户端传输到服务器,或在邮件服务器之间中继。
-
协议层:应用层协议,基于TCP,确保可靠传输。
-
端口号:
- 25:默认端口,用于服务器间通信(可能无加密)。
- 587:提交端口,用于客户端到服务器的邮件提交,通常配合STARTTLS加密。
- 465:SMTPS端口,使用SSL/TLS加密(现较少用,多被587取代)。
-
工作原理:
- 客户端通过TCP连接到SMTP服务器的端口。
- 握手后发送命令(如
EHLO、MAIL FROM、RCPT TO、DATA)。 - 服务器响应状态码(如
250 OK表示成功)。 - 传输完成后发送
QUIT终止连接。
-
安全性:
- STARTTLS:在25或587端口上通过命令升级到加密连接。
- SMTPS:直接使用SSL/TLS加密(端口465)。
-
命令示例:
EHLO example.com MAIL FROM:<sender@example.com> RCPT TO:<receiver@domain.com> DATA Subject: Hello This is the email body. . QUIT
2. POP3(Post Office Protocol Version 3)
-
功能:用于从服务器下载邮件到本地设备,通常下载后删除服务器上的邮件(可配置保留)。
-
协议层:应用层协议,基于TCP。
-
端口号:
- 110:默认端口(无加密)。
- 995:POP3S端口,使用SSL/TLS加密。
-
工作原理:
- 客户端连接到POP3服务器。
- 认证(
USER和PASS命令)。 - 列出邮件(
LIST)、下载邮件(RETR)、删除邮件(DELE)。 - 结束会话(
QUIT)。
-
特点:
- 离线访问:邮件下载到本地后,通常从服务器删除(除非设置“保留副本”)。
- 单设备适用:适合单一设备访问,多设备可能因邮件删除导致同步问题。
-
命令示例:
USER username PASS password LIST RETR 1 DELE 1 QUIT
3. SMTP vs POP3 对比
| 特性 | SMTP | POP3 |
|---|---|---|
| 主要功能 | 发送邮件 | 接收邮件 |
| 通信方向 | 客户端→服务器 或 服务器→服务器 | 客户端←服务器 |
| 默认端口 | 25(服务器)、587(提交) | 110 |
| 加密端口 | 465(SSL)、587(STARTTLS) | 995(SSL) |
| 数据存储 | 不存储邮件,仅传输 | 下载后默认删除服务器邮件 |
| 多设备支持 | 无关(仅发送) | 不适合(邮件可能被删除) |
| 典型命令 | MAIL FROM, RCPT TO, DATA | USER, RETR, DELE |
4. 协同工作流程
- 发送邮件:用户通过SMTP将邮件发送到发件服务器。
- 服务器间传输:发件服务器使用SMTP将邮件传递至收件人的邮件服务器。
- 接收邮件:收件人通过POP3从服务器下载邮件到本地设备。
5. 补充说明
- IMAP替代POP3:现代更常用IMAP协议,支持多设备同步和服务器邮件管理。
- 安全性演进:早期协议未加密,现普遍使用SSL/TLS(如POP3S和SMTPS)或STARTTLS升级加密。
搭建 SMTP 服务
在Linux 系统上搭建 SMTP 服务的详细流程
1. 环境准备
- 系统:Ubuntu/CentOS(以 Ubuntu 22.04 为例)
- 权限:需
root或sudo权限 - 域名:需一个已解析的域名(如
mail.example.com),并配置 DNS 的 MX 记录指向服务器 IP。
2. 安装 Postfix
# 更新软件包
sudo apt update# 安装 Postfix 和邮件工具包
sudo apt install postfix mailutils libsasl2-modules sasl2-bin
- 安装过程中会弹出配置向导:
- General type of mail configuration:选择 Internet Site。
- System mail name:输入你的域名(如
example.com)。
3. 基础配置
编辑 Postfix 主配置文件 /etc/postfix/main.cf:
sudo nano /etc/postfix/main.cf
关键配置项:
# 设置域名
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain# 允许接收的邮件域(本服务器负责的域名)
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain# 网络绑定(允许来自所有 IPv4 和 IPv6 地址的连接)
inet_protocols = all
inet_interfaces = all# 限制邮件大小(示例设置为 20MB)
message_size_limit = 20480000# 启用 SMTP 认证(SASL)
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous# 限制中继(仅允许认证用户发送邮件)
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination# 启用 TLS 加密
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level = may
4. 配置 SASL 认证
Postfix 依赖 SASL 实现用户认证,需配置 saslauthd:
# 编辑 SASL 配置
sudo nano /etc/postfix/sasl/smtpd.conf
添加以下内容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
启动 SASL 服务:
sudo systemctl enable saslauthd
sudo systemctl start saslauthd
创建本地用户(用于发信):
# 添加用户(示例用户:smtpuser)
sudo adduser smtpuser
# 设置密码
sudo passwd smtpuser
5. 配置 TLS 加密(可选但强烈推荐)
生成自签名证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/ssl/private/postfix.key \-out /etc/ssl/certs/postfix.crt
- 按提示填写证书信息(如域名
mail.example.com)。
修改 Postfix 配置:
在 /etc/postfix/main.cf 中更新 TLS 路径:
smtpd_tls_cert_file = /etc/ssl/certs/postfix.crt
smtpd_tls_key_file = /etc/ssl/private/postfix.key
smtpd_tls_security_level = encrypt # 强制加密
6. 防火墙与端口开放
允许 SMTP 相关端口:
sudo ufw allow 25 # SMTP(服务器间通信)
sudo ufw allow 587 # SMTP Submission(客户端加密提交)
sudo ufw reload
7. 重启 Postfix 并检查状态
sudo systemctl restart postfix
sudo systemctl status postfix # 确保服务运行正常
8. 测试 SMTP 服务
使用 Telnet 手动测试:
telnet mail.example.com 25
输入命令(按顺序):
EHLO example.com
MAIL FROM: <smtpuser@example.com>
RCPT TO: <recipient@example.com>
DATA
Subject: Test Email
This is a test email.
.
QUIT
使用 swaks 工具测试:
# 安装 swaks
sudo apt install swaks# 发送测试邮件
swaks --to recipient@example.com \--from smtpuser@example.com \--server mail.example.com \--port 587 \--auth LOGIN \--auth-user smtpuser \--auth-password 'your_password' \-tls
9. 查看日志排查问题
# 实时查看 Postfix 日志
tail -f /var/log/mail.log
- 检查是否有
status=sent或错误提示(如认证失败、连接拒绝)。
10. 高级配置(可选)
防止垃圾邮件:
- 配置 SPF、DKIM、DMARC DNS 记录。
- 安装
spamassassin或rspamd过滤垃圾邮件。
邮件队列管理:
postqueue -p # 查看队列
postsuper -d ALL # 清空队列
使用第三方中继(如 SendGrid):
在 /etc/postfix/main.cf 中添加:
relayhost = [smtp.sendgrid.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_security_level = encrypt
注意事项
- 开放中继风险:确保
mynetworks和smtpd_relay_restrictions配置正确,避免服务器被滥用。 - IP 反向解析:确保服务器 IP 有 PTR 记录(反向 DNS),否则邮件可能被拒收。
- TLS 证书:自签名证书可能被邮件服务商标记为不安全,建议使用 Let’s Encrypt 免费证书。
- 投递成功率:自建 SMTP 服务器可能被标记为垃圾邮件,需监控投递率并优化配置。
SMTP 和 POP3 协议的常用命令详解
语法、用途、示例及典型响应:
一、SMTP(简单邮件传输协议)
SMTP 通过客户端与服务器的命令交互完成邮件传输,遵循 RFC 5321 规范。以下是核心命令:
1. 连接与握手
-
HELO / EHLO
-
用途:初始化会话,
EHLO用于扩展 SMTP(支持加密和认证)。 -
语法:
HELO <domain> EHLO <domain> -
示例:
EHLO client.example.com -
响应:
250-server.example.com Hello client.example.com
(列出支持的扩展功能,如STARTTLS、AUTH)
-
2. 发件人与收件人
-
MAIL FROM
-
用途:指定发件人地址。
-
语法:
MAIL FROM:<sender@example.com> -
响应:
250 2.1.0 Sender OK
-
-
RCPT TO
-
用途:指定收件人地址(可多次使用)。
-
语法:
RCPT TO:<recipient@example.com> -
响应:
250 2.1.5 Recipient OK
-
3. 邮件内容传输
-
DATA
-
用途:开始传输邮件正文(以单独的行
.结束)。 -
语法:
DATA -
响应:
354 Enter message, end with "." on a line by itself
邮件正文示例:From: "Sender" <sender@example.com> To: "Recipient" <recipient@example.com> Subject: Test Email Date: Thu, 1 Jan 2024 12:00:00 +0000This is the email body. . -
完成响应:
250 2.0.0 Message accepted for delivery
-
4. 加密与认证
-
STARTTLS
-
用途:将明文连接升级为 TLS 加密。
-
语法:
STARTTLS -
响应:
220 2.0.0 Ready to start TLS
-
-
AUTH
-
用途:认证用户(支持
PLAIN、LOGIN、CRAM-MD5等机制)。 -
语法(以
LOGIN为例):AUTH LOGIN 334 VXNlcm5hbWU6 # 服务器返回 Base64 编码的 "Username:" dXNlcm5hbWU= # 客户端发送 Base64 用户名 334 UGFzc3dvcmQ6 # 服务器返回 Base64 编码的 "Password:" cGFzc3dvcmQ= # 客户端发送 Base64 密码 -
响应:
235 2.7.0 Authentication successful
-
5. 会话控制
- RSET
- 用途:重置当前会话(清空发件人、收件人和数据)。
- 响应:
250 2.0.0 Reset OK
- QUIT
- 用途:终止会话。
- 响应:
221 2.0.0 Bye
6. 其他命令
-
VRFY
-
用途:验证邮箱地址是否存在(通常被禁用)。
-
示例:
VRFY user@example.com -
响应:
250 2.1.5 <user@example.com>
-
-
EXPN
-
用途:展开邮件列表(通常被禁用)。
-
示例:
EXPN staff-list
-
二、POP3(邮局协议版本3)
POP3 用于从服务器下载邮件到本地,遵循 RFC 1939 规范。命令不区分大小写,响应以 +OK(成功)或 -ERR(失败)开头。
1. 连接与认证
-
USER
-
用途:指定用户名。
-
语法:
USER username -
响应:
+OK User accepted
-
-
PASS
-
用途:指定密码。
-
语法:
PASS password -
响应:
+OK Password accepted
-
2. 邮件管理
-
STAT
- 用途:获取邮箱状态(邮件总数和总大小)。
- 响应:
+OK 5 1200(5 封邮件,总大小 1200 字节)
-
LIST
-
用途:列出所有邮件及其大小。
-
语法:
LIST [n] # 可选参数,指定某封邮件 -
响应:
+OK 5 messages (1200 bytes) 1 300 2 200 ...
-
-
RETR
-
用途:下载指定邮件。
-
语法:
RETR 1 # 下载第 1 封邮件 -
响应:
+OK 300 octets From: sender@example.com To: recipient@example.com Subject: Hello ...
-
-
DELE
-
用途:标记邮件为删除(需执行
QUIT后生效)。 -
语法:
DELE 1 -
响应:
+OK Message 1 marked for deletion
-
3. 会话控制
- QUIT
- 用途:结束会话并执行删除操作。
- 响应:
+OK POP3 server signing off
- RSET
- 用途:取消所有删除标记。
- 响应:
+OK All deletion marks removed
4. 扩展命令
-
TOP
-
用途:下载邮件的头部和指定行数的正文。
-
语法:
TOP 1 10 # 下载第 1 封邮件的头部和前 10 行正文
-
-
UIDL
-
用途:获取邮件的唯一标识符(用于多设备同步)。
-
语法:
UIDL [n] # 可选参数,指定某封邮件 -
响应:
+OK Unique-ID listing 1 abc123 2 def456 ...
-
三、典型错误响应
| 协议 | 错误示例 | 含义 |
|---|---|---|
| SMTP | 500 Syntax error | 命令语法错误 |
| SMTP | 535 Authentication failed | 认证失败 |
| POP3 | -ERR Invalid username | 用户名无效 |
| POP3 | -ERR Message not found | 邮件不存在 |
四、实战示例
SMTP 手动发送邮件(使用 Telnet)
telnet smtp.example.com 25
EHLO client.example.com
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
Subject: Test
Hello, this is a test email.
.
QUIT
POP3 手动下载邮件
telnet pop3.example.com 110
USER username
PASS password
LIST
RETR 1
QUIT
五、注意事项
- 安全性:避免在明文连接中使用
PASS命令,优先使用 POP3S(端口 995)和 SMTPS(端口 465/587)。 - 协议兼容性:部分命令(如
EHLO、UIDL)需服务器支持扩展功能。 - 邮件保留:POP3 默认下载后删除邮件,可通过
leave on server选项保留副本。
相关文章:
SMTP和POP3协议
SMTP和POP3协议 SMTP(简单邮件传输协议)和POP3(邮局协议版本3)是电子邮件系统中用于发送和接收邮件的核心协议。以下是它们的详细说明: 1. SMTP(Simple Mail Transfer Protocol) SMTP和POP3分…...
DeepSeek-R1的量化版、蒸馏版和满血版区别
DeepSeek-R1的量化版、蒸馏版和满血版是三种不同的模型变体,主要区别在于参数规模、性能表现以及适用场景。以下是它们的具体对比: 1. 满血版 DeepSeek-R1 特点: 参数规模:6710亿参数,是DeepSeek-R1系列中最大的版本…...
活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁
课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…...
网络工程师 (26)TCP/IP体系结构
一、层次 四层: 网络接口层:TCP/IP协议的最底层,负责网络层与硬件设备间的联系。该层协议非常多,包括逻辑链路和媒体访问控制,负责与物理传输的连接媒介打交道,主要功能是接收数据报,并把接收到…...
GIS笔记之Shapefile与KML相互转换
在GIS应用中,各种不同类型数据的转换与使用是一个重要的环节。在这其中,Shapefile和KML是两种常见的数据形式,两者间的相互转换也是日常工作和学习绕不开的话题。在这里,我们将常用的几种数据转换方法整理如下。 1.Shapefile和KM…...
【UVM】寄存器模型
寄存器模型的优势 sequence复用性高,方便对 DUT 中寄存器进行读写;提供了后门访问方式,可以不耗时的获取寄存器的值;可以很方便的对寄存器的 coverage 验证点的收集 寄存器模型基本概念 寄存器模型概念作用uvm_reg_field寄存器模…...
WordPress博客在fnOS环境下的极简搭建与公网地址配置指南
文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 你是否曾经为搭建自己的网站而头疼不已?是不是觉得…...
计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
2025年前端面试题~ 【前端面试】更新
前言 金三银四的招聘季即将来临,对于怀揣前端梦想的求职者而言,这是机遇与挑战并存的黄金时段。前端面试可不只是简单的问答,它是一场对综合能力的深度检验。面试官会从多个维度考量,比如扎实的 HTML、CSS 和 JavaScript 基础&…...
深入 JVM 虚拟机:字符串常量池演变与 intern() 方法工作原理解析
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 📝 如有错误敬请纠正! 前言 在 Java 开发中,字符串常量池(String Constant…...
从基础到人脸识别与目标检测
前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…...
Java内存模型,内存屏障是干嘛的?
目录 Java 内存模型(Java Memory Model,JMM) 1. 定义和目的 2. 内存结构 3. 三大特性 4. happens-before 原则 内存屏障(Memory Barrier) 1. 定义和作用 2. 分类 3. 在 Java 中的应用 Java 内存模型(Java Memory Model, JMM) 1. 核心概念 2. 内存交互规则 …...
rdian是一个结构体,pdian=^Rdian,list泛型做什么用?
不明白不让编译的原因,记录下之遇到注意原油。 var mylist:TList<string>; mylist1:TList<Pdian>; mydian:Pdian; i:Integer; mylist2:TList<Rdian>; mydian2:rdian; arr:array of Rdian; begin mylist:TList…...
Photoshop自定义键盘快捷键
编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…...
C++智能指针的使用
文章目录 智能指针的使用和原理智能指针的使用场景RAII和智能指针C标准库智能指针的使用 智能指针的使用和原理 智能指针的使用场景 1. 下面的程序中,new了以后,我们也delete了,但是因为抛异常导致后面的delete没有得到执行,所以…...
LSTM的介绍
网上一些描述LSTM文章看的云里雾里,只是介绍LSTM 的结构,并没有说明原理。我这里用通俗易懂的话来描述一下。 我们先来复习一些RNN的核心公式: h t t a n h ( W h h t − 1 W x x t b h ) h_t tanh(W_h h_{t-1} W_x x_t b_h) httan…...
C++ ——从C到C++
1、C的学习方法 (1)C知识点概念内容比较多,需要反复复习 (2)偏理论,有的内容不理解,可以先背下来,后续可能会理解更深 (3)学好编程要多练习,简…...
AI技术填坑记2:标注系统
在问答中,通用大模型往往拥有不可控性,而在正常的业务系统里面,往往有自己的各种专门的术语和内容,标注系统可以对大量数据进行标记,确认大模型解答的结果符合设想。 一、总体思路 一个标注,一般分为模块、应用、提问词汇、标注值,其中,模块可以认为是一种应用分类;应…...
【机器学习】超参数的选择,以kNN算法为例
分类准确度 一、摘要二、超参数的概念三、调参的方法四、实验搜索超参数五、扩展搜索范围六、考虑距离权重的kNN算法七、距离的计算方法及代码实现八、明可夫斯基距离的应用九、网格搜索超参数 一、摘要 本博文讲解了机器学习中的超参数问题,以K近邻算法为例&#…...
哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测
哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…...
Django开发入门 – 3.用Django创建一个Web项目
Django开发入门 – 3.用Django创建一个Web项目 Build A Web Based Project With Django By JacksonML 本文简要介绍如何利用最新版Python 3.13.2来搭建Django环境,以及创建第一个Django Web应用项目,并能够运行Django Web服务器。 创建该Django项目需…...
2025.2.8——二、Confusion1 SSTI模板注入|Jinja2模板
题目来源:攻防世界 Confusion1 目录 一、打开靶机,整理信息 二、解题思路 step 1:查看网页源码信息 step 2:模板注入 step 3:构造payload,验证漏洞 step 4:已确认为SSTI漏洞中的Jinjia2…...
【C语言标准库函数】标准输入输出函数详解[5]:格式化文件输入输出
目录 一、fprintf() 函数 1.1. 函数简介 1.2. fprintf使用场景 1.3. 注意事项 1.4. 示例 二、fscanf() 函数 2.1. 函数简介 2.2. fscanf使用场景 2.3. 注意事项 2.3. 示例 三、总结 在 C 语言中,格式化文件输入输出函数能够让我们以特定的格式对文件进行…...
【故障处理】 - 12C ADG备库密码文件的MD5值不断变化
【故障处理】 - 12C ADG备库密码文件的MD5值不断变化 一、概述二、报错原因:三、处理过程 一、概述 12C版本以后,密码文件的MD5值会持续变化。 二、报错原因: Oracle 数据库软件版本12.2 开始,当以具有管理权限的用户身份执行与数…...
【LeetCode Hot100 多维动态规划】最小路径和、最长回文子串、最长公共子序列、编辑距离
多维动态规划 机器人路径问题思路代码实现 最小路径和问题动态规划思路状态转移方程边界条件 代码实现 最长回文子串思路代码实现 最长公共子序列(LCS)题目描述解决方案 —— 动态规划1. 状态定义2. 状态转移方程3. 初始化4. 代码实现 编辑距离ÿ…...
【PG】DROP TABLE ... CASCADE
问题 ERROR: cannot drop table wx_user_tag because other objects depend on it DETAIL: default value for column id of table wx_user_tag depends on sequence wx_user_tag_id_seq HINT: Use DROP … CASCADE to drop the dependent objects too. 解决 这个错误消息表…...
青少年编程与数学 02-009 Django 5 Web 编程 04课题、应用创建
青少年编程与数学 02-009 Django 5 Web 编程 04课题、应用创建 一、项目及应用创建 Django 项目创建 Django 应用配置和测试 二、数据库的设置步骤 1: 创建 Django 项目步骤 2: 配置数据库PostgreSQLMySQL 步骤 3: 安装必要的数据库驱动步骤 4: 进行数据库迁移步骤 5: 创建应用…...
速度超越DeepSeek!Le Chat 1100tok/s闪电回答,ChatGPT 4o和DeepSeek R1被秒杀?
2023年,当全球科技界还在ChatGPT引发的AI狂潮中沉浮时,一场来自欧洲的"静默革命"正悄然改变游戏规则。法国人工智能公司Mistral AI推出的聊天机器人Le Chat以"比ChatGPT快10倍"的惊人宣言震动业界,其背后承载的不仅是技术…...
【详细版】DETR系列之Deformable DETR(2021 ICLR)
论文标题Deformable DETR: Deformable Transformers for End-to-End Object Detection论文作者Xizhou Zhu, Weijie Su, Lewei Lu, Bin Li, Xiaogang Wang, Jifeng Dai发表日期2021年03月01日GB引用> Xizhou Zhu, Weijie Su, Lewei Lu, et al. Deformable DETR: Deformable T…...
c++----函数重载
目录标题 为什么会有函数重载函数重载的概念函数重载的例子第一个:参数的类型不同第二个:参数的个数不同第三种:类型的顺序不同函数重载的奇异性重载函数的底层原理有关函数重载的一个问题 为什么会有函数重载 大家在学c语言的时候有没有发现…...
