首先一面面试(技术面)面的不好,很多问题都不会,基础优点薄弱。其次自己b把自己往坑里带,面试官都说再往下说你要陷坑里了。好吧,面试官是个好人,我好羞愧。不过自己能看到自身的不足,认识到自己离一名真正的优秀程序员还有多远的路要走,便如茫茫黑夜能觅得一盏明灯一样的幸运。无论过与不过,都对我的成长有很大的帮助。
下面我讲的不是面试技巧,面试技巧的确有用,但提高自己的能力更重要。下面时我总结面试官问的几个问题,如有遗漏,实属正常,因为出来时我的肚子是空白的,大脑也是空白的。
首先面试官让我自我介绍,然后从多渠道解决问题是怎么多渠道的?我想了想,说了如果段错误,野指针之类怎么解决。好吧,我从来没有分清段错误和内存泄露有什么关系,面试官说这两者不一样,内存泄漏不会运行报错,然后我又说scanf如果漏加取地址符,编译能过,但会报段错误,面试官说这编译都会报错。
这是我运行后的结果,实验证明不加取地址符编译通过,但会报段错误。
至于内存泄露,指的是你使用完的资源没有正确的释放掉,同时其他资源不能访问这片资源,那么就会引起内存泄漏,一般的内存泄露分为对空间泄露和系统资源泄露,内存泄露会导致可使用的内存变少,内存泄露可编译可运行,不会报错,但如果内存泄露的程序块重复执行,则系统可用内存会消耗掉
段错误则是访问了不可访问的内存空间,比如说数组越界,scanf没有放取地址符, 野指针等等(这个我知道,但一紧张又混起来,都和内存有关,尴尬)
还有面试官问了我傅里叶变换,对不起,全还给老师了,我又百度了一下,瞬间勾起回忆,傅里叶变换是将时域转化为频域,在频域处理(原因:时域能观测到波形,但频域可以吧复杂的信号转化为正弦波的叠加,更易于处理),然后在通过傅里叶逆变换回到时域。
其次又问了单例模式
我没写对,再写一遍
#include
class test
{
private:
test()
{
}
~test()
{
}
static test *p;
public:
static test * creatP();
static test * deleteP();
};
test * test::p = NULL;
test * test::creatP()
{
if(p != NULL)
{
return p;
}
p = new test();
return p;
}
test * test::deleteP()
{
if(p != NULL)
{
delete p;
p = NULL;
}
}
int main()
{
test *p = test::creatP();
return 0;
}
这是懒汉式的单例模式,现场不知道为什么就写错。
最后面试官又问什么情况下多线程要加锁,我认为时共享变量要加锁,如堆,全局变量,文件描述符,静态变量等