字节跳动一面(感觉凉凉)
1. 自我介绍;
2. 进程地址空间;
3. 了解多态吗?虚函数底层?虚函数表是每个对象有一份还是每个对象有一份?虚函数表存放在哪个位置?
4. 了解编译原理吗?文本到可执行文件过程?
5. 讲一下静态链接和动态链接;既然动态链接内存中有一份,那多个程序都使用这个动态链接库,可以修改里面东西吗?
6. 了解网络吗?用过TCP和UDP吗?TCP和UDP区别;
7. 讲一下TCP通信socket,客户端和服务端都做了什么;
8. 服务端和客户端什么时候建立三次握手;
9. Listen有什么用?
10. TCP怎么确保可靠的;
11. 拥塞控制了解吗?讲一下;
12. Http了解吗?有哪些请求方法(忘了具体啥意思),回答(get,post,head),能再详细具体讲下吗?
13. Https了解吗?
14. 数据库学过吧?知道哪些数据库?
15. 写一个sql吧,两个表,有一个字段相同,怎么找到交集; join
16. 数据结构了解一下吧?vector讲一下;
17. STL用过吧,有哪些,底层实现;
18. 二叉树有哪些遍历方法?
19. 二叉平衡树和二叉树区别?
20. (二叉平衡树了解不多)那你讲一下红黑树,为什么用红黑树不用二叉平衡树;
21. B树和B+树,那和二叉平衡树区别;
22. 两个编程题:
寻找重复数
//空间复杂度O(n) // int findDuplicate(vector<int>& nums) { // unordered_set<int> temp; // for(int val : nums){ // if(temp.insert(val).second == false){ // return val; // } // } // return -1; // } //思路1:用快慢指针判断:创建两个指针slow和fast同时指向头节点, // 然后slow每次向后遍历一个节点,fast每次向后遍历两个节点,如果单链表没有环的话那么slow // 将永远追不上fast,而如果单链表有环的话slow就会追上fast。第一次相遇之后,把指针slow拉回到链表的起点, // 然后把fast的速度改为每次走一步即和slow速度相同,fast把第一次相遇点作为起点, // 那么当slow和fast再次相遇的点就是圈的起点 https://blog.csdn.net/weixin_39789689/article/details/82421684 // int findDuplicate(vector<int>& nums){ // int fast = 0,slow = 0; // do{ // fast = nums[nums[fast]]; // slow = nums[slow]; // }while(fast != slow); // slow = 0; // while(fast != slow){ // fast = nums[fast]; // slow = nums[slow]; // } // return slow; // } //silu2:采用二分法,先计算mid,然后统计数组中小于等于mid元素个数K,若K<=mid说明重复值在[mid+1,n]之间,否则 // 重复值在[1,mid],使用抽屉原理,是由于重复元素导致两遍不平衡,如果无重复元素,两边个数是一样的, // 然后依次类推,直到搜索完成,此时的low就是我们要求的重复值。 int findDuplicate(vector<int>& nums){ int l = 0, r = nums.size(); int m = 0; while(l < r){ m = l + (r - l) / 2; int count = 0; for(int i = 0; i < nums.size(); ++i){ if(nums[i] <= m){++count;} } if(count <= m){ l = m + 1; } else{ r = m; } } return l; }实现一个计算器 + - * / ()
#字节跳动##C++工程师##提前批##校招#