华为二面 墨蓝 2023-08-17 15:39 124阅读 0赞 #### 1. Final关键字 - #### C++11新特性:防止继承类(不希望其他类继承它),在类名后跟一个final class Last final { /* */ }; #### 2. Class和struct的区别 - #### **C++和C的角度**: C++中的struct和class区别不是很大,两者有很大的相似性,为什么C++要保留struct,是因为C++是向下兼容的,C++保留了C的很多东西。 struct在C中是一种数据类型,不能定义函数,否则编译器报错! 在面向对象的编程中,数据和数据操作是分开的。而当struct进入面向对象的C++时,在struct中定义函数能运行,C++认为数据和数据操作是一个整体,不应该分开,这就是struct在C和C++两个时代的差别。 在C++中struct有很大的扩充: 1. struct可以包括成员函数 2. struct可以实现继承 3. struct可以实现多态 **权限不同:** struct:不加修饰符默认定义为public,默认公有继承(public) class:不加修饰符默认定义为private,默认私有继承(private) struct可以继承class,class也可继承struct,权限取决于子类。 统一代码风格:希望成员是public选择struct,反之亦然 **其他:** * class用于定义模板参数(“typename”),但struct不用于定义模板参数。 * class和struct如果定义了构造函数,都不能用大括号初始化 * 如果没有定义构造函数,struct可以用大括号初始化 * 如果没有定义构造函数且所有成员变量都是public,class可以用大括号初始化。 两者最大的区别在思想: C语言编程单位是函数,语句是程序的基本单元 C++语言编程单位是类 C到C++的设计有过程设计为中心向以数据组织为中心转移。 [参考大佬博客][Link 1] #### 3. 不可继承的基类 - #### 定义类时在类名后面加上final class NoDerived final { }; #### 4. 不可实现的类 - #### 定义成抽象类 * 含有 **(或者未经覆盖直接继承)纯虚函数**的类是抽象基类,抽象基类负责定义接口,而后续的其他类可以覆盖该接口 * 不能定义一个抽象基类对象 //基类 class A{ public: virtual void fun() = 0; virtual void fun1() const = 0; }; //子类 (c++11) class B:public A{ public: void fun() override; void fun1() const override; }; #### 5. 不可重写的函数 - #### 在函数形参后面加上final,`void fun() final`表示不允许后续的其他类覆盖`fun` #### 6. 多态 + #### oop(面向对象编程)的核心思想是多态性。把具有继承关系的多个类型成为多态类型。引用或指针的静态类型与动态类型不同这一事实是C++语言支持多态性的根本所在。 * 使用基类的引用或指针调用基类中定义的一个函数时,我们不知道该函数真正的对象是什么类型,可能是一个基类对象也可能是派生类对象。如果函数是虚函数,则直到运行时才会决定执行哪个版本,判断的依据是引用或指针所绑定的对象的真实类型。对非虚函数的调用在编译时进行绑定。 * 通过对象进行的函数(虚函数或非虚函数)调用也在编译时绑定。对象的类型是确定不变的,通过对象进行的函数调用将在编译时绑定到该对象所属类中的函数版本上。 * 当且仅当通过指针或引用调用虚函数时,才会在运行时解析该调用,也只有在这种情况下对象的动态类型才有可能与静态类型不同。 #### 7. 静态多态 - #### 在程序编译时就绑定函数地址,动态多态是在程序运行时绑定。 #### 8. 返回值与多态关系 - #### 多态的实现是根据函数名字和参数绑定到不同的函数执行,跟返回值没有关系。 #### 9. 指针 + #### #### 10. 野指针 ± #### 野指针指向了一块随机内存空间,不受程序控制,如果指针指向已经被删除的对象或者指向一块没有访问权限的内存空间,之后如果对其再引用会出问题。 (1)指针定义时未被初始化:指针在被定义时,若没有初始化会指向随机区域,除static修饰的指针外在被定义时是不会被置为空的,默认随机。 (2)指针被释放时没有置空:malloc开辟内存空间时,检查返回值是否为空,如果为空则开辟失败;不为空则指针指向开辟内存的首地址。指针指向的内存在free() /delete释放后,若没有将指针置空或其他赋值,就会使其成为一个野指针。 (3)指针操作超越变量作用域:不要返回指向栈内存的指针或引用,因为栈内存在函数结束的时候会被释放。 ##### 野指针危害: ##### 野指针的问题在于,指针指向的内存已经无效了,而指针没有被置空,解引用一个非空的无效指针是一个未被定义的行为,也就是说不一定导致段错误,野指针很难定位到是哪里出现的问题,在哪里这个指针就失效了,不好查找出错的原因。所以调试起来会很麻烦,有时候会需要很长的时间。 ##### 避免方法 ##### * 初始化指针时将其置为NULL,之后再对其进行操作。 * 释放指针时将其置为NULL,最好在编写代码时将free()函数封装一下,在调用free()后就将指针置为NULL 要想彻底地避免野指针,最好的办法就是养成一个良好的编程习惯。 [野指针参考][Link 2] #### 11. 数组链表 + #### 答了存储方式,增删查改用链表方便,查找用数组等等。 #### 12. Inline关键字 ± #### **Lnline关键字实现内联函数:** (1) 函数调用会降低程序的执行效率,增加时间和空间的开销,因此对于一些简单、规模较小又使用频繁的函数,可以设计为内联函数 (2)内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,节省了参数传递、控制转移等开销 (3)语法: Inline 类型说明符 函数名(含类型说明的形参表) //内联函数计算面积 inline double calArea(double radius){ return PI*radius*radius; } (4)在类中写在内部的函数可能会被编译成内联函数,如果一个复杂的函数定义为内联函数,会造成代码膨胀,增大开销,编译器会转换为其他函数处理(inline不承诺修饰函数为内联函数) #### 13. STL库有哪些了解 #### 说了vector 、set、 map #### 14. Map内部是什么实现- #### 红黑树。 **红黑树概念:** #### 15. Map键值对有哪些注意事项- #### #### 16. 手撕代码 - #### 链表相加: L1:1->6->3 361 L2:2->3->4 432 L1+L2 : 793 输出:3->9->7 Struct ListNode{ Int val; ListNode *next; } #### 17. New关键字 - #### 语法:`int a = new int a ;` #### 18.为什么空类大小是1 #### 空类也进行实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器会给一个空类隐含加一个字节,这样空类实例化后得到独一无二的地址。 * 补充sizeof类大小知识:sizeof得到的结果为各个非静态数据成员(不包括成员函数)的总和加上编译器额外增加的字节。后者依赖于不同的编译器实现,C++标准对此不作任何保证。 * 一个类中的成员函数、虚函数(虚表占一个地址)、静态数据成员都是不占用类的存储空间的。 很多都没答上来,挂了 [Link 1]: https://blog.csdn.net/alidada_blog/article/details/83419757 [Link 2]: https://www.cnblogs.com/asking/p/9460965.html
相关 华为面经 今天参加完华为面试,身心俱疲,一大早便奔赴富力希尔顿酒店,下午又参加了某公司的综合面,累惨,闲话少说,现在聊聊华为研发类的整个面试流程吧~~~: > base:西安 ... 淡淡的烟草味﹌/ 2024年04月18日 15:17/ 0 赞/ 79 阅读
相关 华为面经总结 为了帮助大家更好的应对面试,我整理了往年华为校招面试的题目,供大家参考~ 面经1 技术一面 1. 自我介绍 2. 说下项目中的难点 3. volatile和 r囧r小猫/ 2024年02月05日 22:27/ 0 赞/ 44 阅读
相关 2023华为od面经~ (笔试 HR资面 技术面 一面 二面 综面) 华为OD在线刷题OJ 全新华为OD在线刷题平台登场!解锁上岸华为OD的终极秘籍! 亲爱的华为OD候选人们,你们期待已久的刷题平台终于来了!全新的华为OD机试在线刷题平 刺骨的言语ヽ痛彻心扉/ 2023年10月09日 20:43/ 0 赞/ 89 阅读
相关 华为二面 1. Final关键字 - C++11新特性:防止继承类(不希望其他类继承它),在类名后跟一个final class Last final { / / }; 墨蓝/ 2023年08月17日 15:39/ 0 赞/ 125 阅读
相关 【面经】快手Java二面 自我介绍 项目描述 介绍 改进 展望 Java ReentrantLock和synchronized实现原理 Reentran 冷不防/ 2022年12月11日 04:23/ 0 赞/ 265 阅读
相关 【面经】美团二面 自我介绍 项目 谈谈你在项目中的职责 项目的问题 项目的描述 JUC 多线程 操作系统 死锁 手写死锁(昨天刚看 今天药忘吃喽~/ 2022年12月09日 02:46/ 0 赞/ 296 阅读
相关 网易二面面经 1. 自我介绍 2. 根据以下场景提出解决方案? netty中间件会有A->B->C三个阶段,但是C阶段的处理时间大概时1000ms, 问系统的瓶颈在哪里,如何 ╰半夏微凉°/ 2022年11月27日 08:46/ 0 赞/ 316 阅读
相关 顺丰二面面经 简介 遇到什么问题 怎么解决 Nginx 流量复制 爬虫去重 缓存更新策略 集群 分布式 区别 -> 部署很多分 拆成很多分 一致性算法 raft ゞ 浴缸里的玫瑰/ 2022年11月25日 04:10/ 0 赞/ 234 阅读
相关 面经二 一面: 没问什么技术相关的,就是随便聊聊,面试官很nice 二面: 部门leader,相关问题如下 1、异常的分类和继承关系 Java中提供两种错误的异常类, 桃扇骨/ 2022年05月28日 02:07/ 0 赞/ 311 阅读
相关 华为勇敢星一面二面 今天下午面得两面 一面: 1. 自我介绍 2. 项目讲解 3. 对长春市做一个电子地图,用户能够查到自己要去的地方的路线,如何考虑。 4. 一个酒店的wif 逃离我推掉我的手/ 2022年05月26日 00:54/ 0 赞/ 184 阅读
还没有评论,来说两句吧...