我出面试题

40次阅读

共计 562 个字符,预计需要花费 2 分钟才能阅读完成。

我一直想如果我是面试官,我会问什么问题来考察应聘者的计算机基本功。写这篇文章主要是做个记录。
汇编的栈模型
在 CSAPP(Computer Systems: A programmer’s perspective,中文叫:深入理解计算机系统)中,有对汇编的栈工作原理的详细描述,这个底层的实现原理对程序员来说非常重要,算是一个基本功。
swap 为什么是无效的
比如 swap 为什么是不能直接交换两个变量的,就能依靠这个基本功轻松解释。在高级语言中的形参和实参,在汇编中究竟是如何实现的。在这里通通是有答案的。
过程调用
void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
通过 %ebp+ 8 和 %ebp+12 拿到 swap 的两个实参(只有实参是实实在在存在内存中的,形参只不过是寄存器中实参的一个拷贝),在三个寄存器里进行交换,却并不写回到实参。所以这个 swap 是无效的。
深入理解指针
值、引用、值传递、引用传递、浅拷贝、深拷贝
这些都是指针方面的知识,可以看看我写的这部分:
programming paradigms
面向对象程序设计
Override、Overwrite、Overload
Override 是我们常说的面向对象的重载,是真正的重载,子类重载父类的函数。这三个名词中,实际上只存在两种技术一个是多态,一个是函数签名。

正文完
 0