哈希算法以及面试答法


1. 什么是哈希(Hash)

哈希是一种映射关系,把任意长度的输入(字符串、文件、对象等)映射为一个固定长度的输出(哈希值)。

  • 哈希函数:h(x) -> y

  • 输出 y 就叫 哈希值 ,也常叫 摘要


2. 哈希算法的特点

一个好的哈希算法,通常要满足:

  1. 确定性:同样的输入,哈希结果永远相同。

  2. 高效性:计算速度要快。

  3. 均匀性:输出要尽量分布均匀,避免冲突集中。

  4. 不可逆性(安全哈希):从哈希值不能反推原文。

  5. 抗碰撞性:不同输入得到相同哈希值的概率要极低。


3. 分类

哈希算法大体有两类:

(1)一般哈希(用于数据结构)

  • 应用在 HashMap、HashSet、数据库索引等场景。

  • 比如 Java 的 String.hashCode(),就是一种简单哈希算法。

    复制代码
    public int hashCode() {
        int h = 0;
        for (char c : value) {
            h = 31 * h + c;
        }
        return h;
    }
  • 目的:让数据分布均匀,查找插入删除更快。

(2)加密/安全哈希(用于安全领域)

  • 强调不可逆抗碰撞

  • 常见算法:

    • MD5(128 位,已不安全,常用于校验完整性)

    • SHA-1(160 位,已被攻破)

    • SHA-2(SHA-256/512 等,现广泛使用)

    • SHA-3(新标准,基于 Keccak 算法)

  • 这些算法广泛应用于:

    • 密码存储(加盐哈希)

    • 数字签名

    • 文件完整性校验(下载包校验)


4. 哈希冲突

因为输出空间有限,不同输入可能得到相同哈希值,这就叫 冲突

常见解决办法:

  1. 开放定址法:发生冲突时,继续探测下一个位置。

  2. 链地址法:每个槽用链表/红黑树存储冲突元素(Java HashMap 1.8 就是这样)。

  3. 再哈希:用多个哈希函数重新计算。


5. 应用场景

  • 数据结构:HashMap、HashSet、布隆过滤器。

  • 数据库:哈希索引。

  • 安全领域:密码保护(MD5+盐、SHA-256)。

  • 完整性校验:下载文件时对比 MD5/SHA 值。

  • 负载均衡:一致性哈希,用于分布式缓存、分库分表。


6. 面试加分点

  • 哈希算法不是加密算法

    加密可以解密,哈希通常不可逆。

  • 安全哈希存密码要加盐

    直接存 MD5/sha1 容易被彩虹表攻击,加盐能增强安全性。

  • 一致性哈希的优势

    在分布式系统里,节点变化时只需少量数据迁移,而不是全部重算。


面试总结版(30 秒能答完):

哈希算法就是把任意长度的数据映射成固定长度的哈希值。它有确定性、效率高、分布均匀的特点。常见的分为一般哈希(用于 HashMap 等数据结构)和安全哈希(如 MD5、SHA 系列,用于校验和密码存储)。哈希冲突不可避免,通常通过链表法或开放定址法解决。它的应用场景非常广,从数据存储、分布式系统,到安全加密、完整性校验都有。

相关推荐
唐僧洗头爱飘柔95279 分钟前
【区块链技术(03)】区块链核心技术:哈希与加密算法、智能合约;非对称加密算法与默克尔树;智能合约工作原理与区块链的关系
区块链·智能合约·哈希算法·核心技术·非对称加密算法·默克尔树·金融交易
QxQ么么34 分钟前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
better_liang40 分钟前
每日Java面试场景题知识点之-分布式事务处理
java·微服务·面试·springcloud·分布式事务
Mz12213 小时前
day05 移动零、盛水最多的容器、三数之和
数据结构·算法·leetcode
SoleMotive.3 小时前
如果用户反映页面跳转得非常慢,该如何排查
jvm·数据库·redis·算法·缓存
念越3 小时前
判断两棵二叉树是否相同(力扣)
算法·leetcode·入门
han_3 小时前
前端高频面试题之CSS篇(二)
前端·css·面试
ghie90904 小时前
线性三角波连续调频毫米波雷达目标识别
人工智能·算法·计算机视觉
却话巴山夜雨时i4 小时前
74. 搜索二维矩阵【中等】
数据结构·算法·矩阵