字节跳动校招c++客户端视频软件开发
指针 与 引用有什么差别?
引用:引用对象本身,对象的大小,必须初始化
多路io复用
线程状态
创建、就绪、运行、阻塞和死亡。
epoll select poll区别
new 与 malloc的差别?
new调用对象的构造函数
malloc
std::unique_ptr
删除了拷贝构造函数,必须用move进行赋值
std::unique_ptr<A> a = ...
std::unique_ptr<A> b(move(a))
shared_ptr实现 堆上开辟引用技术 atomic_int 原子操作 多线程会出问题
class A
{
public:
void virtual vFunc(){
cout<<"A.vFunc"<<endl;
}
void nvFunc()
{
cout<<"A.nvFunc"<<endl;
}
};
class B:public A
{
public:
void virtual vFunc(){
cout<<"B.vFunc"<<endl;
}
void nvFunc()
{
cout<<"B.nvFunc"<<endl;
}
};
void getP(A* a)
{
a->vFunc() ;
}
void getQ(A& a)
{
a.vFunc() ;
}
int _tmain(int argc, _TCHAR* argv[])
{
B * pB = new B() ;
A * pA = pB ;
pB->vFunc() ; B
pA->vFunc() ; B
pB->nvFunc() ; B
pA->nvFunc() ; A
(*pA).vFunc(); A//B 会去寻找虚函数表
(*pA).nvFunc(); B//A 寻址就能寻到pA那么大 所以不能是B
(*pB).vFunc() ; B
(*pB).nvFunc(); B
getP(pA); B
getQ(*pA) ; B
return 0;
B.vFunc
B.vFunc
B.nvFunc
A.nvFunc
B.vFunc
A.nvFunc
B.vFunc
B.nvFunc
B.vFunc
B.vFunc
}
class MyTest {
public:
void f() {
}
int getT() {
return t;
}
void setT(int a) {
t = a;
}
int t = 0;
};
MyTest* my = nullptr;
my->f(); // 没有问题
int a = my->getT(); // 断掉
my->setT(1); // 访问非法内存
shared_ptr
在堆上开辟一个空间,用于存放引用计数。多线程会影响引用计数。
io多路复用,epoll,主线程监听网络请求
epoll:用了红黑树,不用一次性将所有请求放入内核中,增删比较快
线程有哪些状态?
阻塞,运行,挂起,就绪
线程状态什么时候发生改变?
条件变量,cpu轮到它
有一个mxn的网格,每次只能向右或向下走,每次最多走两步,从左上角走到右下角有多少种走法?
#字节跳动##校招##C++工程师##面经#
引用:引用对象本身,对象的大小,必须初始化
多路io复用
线程状态
创建、就绪、运行、阻塞和死亡。
epoll select poll区别
new 与 malloc的差别?
new调用对象的构造函数
malloc
std::unique_ptr
删除了拷贝构造函数,必须用move进行赋值
std::unique_ptr<A> a = ...
std::unique_ptr<A> b(move(a))
shared_ptr实现 堆上开辟引用技术 atomic_int 原子操作 多线程会出问题
class A
{
public:
void virtual vFunc(){
cout<<"A.vFunc"<<endl;
}
void nvFunc()
{
cout<<"A.nvFunc"<<endl;
}
};
class B:public A
{
public:
void virtual vFunc(){
cout<<"B.vFunc"<<endl;
}
void nvFunc()
{
cout<<"B.nvFunc"<<endl;
}
};
void getP(A* a)
{
a->vFunc() ;
}
void getQ(A& a)
{
a.vFunc() ;
}
int _tmain(int argc, _TCHAR* argv[])
{
B * pB = new B() ;
A * pA = pB ;
pB->vFunc() ; B
pA->vFunc() ; B
pB->nvFunc() ; B
pA->nvFunc() ; A
(*pA).vFunc(); A//B 会去寻找虚函数表
(*pA).nvFunc(); B//A 寻址就能寻到pA那么大 所以不能是B
(*pB).vFunc() ; B
(*pB).nvFunc(); B
getP(pA); B
getQ(*pA) ; B
return 0;
B.vFunc
B.vFunc
B.nvFunc
A.nvFunc
B.vFunc
A.nvFunc
B.vFunc
B.nvFunc
B.vFunc
B.vFunc
}
class MyTest {
public:
void f() {
}
int getT() {
return t;
}
void setT(int a) {
t = a;
}
int t = 0;
};
MyTest* my = nullptr;
my->f(); // 没有问题
int a = my->getT(); // 断掉
my->setT(1); // 访问非法内存
shared_ptr
在堆上开辟一个空间,用于存放引用计数。多线程会影响引用计数。
io多路复用,epoll,主线程监听网络请求
epoll:用了红黑树,不用一次性将所有请求放入内核中,增删比较快
线程有哪些状态?
阻塞,运行,挂起,就绪
线程状态什么时候发生改变?
条件变量,cpu轮到它
有一个mxn的网格,每次只能向右或向下走,每次最多走两步,从左上角走到右下角有多少种走法?
#字节跳动##校招##C++工程师##面经#