柠檬微趣凉经-C++客户端开发工程师
时间线
- 7.14 投递
- 7.15 笔试
- 7.22 一面
- 7.25 主管面
- 7.26 感谢信
一面(60分钟)
(面试官人很好,会引导你回答问题)
- 自我介绍
- 用C++做过什么项目
- float、double多少个字节,存储方式
- 一个指针多少字节,能指向多大的内存
- new这个关键字的功能
- new申请的内存是连续的吗,在物理内存上是连续的吗?
- vector原理
- map实现
- unordered_map实现
- 哈希表数据冲突怎么解决
- 链地址法优化策略
- 左值右值,右值存储在哪个内存区域
- 右值引用的作用
- 智能指针的定义 你在实现的时候会做哪几个功能
- bind
- lambda
- 解释一下快排 各种情况下的复杂度
- 具体什么情况下是n2
- 快排怎么优化
算法题
- 主串target 1001010111 子串pattern 1010101(额外条件:子串最后一位是1)
- 求子串是否在主串中出现过
- 写了个O(n)的简单解法:
//计算掩码串mask mask = 1; while(mask<pattern){mask *= 2;} mask--; //使得mask长度和pattern相同但是mask全为1 while(target >= pattern){ // 判断target在掩码内的部分是不是和pattern匹配 if((target&mask) == pattern){return true;} target >>= 1; } return false;
- 然后面试官开始教我这种问题效率最高的一种解法是怎么工作的
直接把target和pattern相与得res,其中res中的1即为下一次匹配的起点
以此用上了额外条件(可以写一写感受一下)
在这之上再进行拓展,用到了信息量压缩算法(我的知识盲区)
反问:
- 面试官的部门
- cocos和U3D在公司的比例
主管面(40分钟)
- 自我介绍
- 游戏开发方面做过什么努力
- cocos的初始印象
- 为了游戏性能考虑,有什么注意事项
- C++从代码到可执行文件的步骤
- 动态链接静态链接的区别
- STL常见容器的底层实现
- map、unordered_map
- C++野指针怎么出现、如何避免
- 单链表有那些形状
- 链表相交怎么找相交节点(再加上环呢)
PS:这里问了十分钟 各种情况 最后问表现的时候还让我回去想想这个
算法题
- 链表A1 A2 A3 A4 ... AN
- 重排成 A1 AN A2 AN-1..
- lc原题
反问
- 面试官负责的游戏
- 公司作息
- 面试表现