美团后端一面面经

语言C++,部门基础平台研发,base成都
楼主先面了某个小部门,到二面了面试官说hc没了,因此转到了其他小部门重新一面,所以有两次一面。

====================8.26 一面=============================
1、说明一下RAII
RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。由于系统的资源不具有自动释放的功能,而C++中的类具有自动调用析构函数的功能。如果把资源用类进行封装起来,对资源操作都封装在类的内部,在析构函数中进行释放资源。当定义的局部变量的生命结束时,它的析构函数就会自动的被调用,如此,就不用程序员显示的去调用释放资源的操作了。

2、说明下memory order
在软件编译阶段进行了编译优化,会使得机器指令的生成并不是严格按照源代码顺序生成;在处理器实际执行指令的阶段,也会对指令进行重排。
memory order 作用
memory_order_relaxed 无fencing作用,cpu和编译器可以重排指令
memory_order_consume 后面依赖此原子变量的访存指令勿重排至此条指令之前
memory_order_acquire 后面访存指令勿重排至此条指令之前
memory_order_release 前面的访存指令勿排到此条指令之后。当此条指令的结果被同步到其他核的cache中时,保证前面的指令也已经被同步。
memory_order_acq_rel acquare + release
memory_order_seq_cst acq_rel + 所有使用seq_cst的指令有严格的全序关系

3、SIGKILL一定会被执行吗?SIGTERM呢?
SIGTERM:
SIGTERM是kill或killall命令发送到进程的默认信号。它会导致进程终止,但与SIGKILL信号不同,进程可以捕获并解释(或忽略)它。因此,SIGTERM类似于要求进程很好地终止,允许清理和关闭文件。
SIGINT:
SIGINT是当用户希望中断进程时由其控制终端发送给进程的信号。
SIGKILL:
在POSIX兼容平台上,SIGKILL是发送给进程的信号,使其立即终止。当发送到程序时,SIGKILL会立即终止它。与SIGTERM和SIGINT相反,此信号无法捕获或忽略,接收过程无法在接收到此信号时执行任何清理。

4、模板函数可以部分特化吗?类模板呢?
C++不支持函数模板偏特化,只能全特化。类模板可以全特化,也可以偏特化,一个是从模板数量,一个是从模板参数范围上。

5、多态怎么实现的?虚函数virtual写在哪里?子类函数还需要写virtual吗?哪种继承能实现多态?子类对象赋值给父类对象还能实现多态吗?
多态发生于public继承,如果要虚函数是private,需要在友元函数内才能发生多态。虚函数是指这个函数的签名。 而虚函数在类中的实现不是,她是一个实实在在的成员函数。 和普通的函数一样的。 如果这个函数是虚函数,此时编译器会把其地址放在虚表中。 所以这个函数有两个入口。 第一个就是普通调用,和普通的成员函数一致。 第二个是通过引用,此时编译器会通过虚表来呼叫。 此时需要添加一个修正 this 指针的转换函数。例子如下
class Bclass
{
private:
virtual void fun() { cout << "Bclass fun is here!" << endl ; }
void fun2() { cout << "Bclass fun2 is here!" << endl; }
friend int main();
};

class Dclass : public Bclass
{
public:
virtual void fun() { cout << "Dclass fun is here!" << endl; }
void fun2() { cout << "Dclass fun2 is here!" << endl; }
};


int main()
{
Bclass *pObject = new Dclass();
pObject->fun();  //发生多态
pObject->fun2();  //不发生

Dclass son;
Bclass father;

Bclass &t= son;
t.fun();  //发生多态

Bclass m=son;
m.fun();  //不发生多态

father.fun(); //调用的父类函数
return 0;
}
输出:
Dclass fun is here!
Bclass fun2 is here!
Dclass fun is here!
Bclass fun is here!
Bclass fun is here!


6、内存泄漏怎么解决?valgrind优缺点?
https://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html

7、结合客户端和服务端说明TCP三次握手

8、windows socket和linux socket区别
https://www.cnblogs.com/dyllove98/p/3151162.html

代码
链表区间反转
二叉树层序遍历


=========================9.8 重新一面=============================
说明下TCP(包括了拥塞控制流量控制等)
死锁条件和代码中怎么解决(这里背八股没用了)
进程和线程
线程通信方式
进程通信方式
网络为什么分层(为什么分七层或五层)
如何通俗解释时间复杂度
问了一些项目上的东西和实习遇到的困难

代码
写sql代码(楼主没有写过,这里直接求饶说不会了说了下大致思路)
有个学生表,表里有学生的id、name、age
有个科目成绩表,表里有id、学生的id、科目的id、科目分数
求平均分最高的学生id和age


之前面完了1h之内就发消息通过开始下一轮了,这次还没有消息感觉好悬,希望通过吧


#美团##后端开发##面经#
全部评论
请问楼主给二面通知了吗
点赞 回复
分享
发布于 2021-09-09 21:31

相关推荐

1 11 评论
分享
牛客网
牛客企业服务