字节跳动校招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++工程师##面经#
全部评论

相关推荐

2 17 评论
分享
牛客网
牛客企业服务