面试题汇总
C++
基础知识
C 和 CPP 区别是什么
C | C++ | |
---|---|---|
编程范式 | 面向过程 | 面向对象 |
函数重载 | 无 | 有 |
引用 | 无 | 有 |
C++编译过程
预处理:展开include和define
编译:转化为汇编代码
汇编:转化为二进制机器码
链接:将目标和其需要的库链接成可执行文件
对于回归或分类问题使用合适的模型,在本文中对于回归问题使用线形回归模型,对于分类问题使用Logistic回归模型
$$
J(w,b) = \frac{1}{2m} \sum\limits_{i = 0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})^2
$$
$$
f_{w,b}(x^{(i)}) = wx^{(i)} + b \tag{2}
$$
计算预测值与现实值的均方误差后取平均(除以2是为了在求导时与平方的2约去)
如果不同属性的取值返回相差过大则会导致模型收敛得很慢,所以要对属性值做映射。
常用缩放方法:
均值标准化
$$
x_i := \dfrac{x_i - \mu_i}{max - min}\tag{Mean normalization}
$$
1 | vector<vector<int>> build_tree_with_table(int node_count,vector<vector<int>> prerequisites) |
1 | vector<vector<int>> build_tree_with_martix(int node_count,vector<vector<int>> prerequisites) |
使用on_path
判断当前访问的结点是否在当前访问列表中,如果在则表示有环
1 | vector<vector<int>> path_lists; |
引用作为成员变量
函数返回引用,可以将返回值做左值
通过类的其他对象初始化当前对象(有默认拷贝构造方法,成员对成员的拷贝,可能发生对象的嵌套拷贝)
1 | //During call by value |
T::T(const T&)
建议每个类提供默认构造函数,拷贝构造函数,虚函数
类不是实体,对象是实体
成员变量(filed)属于对象
成员函数(member function)属于类
列表初始化(initialize list)仅对成员变量初始化。
在构造函数里对成员变量初始化则为先初始化(默认)后赋值,故所有成员变量必须要有默认的初始化方法(成员变量包含其他类但该类没有默认构造函数则会报错)。构造函数无法主动调用。
尽量使用列表初始化
1 | class A{ |
指针是一个变量,其存储的是值的地址,而不是值本身
使用常规变量时,值是指定的量,而地址是派生量,而指针相反
OOP强调的是在运行阶段(而不是编译阶段)进行决策,提供了灵活性,对于内存管理也更加高效
1 | int* ptr_a; |
初始化时必须指定所指元素类型,因为对所有指针来说其都是代表一个初始地址,但从该初始地址读多少字节则由指针类型判断
指针也是作为变量存储,只不过其内存空间存的是地址。指针p1,p2有各自的地址&p1,&p2。长度为4B(32位)或8B(64位)。p1,p2表示存储的所指向元素的地址。*p1表示指向元素的值。
在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存(指向不确定)。另外,一定要在对指针提取(*)之前,将指针初始化为一个确定的、适当的地址。