面试经验-高德地图引擎开发C++(社招)-二面

1、介绍一下最近一年的项目
答:巴拉巴拉


2、说下这个项目你解决过什么问题?
答:巴拉巴拉,聊到内存泄露


3、你觉得你遇到的内存泄露都有哪几种?
答:有继承关系的类父类析构没有声明成虚函数的、malloc、new指针未释放的、vector里面指针未释放的,还一个内存占用问题就是vector元素只进行了pop,没有释放内部数组内存,导致容器占用的内存逐渐变大。
注:夜里忽然惊醒,想到当时紧张忘说了文件描述符未释放的问题。比如open的文件未关闭,连接的socket不再使用未断开。


4、那你是怎么释放vector里面的数组内存的?
答:vector str, str.swap(vector())


插曲:面试官发了个阿里的链接,在线刷题,伪代码即可。
1、设计一个方法求二叉树的高度
写出来了。
2、设计一个方法对一个有序的单向链表去重
第一次没看到有序用的set,面试官指出来了让我修改。去掉set改判断值就可以了。第二次提醒跳过的节点为什么没有释放,加了delete。


5、介绍下虚函数
答:是实现多态的核心,父类声明虚函数,子类重写。虚函数原理是一个类的实例的首地存放的是虚函数表指针地址,使用该地址可以访问虚函数表,起初虚函数表内都是父类虚函数的地址,当被实例化为子类时,会用子类虚函数的地址替换虚函数表中的对应函数地址,实现函数覆盖。


6、介绍下进程和线程
答:进程是系统资源分配的基本单位,线程是CPU调度的基本单位。
切换:
进程切换:
1、切换页表目录(虚拟内存到物理内存的映射)
2、切换内核堆栈(整个内存空间)
3、上下文切换(核心消耗是需要把进程数据放入到寄存器)
4、刷新TLB(就是padg cache,存放磁盘数据索引,加快磁盘文件访问效率)
线程切换:
1、切换栈(隶属于同一进程相同的内存空间,只切换栈)
2、上下文切换(没有进程数据的换出换入,仅切换少量寄存器)

数据同步:
进程:
通信:普通管道、有名管道、消息队列、共享内存、内存文件映射、socket
同步:信号、信号量
线程:
通信:共享变量地址即可
同步:各种锁,互斥锁、自旋锁、读写锁、条件变量


7、fork介绍一下,返回值都代表什么意思
答:返回0是子进程、返回正数为父进程,正数是子进程PID,返回-1执行失败


8、智能指针说一下
答:使用计数记录引用次数,计数为0时析构才释放内存


9、linux中so和a的类不需要导出、windos的dll和lib类需要导出才能使用这是为什么?
答:这个不知道,面试官说不要紧


10、用过什么开源库
答:pcap网络收发包和一个开源的http协议文件,boost没用过。面试官回复不要紧。


11、了解数据库吗?
答:自学过mysql和redis,原理和指令都学过,但是指令记不太清楚了。面试官回复可以没再细问。


12、了解分布式吗?
答:不了解。面试官回复不要紧,这个可以学习。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值