16号投了汇顶科技没注意这是提前批,可能是简历过了17号就打电话让直接去面试,也来不及准备什么。面试官很和蔼,但是还是问了好多不会的。问题的方向偏底层原理一些,面试的岗位是WINDODS C++开发。
1,自我介绍;
2,聊项目;
前两个环节都还好,是自己熟悉的,讲项目也基本讲的清楚,中间涉及到的知识点自己要搞清楚原理了再说。
3,函数参数入栈了解过吗?入栈的顺序是怎么样的。
4,模板的原理,c++为什么能够实现多态。
5,怎么样的接口是安全的,了解过吗。
6,现场写一个安全的内存拷贝。
7,写一个单例模式。
下午一共两面,形式差不多,一共面了快3个小时.....
整理一下知识点。
函数参数入栈:
https://blog.csdn.net/u012329294/article/details/12447405
从右到左的参数方式,原因是参数都是用压栈方式实现的,使用从右到左的传参方式,栈顶看到的就是左边输入的首参数,因此,无论怎样的变长,都可以通过指针偏移的方式找到值。而从左到右的话,栈顶看到的是最后一个参数,并不知道这个参数长度,那么就无法通过指针偏移的方式找到首参数。
这里https://blog.csdn.net/weichaohnu/article/details/8798581
void foo(int x, int y, int z)
{
printf("x = %d at [%X]\n", x, &x);
printf("y = %d at [%X]\n", y, &y);
printf("z = %d at [%X]\n", z, &z);
}
int main(int argc, char *argv[])
{
foo(100, 200, 300);
return 0;
}
运行结果是:
x = 100 at [...60]
y = 200 at [...64]
z = 300 at [...68]
这是由于,C程序栈的内存生长方式是往低地址内存生长,这也说明为什么局部变量无法申请太大内存,因为栈内容有限。此外,这个例子说明,函数参数的入栈的顺序是从右往左的!
单例模式:
https://www.cnblogs.com/5iedu/p/5480719.html;
(1)定义:保证一个类仅有一个实例,同时提供能对该实例加以访问的全局访问方法。
(2)解决思路:
①在类中,要构造一个实例,就必须调用类的构造函数。如此,为了防止在外部调用类的构造函数而创建实例,需要将构造函数的访问权限设为protected或private;
②最后,需要提供全局访问点,就需要在类中定义一个static函数,返回在类内部唯一构造的实例。
其中使用静态变量在一开始就创建实例的做法被称为饿汉式,特点是一开始就创建好了,每次调用的时候直接返回就好了。该方法多线程安全。
还有一种是懒汉式,用时间换取空间,采用一个静态变量来判断该实例是否被创建过。为了使其多线程安全,可以使用互斥锁等方式。
对于Static修饰符的详解这里有一篇博客:https://www.cnblogs.com/33debug/p/7223869.html;