ai-tech-interview
ai-tech-interview 是一个专为 AI 工程师打造的开源技术面试备考资源库,由韩国开发者社区维护并收获了超过 2000 颗星标。该项目系统性地整理了统计学、数学基础以及机器学习领域的核心面试题与详细解答,涵盖从特征值、贝叶斯理论到 SVM、XGBoost 等深度算法原理,旨在帮助求职者攻克技术面试中的理论难关。
它主要解决了 AI 领域面试准备中知识点分散、缺乏系统性梳理以及难以获取高质量参考答案的痛点。通过结构化的问答形式,用户不仅能复习基础概念,还能深入理解算法背后的数学推导与实际应用场景。此外,项目不仅提供 GitHub 源码浏览,还推出了基于 Streamlit 的在线练习平台以及 GitBook 文档站,支持用户随时随地进行移动端学习与模拟演练。
这份资料非常适合正在寻求 AI 算法岗、数据科学岗的开发者,以及希望夯实理论基础的研究人员和学生使用。其独特的亮点在于社区驱动的协作模式,鼓励用户通过规范的 Pull Request 贡献内容,确保了题库的持续更新与答案的准确性;同时,多平台适配的设计让学习过程更加灵活高效,是备战大厂技术面试的实用指南。
使用场景
刚毕业的数据科学专业学生金敏俊正在全力准备韩国大型科技公司的 AI 工程师面试,面对涵盖统计、数学及机器学习的广泛考点,他急需系统化的复习策略。
没有 ai-tech-interview 时
- 复习范围模糊:面对海量的理论知识,不知道面试官究竟会问多深,常在“特征值”或"Bootstrap"等基础概念上浪费过多时间钻牛角尖,却忽略了核心考点。
- 缺乏实战模拟:只能对着教科书死记硬背公式定义,无法将“贝叶斯与频率学派的区别”或"PCA 的多重意义”转化为流畅的口语表达,一开口就卡壳。
- 知识体系割裂:统计学与机器学习知识点分散在不同书籍中,难以建立如“从分布特性到模型选择”这样的逻辑关联,回答问题时缺乏深度。
- 反馈机制缺失:独自练习时无法判断对"P-value"或“过拟合”的解释是否准确,容易形成错误的认知惯性而不自知。
使用 ai-tech-interview 后
- 考点精准定位:直接参考仓库中整理好的高频题库,迅速锁定“统计/数学”与“机器学习”两大核心板块,明确知道需重点掌握“正则化方法”及“集成学习”等必考题。
- 场景化应答训练:利用仓库中“向高中生解释马尔可夫链”等具体案例进行模拟演练,学会了用通俗易懂的语言阐述复杂算法,大幅提升了面试时的沟通自信。
- 构建知识网络:通过研读关于"LSA、LDA、SVD 关系”及“各类分布关联性”的深度解析,将零散知识点串联成网,能够从容应对考察理论深度的追问。
- 社区协同纠错:参照社区维护的标准答案和 PR 讨论区,及时修正了自己对“偏差 - 方差权衡”理解的偏差,确保回答的专业度与业界标准对齐。
ai-tech-interview 将原本杂乱无章的备考过程转化为目标清晰、实战导向的系统训练,帮助求职者从“死记硬背”蜕变为“融会贯通”。
运行环境要求
未说明
未说明

快速开始

