【面经笔记】远景能源电话面试

介绍一下CPU的存储层次

外存、内存、多级高速缓存、寄存器。

如何充分利用CPU缓存机制?

提升代码的时间局部性和空间局部性

GPU架构

大核、小核、全局内存、共享内存、线程、线程块、线程网格

用到了哪些C++11的新特性?

auto、lambda、move、shared_ptr、、、

介绍一下Static修饰符。说一下Static全局变量,局部变量,成员变量的初始化时机。

全局变量、成员变量的初始化是在main函数之前。
局部变量是在第一次执行代码时初始化。

多线程的同步机制有哪些?

互斥锁、信号量、事件、消息、临界区、、、

什么是共享内存?

将一块物理内存同时映射到两个进程的地址空间中。

New出来的变量是不是一定存储在物理内存中?

不是,在堆上申请,有可能是虚拟内存,然后在实际操作的时候,需要把数据调入 物理内存中,这个过程是系统负责的。

VS内存分析工具用过没?

没有

OpenMP的常用命令

    #pragma omp parallel 
    #pragma omp parallel for private(x)

OpenMP和MPI的区别?

OpenMP和MPI是并行编程的两个手段,
对比如下:

OpenMP:线程级(并行粒度);共享存储;隐式(数据分配方式);可扩展性差;

MPI:进程级;分布式存储;显式(数据分配方式);可扩展性好。

OpenMP采用共享存储,意味着它只适应于SMP,DSM机器,不适合于集群。

MPI虽适合于各种机器,但它的编程模型复杂:需要分析及划分应用程序问题,并将问题映射到分布式进程集合;需要解决通信延迟大和负载不平衡两个主要问题;

调试MPI程序麻烦;MPI程序可靠性差,一个进程出问题,整个程序将错误;

作者:李超铮
链接:https://www.zhihu.com/question/20188244/answer/14552204
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

算法题:1-n的数字,每个数字只出现一次,如果有一个数字变为了另一个数字,如何找出这个变化了的数字本来应该是多少。

方法1:快速排序后遍历查找跳变的数字
方法2:开辟一个n大小的新数组B,初始化为全0,遍历原始数组A,将B[A[i]]置为1;最后遍历B数组,若B[k] == 0,则k为所寻。

进阶题:如果数字特别多呢?一个10G的大小的数字文件,如何找出这个跳变的数字?

方法1:先将10G的文件分为100个小文件,先对每个小文件排序,然后归并排序,最后遍历排好序的数组,寻找跳变的值。

方法2:散列分治:

使用A[i]/(n/100)作为散列值,将所有的数字按散列值分到100个不同的小文件中。

然后问题转化位前一个常规的问题。

如果可以直接获得小文件的数字个数,则可以快速定位变化的值应该在哪个小文件中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值