字节跳动多媒体开发工程师面经,offer已拿
1.网络中会用到令牌桶,讲一下桶排序的优缺点
2.平衡二叉树的结构是什么样的,插入数据最多会旋转几次。2次
3.模板类讲一下。模板类和多态有什么区别。
4.继承、虚函数
5.智能指针的三种,分别讲一下。内部计数器是怎样实现计数的,其实是指向对象A的指针被释放掉了,则整体的计数减1,不是说的释放掉这个对象。
6.select、poll、epoll。
7.手撕代码。大概就是公司要搞团建,组成两两一组,但是大家只愿意和熟人组队,给了一堆输入,第一行是N个人,第二行分别是 该人的序号,有几个伙伴,伙伴的序号。问最多可以组成多少队伍。
【二面】
1.虚函数是怎么实现的。这里指的是虚函数表的概念。然后问了如果一个类A,里面只有10个虚函数,类B继承A后,B的sizeof是多大。目测应该是40字节,因为虚函数表里面存的都是指针。
2.ping的过程用到了什么协议?ICMP,是哪层的?网络层。
3.数据库的索引用到的是什么数据结构?B+树,那么B+树的特点是什么?为什么要用这个数据结构?因为索引得快,只有叶子节点是存放值的,其他节点都是存放索引,可以比B树存更多的索引。查找效率是跟IO次数有关的,IO次数又是跟树的高度有关的,所以B+这种矮胖的结构很有效。
4.udp和tcp的区别
5.C++里面申请内存和释放内存的相关知识。new、delete、malloc、free的内容。
6.C++里面的存储问题,堆、栈、静态区、字符常量区、代码区。给了一个题,问这段代码存在什么问题么?
char* func() { char *a = "abc"; return a; } int main() { char* p = func(); printf("%s", p); return 0; }
照理说在func中,函数的返回值是一个指针的拷贝,然后这个指针就被释放掉了,应该会报错。但是因为后面是”abc”,是存放在字符常量区。所以这个地方的地址不会被释放,也就是可以正常显示。所以此段代码没问题。(面试官其实考察的是分析问题的思路,所以要把思路讲清楚,而不是模棱两可的觉得。)
7.给了个迷宫的题,一个8*8的迷宫,从左上角走到右下角共有多少种走法,只能向下或向右移动。
面试官说可以考虑递归,最后也没想出来方法。递归是将大的问题化简为小的问题。
8.有1,2,5,10个零钱,要组成N元,总共有多少种组合方式。
9.手撕代码
输出最短路径的题目:/a/b/.././
#include <iostream> #include <vector> #include <stack> using namespace std; int main() { string s; cin>>s; int len=s.size(); stack<string> data; vector<string> svec; int m=0; for(int i=0;i<len;i++) { if(s[i]=='/') { m=i+1; for(int j=m;j<len;j++) { if(s[j]=='/') { string temp=s.substr(m,j-m); svec.push_back(temp); i=m; break; } } } } for(auto c:svec) { if(c!="."&&c!="..") data.push(c); else if(c==".."&&!data.empty()) data.pop(); } while(!data.empty()) { cout<<'/'<<data.top(); data.pop(); } cout<<endl; return 0; }
#字节跳动##面经##校招#