注意事项
[!TIP] 如果您在移动途中也想准备面试,不妨试试 @LearningnRunning 制作的 AI Tech Interview 练习!
[!WARNING]
提交 PR 请求时,请务必遵守编写规则。如果不遵守,该 PR 可能会被拒绝。
- 关于反馈,请参考通过 Pull Request 请求反馈的方法,并通过 Pull Request 提交。
- Pull Request 的编写规则请参阅这里。
- 您也可以通过 GitBook 网站 查看内容。
面试问题
📈 统计学/数学
- 请解释特征值和特征向量是什么,以及它们为什么重要。
- 什么是采样和重采样?重采样的优势有哪些?
- 概率模型和随机变量分别是什么?
- 累积分布函数和概率密度函数分别是什么?请用公式表示。
- 条件概率是什么?
- 协方差和相关系数分别是什么?请用公式表示。
- 置信区间的定义是什么?
- 如果要向不懂 p 值的人解释,你会怎么讲?
- R 平方的意义是什么?
- 在什么情况下应该使用均值,什么情况下应该使用中位数?
- 中心极限定理为什么有用?
- 请解释熵的概念,最好也能提到信息增益。
- 什么时候可以使用参数方法,什么时候可以使用非参数方法?
- “似然”和“概率”有什么区别?
- 统计学中使用的自助法(Bootstrap)是什么意思?
- 当样本数量非常少(不超过几十个)时,如何建立预测模型?
- 贝叶斯派和频率派的观点有何不同?
- 统计功效是什么?
- 如果存在缺失值,是否需要填补?为什么?
- 如何判断异常值?
- 如何计算所需的样本量?
- 如何控制偏差?
- 什么情况下对数函数会很有用?请举例说明。
- 请解释伯努利分布、二项分布、多项分布、高斯正态分布、t 分布、卡方分布、F 分布、贝塔分布、伽马分布等,并说明这些分布之间的关系。
- 你打算乘飞机出差,想知道是否需要带伞。于是你随机给住在出差地点的三位朋友打电话,独立地询问他们那里是否正在下雨。每位朋友有 2/3 的几率说真话,1/3 的几率说谎。结果三位朋友都说:“是的,正在下雨。”那么实际上真的会下雨的概率是多少?
🤖 机器学习
- 请介绍一些常用的评估指标。(例如 RMSE、MAE、召回率、精确率等)
- 为什么要进行归一化?有哪些归一化的方法?
- 请解释局部最小值和全局最小值的区别。
- 请解释维度灾难。
- 常用的降维方法有哪些?
- PCA 既是降维方法,也是数据压缩和去噪方法,为什么呢?
- LSA、LDA、SVD 等缩写的含义是什么?它们之间有什么联系?
- 如果要向高中生解释马尔可夫链,最好的方式是什么?
- 如果需要从文本数据中提取主题,你会采取什么方法?
- 为什么支持向量机采用的是将数据映射到更高维度的方式?它有哪些优点?
- 相较于其他优秀的机器学习算法,朴素贝叶斯作为一种较为古老的方法,其优势在哪里?
- 回归和分类任务中,合适的评估指标分别是什么?
- 请解释关联规则中的支持度、置信度和提升度。
- 你了解牛顿法和梯度下降法这两种优化方法吗?
- 你认为机器学习方法和统计学方法之间有什么区别?
- 传统人工神经网络有哪些常见的问题?
- 你认为当前深度学习领域创新的根本原因是什么?
- 请解释 ROC 曲线。
- 如果你有 100 台服务器,为什么应该选择随机森林而不是人工神经网络?
- K-means 算法除了计算量大之外,还有哪些典型的语义上的缺点?
- 请解释 L1 和 L2 正则化。
- 什么是交叉验证?应该如何进行?
- 你知道 XGBoost 吗?为什么这个模型在 Kaggle 上如此出名?
- 集成学习方法都有哪些?
- 特征向量是什么?
- 优秀模型的定义是什么?
- 50 棵小决策树比一棵大决策树好吗?为什么这么认为?
- 为什么垃圾邮件过滤器经常使用逻辑回归?
- OLS(普通最小二乘法)回归的公式是什么?
🧠 深度学习
- 什么是深度学习?它与机器学习有什么区别?
- 损失函数和激活函数分别是什么?
- TensorFlow 和 PyTorch 的特点及区别是什么?
- 数据归一化是什么,为什么需要它?
- 请介绍一下你所知道的激活函数。(如 Sigmoid、ReLU、LeakyReLU、Tanh 等)
- 如果出现过拟合,该如何应对?
- 什么是超参数?
- 请谈谈权重初始化的方法,并说明常用的做法。
- 玻尔兹曼机是什么?
- 使用 TensorFlow、PyTorch 等工具时,有哪些调试技巧?
- 神经网络最大的缺点是什么?为了解决这个问题而出现的一次性学习又是什么?
- 为什么现在 ReLU 比 Sigmoid 更受欢迎?
- “非线性”的含义及其必要性是什么?
- ReLU 如何近似曲线函数?
- ReLU 存在哪些问题?
- 偏置项存在的意义是什么?
- 如果要用简单易懂的方式解释梯度下降法,你会怎么说?
- 为什么一定要使用梯度?梯度下降图中的横轴和纵轴分别代表什么?实际情况下这张图会如何呈现?
- 为什么在梯度下降过程中有时损失会增加?
- 如果要用通俗易懂的语言解释反向传播,你会怎么讲?
- 尽管存在局部最小值问题,为什么深度学习仍然能够取得良好的效果?
- 梯度下降法如何避免陷入局部最小值?
- 如何判断找到的解是否是全局最小值?
- 为什么要将训练集和测试集分开?
- 为什么还需要单独的验证集?
- 测试集被污染是什么意思?
- 正则化是什么?
- 批量归一化的效果如何?
- Dropout 的效果又如何?
- 应用批量归一化后,在实际使用中需要注意什么?代码上该如何实现?
- GAN 中生成器部分是否也可以应用批量归一化?
- 如果让你根据已有的知识来解释 SGD、RMSprop 和 Adam,你会怎么说?
- SGD 中“随机”的含义是什么?
- 使用较小的迷你批次有哪些优缺点?
- 动量的公式应该怎么写?
- 如果用 NumPy 在 CPU 上实现一个简单的 MNIST 分类器,大概需要多少行代码?
- 大概需要花费几个小时才能完成一个能够正常运行的程序?
- 反向传播需要多少行代码?
- 如果换成卷积神经网络,又会增加多少代码?
- 如果用 TensorFlow、PyTorch 等框架来编写一个简单的 MNIST 分类器,大概需要花费多少时间?
- 如果不使用卷积神经网络,只用多层感知器是否也能达到不错的效果?
- 最后一层该如何设计?
- 学习时可以用 BCE 损失函数,但如果想以 MSE 损失函数来看待情况呢?
- 为什么在进行深度学习时使用 GPU 会更好?
- 如果想同时使用两块 GPU,该怎么做?
- 训练时所需的 GPU 显存该如何计算?
🐍 Python
- Python中的列表和元组有什么区别?
- Python有哪些关键特性?
- Python是一种什么类型的语言?是编程语言还是脚本语言?
- Python是一种解释型语言。请解释一下。
- 什么是PEP 8?
- Python是如何进行内存管理的?
- Python中的命名空间是什么?
- 什么是PYTHONPATH?
- 什么是Python模块?请列举一些常用的Python内置模块。
- Python中的局部变量和全局变量是什么?
- Python是否区分大小写?
- Python中的类型转换是什么?
- 如何在Windows上安装Python并设置环境变量?
- Python中是否需要缩进?
- Python数组和列表有什么区别?
- Python中的函数是什么?
- 什么是
__init__? - 什么是lambda函数?
- Python中的
self是什么? break、continue和pass分别如何工作?[::-1]的作用是什么?- 如何在Python中就地打乱列表中的元素顺序?
- 迭代器和可迭代对象有什么区别?
- 如何在Python中生成随机数?
range和xrange有什么区别?- 如何在Python中编写注释?
- 什么是序列化和反序列化?
- Python中的生成器是什么?
- 如何将字符串的第一个字母大写?
- 如何将字符串全部转换为小写?
- 如何在Python中注释多行代码?
- Python中的文档字符串是什么?
is、not和in运算符的作用是什么?help()和dir()函数在Python中有什么用途?- 当Python退出时,为什么不是所有内存都会被释放?
- Python中的字典是什么?
- 如何在Python中使用三元运算符?
*args和**kwargs是什么意思?为什么要使用它们?len()函数的作用是什么?- 解释Python中
re模块的split()、sub()和subn()方法。 - 什么是负索引?为什么使用负索引?
- Python中的包是什么?
- 如何在Python中删除文件?
- Python有哪些内置数据类型?
- NumPy数组相比(嵌套)Python列表有哪些优势?
- 如何向Python数组中添加元素?
- 如何从Python数组中移除元素?
- Python是否支持面向对象编程的概念?
- 深拷贝和浅拷贝有什么区别?
- Python中是如何实现多线程的?
- Python中的编译和链接过程是什么?
- Python中的库有哪些?请列举几个。
split()函数用来做什么?- 如何在Python中导入模块?
- 以一个例子说明Python中的继承。
- 如何在Python中创建类?
- Python中的猴子补丁是什么?
- Python是否支持多重继承?
- Python中的多态是什么?
- 在Python中定义封装的概念?
- 如何在Python中实现数据抽象?
- Python是否使用访问控制修饰符?
- 如何在Python中创建一个空类?
object()函数的作用是什么?- Python中的
map函数是什么? - Python中NumPy数组比列表更好吗?
- Python中的GIL是什么?
- CPython与Python有何不同?
- Python中的装饰器是什么?
- 什么是对象驻留?
@classmethod、@staticmethod和@property分别是什么?
🌐 网络
- 请解释TCP/IP协议栈的每一层。
- 请比较OSI七层模型和TCP/IP协议栈的区别。
- 请对比帧、包、段和数据报。
- 请解释TCP和UDP的区别。
- 请对比TCP和UDP的头部结构。
- 请比较并解释TCP的三次握手和四次挥手过程。
- 为什么TCP的连接建立过程(3步)和连接终止过程(4步)步骤数量不同?
- 如果服务器在发送FIN标志之前,由于路由延迟或丢包等原因导致先前发送的数据包晚于FIN包到达,会发生什么情况?
- 为什么初始序列号ISN不从0开始,而是通过生成随机数来设定?
- 请解释HTTP和HTTPS,并说明它们之间的区别。
- 请解释HTTP请求/响应头的结构。
- 请比较HTTP和HTTPS的工作流程。
- CORS是什么?
- 请比较和解释HTTP的GET和POST方法。
- 请解释Cookie和Session。
- DNS是什么?
- 请解释REST和RESTful的概念,并说明两者的区别。
- Socket是什么?请用你熟悉的编程语言简单展示一个Socket创建的例子。
- 请解释Socket.io和WebSocket的区别。
- 请比较IPv4和IPv6的区别。
- MAC地址是什么?
- 请解释路由器、交换机和集线器的区别。
- SMTP是什么?
- 我用笔记本电脑访问了
www.google.com。请详细描述从发出请求到接收响应的整个过程。 - 请简要介绍几种常见的网络拓扑结构。
- 请解释子网掩码。
- 数据封装是什么?
- 请解释DHCP。
- 请介绍几种路由协议。(例如:链路状态、距离向量)
- 以太网是什么?
- 请解释客户端和服务器的区别。
- 请解释延迟、时延抖动和吞吐量的区别。
🖥️ 操作系统
- 请告诉我进程和线程的区别。
- 请解释为什么使用多线程而不是多进程。
- 请解释缓存的局部性原理。
- 请解释线程安全的概念。(提示:临界区)
- 请比较互斥锁和信号量的区别。
- 请解释调度器是什么,以及它如何分为短期、中期和长期调度。
- 请简要介绍CPU调度算法,如FCFS、SJF、SRTF、优先级调度和RR。
- 请解释同步和异步的区别。
- 请简要介绍内存管理策略。
- 请解释虚拟内存。
- 请解释死锁的概念及其发生条件。
- 请比较用户级线程和内核级线程。
- 请解释外部碎片和内部碎片。
- 请解释上下文切换是什么,并列出其过程。
- 请解释交换技术。
🗂 数据结构
- 链表
- 单链表
- 双向链表
- 循环链表
- 哈希表
- 栈
- 队列
- 循环队列
- 图
- 树
- 二叉树
- 满二叉树
- 完全二叉树
- 二叉搜索树
- 堆(二叉堆)
- 最小堆
- 最大堆
- 红黑树
- B+树
🔻 算法
- 时间复杂度和空间复杂度
- 排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 归并排序
- 堆排序
- 快速排序
- 计数排序
- 基数排序
- 分治法
- 动态规划
- 贪心算法
- 图
- 图遍历:BFS、DFS
- 最短路径
- Dijkstra
- Floyd-Warshall
- Bellman-Ford
- 最小生成树
- Prim
- Kruskal
- 并查集
- 拓扑排序
贡献者
参考资料
相似工具推荐
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
funNLP
funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。
cs-video-courses
cs-video-courses 是一个精心整理的计算机科学视频课程清单,旨在为自学者提供系统化的学习路径。它汇集了全球知名高校(如加州大学伯克利分校、新南威尔士大学等)的完整课程录像,涵盖从编程基础、数据结构与算法,到操作系统、分布式系统、数据库等核心领域,并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。 面对网络上零散且质量参差不齐的教学资源,cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容,仅收录真正的大学层级课程,排除了碎片化的简短教程或商业广告,确保用户能接触到严谨的学术内容。 这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员,以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽,不仅包含传统的软件工程与网络安全,还细分了生成式 AI、大语言模型、计算生物学等新兴学科,并直接链接至官方视频播放列表,让用户能一站式获取高质量的教育资源,免费享受世界顶尖大学的课堂体验。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
awesome-machine-learning
awesome-machine-learning 是一份精心整理的机器学习资源清单,汇集了全球优秀的机器学习框架、库和软件工具。面对机器学习领域技术迭代快、资源分散且难以甄选的痛点,这份清单按编程语言(如 Python、C++、Go 等)和应用场景(如计算机视觉、自然语言处理、深度学习等)进行了系统化分类,帮助使用者快速定位高质量项目。 它特别适合开发者、数据科学家及研究人员使用。无论是初学者寻找入门库,还是资深工程师对比不同语言的技术选型,都能从中获得极具价值的参考。此外,清单还延伸提供了免费书籍、在线课程、行业会议、技术博客及线下聚会等丰富资源,构建了从学习到实践的全链路支持体系。 其独特亮点在于严格的维护标准:明确标记已停止维护或长期未更新的项目,确保推荐内容的时效性与可靠性。作为机器学习领域的“导航图”,awesome-machine-learning 以开源协作的方式持续更新,旨在降低技术探索门槛,让每一位从业者都能高效地站在巨人的肩膀上创新。