说一说常用的 Linux 命令
常用的 Linux 命令有:
命令 |
说明 |
cd |
切换当前目录 |
ls |
查看当前文件与目录 |
grep |
通常与管道命令一起使用,用于对一些命令的输出进行筛选加工 |
cp |
复制文件或文件夹 |
mv |
移动文件或文件夹 |
rm |
删除文件或文件夹 |
ps |
查看进程情况 |
kill |
向进程发送信号 |
tar |
对文件进行打包 |
cat |
查看文件内容 |
top |
查看操作系统的信息,如进程、CPU占用率、内存信息等(实时) |
free |
查看内存使用情况 |
pwd |
显示当前工作目录 |
说一说C++ 中哪些函数不能是虚函数?
普通函数(非成员函数)、构造函数、析构函数、友元函数、静态成员函数、内联成员函数
【参考答案】
标准回答
C++ 中,普通函数(非成员函数)、构造函数、友元函数、静态成员函数、内联成员函数这些不能是虚函数。
- 普通函数(非成员函数)
普通函数(非成员函数)只能被重载,不能被重写,所以声明为虚函数也没有意义,编译器编译时就会绑定函数地址。
- 构造函数
创建派生类对象时,会调用派生类的构造函数,派生类的构造函数中将会调用基类的一个构造函数,这种顺序不同于继承机制。因此派生类不继承基类的构造函数,所以将构造函数声明为虚函数没有意义。
- 友元函数
友元函数不是类成员,而只有成员函数才能是虚函数。
- 静态成员函数
静态成员函数对于每个类来说只有一份代码,所有的对象都共享这一份代码,没有动态绑定的必要性。静态成员函数属于一个类而非某一对象,没有this 指针,它无法进行对象的判别。
- 内联成员函数
内联函数在编译时被展开,虚函数在运行时才能动态的绑定函数。
说一说STL 中有哪些常见的容器
- 顺序容器
容器并非排序的,元素的插入位置同元素的值无关,包含vector、deque、list。
o vector:动态数组
元素在内存连续存放。随机存取任何元素都能在常数时间完成。在尾端增删元素具有较佳的性能。
o deque:双向队列
元素在内存连续存放。随机存取任何元素都能在常数时间完成(仅次于vector )。在两端增删元素具有较佳的性能(大部分情况下是常数时间)。
o list:双向链表
元素在内存不连续存放。在任何位置增删元素都能在常数时间完成。不支持随机存取。
- 关联式容器
元素是排序的;插入任何元素,都按相应的排序规则来确定其位置;在查找时具有非常好的性能;通常以平衡二叉树的方式实现,包含set、multiset、map、multimap。
o set/multiset
set中不允许相同元素,multiset 中允许存在相同元素。
o map/multimap
map 与 set 的不同在于 map 中存放的元素有且仅有两个成员变,一个名为 first,另一个名为 second,map 根据 first 值对元素从小到大排序,并可快速地根据 first 来检索元素。map 和multimap 的不同在于是否允许相同 first 值的元素。
- 容器适配器
封装了一些基本的容器,使之具备了新的函数功能,包含stack、queue、priority_queue。
o stack:栈
栈是项的有限序列,并满足序列中被删除、检索和修改的项只能是最进插入序列的项(栈顶的项),后进先出。
o queue:队列
插入只可以在尾部进行,删除、检索和修改只允许从头部进行,先进先出。
o priority_queue:优先级队列
内部维持某种有序,然后确保优先级最高的元素总是位于头部,最高优先级元素总是第一个出列。
给定一个长度为 的无序数组 ,包含正数、负数和 0 ,请从中找出 3 个数,使得乘积最大,返回这个乘积。 要求时间复杂度: ,空间复杂度: 。
long long solve(int* A, int ALen) {
// write code here
int min1 = INT_MAX, min2 = INT_MAX;
// 最大的、第二大的和第三大的
int max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN;
for (int i=0;i<ALen;i++) {
if (A[i] < min1) {
min2 = min1;
min1 = A[i];
} else if (A[i] < min2) {
min2 = A[i];
}
if (A[i] > max1) {
max3 = max2;
max2 = max1;
max1 = A[i];
} else if (A[i] > max2) {
max3 = max2;
max2 = A[i];
} else if (A[i] > max3) {
max3 = A[i];
}
}
return max((long long)min1 * min2 * max1,(long long) max1 * max2 * max3);
}