我来还愿了
下午收到了字节跳动游戏研发工程师(杭州)的意向书了,问问意向书稳吗?
下面附上面经
一面 ——20190903
volatile
extern "C"
提示编译器(确切的说是提示c++的编译器)使用C语言的方式进行编译或者链接。(==如果在c++链接器下调用使用c编译器的文件(比如dll)那系统会提示找不到函数,为了解决这个问题就引入了extern "C"==)
c++编译函数和c编译函数有什么区别
c++支持函数重载,而过程式语言c则不支持。函数被c++编译后在符号库中的名字与c语言的不同。例如,假设某个函数的原型为:
void foo(int x, int y);
该函数被c编译器编译户在符号库中的名字是_foo,而c++编译器则回产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字成为“mangled name”
_foo_int_int这样的名字包含了函数名、函数参数数量以及类型信息,c++就是靠着中机制来实现函数重载。例如,在c++中,函数void foo(int x, int y)与void foo(int x, float y)编译生成的符号是不相同的,后者是_foo_int_float大小端——代码测试
c++中迭代器失效情况讲一下
TCP三次握手过程
TCP中的快重传,选择重传(不知道是啥)
重构二叉树
附上现场手撕的代码(手撕代码写的不好勿喷):#include <iostream> #include <vector> using namespace std; struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int value):val(value), left(nullptr), right(nullptr){} }; TreeNode* constructTree(vector<int>& preVec, int preStart, int preEnd, vector<int>& inVec, int inStart, int inEnd); int main() { int pre[7] = {4,2,1,3,6,5,7}; int in[7] = {1,2,3,4,5,6,7}; vector<int> preVec(pre, pre + 7), inVec(in, in + 7); TreeNode* root = constructTree(preVec,0, preVec.size() - 1, inVec, 0, inVec.size() - 1); cout << root->val << endl; return 0; } TreeNode* constructTree(vector<int>& preVec, int preStart, int preEnd, vector<int>& inVec, int inStart, int inEnd){ if(preStart > preEnd || inStart > inEnd){ return nullptr; } int rootVal = preVec[preStart]; int i = inStart; for(; i < inEnd; ++i){ if(rootVal == inVec[i]){ break; } } TreeNode* root = new TreeNode(rootVal); root->left = constructTree(preVec, preStart + 1, preStart + i - inStart, inVec, inStart, i - 1); root->right = constructTree(preVec, preStart + i - inStart + 1, preEnd, inVec, i + 1, inEnd); return root; }
二面——20190904
47分钟
struct和class区别
malloc和new区别
如果用malloc创建一个内存区域,想要在这个内存区域上创建实例要怎么做:placement new
虚拟内存,为什么需要虚拟内存
虚拟内存段页式需要访问内存几次
虚函数原理
如何创建进程
什么是僵尸进程和孤儿进程
计算机网络每层都有什么协议
TCP与UDP的区别是什么
如何做到只有一个实例:单例模式
智能指针
算法题:
附上现场手撕的代码(手撕代码写的不好勿喷):
#include <iostream> #include <vector> using namespace std; struct ListNode{ ListNode* next; int val; ListNode(int value):val(value), next(nullptr){} }; int main() { int n; cin >> n; vector<int> nums(n); ListNode* dummyOdd = new ListNode(-1); ListNode* dummyEven = new ListNode(-1); ListNode* pOdd = dummyOdd; ListNode* pEven = dummyEven; for(int i = 0; i < n; ++i){ cin >> nums[i]; if(((i + 1) & 0x01) == 1){ ListNode* pNode = new ListNode(nums[i]); pOdd->next = pNode; pOdd = pOdd->next; }else{ ListNode* pNode = new ListNode(nums[i]); pNode->next = pEven->next; pEven->next = pNode; } } ListNode* dummy = new ListNode(-1); ListNode* pNode = dummy; pOdd = dummyOdd->next; pEven = dummyEven->next; while(pOdd && pEven){ if(pOdd->val > pEven->val){ pNode->next = pEven; pEven = pEven->next; pNode = pNode->next; }else{ pNode->next = pOdd; pOdd = pOdd->next; pNode = pNode->next; } } if(pOdd){ pNode->next = pOdd; } if(pEven){ pNode->next = pEven; } ListNode* res = dummy->next; delete dummy; delete dummyEven; delete dummyOdd; while(res){ cout << res->val << " "; res = res->next; } cout << endl; return 0; }
三面——190905
上来就要做题,一脸懵逼,完全不问基础问题,不说了上图吧
hr面——20190909
15分钟左右
- 自我介绍
- 你对字节做游戏有什么看法
- 你为什么想做游戏
- 为什么考研不考计算机
- 你做的成就感最大的事是什么
- 你期望的工作地点是什么
- 自己的性格是怎么样的
- 你还有什么问题?