宽德投资一面面经
自我介绍,基本情况
项目:
问了留学时候做的线上训练 给定需求,设计类和他们的继承关系
KV数据库项目:
加节点是怎么加的? 找到要加的位置的前一个节点,用随机函数算出新节点的层数,建立节点索引关系
删节点是怎么删的? 找到要删的节点,把它的节点索引交给前一个节点。
追问是删一层还是删全部层? 删全部 这里答的不好(说句题外话,面试官很可能是自己也做过这个项目= =。我之前写到这里的时候就疑惑说人家项目这么写删的是最底层还是全部,但是后来写好了就没有细想了,确实应该把这块想明白)
跳表操作的时间和空间复杂度是多少? 时间复杂度O(logn) 空间我说的:O(N*∑(i=0~m) (1/2)^i)。。。面试官提醒说小于O(2N)就可以了。。。
webserver项目:
如果想把你这个程序的最大访问数增加十倍,应该怎么做? 更换资源更充足的环境,改进线程池(其实面试官想问分布式,奈何我不懂)
八股:
为什么虚函数不能是模板函数? 我说的继承时可能导致子类和父类之间的语义冲突(确实没了解过,其实是因为虚函数表大小的问题,如果虚函数使用模板的话,就有可能实例化出很多版本的虚函数。编译器为了确定虚函数表的大小,必须要遍历全部代码文件来确定这个虚函数具体会被实例化出多少版本,这对于代码量大的程序来说成本过大了,所以c++禁止了这种操作)
虚函数表用的什么数据结构?存放在哪里? 答的不好(数组,不同编译器存放位置不同)
vector的第二个模板形参是什么? 不知道(给空间配置器allocater传参,allocater具体得看STL源码解析)
resize和reserve的区别? resize改变size,reserve改变capacity
vector调用resize的时候,如果是元素是一个类,会不会调用这些函数的析构函数? 如果存的是类本身,会;如果是指针,不会。clear()也是一样。
new和malloc的区别? new是关键字,malloc是函数;返回指针类型;自动/手动分配内存;回收方式
有什么检查内存泄露的方法? 重写new和delete,分配和回收时给出信息
智能指针了不了解?unique_ptr如何移交指向的对象? move函数
性能分析软件了不了解? 不了解
有哪些进程间通信的方法? 匿名管道,有名管道,信号,消息队列,共享内存映射
用过哪些?webserver里定时清理不活跃用户这部分用到了信号和匿名管道
信号和信号量的区别? 信号是IPC方法,信号量是并发控制手段
浏览器输入网址后发生了什么? 按八股说了一遍
追问链路层和物理层的情况 答的不好
ARP协议有什么作用,在哪一层? 根据IP地址找MAC地址,链路层
算法没有
答的不好的地方挺多的,看他们春招缺不缺人吧。。。
#春招##面经##宽德投资#