摩尔线程 graphic架构师 一面

社招哈,发现牛客上都是校招的小伙伴多,但是其他的职场平台感觉学习氛围不够浓厚,所以还是分享到牛客上。

个人感觉对于一两年工作经验的同学来说,社招面试还是偏向八股和算法

面试官上来先介绍工作内容

  1. 了解GPU的渲染架构吗,IMR和TBDR?

不了解😭

  1. 那就说说你简历上的项目吧

说在公司做了HDR相关的,但是明显面试官不感兴趣

  1. 你项目中是如何用OpenGL减少渲染时间

说了一些减少draw call 之类的常见优化方案

  1. 那你说下一次draw call 的流程吧

  2. 光栅化渲染方面八股:光栅化流程

这里提到了深度测试,埋坑了

  1. early z优化

这里答的不好,把减少渲染的图元像素搞混了

  1. 图元和像素的关系?光栅化中图元和像素分别在什么阶段?

  2. 什么情况下不可以earlyz

  3. deferred render有了解过吗

  4. c++ 调用被c编译器编译过的函数 需要加什么,为什么

  5. c++ 析构函数:析构函数是虚函数怎么办

  6. c++ 虚函数如何实现的

  7. 纯虚函数有什么作用

  8. 浅拷贝的风险

  9. 除了深拷贝,还有其他方法可以解决浅拷贝的问题吗

  10. 说一下各个智能指针

  11. 为什么shared_ptr需要注意线程安全

  12. 说一下循环引用

  13. 用模板实现一个整数的阶乘,在编译的时候实现

考点是模版的展开和特化

  1. 构建一个单链表,函数输入单链表的头节点,输入n,删除倒数第n个节点,返回删除后的头节点

  2. 给你一个2^n边长的矩阵,其中矩阵排列如下图,现在给出元素的坐标xy和矩阵边长n,计算坐标对应处的编号

0 1 4 5
2 3 6 7
8 9 12 13
10 11 14 15

其实用递归写起来并不算难,但是我一开始没想到

面试官引导我使用硬件的思维,按位运算去实现

0 01 100 101
10 11 110 111
1000 1001 12 13
1010 1011 14 15

都转换成二进制其实就很显而易见了

(x=2, y=3):

  • x = 10
  • y = 11
  • y1 x1 y0 x0 = 1 1 1 0 → 14

对于block为2的情况

blockId = ((y >> 1) << 1) | (x >> 1); offsetId = ((y & 1) << 1) | (x & 1);

已挂

#牛客创作赏金赛##你觉得哪一届的校招最难?##实习进度记录#
全部评论
老哥从哪跳的
点赞 回复 分享
发布于 07-04 21:42 北京
好详细的面经呀,姐妹一生平安
点赞 回复 分享
发布于 05-13 15:46 上海

相关推荐

