腾讯 Offer 已拿,这 99 道算法高频面试题别漏了,80% 都败在算法上

165 篇文章 6 订阅

我自从 2015 年担任算法组 leader,作为面试官面试了不少同学。前前后后面试了超过 200 名同学,其中有不少入职的同学后来发展都不错,也坚定了自己对于选人标准的自信心。

今年 2020 年找工作尤其艰难,我把这些年作为面试官一些重要的面试题整理出来,一共 80 道,希望能够帮助到大家。

为了方便大家,我做了一个归类,一共分成了 6 大类,分别是:机器学习,特征工程,深度学习,NLP,CV,推荐系统。这些知识既是面试中的常见问题,也可以作为大家整理自己思路的参考资料。

    关注公众号【编程程序V】,分享更多Java技术前沿文章,Java学习面试资源。

机器学习理论类:

  • 1. 写出全概率公式 &贝叶斯公式

  • 2. 模型训练为什么要引入偏差(bias)和方差(variance)? 证

  • 3. CRF/朴素贝叶斯/EM/最大熵模型/马尔科夫随机场/混合高斯模型

  • 4. 如何解决过拟合问题?

  • 5. One-hot 的作用是什么?为什么不直接使用数字作为表示

  • 6. 决策树和随机森林的区别是什么?

  • 7. 朴素贝叶斯为什么“朴素 naive”?

  • 8. kmeans 初始点除了随机选取之外的方法

  • 9. LR 明明是分类模型为什么叫回归

  • 10. 梯度下降如何并行化

  • 11. LR 中的 L1/L2 正则项是啥

  • 12. 简述决策树构建过程

  • 13. 解释 Gini 系数

  • 14. 决策树的优缺点

  • 15. 出现估计概率值为 0 怎么处理

  • 16. 随机森林的生成过程

  • 17. 介绍一下 Boosting 的思想

  • 18. gbdt 的中的 tree 是什么 tree?有什么特征

  • 19. xgboost 对比 gbdt/boosting Tree 有了哪些方向上的优化

  • 20. 什么叫最优超平面

  • 21. 什么是支持向量

  • 22. SVM 如何解决多分类问题

  • 23. 核函数的作用是啥

特征工程类:

  • 1. 怎么去除 DataFrame 里的缺失值?

  • 2. 特征无量纲化的常见操作方法

  • 3. 如何对类别变量进行独热编码?

  • 4. 如何把“年龄”字段按照我们的阈值分段?

  • 5. 如何根据变量相关性画出热力图?

  • 6. 如何把分布修正为类正态分布?

  • 7. 怎么简单使用 PCA 来划分数据且可视化呢?

  • 8. 怎么简单使用 LDA 来划分数据且可视化呢?

深度学习类:

  • 1. 你觉得 batch-normalization 过程是什么样的

  • 2. 激活函数有什么用?常见的激活函数的区别是什么?

  • 3. Softmax 的原理是什么?有什么作用?CNN 的平移不变性是什么?如何实现的?

  • 4. VGG,GoogleNet,ResNet 等网络之间的区别是什么?

  • 5. 残差网络为什么能解决梯度消失的问题

  • 6. LSTM 为什么能解决梯度消失/爆炸的问题

  • 7. Attention 对比 RNN 和 CNN,分别有哪点你觉得的优势

  • 8. 写出 Attention 的公式

  • 9. Attention 机制,里面的 q,k,v 分别代表什么

  • 10. 为什么 self-attention 可以替代 seq2seq

自然语言处理(NLP)类:

  • 1. GolVe 的损失函数

  • 2. 为什么 GolVe 会用的相对比 W2V 少

  • 3. 层次 softmax 流程

  • 4. 负采样流程

  • 5. 怎么衡量学到的 embedding 的好坏

  • 6. 阐述 CRF 原理

  • 7. 详述 LDA 原理

  • 8. LDA 中的主题矩阵如何计算

  • 9. LDA 和 Word2Vec 区别?LDA 和 Doc2Vec 区别

  • 10. Bert 的双向体现在什么地方

  • 11. Bert 的是怎样预训练的

  • 12. 在数据中随机选择 15% 的标记,其中 80%被换位[mask],10%不变、10%随机替换其他单词,原因是什么

  • 13. 为什么 BERT 有 3 个嵌入层,它们都是如何实现的

  • 14. 手写一个 multi-head attention

推荐系统类:

  • 1. DNN 与 DeepFM 之间的区别

  • 2. 你在使用 deepFM 的时候是如何处理欠拟合和过拟合问题的

  • 3. deepfm 的 embedding 初始化有什么值得注意的地方吗

  • 4. YoutubeNet 变长数据如何处理的

  • 5. YouTubeNet 如何避免百万量级的 softmax 问题的

  • 6. 推荐系统有哪些常见的评测指标?

  • 7. MLR 的原理是什么?做了哪些优化?

