生活知识集
第二套高阶模板 · 更大气的阅读体验

压缩算法面试题常见考点解析

发布时间:2025-12-31 17:11:25 阅读:7 次

最近在准备技术面试的朋友可能会遇到一类高频题——压缩算法。这类题目不仅考察编程能力,还涉及对数据结构和算法优化的理解。尤其在前端、后端甚至移动端岗位中,出现频率越来越高。

为什么面试爱考压缩算法

互联网每天产生海量数据,传输和存储成本很高。比如你发个朋友圈,照片如果没压缩,可能几十MB,加载半天。公司希望工程师能写出更高效、省带宽的代码,所以压缩相关的逻辑就成了面试重点。

最常考的题型:字符串压缩

题目大概是这样:给定一个字符串,比如 "aaabbc",把它压缩成 "a3b2c1"。如果压缩后不比原串短,就返回原串。

这题看似简单,但写全所有边界情况并不容易。比如空字符串、单字符、连续字符长度超过9的情况(会不会变成a11还是a1a1)。

def compress_string(s):
    if not s:
        return s
    
    result = []
    current_char = s[0]
    count = 1
    
    for i in range(1, len(s)):
        if s[i] == current_char:
            count += 1
        else:
            result.append(current_char + str(count))
            current_char = s[i]
            count = 1
    
    result.append(current_char + str(count))
    compressed = ''.join(result)
    
    return compressed if len(compressed) < len(s) else s

Huffman 编码也有可能被问到

虽然手撕Huffman树在短时间内不太现实,但面试官可能会让你讲思路:怎么根据字符频率构建最优前缀编码?这时候你得说出“频率低的放深节点,用优先队列合并最小两个频次”这些关键词。

实际生活中,ZIP压缩、JPEG图片、MP3音频都用了类似思想。你电脑上右键一个文件“添加到压缩包”,背后就是这些算法在跑。

别忘了了解真实应用场景

面试时如果能提到Gzip是基于LZ77,PNG用的是DEFLATE,甚至浏览器请求头里的Accept-Encoding字段支持gzip、br等格式,立刻显得你不是死背题,而是真懂应用。

有个朋友面试时被问:“网页资源压缩有哪些方式?”他答了Gzip、Brotli,还说了Brotli比Gzip压缩率高但耗CPU,最后提了一句“我们公司CDN默认开Brotli”,当场就被夸有工程思维。

小建议:动手实现一遍

光看题解不行。找个周末,自己从头写个字符串压缩函数,再试试模拟哈夫曼编码的步骤。你会发现,很多细节只有动手才会暴露,比如字符计数重置时机、字符串拼接性能问题。

这类题本质考的是:能不能把一个现实问题转化成代码逻辑,同时兼顾效率和鲁棒性。多练几遍,面试时自然不慌。