字节跳动后台开发 一二面面经
字节跳动教育部门-在线教室 后台开发实习生
一面:
- 面试官介绍部门,自我介绍
- C++类型转换 static_cast, const_cast, reinterpret_cast, dynamic_cast
- dynamic_cast 可以从子类指针转父类指针吗?
- 面向对象,封装,继承,多态,介绍一下,这三者的意义分别是什么,这样做优势在哪?
- 给一分钟时间阅读代码,回答问题:
/*
* 5.1 A* x = new B() 的构造过程
* 5.2 输出时什么?x->foo(); 执行的过程是怎么样的?虚表是什么时候生成的?
* 5.3 x 内存里边除了虚指针还有什么?描述一下 x 的内存分布式什么样的?
* 5.4 B类的对象内存模型是怎么样的?Member内存模型是怎么样的?sizeof(x)是多少?sizeof(B的对象)是多少?为什么?
* 5.5 delete x; 整个过程是怎样的?B,A两个类都没写析构函数,会怎么样?delete x 会调用到B的析构函数吗?会发生内存泄漏吗?怎么改可以避免内存泄漏?
* 5.6 只在 A 类中添加一个虚析构函数可以避免内存泄漏吗?为什么?整个过程是什么样的?
* 这个地方被面试官绕的很晕。。。面试官问题都很犀利
*/
class Member {
public:
Member() {
m = new int();
}
~Member() {
delete m;
std::cout << "member" << std::endl;
}
private:
int* m;
};
class A {
public:
virtual void foo() {
std::cout << "foo" << std::endl;
}
};
class B: public A {
public:
void foo() {
std::cout << "b foo" << std::endl;
}
private:
Member m;
};
int main() {
A* x = new B();
x->foo();
delete x;
}
6. C++11,14了解吗,只了解C++11
7. 拷贝构造函数使用场景有哪些?
8. 左值和右值概念,一般什么样的东西会是一个右值?举一个右值的例子
9. STL中map和unordered_map 区别?
10. select, poll, epoll对比
11. 线程间同步方法
12. 哈希表介绍一下,冲突解决
13. 二叉搜索树结构,怎么证明二叉搜索树的中序遍历是有序的,证明一下
算法题:
1. 判断树是否为一个二叉搜索树(遍历写出非递归,在一个while循环里就能判断出来是否有序,不需要其他的循环,要求15分钟之内写完) 2. 数组中出现频率最高的K个数 (要求12分钟分钟之内写完)第一个算法题不难,但是写了一半面试官就不让写了,说结构太乱,代码风格不行,不易理解,被怼了好久。
第二个题我先说了下思路,感觉说的思路没问题,不知道是不是面试官听错了,又被怼一顿。
面试官说没看到我的一点代码能力,如果我能把第二题写的很好的话就帮我推二面,写不好就算了。
然后写第二个题时压力特别大,最后写的也一般(代码不够规范,for循环里写了两个if判断),用面试官的话来说就是很不漂亮,给我两分钟就修改,修改了之后他说还行,最后他也帮忙推了二面。
算法题并不难,但是就是有时间限制,还特别注重代码规范,之前写算法题从来没注重过这种东西,弄的很混乱,然后面试官还会给压力,搞得很焦虑🤣
二面(5分钟之后):
- 实习,项目介绍
- 面试官应该之前没看过我简历,我说用C++不会Go,面试官很惊讶🤣
- hash解决冲突方式
- 链地址法如何实现,怎么设计,数据结构是什么样的,链表节点时什么样的,节点里的val是什么类型
- 两个队列实现栈
-
算法题:
// 一个先递增后递减序列,找出中间增减趋势改变的数
查看7道真题和解析
