3.5 模拟面试

1.如何判断链表为环

 答:有两种方法

   1,快慢指针:一个一步走,一个两步走,如果快指针遇到NULL代表无环,快慢相遇代表有环

   2,哈希:用哈希记录之前的节点,然后判断当前节点是否在之前出现过

2.蓄水池抽样原理

 答:不会,明天补上>_<

 3..C中static的作用?

答:1,隐藏:如果全局变量定义的话,作用域是所有源文件,但是如果static修饰后,作用域就是在当前源文件中使用

   2,局部持久化:如果在函数里面定义使用的话,能保持之前的值

4.满二叉树是什么,如何在二叉排序树中找到第三大节点

答:就是除了叶子节点,每个节点都有左右孩子        使用中序遍历能够从小到大的遍历二叉排序树

5.extern关键字用法

答:多个源文件做到一次定义,多次申明        extern "C"    代表接下来的代码使用C环境编译

6.stl vector push_back() 的复杂度?扩容机制?为什么要 2 倍扩容?

答:均摊复杂度是O(1)  ,vector底层有三个指针,代表开始 ,结尾 ,容量结尾,如果到达容量,那么就需要扩容,一般是1.5倍或者2倍,2倍原因的话做不到均摊O(1)     (不懂为啥2倍就做不到。明天看下

   拓展:1.5倍比2倍好在哪里,因为如果2倍扩容的话,考虑连续申请的内存空间    1 2 4 8 16 32,因为申请内存在删除内存之前,所以当前内存得不到复用,只能依靠之前的内存,但是2倍之前的内存永远达不到我要申请的大小,所以达不到复用的目的,但是1.5倍可以

7.详细讲解static成员变量和static成员函数

答:static成员变量是类所有的,所有对象共同使用,必须要类外初始化,这里引入ml大猛男说的话(因为static修饰的变量是存在全局变量区的,内存上不属于类,所以内存申请的话必须要在类外定义,类内申明)   static函数只能使用static变量,并且static函数因为是类所有的,所以没有对象的this指针

8.介绍一下野指针

答:没有初始化的指针 和   删除迭代器删除指向内存的指针并且没有赋值回NULL    (野指针也叫悬空指针

9.一篇英文文章,求统计出现频率最高的k个单词

答:先用hash分治 把这些因为单词分割成多个小文件,然后依次对多个小文件求出前K大,然后再将多个小文件合并起来,合并过程可以使用堆

  字典树,先便利所有单词建立字典树,然后遍历字典树所有节点建立一个最小堆

10.strcpy的安全性

     答:strcpy 安全性差,如果目标内存空间没有源长的话就会产生缓冲区溢出,并且源和目标的内存不能重叠,
    strncpy是对strcpy的安全性问题提出的新的,然后memmove可以解决内存重叠问题

总结:总的来说今天的题都能回答上来,蓄水池不会>_< ,今天把几个小细节不懂的地方都和牛逼网友们讨论出来,非常爽,冲冲chong

猜你喜欢

转载自www.cnblogs.com/Lis-/p/12424112.html
3.5