互联网公司面试中经常被问的有关问题

互联网公司面试中经常被问的问题

机器学习

  1. SVM的原理是什么?
  2. LR的原理是什么?
  3. RF的优缺点是什么?
  4. 数据建模的过程是什么?
  5. 如何评估一个特征的有效性?

大数据

  1. Mapreduce的原理是什么?
  2. Mapreduce的二次排序是怎样的?

C++

  1. 野指针是什么?怎么造成的?
  2. 虚函数是怎么回事?

算法与数据结构

  1. 简单叙述一下快速排序的原理。
  2. 容器类hashmap与hashtable的区别是什么?
    C++中的标准模版库(STL)中是没有hashtable的。 C++中的map是通过对数据的键值的比较来进行数据的存放和查找的。所以map是需要提供键值的比较函数的。通常我们使用string类型作为键值类型,是使用了C++提供的缺省的比较函数。如果是另外的自定义的类型作为键值的话,就要自己提供比较函数了。
    从数据结构上来说,hash是一种按照某种键值查找和存放一组数据的数据结构和方法策略。它是通过对键值数据提供hash值的算法实现的。一般hash值是一个整型数字。它的效率很大程度上取决于hash值的产生。它的重复率越低,效率就越高。如果没有重复率,那么它的查找效率应该比任何一个算法都高。可惜的是,对于一些应用的情况,很难找到一个好的hash值的算法。
    map实际上算不是一种数据结构的名词。它是C++及java语言的一个类的名字罢了。但它同hash查找的应用目标应该是相一致的。都是通过键值找到对应的数据记录。甚至map也可以用hash算法来实现,那么它就是一个hashtable了。
    在《STL源码剖析》中SGI版本的STL实现中有讲到hashtable和hashmap。hashtable可以提供任何有名项(named item)的存取操作和删除操作,也可被视为一种字典结构,它通过一个hash函数将剑指(key)映射为一个整数值,这个值对应一个桶子,key所对应的value存储在桶子中。SGI在STL标准规格之外,另提供了一个所谓的hashmap,以hashtable为底层机制。由于hashmap所供应的借口操作,hashtable都有提供,所以几乎所有的hashmap操作行为,都只是转调用hashtable的操作而已。map的特性是每一个元素都同时拥有一个实值(key)和一个键值(value)。这一点在hashmap中也是一样,hashmap的使用方式跟map完全相同。普通的map在底层是用红黑树实现的,因此具有自动排序功能,而hashtable没有这样的功能,因为hashmap底层用hashtable实现,是无序的一种数据结构。

版权声明:本文为博主原创文章,未经博主允许不得转载。