07-28 15:15
门头沟学院 Java
面试八股环节还好,但是我是力扣战士,面试官让在编译器上写代码类都不会怎么写了,两个算法,字母异位词和策略模式,只写了方法,力扣战士凉透了,希望大家平时还是要在编译器上做题策略模式等一些设计模式,希望大家也进行默写,别像我一样会背不会写字母异位词import&nbsp;java.util.*;public&nbsp;class&nbsp;Main&nbsp;{public&nbsp;static&nbsp;List&lt;List&lt;String&gt;&gt;&nbsp;groupAnagrams(String[]&nbsp;strs)&nbsp;{//&nbsp;用于存储分组结果的映射,键为排序后的字符串,值为对应的字符串列表Map&lt;String,&nbsp;List&lt;String&gt;&gt;&nbsp;anagramGroups&nbsp;=&nbsp;new&nbsp;HashMap&lt;&gt;();for&nbsp;(String&nbsp;s&nbsp;:&nbsp;strs)&nbsp;{//&nbsp;将字符串转换为字符数组并排序char[]&nbsp;chars&nbsp;=&nbsp;s.toCharArray();Arrays.sort(chars);String&nbsp;sortedStr&nbsp;=&nbsp;new&nbsp;String(chars);//&nbsp;如果映射中不存在该键,则创建一个新的列表anagramGroups.computeIfAbsent(sortedStr,&nbsp;k&nbsp;-&gt;&nbsp;new&nbsp;ArrayList&lt;&gt;());//&nbsp;将当前字符串添加到对应的列表中anagramGroups.get(sortedStr).add(s);}//&nbsp;返回映射中的所有值(即所有分组)return&nbsp;new&nbsp;ArrayList&lt;&gt;(anagramGroups.values());}public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{//&nbsp;示例输入String[]&nbsp;strs&nbsp;=&nbsp;{&quot;eat&quot;,&nbsp;&quot;tea&quot;,&nbsp;&quot;tan&quot;,&nbsp;&quot;ate&quot;,&nbsp;&quot;nat&quot;,&nbsp;&quot;bat&quot;};//&nbsp;调用方法获取分组结果List&lt;List&lt;String&gt;&gt;&nbsp;result&nbsp;=&nbsp;groupAnagrams(strs);//&nbsp;输出结果for&nbsp;(List&lt;String&gt;&nbsp;group&nbsp;:&nbsp;result)&nbsp;{System.out.println(group);}}}策略模式//&nbsp;支付策略接口interface&nbsp;PaymentStrategy&nbsp;{void&nbsp;pay(double&nbsp;amount);}//&nbsp;微信支付实现class&nbsp;WechatPay&nbsp;implements&nbsp;PaymentStrategy&nbsp;{@Overridepublic&nbsp;void&nbsp;pay(double&nbsp;amount)&nbsp;{System.out.println(&quot;使用微信支付:&quot;&nbsp;+&nbsp;amount&nbsp;+&nbsp;&quot;元&quot;);//&nbsp;微信支付具体实现逻辑}}//&nbsp;支付宝实现class&nbsp;Alipay&nbsp;implements&nbsp;PaymentStrategy&nbsp;{@Overridepublic&nbsp;void&nbsp;pay(double&nbsp;amount)&nbsp;{System.out.println(&quot;使用支付宝支付:&quot;&nbsp;+&nbsp;amount&nbsp;+&nbsp;&quot;元&quot;);//&nbsp;支付宝支付具体实现逻辑}}//&nbsp;银行卡支付实现class&nbsp;BankCardPay&nbsp;implements&nbsp;PaymentStrategy&nbsp;{@Overridepublic&nbsp;void&nbsp;pay(double&nbsp;amount)&nbsp;{System.out.println(&quot;使用银行卡支付:&quot;&nbsp;+&nbsp;amount&nbsp;+&nbsp;&quot;元&quot;);//&nbsp;银行卡支付具体实现逻辑}}//&nbsp;支付上下文(策略持有者)class&nbsp;PaymentContext&nbsp;{private&nbsp;PaymentStrategy&nbsp;strategy;public&nbsp;PaymentContext(PaymentStrategy&nbsp;strategy)&nbsp;{this.strategy&nbsp;=&nbsp;strategy;}public&nbsp;void&nbsp;setStrategy(PaymentStrategy&nbsp;strategy)&nbsp;{this.strategy&nbsp;=&nbsp;strategy;}public&nbsp;void&nbsp;executePayment(double&nbsp;amount)&nbsp;{strategy.pay(amount);}}//&nbsp;主类和测试代码public&nbsp;class&nbsp;Main&nbsp;{public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{//&nbsp;创建支付上下文PaymentContext&nbsp;context&nbsp;=&nbsp;new&nbsp;PaymentContext(new&nbsp;WechatPay());//&nbsp;使用微信支付context.executePayment(100.0);//&nbsp;切换为支付宝支付context.setStrategy(new&nbsp;Alipay());context.executePayment(200.0);//&nbsp;切换为银行卡支付context.setStrategy(new&nbsp;BankCardPay());context.executePayment(300.0);}}
查看2道真题和解析
点赞 评论 收藏
分享
1.&nbsp;你在学校哪些科目的成绩比较好?有哪些专业课比较突出?2.&nbsp;AI课程主要学了哪些内容?做过什么项目?为什么成绩好?3.&nbsp;CNN和INN这两种神经网络结构有什么区别?CNN的中文名字是什么?原理是什么?如何识别图片中的内容?4.&nbsp;除了CNN,还有哪些主流神经网络?Transformer属于哪类?有什么特点?5.&nbsp;你了解deepseek吗?它的蒸馏是怎么做的?相比传统AI模型有什么优势?如何降低成本?6.&nbsp;你平时怎么规划业余生活?在学校参加过哪些社团或活动?有哪些兴趣爱好?7.&nbsp;你未来三年有哪些职业规划?更倾向于做哪方面的工作?8.&nbsp;你觉得自己在运维方面有哪些性格或能力优势?如何理解“稳定”?什么是on&nbsp;call状态?有相关经历吗?9.&nbsp;能举例说明你遇到紧急问题时的应急处理经历吗?比如数据库崩溃、黑客入侵等,如何排查和恢复?10.&nbsp;你们用的是什么数据库?如何做数据备份和恢复?遇到勒索事件如何应对?11.&nbsp;MySQL多台部署时脑裂现象怎么恢复?有哪些集群部署方式?如何做基础加固和安全防护?12.&nbsp;MySQL配置文件一般写在哪?常见配置项有哪些?13.&nbsp;Linux下/etc/passwd和/etc/shadow的区别是什么?umask的含义是什么?文件和文件夹的最高权限是多少?755权限代表什么?14.&nbsp;你用过SSH吗?原理是什么?有哪些安全风险?如何用SSH代理?15.&nbsp;K8S中kube-proxy的作用是什么?Service的实现原理?ETCD的作用和特点?Pod有哪些调度方式?如何配置污点和亲和性?16.&nbsp;你如何理解交付岗位?日常工作内容有哪些?如何为客户写交付文档?17.&nbsp;你对公司有多少了解?公司主营业务是什么?云计算安全有哪些常见安全问题和隐患?18.&nbsp;云计算相比传统服务器有哪些优势?为什么要发展云服务?底层实现有何不同?虚拟化和云计算的区别?19.&nbsp;你对安全行业有哪些了解?有实际参与过安全项目或漏洞复现吗?对行业事件有何看法?20.&nbsp;在实验室或团队中有协调成员关系的经历吗?遇到哪些困难?如何解决?你觉得当leader最难的地方是什么?21.&nbsp;你为什么选择去上海/北京实习?对城市和岗位有何倾向?有面过哪些其他岗位?22.&nbsp;你对公司规模、团队人数、分公司分布等有了解吗?有想问面试官的问题吗?23.&nbsp;面试官对你的建议和反馈是什么?(如表达结构、亮点、案例总结等)实操相关问题1.&nbsp;数据库被黑客入侵后如何恢复?如何用备份回滚?如何加强数据库安全?2.&nbsp;MySQL如何做端口加固、用户权限分离、跳板机、IP白名单等安全措施?3.&nbsp;Linux权限管理、umask、文件权限设置等基础操作。4.&nbsp;SSH隧道、代理的使用方法和原理。5.&nbsp;K8S相关命令、调度方式、配置文件等基础实操。(注:每轮面试问题顺序可能略有不同,内容仅供参考)评价:神人面试官,我来面运维问我AI架构
查看27道真题和解析
点赞 评论 收藏
分享
评论
5
15
分享

创作者周榜

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