计算机视觉(CV)类:

  • 1. 常见的模型加速方法

  • 2. 目标检测里如何有效解决常见的前景少背景多的问题

  • 3. 目标检测里有什么情况是 SSD、YOLOv3、Faster R-CNN 等所不能解决的,假设网络拟合能力无限强

  • 4. ROIPool 和 ROIAlign 的区别

  • 5. 介绍常见的梯度下降优化方法

  • 6. Detection 你觉得还有哪些可做的点

  • 7. mini-Batch SGD 相对于 GD 有什么优点

  • 8. 人体姿态估计主流的两个做法是啥?简单介绍下

  • 9. 卷积的实现原理以及如何快速高效实现局部 weight sharing 的卷积操作方式

  • 10. CycleGAN 的生成效果为啥一般都是位置不变纹理变化,为啥不能产生不同位置的生成效果

由此看来算法真的很重要,所以小编在这里给大家分享一份算法大牛的书籍

法工程师的具体分支:

其次,算法工程师的必备技能:

▲ 至少熟悉一门编程语言 C/C++/java/python/R;

▲ 功底;熟练运用各种常用算法和数据结构,有独立的实现能力;

▲ 熟悉数据挖掘算法;

▲ 熟悉机器学习相关知识理论。

▲ 加分项:具有较为丰富的项目实践经验。

好奇的你看到这里,肯定带着大大的疑问:是不是要直接学习这些算法呢?

万丈高楼平地起,任何高深的算法都要从基础算法学起,不可能一口吃个胖子。

所以,初入门的你学习算法还是要从基础开始:

▲ 首先学习一门语言。

例如 C/C++/Java/python,初学者学 C++比较普遍。

▲ 学数据结构。

数据结构书有很多,但是有些教材晦涩难懂,建议看图解多,通俗易懂的书,推荐《趣学数据结构》。

▲ 学算法。

不要直接看《算法导论》,大量证明会让你崩溃。推荐《数据结构与算法经典问题解析》,有问题分析,完美图解,维码详解,实战演练,适合初学者快速掌握经典算法。

接下来,让我们跟随《数据结构与算法经典问题解析》作者的视角,找到学习算法与数据结构的窍门!

话不多说直接上图

如果还在上大学的同学可以先以排序和各种的基本数据结构开始入门。我花了一个星期将八大基础排序和链表/二叉树/栈/队列制作成一份精美的 PDF

这份 PDF 阅读体验肯定是要比公众号和各大的博客平台的文章要好的。PDF 内容为纯手打!

下面简单介绍一下八大基础排序和基础的数据结构,每种排序的思想和基础的讲解和源码在 PDF 里边有。

需要完整版笔记的小伙伴可以关注私信我即可领取

下面给大家展示这本(数据结构与算法经典问题解析)的部分内容

第一章绪论

第 2 章递归和回溯

第 3 章链表

第 4 章栈

第 5 章队列

第 6 章树

第 7 章优先队列和队

第 8 章并查集 ADT

第 9 章图算法

第 10 章排序

第 11 章查找

第 12 章选择算法(中位数)

第 13 章符号表

第 14 章散列

第 15 章字符串算法

第 16 章算法设计技术

第 17 章贪梦算法

第 18 章分治算法

第 19 章动态规划算法

第 20 章 复杂度类型

第 21 章杂谈

最后,有需要这份资料的可以关注文中公众号领取

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 请解释一下C语言中的指针。 指针是一个变量,用来存储内存地址。通过指针,可以间接访问和修改内存中的数据。C语言的指针灵活性很高,常用于动态分配内存、传递参数、访问数组等操作。 2. 如何定义一个常量指针? 可以使用const关键字定义一个常量指针。例如:const int *p; 这样定义的指针p指向的值不可修改,但可以通过修改p来指向其他地址。 3. 请解释一下C语言中的结构体。 结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量,用来表示一个具有多个属性的对象。通过结构体可以将相关的数据组织在一起,提高程序的可读性和可维护性。 4. 如何在结构体内定义一个指针变量? 可以在结构体内定义一个指针变量,该指针变量可以指向另一个数据类型的值。例如:struct Student { int *p; }; 5. 请解释一下C语言中的动态内存分配。 动态内存分配是指程序在运行时根据需要分配和释放内存。C语言提供了四个函数:malloc、calloc、realloc和free来进行动态内存分配与释放。 6. 如何动态分配内存? 可以使用malloc函数动态分配内存。例如:int *p = (int*)malloc(sizeof(int)); 这样可以在堆中分配一个int类型大小的内存,并将该内存地址赋给指针p。 7. 如何释放动态分配的内存? 可以使用free函数释放动态分配的内存。例如:free(p); 这样可以释放指针p所指向的动态内存。 8. 列举C语言中的一些常见数据结构。 常见的数据结构包括数组、链表、栈、队列、树、图等。 9. 请解释一下C语言中的递归。 递归是指函数自己调用自己的过程。递归可用于解决问题的分解与归纳,适用于解决问题的过程可以划分为多个相似的子问题。 10. 请解释一下C语言中的位运算。 位运算是对二进制数的操作,包括按位与、按位或、按位异或等操作。位运算常用于位掩码、位操作等场景。 以上是前10C面试题及答案。希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值