1.C++中怎么定义常量的?常量存在内存的哪个位置?
有三种定义方法,①#define宏常量;②const只读常量;③enum枚举常量。
对于局部常量,存放在栈上;对于全局常量,编译器不分配内存,存放在符号表中提高访问效率;对于字面值常量,如字符串,存放在常量区。
2.内存溢出常见原因及解决方法。
i.内存中加载了庞大的数据量,比如一次性加载了数据库中的所有数据。
解决:检查数据库查询,是否为一次性获得全部数据,数据库的查询应当分页查询。
ii.代码中存在死循环或产生多个重复对象实体。
解决:检查代码中是否存在死循环或者递归调用,检查是否有大循环重复产生实体。
iii.其它软件产生bug。
解决:使用内存查看工具检查内存使用情况。
iv.启动参数内存值设定过小。
解决:重设JVM值,扩大内存。
3.说说Linux常用命令
man-帮助命令
makdir-创建文件
cp-复制文件
pwd-显示当前文件目录
top-显示操作系统信息,如内存,CPU占用率,进程
kill-向进程传递结束信息
cd-切换文件目录
4.重载与重写的区别
①重载
重载是一种语言特性,与多态无关,与面向对象无关,编译器会根据函数参数列表的参数实现函数与函数调用的早绑定。它的特点是作用域相同,函数名相同,参数列表不同,不关心返回值数据类型。
②重写
重写是多态,派生类重新定义基类的虚函数。即父类的指针或引用指向子类实例的时候,父类通过指针或者引用实现子类函数调用。它的特点是作用域不同,函数名和参数列表相同,返回值相同,基类函数是virtual。
5.堆和栈的区别
①管理方式不同。栈由操作系统自动分配和释放,堆由程序员申请和释放。
②生长方向不同。堆在内存中的地址从低到高,栈的地址是从高到低。
③分配效率不同。堆的分配效率比栈低。
④空间大小不同。每一个进程的栈大小要远小于堆大小。
⑤分配方式不同。堆是动态分配,栈分为静态分配和动态分配,静态分配由操作系统完成,如局部变量的分配,动态分配由aloca()函数完成,由操作系统自动释放。
⑥保存内容不同。栈一般保存局部变量,寄存器的内容和函数返回地址,堆的堆顶首先保存着一个字节大小的堆的长度,具体内容由程序员决定。