总共三面,一面1h,二面1h,三面30min
一面:
- 自我介绍
- 简历中的项目一:深度学习项目balabala,具体怎么实现的,达到了什么样的指标,为什么这么做
- 项目一:以往大家都是怎么做的,你有什么创新?答:最开始是北交大提出来的,南洋理工也做过相关研究,但是用的都是BP,没有反映出来很好的相关性,15年西南交大的写了一篇用了CNN,但是没有用到Inception和BN
- BN的作用?
- 简历中的项目二:你这个xgboost怎么用的,调整过什么参数;位置特征是如何做处理的,具体的聚类是怎么操作的;为什么考虑用下采样而不是上采样,为什么不考虑直接做一个正样本的简单重复
- 连续特征离散化的意义;xgboost和gbdt的区别;gbdt和RF的区别;树模型的优点是什么,为什么单单考虑树模型
- DBSCAN相比于kmeans的区别
- 手写代码:3sum(最开始用的2sum写的,然后面试官说有没有更简单的),说一下时间复杂度,3sum:nlogn,ksum: n ( k − 2 ) l o g n n^{(k-2)}logn n(k−2)logn
- 有什么问题要问的:什么部门?最看重什么能力(第一:有问题就要及时的去问,不要自己做的一大堆东西后来发现是没有用的;第二:校招最看重基础)
二面:
- 自我介绍
- 你这个项目二的题目写的是什么意思,他的意义在哪里
- 项目二没有实现降维吗?答:xgboost做特征选择本身就是降维的一个环节,叫做筛选
- 连续特征离散化的意义;gbdt和rf的区别,gbdt和rf哪一个可以并行化处理(答:rf),问:gbdt有没有可以并行化处理的地方(答:训练过程)反问:训练过程哪一步(答:生成子树那一步)再问:生成子树哪一步…后来翻笔记发现,gbdt再预测过程可以并行化
- 提到了gbdt的学习器,说一下cart树是怎么分类的,答:Gini系数,问:gini系数反映了什么,答:混乱度,问,说清楚一点什么是混乱度…然后解释了一大堆,面试官评价:你的表述能力太差了
- 手写代码:topk,答:用冒泡排序写了一个。。。不行不要用冒泡写, 答:可以用堆来实现,他说那你写一个,我说emmm要写吗,需要定义树,他说纳尼?堆是怎么实现的,答:线性表,完全二叉树可以用数组实现。
- 问:topk如何实现并行化操作…emmm不知道,然后瞎答,说可以把数字平均存放在不同的机器上,每次取所有机器中的最小值,重复k次,时间复杂度 m a x ( O ( m ) , O ( l o g ( n m ) ) k max(O(m),O(log(\frac{n}{m}))^k max(O(m),O(log(mn))k,不是面试官想要的答案
- 有什么问题问我的?看重应试者的什么能力:答:短期看能不能迅速上手,长期看基础…另外还有沟通表达能力很重要,你这点太差了,给了我个忠告,以后想好了再回答,不要怕面试冷场
三面:
- 风控模型为什么不考虑用深度学习?(答:瞎扯了一通,最终面试官告诉我,是因为深度学习的模型解释性较差,我反问:什么叫解释性?答:就是当你判断这个客户不能够通过的时候,你应该给出来合理的理由,而深度学习的理论往往不能够站得住脚)噢…似懂非懂
- 你认为你的优缺点?
- 家是哪里的,以后考虑留吗?
- 会tf?答:会一点,用keras比较多
- 聊一下你项目一中的特征工程是怎么做的:地理位置信息的处理,涉及到省份聚类,经纬度聚类,添加高敏感聚类,问:为什么只考虑了省份聚类,比如苏南苏北为什么给归到一类,这些明明经济差距较大。答:考虑了苏南苏北的问题,所以也添加了经纬度聚类以及经济形势聚类等等,首先是先构建出来特征嘛,最终经纬度聚类聚了多少?答:30多个,因为有的省份app的影响力不够
- 有什么问题问我的:
问题:我发现现在很多的公司,再应聘的时候除了需要面试者会一门脚本语言外,还需要会Java,我想问这种所谓的会Java,是需要会到什么程度,是只需要懂一些基本的原理和语法,还是说像Java开发那样了解,Java的机制,jdk等等?
答:作为一门机器学习的工程师,不管你的离线用的是什么语言,当你上线的时候一定是Java,所以Java是必须的,但是各个公司要求的Java的程度都不一样,总的来说,至少要会语法语言结构,剩下的多多益善,有的公司的线上模型平台是可以交给有专门的人去做的(外企),但是绝大多数的互联网公司都是谁的模型谁自己来写线上,所以虚拟机啊这些这是一个互联网公司应该了解的基础技能,Java就是多多益善,但是基本的是要了解语法的。
总结:
收获真的很大,而且发现很多并行化的东西没有设计,接下来将我写的东西全部看看再大数据平台上看有没有说可以并行化的策略操作
另外:深度学习的项目就是装装逼,真的没什么用
把一些常见的额问题的答案给他标准化一下:比如BN,xgboost与GBDT,gbdt与rf