面试常见问题
内存分配结构
代码区:存放代码的位置,只读
常量区:存放常量(如变量名字,非零的初始化值,字符串,const常量等),只读
静态区、全局区:存放全局变量和静态变量,具体分为两个段,.bss
段和.data
段
.bss
段:存放未初始化的和初始化为0的全局变量或者静态变量.data
段:初始化不为0的全局变量或者静态变量
堆:程序运行期间动态分配malloc
所使用的区域
栈:用于存放地址(用于函数的现场恢复)、临时变量(函数内部定义的变量,或是函数定义的参数)等
快速排序平均复杂度
各种排序和查找比较
union、struct和class
Union:Union是一种特殊的数据结构,它允许在相同的内存位置存储不同的数据类型。Union中所有的成员都共享同一块内存,只有最后一次赋值的成员有效。Union适用于需要在不同数据类型之间进行转换的情况。
Struct:Struct是一种用户自定义的数据类型,它允许将不同的数据类型组合在一起成为一个新的数据类型。Struct中的每个成员都有自己的内存地址,可以分别进行访问和赋值。Struct适用于需要表示具有多个属性的对象的情况。
Class:Class是一种用户自定义的数据类型,它可以包含数据成员和成员函数,并且可以实现面向对象的编程。Class中的数据成员和成员函数默认是私有的,可以通过public、protected和private关键字进行访问控制。Class适用于需要表示真实世界中的对象和实现面向对象的编程的情况。
连通分量和强连同分量
连通分量指的是无向图中的一个极大连通子图。具体来说,对于无向图G=(V,E),若存在一个子集U⊆V,使得U中任意两个点在图G中都可以通过一条路径相互到达,且U是极大的,即U不能再加入任何其他的点,那么U就是图G的一个连通分量。
强连通分量则是有向图中的一个极大强连通子图。具体来说,对于有向图G=(V,E),若存在一个子集U⊆V,使得U中任意两个点在图G中都可以通过一条有向路径相互到达,且U是极大的,即U不能再加入任何其他的点,那么U就是图G的一个强连通分量。
一个弱连通分量不一定是强连通分量,而一个强连通分量必然是一个弱连通分量。
tarjan算法
面向对象的特征
封装(Encapsulation):封装是指将数据和方法进行包装,使其对外部隐藏,只保留必要的接口暴露给外部使用。封装可以有效地保护数据和方法,确保其不会被误用或滥用,从而提高程序的可靠性和安全性。
继承(Inheritance):继承是指通过定义子类来继承父类的属性和方法。子类可以继承父类的公共方法和属性,并且可以添加自己的方法和属性。继承可以有效地减少代码的重复,提高代码的复用性。
多态(Polymorphism):多态是指同一个方法名可以具有不同的实现方式。在面向对象编程中,多态可以通过重载、重写和接口实现。多态可以提高代码的灵活性和可扩展性,使代码更加简洁易懂。
抽象(Abstraction):抽象是指将复杂的实体抽象成类和对象,并仅保留必要的属性和方法。抽象可以让程序员更加专注于问题的本质,而不是实现的细节。同时,抽象也可以提高代码的复用性和可维护性,使代码更加健壮。
引用和指针
区别:
定义方式:引用在定义时必须初始化,而指针可以先定义,后赋值。
操作方式:引用在使用时类似于变量名,直接操作被引用对象,不需要使用 * 取值运算符;指针需要通过 * 取值运算符来获取被指向对象的值。
空指针:指针可以指向空值,而引用不能引用空值。
引用的一些特性:引用一旦绑定对象就不能更改,指针可以随时改变指向的对象。
联系:
都可以用于访问内存中的数据。
都可以用于实现函数参数的传递,引用参数和指针参数都可以用于在函数内部改变外部数据。
引用和指针都可以作为返回值,引用作为返回值可以避免拷贝大对象的开销。
C++和C的关系
C++:面向对象,引入新语法和特性,包括类、继承、多态、模板。
判断有向图是否有环
深搜、拓扑排序
- 本文标题:面试常见问题
- 本文作者:TimeTrap
- 创建时间:2023-03-10 11:19:09
- 本文链接:https://timetrapzz.github.io/2023/03/10/面试常见问题/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!