高驰 COROS 全栈二面:MySQL 数据类型与邮件协议
- 轮次
- 二面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 自我介绍。
- 挑一个你觉得最有挑战性的项目讲一下。
- 获取邮箱中邮件的协议是什么?
- MySQL 常用的数据类型都有哪些?
- 主键适合使用什么类型?
- 整数都有哪几种类型?分别能存多少位的数?
《参考解析》
收邮件用什么协议
收邮件用 IMAP 或 POP3,发邮件用 SMTP。IMAP 把邮件留在服务器上、支持文件夹与多端状态同步,是现在的默认选择;POP3 默认下载后从服务器删除,只适合单设备。端口上,加密的 IMAP 是 993、POP3S 是 995、SMTPS 是 465,也可以先用 143、110、587 再通过 STARTTLS 升级加密。协议本身是文本命令加响应:IMAP 的 LOGIN、SELECT、UID FETCH,POP3 的 USER、PASS、RETR,SMTP 的 EHLO、MAIL FROM、RCPT TO、DATA。正文与附件由 MIME 规范描述,附件多用 base64 编码。工程上要注意几点:用 UID 做增量同步而不是每次都全量拉;用 IDLE 或轮询拿新邮件推送;处理各种字符集与编码(GBK、quoted-printable);以及别把邮件密码硬编码,用授权码或 OAuth。Python 里对应 imaplib、poplib、smtplib 加 email 模块解析。
MySQL 常用数据类型全景
数值类:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、DECIMAL、FLOAT、DOUBLE、BIT。字符串类:CHAR、VARCHAR、BINARY、VARBINARY、BLOB 家族、TEXT 家族、ENUM、SET。日期时间类:DATE、TIME、DATETIME、TIMESTAMP、YEAR。此外还有 JSON 和空间类型。选型原则:够用就好,别一律用 BIGINT 和 TEXT;金额用 DECIMAL 不用 FLOAT/DOUBLE(二进制浮点会出现 0.1 + 0.2 != 0.3 这类误差);时间用 DATETIME 还是 TIMESTAMP 取决于是否要自动时区转换(TIMESTAMP 受时区影响且有 2038 上限,DATETIME 存的是字面值);大文本和大二进制别塞主表,放对象存储只存 URL;VARCHAR(n) 里的 n 是字符数,utf8mb4 下每字符最多 4 字节,整行还有 65535 字节的限制。
主键适合什么类型
优先自增 BIGINT:有序、索引小、插入集中在 B+ 树右侧不会频繁页分裂、没有业务含义不会被改。分布式场景用雪花 ID(趋势递增的 64 位整数)或 UUIDv7/ULID,关键是要保持递增趋势,因为完全随机的 UUIDv4 做聚簇索引主键会造成大量随机写和页分裂,碎片严重;用 UUID 也要以 BINARY(16) 存而不是 36 字符的字符串,否则所有二级索引都会跟着变大。不要用手机号、邮箱、身份证这类业务字段做主键:长度大、可能变更、还涉及隐私。如果表本身有稳定的业务唯一键(如订单号),可以给它建唯一索引,主键仍然用自增 ID。
整数类型与能存多大的数
TINYINT 占 1 字节,有符号是 -128 到 127,无符号 0 到 255;SMALLINT 占 2 字节,约正负 3.2 万,无符号到 65535;MEDIUMINT 占 3 字节,约正负 838 万,无符号约 1677 万;INT 占 4 字节,有符号约正负 21.47 亿,无符号到约 42.9 亿;BIGINT 占 8 字节,有符号约正负 9.22×10^18,无符号到约 1.84×10^19。要补两点:INT(11) 里的 11 只是显示宽度,不改变取值范围(MySQL 8.0.17 起整型的显示宽度已被标记废弃);溢出行为取决于 sql_mode,严格模式下插入越界报错,非严格模式下会截断到边界值,所以生产上一定开严格模式。
「最有挑战性的项目」怎么讲
选一个技术决策多的项目,而不是规模最大的。结构是:背景与约束(为什么这件事难,是性能、还是数据一致、还是历史包袱)→ 你的角色与边界 → 关键难点与备选方案 → 每个方案的取舍和最终选择 → 量化结果 → 复盘(如果重做会改什么)。面试官追问时通常往「为什么不用另一个方案」「上线后出过什么问题」两个方向走,提前准备好这两问。