Base64面试题整理
以下是常见的Base64相关面试题,涵盖原理、实践和注意事项。建议理解原理而非死记硬背。
Q1.什么是Base64?为什么需要Base64编码?
Base64是一种基于64个可打印字符来表示二进制数据的编码方式。需要它主要是因为:1) 早期网络协议(如SMTP)只能传输ASCII文本;2) 某些系统需要安全传输二进制数据;3) 某些API需要将二进制数据转为文本格式传输。
Q2.Base64的编码原理是什么?
1) 将每3个字节(24位)为一组;2) 将24位拆分为4个6位的组;3) 每个6位组对应0-63的索引;4) 根据索引查找Base64字符表获取对应字符。如果最后一组不足3字节,用=填充。
Q3.Base64编码后体积会增加多少?
Base64编码后体积约为原二进制数据的4/3倍,即增加约33%。原因:3字节=24位=4个Base64字符,每个字符8位,所以从24位变成32位。
Q4.什么时候会使用填充(padding)字符"="?
当要编码的字节数不能被3整除时:1) 剩余1字节时,编码为2个字符后加2个"=";2) 剩余2字节时,编码为3个字符后加1个"="。完整的3字节不需要填充。
Q5.Base64和Base64URL有什么区别?
Base64使用字符:+, /;Base64URL使用:-, _。这是因为+和/在URL中需要URL编码,且/可能造成路径歧义。Base64URL还会移除末尾的=。
Q6.Base64是加密吗?为什么?
Base64不是加密,是编码。编码是公开可逆的转换,任何人都可以解码。真正的加密需要密钥,且不应该能从密文推断出明文。Base64编码只是改变了数据的表现形式,没有安全性。
Q7.Base64适合用于大文件吗?为什么?
不适合。原因:1) 体积增加33%;2) 编解码计算开销;3) 编码后的文本不适合分块传输。对于大文件,建议使用二进制格式或分片传输。Base64适合小数据,如API Token、小图片等。
Q8.如何判断一个字符串是否是有效的Base64?
1) 长度必须是4的倍数;2) 只能包含Base64字符集;3) 最多只有2个末尾的=;4) =只能在末尾。也可以尝试解码,看是否能正确还原原始字节数。
Q9.浏览器中如何进行Base64编解码?
使用btoa()进行编码,atob()进行解码。但注意这两个函数只支持Latin1字符。对于Unicode字符,需要先使用TextEncoder/TextDecoder转换。
Q10.Base64有哪些常见的应用场景?
1) 电子邮件附件编码(MIME);2) Data URL嵌入图片;3) JWT Token的Payload;4) API传输二进制数据;5) 密钥和令牌的编码;6) 配置文件中的二进制数据。
加分项
- 能手写Base64编码过程
- 了解不同编程语言的Base64 API
- 知道Base64的性能开销和优化方法
- 了解Base64变种及其适用场景
- 能说出Base64与其他编码(Hex、Base58等)的对比