当前位置: 首页 > 面试经验 >

天美一面 后台开发(凉)

优质
小牛编辑
82浏览
2024-01-11

天美一面 后台开发(凉)

天美一面 后台开发(凉)

自我介绍

C++用什么版本?

C++11

3个全局变量相互依赖,在程序中该如何初始化

答:手动分析、依赖关系转为类间的继承关系

反问:3个变量手动分析,那300个变量呢?

答:不会

全局静态变量和函数静态变量的初始化顺序

全局静态变量先初始化,第一次调用函数时,初始化函数内的静态变量

全局静态变量和全局非静态变量的初始化顺序

这个当时说的是先初始化全局静态,再全局非静态,说错了。

应该是无特定顺序,先定义则先初始化。

谈一下对多态的理解

静态多态:函数重载,函数名相同但参数列表不同,简单说了下使用场景

动态多态:子类对父类的虚函数重写,虚函数表

虚函数表的存储位置

运行时刻能把虚函数表拿出来吗

虚函数表指针存储位置

对象的头部字节

拿到虚函数表地址后,是否可以改写虚函数表的内容

虚函数表在代码段,不可以被修改,否则会引发段错误。

题目一

class Test
{
public:
    void hello() {
        printf("hello\n");
    }
};

int main()
{
    Test *p = nullptr;
    p->hello();
	return 0;
}

问:上述代码可以编译通过吗?可以执行吗?

答:虽然p指向空,但其类型被编译器解释为Test,可以正常调用hello函数,但这种空悬挂指针实际上是未定义行为。

问:p可以正常调用hello吗?可以正常执行吗

答:(内心OS:???)可以执行

问:假如Test有个父类,hello函数重写了父类的hello函数,还能执行吗?

答:可以

说一下虚拟内存

Linux上有个二进制程序一直在运行,修改代码后重新编译把原来的二进制程序覆盖了,会怎么样?

当时答的是原程序被操作系统加载进内存,不会受到影响,但好像不对。

进程占用的内存比较多,该怎么调试是什么情况?

free可以查看已使用/已分配/已缓存的内存大小

htop查看每个进程的虚拟内存/物理内存使用大小

定位到一个进程的内存比较异常,该如何进一步查找为什么内存会异常

答:valgrind/asan可以给出内存泄漏的位置和大小

问:一般是不太精确的,该怎么找出是哪一段代码引起泄漏

答:工具+人工看代码

问:代码量太大,人工不现实

外网用户连接不到服务器,该怎么排查是什么原因造成的

不会,完全瞎扯。

一开始从客户端的角度去说,能否ping通服务器,dns设置等等,但面试官表示不应该让用户去做这些。

然后又从服务器角度说,可能用户被服务器黑名单封禁。但面试官也不满意。

题目二,lc460 LFU缓存,15min

题目三,atoll,10min

#面经##腾讯面经##后台开发面经##腾讯天美#
 类似资料: