2018提前批_汇顶科技面经

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值