面经--广联达【闪耀星】2022届暑期实习生-人工智能工程师
一面
1.自我介绍
2.笔试的时候前两个题写得很好,但第三题没做出来,现在你能大致说一下你能想到的思路吗?(这个题到现在我还没做出来,求大佬)
答:第三题挺难的,我有两个已经实现过的思路,但都有缺陷。第一个是贪心算法,只要能开枪我就开,只要在最后的时候判断一下保证最后一颗子弹打中最后一个目标就行了,这种方法缺陷也很明显,如果敌人的愉悦度是排序数组,那么方法可行,如果不是,那么就会出现因小失大的现象。第二种方法,贪心算法的变体,我先计算打一轮子弹所需的时间,即开枪打完换弹需要使用的时间,按照时间对敌人数组进行切片,然后用贪心算法找切片内的最优解,最后最优解相加就得到了最终解,这种方法也有局限,就是相邻两个时间切片AB,A中尾部跳过的敌人可能与B中头部的敌人组合产生更优的解。再后来想了第三种解法,但没有去实现,还是时间切片,但我不会一次性全部切分完,而是一个一个切,上一个求出最优解之后剩余的可用敌人可以加入到下一次切片中。
3.笔试的前两道题你都用很少的代码量就实现了,那么你认为好的代码应该是什么样的?
答:这个问题网络上有着很好的一些规范,而且在python中也有很多推荐的风格如PEP8等,在我看来,抛除基本的功能实现和鲁棒性,好的代码应该有三个特点:高可读性,低代码量,高扩展度。高可读性要求写的代码其他人拿过去要能看的懂,现在都是协作做项目,很多时候需要代码的交流,注释,变量和方法的命名要有规范性,不能让别人产生混淆或者搞不清在做什么;低代码量表示代码要尽量简练一些,一个功能可以10行实现,就不要写100行,代码越长,无论是debug还是阅读都很困难;第三个高扩展度也是从协作的角度说的,写代码的时候尽量模块化接口化,让别人在整合代码的时候容易上手,而不需要做大量适配性的工作。
4.你刚才说到的这几点我也很认同,那么你更倾向于写简练的代码还是详细的代码?(详细的代码就是按部就班的实现功能,面试官用了另一个词,我忘了)
答:我更倾向于简练的代码。其实简练的代码和是否详细是否有可读性并不冲突。简练不一定指代码量少,而是模块化,不花哨,没有很多旁支末节的东西,而且一定要有必要的注释,但不是每一行都要加注释。
5.说一下什么是面向对象编程。(这个回答得不好,因为很基础都没有在意过)
答:面向对象编程是相对于面向过程来说的。面向对象就是我在实现功能的时候将任务抽象成一个个体,个体自身具备一些特点,个体一起完成功能,这个个体就是对象,在C++或者python中最有代表性的就是class,定义一个class就是对个体进行抽象,实例化class就是具象个体为操作对象。面向对象的好处就是模块化、高扩展性以及容易修改。
6.说一下多态。(其实我知道多态具体是啥,但当时一时提笔忘字,跟脑子里的东西对不上号了)
答:抱歉,对这个词有些陌生又熟悉,但一时想不起来是什么。
7.说一下列表和链表的区别。
答:在数据结构特点上,列表是一种从栈中分配空间的数据结构,在使用时需要初始化大小,并大小始终固定,访问时依下标对元素进行访问,插入删除操作比较复杂,需要变动很多元素;链表时一种从堆中分配空间的数据结构,在使用时无需初始化,空间是随用随开的,长度也是可变的,访问时需要从头开始通过next指针进行遍历性访问,插入删除操作简单,只需要变更指针指向。在使用场景上,列表适合需要快速访问的场景,比如一个公司的所有员工的通讯录,而链表适合需要频繁插入删除操作的场景,比如存在优先级的订单队列。
8.说一下实现map用的数据结构。
答:在python中没有map中变量类型,我想您应该是说的C++中标准库中的map,它在python中对应的是orderedDict,其实现方式是红黑树,还有一种是无序的map,在python中是dict字典的形式,实现方式是哈希表。
9.哈希表更像是一种列表还是链表。
答:哈希表是两种数据结构的组合,哈希表本身更像是一种列表,但是哈希表存在哈希冲突,而普遍用来解决哈希冲突的拉链法则是用链表的方式实现的,所以说它是两者的组合。
9.出个题,你只要说一下思路就行,现在有一篇很长的英文文章,都是空格分隔的,让你统计一下文章中单词出现的次数。
答:首先我要确定一下我这程序是运行在什么样的硬件上,因为您提到是很长的一篇文章,我要确保我将其加载到内存里是不是会超限。如果没有内存限制,我会直接把他们全读到内存里,如果有,就得考虑切分成文件后使用流式的读取方式。在确定读取方式之后,要确定大小写如何处理,如果大小写认为是同单词,那么就将读到的字符串全转为大写或者小写,如果认为不同则没有影响,然后我只需要将得到的字符串根据空格分割,然后维护一个python字典即可完成功能。
10.你的简历上介绍了你有一些项目经历,挑一个你觉得对你影响最大的讲一下。
这个回答出现了具体人和事,不做分享。
11.你计划中要从事哪个方向的研究或工作。
答:我当前的计划中是要找算法类的工作,优先的肯定是我的研究方向语音增强这个方面,其次因为深度学习很多东西都有共性,所以其次的也考虑计算机视觉,自然语言处理方向,如果前两者都不满足,可能会去后端碰碰运气。
——————————————————————————————
二面(双方在闲聊中获取信息)
1.自我介绍
主要介绍自身情况,内容包括学业,成就,爱好等,最后说一下对公司的了解,表达一下想要加入。
2.本科和研究生都是同一所学校,你是哪儿人?为什么会选择在这所学校读书?
说了一下当年择校的考量和高考的志愿填报,并委婉的表达自己不想去西北工作(广联达在西安是有研发岗的)。
3.说一说这几年你最自豪的一件事。
讲了考研,因为考研波折挺多的。主要说考研如何规划,并最后取得了很好的成绩。
4.说一说这几年你最受挫的一件事。
还是考研,因为波折很多。主要说考研前发生的事,以及如何走出低谷。
5.你的实验室有多少人?说一说其中你最敬佩的人,并说明原因。
大致介绍了一下实验室,并介绍我最敬佩的一维师兄。
6.你这几年有没有什么让你自豪的项目。
先说了研究生期间发了论文,然后转折,重点说了本科的大创项目。
7.在这个项目里你的角色是队长,你们是怎么合作的,过程中有什么问题。
介绍了项目和成员组成以及各自的职责。主要说了我负责的软件和另一位队友的硬件之间的联动和交流。
8.这个项目进行的过程中有没有出现重大分歧,如何解决的。
这个真没有,项目是大三开始的,但队友都是刚入学就志同道合的。
9.你在这几年参与了很多项目,也肯定避免不了跟其他人合作,过程中有没有你很不喜欢的人,具体描述一下。
说了曾经实习公司中里的一个员工,并表达了自己对于项目合作的一些看法。
10.说说你的三个优点。
爱钻研,心态好,执行能力强,并说了一些事例。
11.说说你的三个缺点。
固执,有些玩心,体能差,并说了一些事例。
12.反问
问了三个问题:广联达人工智能主要做什么?您在广联达几年了,可以分享一下感受么?您对我有什么意见或者建议。(其实主要有用的问题在第二个)
13.了解了一些家庭情况,并询问了工作意愿。