腾讯qq部门客户端一二面(已挂)
省流:感觉没有客户端的经历,客户端的路应该是堵死了
流程:
投简历
测评
一面:当晚发二面
二面:三四天后挂
一面
- c++多态:略
- 动态链接、静态链接(过程、优缺点)
- 动态库可以卸载吗?
- 动态链接:多个动态库函数同名冲,有什么行为。
GNU 链接器(ld)会选择第一个遇到的符号定义,后面遇到的会忽略。(其实是按编译命令时,链接库的顺序来,如果A、B都有,并且先链接A,就会选择A的函数定义)。
解决方法:
- 可使用handle = dlopen("./libFuncA.so", RTLD_LAZY),显式指定要调用的动态库;该函数族需设定打开模式,返回一个动态库的句柄,调用句柄和函数进行操作,完成后需要关闭。
- 定义函数指针,在动态库中查找符号func = dlsym(handle, "sayOut")
- 关闭动态库句柄:dlclose(handle)
隐藏函数:
- __attribute__((visibility("hidden")))隐藏无关函数
hook函数:
- dlsym(RTLD_NEXT, #name)实现函数hook。name函数的定义在此之后的第一个。
- 源代码变成二进制过程
- new/delete和malloc/free
应该说上operator new和placement new的
- free如何知道需要释放的内存大小
malloc(size)时,申请的空间肯定会大于size,因为需要一部分空间用来存放内存块元数据的结构体,通常位于返回指针的前面。其中元数据就包括内存块的真实大小。而且申请的空间一般是有规律的,比如最少申请24字节(包含元数据),向上取整8的倍数。可以通过malloc_usable_size来获取真实申请的大小。总大小 = size向上取整为8的倍数 + 8。free时,向指针往前偏移,就能获取内存块大小。
- heap、stack
- c‘s struct and cpp’s struct
- 相同:都可以作为数据集合内存布局一样,按顺序
- 不同:c++:可以有成员函数、继承、支持模板;c:没有
c++的struct和class:默认访问权限不同、默认继承权限不同
- c++的内存分布
- git回退命令\git的分布式怎么存储的
- 进程和线程
- 内存只有8g,做多可以申请多少内存
- gpu、npu、人工智能芯片
- 实习:缓存命中率、背景、指标衡量
- 反问:建议实习过程中需要多些自己的思考
二面
- 自我介绍、学习项目、经验
- 说一个代表性的项目(一个智能协同的项目,比较简陋)
- 实习内容(qemu嵌入式设备仿真)
- 仿真系统是多少负责
- 怎么分工
- 最有难度的工作(新设备仿真)
- 难度体现在哪?(新设备,需要查看日志、gdb调试)
- 印象深刻的点?(coredump问题)
- 怎么避免这种问题?(日志、有问题需要有中断程序)
- 简历上的性能优化项目?(介绍tcg,介绍缓存刷新,自己的优化思路、效果)
- 还有什么优化的方法?(线程绑核、添加内存、线程数)
- 是否分析过,qemu仿真已经把机器的性能吃满(没正面回答,就说,由于需要在一个机器上多个仿真,所以不能吃满)
- 有没有找到一个平衡点(根据启动时间来衡量)
- 怎么想到这个优化点的(导师叮嘱需要留意,自己上网查找)
- 还有继续优化的空间(有,但我的工作还是负责仿真实现)
- 有设想过自己的工作内容(c++偏向的、比较底层)
- 你觉得客户端有那些适合的(性能优化相关的)
- 举个具体的例子(举不出来)
- 经常使用的软件(移动端的购物app)
- 使用过程中,发现什么问题吗?(卡死)
- 什么会导致卡死(死锁)
- 还有呢(内存不够、内存泄漏)
- 为什么想报客户端?(胡言乱语)
- 有了解过客户端的技术吗?(胡言乱语)
- 有尝试过写客户端的软件吗?(web网页算吗)
- 工作地点
- 反问:工作内容:qq基础架构,客户端,基础架构,网络青睐的特性:没有固定的,根据候选人的简历来考察