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