太初元基面经

一面(7后天过):

1、自我介绍
2、介绍一下推理框架这个项目
3、说一下推理项目中的项目难点
4、说说maxpool、conv的算子定义
5、C++11/14/17的新特性
6、说说左值与右值
    - 左值(lvalue):
      1. 可寻址、有持久状态
      2. 有名称的变量
      3. 可出现在赋值左侧
    - 右值(rvalue):
      1. 临时对象或字面量
      2. 即将销毁的对象
      3. 只能出现在赋值右侧
    - C++11扩展:
      1. 右值引用(&&)
      2. 移动语义(std::move)
      3. 完美转发(std::forward)
    - 应用场景:
      1. 移动构造函数
      2. 避免不必要的拷贝
7、讲讲C++中封装、继承、多态
    - 封装:
      1. 数据与操作绑定
      2. 访问控制(private/protected/public)
      3. 隐藏实现细节
    - 继承:
      1. 代码复用机制
      2. 类型:单继承/多继承
      3. 继承方式:public/protected/private
    - 多态:
      1. 同一接口不同实现
      2. 实现方式:
        - 编译时:函数重载、模板
        - 运行时:虚函数(virtual)
      3. 虚函数表机制
8、C++中继承中析构函数、构造函数顺序
     - 构造函数顺序:
      1. 基类构造函数(从最顶层开始)
      2. 成员对象构造函数(按声明顺序)
      3. 派生类构造函数
    - 析构函数顺序(完全相反):
      1. 派生类析构函数
      2. 成员对象析构函数(逆序)
      3. 基类析构函数(从最底层开始)
    - 重要注意:
      1. 基类析构函数应声明为virtual
      2. 多继承时按继承列表顺序构造/逆序析构
9、TensorFLow深度学习介绍一下
    - 基本概念:
      1. Google开发的开源深度学习框架
      2. 基于数据流图(Data Flow Graphs)
      3. 节点为操作,边为张量(tensor)
    - 核心特性:
      1. 跨平台支持(CPU/GPU/TPU)
      2. 自动微分机制
      3. 高级API(Keras/Estimator)
    - 主要组件:
      1. TensorFlow Core
      2. TensorFlow Lite(移动端)
      3. TensorFlow.js(浏览器)
      4. TFX(端到端平台)
    - 应用领域:
      1. 计算机视觉
      2. 自然语言处理
      3. 语音识别
      4. 推荐系统
10、gdb调试的一些基本命令
11、使用Cmake多一点还是makefile多一点
12、OpenMP与CUDA中多线程的区别
    - OpenMP:
      1. CPU多核并行
      2. 共享内存模型
      3. 指令式并行(#pragma)
      4. 适合粗粒度任务
    - CUDA:
      1. GPU并行计算
      2. 异构架构(CPU+GPU)
      3. 显式内存管理
      4. 适合细粒度数据并行
    - 主要区别:
      1. 硬件平台(CPU vs GPU)
      2. 内存模型(共享 vs 分离)
      3. 并行粒度(数十 vs 数千线程)
      4. 编程复杂度(简单 vs 复杂)
13、讲讲gtest
14、线程与进程的区别
     进程:
      1. 资源分配单位
      2. 独立地址空间
      3. 创建/销毁开销大
      4. 通信复杂(IPC)
    - 线程:
      1. CPU调度单位
      2. 共享进程资源
      3. 创建/销毁开销小
      4. 通信简单(共享变量)
    - 主要区别:
      1. 资源占用(多 vs 少)
      2. 切换开销(大 vs 小)
      3. 安全性(高 vs 低)
      4. 独立性(高 vs 低)
15、推理框架中如何使用cuda的构建算子的。
16、终端文件浏览器中如何使用ffmpeg进行图片解码的
17、知不知道github上有一个终端的框架。
18、知道gdb中调试时产生的cored文件。
  - 是程序崩溃时生成的内存转储文件
  - 包含了程序崩溃时的内存状态、寄存器值、堆栈信息等
  - 文件名通常为core或core.<pid>
19、如何进行算子上的性能的测试的。
20、一些关于公司业务的问题,实习的位置、时间。
21、关于比赛的一些好处
22、C++中程序的内存的分布
     - 五大内存分区:
      1. 栈区:局部变量、函数参数(自动管理)
      2. 堆区:动态分配内存(手动管理)
      3. 全局/静态区:全局/静态变量
      4. 常量区:字符串常量等(只读)
      5. 代码区:程序指令(只读)
    - 内存布局特点:
      1. 栈向低地址增长,堆向高地址增长
      2. 全局/静态变量在程序启动时初始化
      3. 常量区和代码区为只读区域
23、C++中可以将内联函数设置为虚函数吗
    - 语法上可以,但实际不会内联
    - 原因:
      1. 虚函数需要运行时动态绑定
      2. 内联需要在编译期确定具体实现
    - 结果:
      1. 编译器会忽略inline关键字
      2. 仍通过虚函数表调用
    - 建议:
      1. 避免这种写法(没有优化效果)
      2. 只有final类的虚函数可能被内联
24、Linux使用的是什么发行版
25、笔记本的显卡配置
#面试问题记录##牛客创作赏金赛#
全部评论
佬,膜,投的是提前批吗?
点赞 回复 分享
发布于 07-04 10:44 北京

相关推荐

快乐的打工人求off...:GC回收主要是针对虚拟机中的堆中的对象,堆分为两部分,新生代和老年代,对新生代的垃圾回收称为minorGC,发生较为频繁,对老年代的GC称为majorGC,发生次数少但代价高;在GC开始之前,需要先标记出垃圾,一般有2种方法,引用计数法和可达性分析法;标记出对象之后需要进行垃圾回收,包括标记-清除算法,复制算法,标记-整理算法和分代回收算法。
查看6道真题和解析
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务