中望c++秋招面经一面+二面(已oc)

发布时间:2023年12月29日

中望武汉(一面)

自我介绍

说了很多然后。。

微型操作系统实现了哪些功能

MBR、bootloader、进入保护模式、内存分页、内核线程、用户进程、锁、输入输出、文件系统、简单的系统交互;
拓展(MBR和bootloader的功能):
MBR:读取硬盘信息、检测硬盘状态
bootloader:设置分段,进入保护模式,进入内核态
https://blog.csdn.net/weixin_51431342/article/details/125644696

封装、继承、多态
  1. 继承
    定义:
    让某种类型对象获得另?个类型对象的属性和?法
    功能:
    它可以使?现有类的所有功能,并在?需重新编写原来的类的情况下对这些功能进?扩展
    常见的继承有三种?式:
    1、实现继承:指使?基类的属性和?法??需额外编码的能?
    2、接口继承:指仅使?属性和?法的名称、但是?类必须提供实现的能?
    3、可视继承:指?窗体(类)使?基窗体(类)的外观和实现代码的能?
    例如:
    将?定义为?个抽象类,拥有姓名、性别、年龄等公共属性,吃饭、睡觉等公共?法,在定
    义?个具体的?时,就可以继承这个抽象类,既保留了公共属性和?法,也可以在此基础上
    扩展跳舞、唱歌等特有?法。
  2. 封装
    定义:
    数据和代码捆绑在?起,避免外界?扰和不确定性访问;
    功能:
    把客观事物封装成抽象的类,并且类可以把??的数据和?法只让可信的类或者对象操作,
    对不可信的进?信息隐藏,例如:将公共的数据或?法使?public修饰,?不希望被访问的
    数据或?法采?private修饰。
  3. 多态
    定义:
    同?事物表现出不同事物的能?,即向不同对象发送同?消息,不同的对象在接收时会产?
    不同的?为(重载实现编译时多态,虚函数实现运?时多态)
    功能:
    多态性是允许你将?对象设置成为和?个或更多的他的?对象相等的技术,赋值之后,?对
    象就可以根据当前赋值给它的?对象的特性以不同的?式运作;
    简单?句话:允许将?类类型的指针赋值给?类类型的指针。
    实现多态有两种?式
  4. 覆盖(override): 是指?类重新定义?类的虚函数的做法
  5. 重载(overload): 是指允许存在多个同名函数,?这些函数的参数表不同(或
    许参数个数不同,或许参数类型不同,或许两者都不同)
    例如:
    基类是?个抽象对象——?,那学?、运动员也是?,?使?这个抽象对象既可以表?学
    ?、也可以表?运动员。
c和c++面向对象的区别

struct,c几乎没有权限的概念
c其实是面向过程的,c++是面向对象的
c和c++的区别:
(1)C是面向过程的语言,是一个结构化的语言,考虑如何通过一个过程对输入进行处理得到输出;
C++是面向对象的语言,主要特征是“封装、继承和多态”。封装隐藏了实现细节,使得代码模块化;
派生类可以继承父类的数据和方法,扩展了已经存在的模块,实现了代码重用;
多态则是“一个接口,多种实现”,通过派生类重写父类的虚函数,实现了接口的重用。
(2)C和C++动态管理内存的方法不一样,C是使用malloc/free,而C++除此之外还有new/delete运算符;
(3)C++支持函数重载,C不支持函数重载;
(4)C++中有引用,C中不存在引用的概念。
原文链接:https://blog.csdn.net/zaishuiyifangxym/article/details/87939703

多态是怎么实现的

虚函数的实现:在有虚函数的类中,类的最开始部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段(.text)中。当子类继承了父类的时候也会继承其虚函数表,当子类重写父类中虚函数的时候,会将其继承到的虚函数表中的地址替换为重新写的函数地址。使用了虚函数,会增加访问内存开销,降低效率。【虚函数表是每个对象实例共享的,虚函数指针是每个对象实例都有一个。】
原文链接:https://blog.csdn.net/qq_46111138/article/details/125216386https://blog.csdn.net/qq_36359022/article/details/81870219

静态多态是怎么实现的

https://blog.csdn.net/weixin_45707610/article/details/127105179

c语言为什么没有重载?

https://blog.csdn.net/weixin_57761086/article/details/126403931

const的应用场景

const的作?:
被它修饰的值不能改变,是只读变量。必须在定义的时候就给它赋初值。
1、常量指针(底层const )
常量指针:
是指定义了?个指针,这个指针指向?个只读的对象,不能通过常量指针来改变这个对象的
值。常量指针强调的是指针对其所指对象的不可改变性。
特点:
靠近变量名。
形式:
(1)const 数据类型 *指针变量 = 变量名
(2)数据类型 const *指针变量 = 变量名
?例:

int temp = 10;
const int* a = &temp;
int const *a = &temp;
// 更改:
*a = 9; // 错误:只读对象
temp = 9; // 正确

2、指针常量(顶层const)
指针常量:
指针常量是指定义了?个指针,这个指针的值只能在定义时初始化,其他地?不能改变。指
针常量强调的是指针的不可改变性。
特点:
靠近变量类型。
形式:
数据类型 * const 指针变量=变量名
?例:

int temp = 10;
int temp1 = 12;
int* const p = &temp;
// 更改:
p = &temp2; // 错误
*p = 9; // 正确
析构函数为什么一定要定义为虚函数
顺序容器和关联容器的区别

①顺序容器只有实值val。
②关联容器的一个元素包含两个部分:键值对(key-value) 即<k值(键值)|实值>。
③顺序容器不涉及排序,关联容器内部自动排序。
④本质区别:顺序容器通过元素在容器中的位置顺序存储和访问元素,而关联容器则是通过键(key)存储和读取元素的。
原文链接:https://blog.csdn.net/weixin_43691058/article/details/88556471

层序遍历
哈希表解决冲突

开放定址法:线性探测法、平方探测法
再哈希法
链地址法
建立公共溢出区

中望二面

静态多态和动态多态的实现

静态多态
静态多态:也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。
静态多态有两种实现方式:

  • 函数重载:包括普通函数的重载和成员函数的重载
  • 函数模板的使用

动态多态
动态多态(动态绑定):即运行时的多态,在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。
原文链接:https://blog.csdn.net/qq_37934101/article/details/81365449

哈希表和红黑树是哪些STL库的底层,有哪些区别?

如果只是查找哈希表还好,但是如果要搜索,插入,删除,范围查询这种场景,红黑树会好很多
https://zhuanlan.zhihu.com/p/535428994

哈希表和红黑树哪个对内存占用小?

红黑树

文章来源:https://blog.csdn.net/weixin_43917399/article/details/135139969
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。