Last updated: 2019/10/25
2019/08/21 - 更新目录
2019/09/05 - 增加9家单位面经
2019/09/21 - 更新作者信息
2019/10/11 - 更新10加面经
2019/10/25 - 更新阿里达摩院
-
Notes
- 华为比较随意的也相对较容易的大厂
- 一共有两轮面试,两轮一般是一起面试,通过一轮接着去其他屋子面试第二轮,两轮基本类似。
- 一般一场面试有上千人面试,虽然相对容易,但竞争还是较大的,还需要好好准备
- 大疆相对来说是大家都比较梦想的公司,当然竞争是相当大的
- 一共有四轮面试:一轮:性格测试;二轮:笔试,题目涉及比较专业,算法类的话考得数学较多和编程细节和实现能力,;三轮:电话面试;四轮:电话或现场面试
- 第一轮面试比价简单,刷的人很少,二轮以后会进阶式的难度增加,当然刷人也很多,通常第二轮后就能刷一半的人。所以想进大疆,是需要充分准备的。
- 三轮技术面试,远程是视频面试,每轮不到1小时
- 每一轮都会问编程和算法项目
- 看中实际编程能力
- 4轮技术+1轮HR面
- 考察项目和编程能力
- 第四轮有可能让你在线共享屏幕编程
- 重点关注编程的基础细节,广度
- 编程复现能力和工程实现能
- 如果有实习,实习末的考核通过即给你offer(小编好友就是这样的)
- 没有实习就是3轮技术面,对细节很注重,有可能让你现场分析算法题目
- 手推公式,看重数学能力
- 小编好友面试京东,就是因为手推公式,被pass掉了
- 所以,经典的算法还是要会推导的,为了应付也得会
- 现场问项目经历和算法能力
- 今年去武汉的,给的薪资待遇和北京一样,待遇可以算是很丰厚了
本硕985(学校排名较低),我自己成绩一般,非计算机出身,做过相关CV项目,有点心虚,但大佬带过几次比赛。
腾讯计算机视觉算法岗位
面试内容整体回忆,也不分第几场面试了
不管第几场面试,都是先自报家门,1分钟表述自己的优点,有时候还会稍微提一下你对缺点的看法
是否有参与相关实习,做了哪些项目,打了几次比赛,分别扮演什么岗位? 着重会针对自己熟悉的一场,详细讲其中算法的原理,以及比赛成绩的分析,如果下次再打比赛,该怎么提高名次。打比赛的收获是什么?认为工业和科研有什么区别?
- (我写了C++和Python)
- C++的问题,我只记得这些,我也不是全会....
- vector、list、map有什么区别
- 引用和指针
- 多态问题,继承,构造析构
- C++ 11举例子几个新的特性,以及你用过的
- auto你觉得方便吗
- 虚函数
- 内存分配(堆和栈的区别讲解)
- Python问题lambda函数讲一下、类型转换如何操作
- YOLO V2 V3你对哪个熟悉,讲一下细节实现
- 多尺度问题
- anchor基础知识
- 人脸识别现在常用算法
- 语义分割到实例分割怎么做
- GAN是否了解,如何通俗的讲其原理
- PCA原理LDA原理
- SVM+HOG
- XGBoost
- CNN、RCNN、FRCNN,有可能问你其中一个细节的关键
- TensorFlow这些框架你谈一下看法以及对其他框架的了解
- 现在机器学习、深度学习这么火,你有什么看法
- 机器学习、深度学习你对他们的理解是什么
- 做门牌或者车牌识别的步骤以及关键
- Relu比Sigmoid使用多的原因
- Loss不升反降的原因,如何解决
- SSD细节
- Linux 权限的意义
- 块操作的操作的步骤以及快捷方式
- rm -rf *这句话是什么意思
普通985硕,没走内推 已经拿到百度CV暑期实习offer
难度不大,面试官都很nice,一共三轮面试,基于简历的项目,然后开始拓展
- 1.首先介绍自己
- 2.简历上的项目自己负责哪一块,实现了哪部分算法,贡献程度有多少
- 3.目标检测如何实现,如何优化?是否了解目标识别的历史
- 4.机器学习和深度学习有什么区别?你的看法是什么?
- 5.相机标定的内参数外参数有哪些?
- 6.请讲一下SVM原理
- 7.如何看待加班问题?对百度文化是否了解?
- 8.平时如何学习,看哪些书视频
- 9.说一下NMS和soft-NMS
- 10.问了一道 leetcode原题,忘了o(╥﹏╥)o
- 11.C++11的特性是否了解,使用auto方便在哪,请举一个例子
- 12.类的继承,堆栈区别以及适用场景
总结:小哥哥建议注重一些底层算法的研究,数据结构、决策树还有普通的图像处理算法的实现方法
- 1.详细聊项目,小哥哥应该比较懂做的项目,问了参数设置,思路和技巧,其中遇到的最大困难,如何解决
- 2.SVM和KNN的原理
- 3.最近了解的最新论文是什么,用了什么框架算法,达到了哪种效果?
总结:二面基本全部都是问项目,其他问题都是捎带 更多关注你项目中解决问题和分析错误的思路
- 1.自我介绍,你的优点在哪里
- 2.损失函数讲一下
- 3.人脸识别有哪些算法,你对哪个最熟悉,谈一下怎么实现
- 4.现在除了百度还有哪些offer,你更倾向于哪一家?
- 5.什么时候可以实习,哪个方向愿意做?
- 6.你有没有什么想问的
总结:面试官都比较专业,没有架子,千万不要不懂装懂,不会就说不会。
- 手推SVM:空间上一点到超平面距离,SVM整体代价函数,如果进行对偶形。
- LR损失函数,如何优化
- Inception网络多层卷积之后是concat还是逐像素相加
- Xception网络含义
- ResNet、DenseNet含义,处理方式,有什么好处,具体concat还是逐像素相加
- 神经网络分类的softmax数学公式,如何计算
- 交叉熵损失函数定义,举例计算过程
- 自己设计过那些网络
- 小型网络有哪些
- 神经网络如何加速
- 聊论文聊项目
- 车道线检测如何实现,边缘检测
- 行为识别网络基本流程
- 二分类效果是否好于多分类
- 二分类如何执行
- 难例如何进行区分
- 过拟合是什么,如何解决,应对措施
- 从模型结构上如何解决过拟合
- L1 L2有什么区别,适用于什么场景
- 为什么不用L0
- L1为什么不用于卷积神经网络
- 梯度弥撒如何产生的,如何解决
作者:转发这个超越妹妹
- 堆和栈的区别
- 指针和引用的区别
- c 深拷贝浅拷贝
- 什么是内存泄露,怎么检查?
- 冒泡排序的时间复杂度是多少
- 项目再问了些。 ##二面23分钟:
- 介绍项目,项目背景和担任角色,遇到最大困难怎么解决,有什么收获blabla
- 说下快排的步骤
- 完全二叉树n层有多少节点
- 对着简历内容逐个问,实习期间主要干什么的,什么收获? 担任研会部长遇到什么困难没?担任班干部有什么收获?还问了其他一些简历的东西,* 反正问的很细
- 最喜欢哪门课?为什么?
- 学习能力怎么样?
- 三面:聊人生。但是我感觉有一个坑是,他问期望薪资是多少? 后来发现这个我说的太少了,哎,哭晕。。。。
作者:水一水
1.自我介绍 答:一波常规操作,基本信息+技术能力+软实力。
2.讲下你参加的比赛或者项目? 答:楼主讲了个比赛。
3.图像方面的模型一般用啥? 答:楼主说自己做的主要是用深度神经网络,讲了个项目。
4.深度学习或者机器学习方面了解哪些模型? 答:楼主深度学习扯了下项目里的resnet,机器学习就说比赛一般用lgb、xgb居多,有的还用LR,之前一个比赛里还用过lsmt、rnn之类的,这种对这种自然语言效果好点。
5.用过哪些数据库? 答:使用的不多,用过aws的rds数据库,不过sql语句都学过。
6.现在有一个表,让你实现插入、更新,怎么用sql实现? 答:insert和update。
7.你刚才说的是两条语句,如何用一条语句实现? 答:呆滞了一会,实在没想起来。面试官就说可能你平时用的不多,我说是的,平时数据库都不大,对于语句次数要求不是很严格。
8.你主要使用什么语言?python吗? 答:嗯,最近用python比较多,但刚入学的项目其实是用c++做的。
9.python你平时主要用过哪些包? 答:sklern、numpy、pandas、画图的matplotlib,一阵呆滞,想不起来其他的了。
10.pandas的索引是干啥的? 答:调数据出来,和数据库的主键有点类似(这个好像没答好,不知道面试官发现没。。。)
11.你有什么问题问我? 答:这个岗位是工程能力要求高?还是算法能力要求高?面试官说你不一定跟我,我只是被集团安排面试的,楼主感觉有点小尴尬。然后面试官说算法这里反正都是需要落地的。 然后楼主又问了一个,就是投岗位的时候,发现有两个部门,一个集团it部,和一个美云智数,在这两个部门做这个岗位,区别大吗。面试官一阵回答。。。
作者: EternityY
- 论文的网络结构图
- 光流算法如何实现 密集光流如何查找邻接点
- 行为识别网络,稀疏采样
- Dropout原理
- Kmean原理
- 决策树原理
- BN原理,为什么用BN
- Xception网络能减少多少个参数,为什么他能够达到高精度
- 仿射变换矩阵,透视变换矩阵,双线性二插值
- 案例:如何提取出高质量的动作,精彩的画面反馈的用户
- TF多卡训练,一个模型在一张卡上面放不下,怎么在多卡中运行
- TF中卷积是如何计算的
- TF中转置卷积如何进行
- 膨胀卷积感受野如何计算
- 算法题,在字符串中的字串是否都出自于字典中
- K个链表归并
- 交叉熵公式,为什么交叉熵可以用在分类中
- Softmax函数
- Deeplab进化历史
- Deeplabv2和DeeplabV3有什么区别
- V3提出那些新理论
- 尺度变换剧烈如何解决
- 语义分割一帧图片处理速度
- Xception处理速度
- ResNet处理速度
- 卷积神经网络哪里最耗时
- 有没有实际算法落地的经历(重点凉的地方,楼主只发过论文,实验室没有和公司合作项目)
作者:小安快跑!!
(1)微信小程序与Vue的区别(因为有做微信小程序的项目)
(2)Vue组件间通信 vuex原理
(3)常用的ES6新增特性
(4)map和set结构
(5)异步请求Promise与Async await
(6)画一个三角形 均分原理
(7)画一个扇形
(8)动画的实现animation与requestAnimationFrame
(9)预请求 Options fetch请求有了解吗? 跨域
(10)web安全
(11)物理像素、逻辑像素 比如1px在屏幕上是多大
(12)box-sizing属性
(13)TCP与UDP的区别
(14)了解二叉树的遍历吗?先序遍历怎么遍历的。。。
(1)对项目的介绍 巴拉巴拉问了很多 遇到的困难(解决方法用的setTimeout,所以延伸出了后面的Promise和Async/await)
(2)ES6的一些特性 ES6数组方法的一个区别
(3)Set结构 它的key值是什么样子的(不清楚)
(4)数组去重除了Set还有什么方法?
(5)异步操作有哪些? Promise和Async/await
(6)使用Promise对Ajax请求进行封装 就是调用这个方法可以通过.then()来获取请求的数据
(7)发送请求有哪些方法?如Ajax
(8)跨域 :为什么会有跨域?同源策略是什么?跨域怎么解决 父域和子域之间可以共享资源吗
(9)做过移动端项目吗?(做过但是早忘了)移动端是怎么适配的
(10)移动端swiper和animation(给自己挖了坑,本来想随便说一下,结果人家主要就是做移动端的) 不用swiper插件怎么实现上滑显示下一页的效果?移动端有哪些事件?
(11)怎么获取页面url参数
(12)事件委托机制
二面其实主要还是根据简历你做了什么以及在你的回答中涉及的到的知识点来问的。
(1)介绍一个项目,从项目背景,实现原因,实现效果以及所遇到的问题来说。说了好久,感觉自己都词穷了也解释不清,所以换了个话题。
(2)什么时候开始学前端的,以及为什么会一直坚持前端方向。
(3)在华为实习还干了一些其他什么事情?
(4)在华为实习学到了什么?对自身能力方面有哪些提升?
(5)为什么学习前端以及对前端的一个认识和理解。
(6)从学校到公司实习有一个什么样的转变?
(7)现在在学习有学习哪些新的东西?(没有,在看基础知识)然后让我举例说了哪些知识以及应用场景。
(8)为什么会有前端三大框架?它们解决了什么问题?
(9)遇到过哪些压力以及怎么释放的
(10)遇到哪些困难是怎么解决的??(向同事请教)怎么交流请教的
(11)觉得自己有哪些短板?我说的缺乏实战经验(貌似不太好)
(12)现在在打基础的同时学习到了什么新的内容? ES6语法、web安全。。。然后把web安全详细说了一下。又问:XSS攻击很难发现,我们怎么去发现这个问题。。
(13)未来的职业规划
(14)接触过哪些后台语言?
(15)之前有面过其他一些公司吗?
(16)现在有拿其他offer吗?
(17)平时是怎么学习前端知识的
(18)有时间实习吗?没时间,要写毕设
(1)您觉得前端未来发展前景是怎样的?
(2)对部门以及业务、技术栈问了一下。
链接:https://www.nowcoder.com/discuss/231656
2019.7.16一面:电话面 全程打断buff
1、自我介绍
2、Python和C++的区别(答了很多python的特性)
3、Python为什么会慢?
答:因为不知道数据类型,取数据要判断一下
(1、python是一个动态的解释型语言;python中的值不是存储在缓存区而是分散的存储在对象中
2、Python是一门解释器语言,和C++,java不同,C++,java都是编译语言,也就是说写完Java程序首先要编译源程序,生成可执行文件一个class文件,而Python写完程序,提交到解释器,解释器会立刻将第一行代码翻译成机器码,然后将这行代码交给CPU去执行,然后进行下一行,翻译第二行代码,再交给CPU执行,所以,Python要比那些编译型语言执行起来要慢)
3、看过那些书(答:python高性能编程)
4、什么是内存泄露?什么时候会内存泄露?
没有删掉。
(动态申请的内存空间没有被正常释放,但也不能继续被使用的情况。没有释放内存)
5、关闭程序的术语?
不知道!
(可能是关闭进程,不确定)
6、指针和引用?什么时候用指针什么时候引用?
(指针可以不初始化,引用必须初始化,且绑定后不能再变;向函数中传递指针和传递指针的引用的区别:
传递指针,会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针;
对于传递指针引用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了)
7、知道那些数据结构?
答:堆 数组 列表 栈
8、什么是堆?
答:平时只用数组模拟堆,不知道真实的结构,认为是父节点-子节点这样状态的数据结构(超高频问题,一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS(操作系统)回收。分配方式类似于链表。向上增长,栈的分割开辟在程序运行时进行,内核顺着链表找到一块足够大的空间交给程序,如果没找到就析构调无用内存再找一次,更具体的请自行总结一下并时常复习,区别包括申请方式、系统响应等很多)
9、堆和栈的区别
栈就是存东西的空间,往最里面存,出来是最外面出来(超高频问题,函数运行时分配,函数结束时释放。由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。向下开辟,速度很快,局部性能好的话会和寄存器交互,存PC指针,函数参数多也会组成栈帧存到栈里面)
10、进程和线程
(超高频问题,我看了深入理解计算机系统后的总结:1、进程就是活着的程序,程序不过是一些文本,运行着的程序就是进程,是系统进行资源调度和分配的基本单位,掌握资源,包括内存等,线程就是轻量级进程,是CPU调度和分派基本单位。2、由于进程占有资源,压栈和出栈慢,所以切换不灵活,线程不占资源,只占必要的资源(递归要压栈所以有一点资源),所以线程容易通信->在进程分来的内存中直接通信,容易并发->切换灵活,同一进程的线程切换速度很快,因此线程开销小3、地址空间,进程独立,同一进程的线程共享资源,对其他进程的线程独立)
事后总结: 显然挂了,特别开心,让我明白一个问题,搞算法的也要会一些后端的东西。 算法领域内工程师是要求变成能力的。
作业帮
一面90分钟
先做两道题:
1、从数组找三个数,三和与value差最小
要求时间O(n2)空间O(1)
我的写法是排序+双指针,leecode上的原题,没怎么刷过leecode,还好解法一致。
要求排序用快排
2、字符串A 、B,B占A最短的子序列(A中最短的子序列包含B)
面试官和我都笑了,因为python切片+in操作符四行结束,面试官也笑了,于是我们约定in这一步自己写函数。
暴力解决一切花里胡哨
1、介绍Kaggle比赛(从EDA开始到最后)
2、ID3\C4.5等基本树 是二叉树还是多叉树 被切过的特征还会再切吗
离散特征(离散数量>2)是多叉分类,连续是二叉分裂,连续可以在切,离散不可以(当时回答的是可以再切,被提示后意识到不可再切,说了自己的matlab实现,先做集合,遍历特征,保存最大的信息增益位置,然后对特征切分,切分后把这个特征从集合中删掉,所以离散特征切完就不在切了,还好反应过来了,连续性特征可以再切,详情可以去看看别人的ID3树和其他树的源代码)
3、介绍BN
(超高频题目,可以介绍的很多,机器学习本质是学习分布,特别是logloss损失,等效优化交叉熵,而交叉熵用于衡量分布的一致性。 1、预白化,训练快,sigmoid两端饱和梯度小,BN可以缩放到线性区2、分布学习,NN深了之后每一层分布都会偏移,BN压缩分布使得各层分布趋近于一致3、BN可以看做一定程度的数据扩充,数据做了抖动处理。注意BN的训练过程要记得,当前批次归一化,预测的时候是全部数据,而且BN层有两个超参数要优化) 4、GBDT和RF哪个树比较深
RF深。说了boost和bagging的思想。boost使用低方差学习器去拟合偏差,所以XBG和LGB有树深的参数设置,RF是拟合方差,对样本切对特征切,构造多样性样本集合,每棵树甚至不剪枝。
5、XGB特征重要性程度是怎么判断的?
答:不清楚,但是用的很多,猜测是按分裂点的次数(在所有树的出现次数),只说了这一点
(gain 增益意味着相应的特征对通过对模型中的每个树采取每个特征的贡献而计算出的模型的相对贡献。与其他特征相比,此度量值的较高值意味着它对于生成预测更为重要。
cover 覆盖度量指的是与此功能相关的观测的相对数量。例如,如果您有100个观察值,4个特征和3棵树,并且假设特征1分别用于决定树1,树2和树3中10个,5个和2个观察值的叶节点;那么该度量将计算此功能的覆盖范围为10 5 2 = 17个观测值。这将针对所有4项功能进行计算,并将以17个百分比表示所有功能的覆盖指标。
freq 频率(频率)是表示特定特征在模型树中发生的相对次数的百分比。在上面的例子中,如果feature1发生在2个分裂中,1个分裂和3个分裂在每个树1,树2和树3中;那么特征1的权重将是2 1 3 = 6。特征1的频率被计算为其在所有特征的权重上的百分比权重。)
6、XGB很容易理解它的回归和二分类,如何理解多分类呢?
谈笑中度过,一开始回答的label encode ,用onehot+softmax,但是每棵树如何是拟合softmax前一步呢。这个我确实不知道,面试官提示我说三分类,构造100棵树还是300棵,我就意识到了,回答原以为是100棵。
面试官说构造三百棵树,拟合三分类,再softmax。
(onehot之后,输入标签是一个向量,对向量中每一个预测点集成一群树)
二面55分钟
1、先问你是报的NLP方向不
不是,算法方向,讲实验室项目,用了很多图像的NN算法
2、三道题
第一题:第K大的数
讲了三种方法
方法1:堆排序 分析复杂度是O(Nlogk)(没分析错把)
方法2:快排二分 分析复杂度是O(N)
方法3:排序 查表 分析复杂度(NLogN)
要求O(N)所以用的快排二分,面试官说快排能做这道题?但快排是最快的(我知道的)也正好是要求的O(N)复杂度
(百度了一下,快排和hash最快,其余都不快)
手写python代码,但是编译不知道哪里也错了,这个IDE也不提示,面试官也很尴尬,说以前用牛客的可以报编译错了在哪 于是我就说下面的题用C++写(这个问题很严重,面试的时候找不到bug,所以一定要小心python,一定要bug free,不然老实用C++)
第二题:
地板n3,木板13,几种排法
dp[n]=dp[n-1]+dp[n-3]
第三题:
等概率1-7
造等概率1-10,分析调用1-7的次数期望
7进制,调用两次产生0-48,然后截掉40和40以上的再//4 1
期望不好算,是个数等比列求和,然后我就口算的近似值2.5n
想一想,可能是面试官压力面我,所以才会质疑快排把,分析了为什么是O(N)而不是面试官说的O(NlogN) 然后向他解释为什么部分排序可以解决这个问题,面试官的水平应该是没问题的(PS:不要以为面试官能力不行,绝大多数面试官水平都到位) 谢谢作业帮
效率很高,交完简历一天就面试了
一面很顺利,二面一百分钟,在和面试官的交流中学到了很多东西
一面:过于顺利导致我小本本上什么都没记 一面顺利,对答如流,以致于问答记录上什么都没记录。 第一题LIS: 演都不演,问完这个题的所有要求就直接默写最优情况 然后和面试官介绍这样的结果为什么是对的,然后顺便写了O(n^2)的写法。 第二题忘了,一分钟结束 二面: 都是开放问题,没有标准答案,时长一百分钟,内容主要是实际推荐场景 讲比赛? 从头到尾,讲了各个阶段我的工作,各个阶段我的思考,各个阶段我的心路历程。 (歪打正着了,面试官想听的应该就是我各个阶段的工作,然后遇到的问题,对问题的思考和解决) 你觉得如何衡量用户对搜索结果的满意程度? 南呀。我太南了。不过我说了TCP连接计时,根据场景过滤计时噪声,比如视频场景用视频长度的百分位计时,秒退的有效性等等。这点面试官可以满意。然后绞尽脑汁想不出另外一个好特征了,就照着弱特说,比如quary的相关性,什么什么的。面试官不满意,因为这些东西主要表征用户感兴趣程度而不是满意程度。 你觉得如何解决新搜索结果的推送? 回答:新搜索结果肯定历史推送为0,没有任何参考,但我们不知道他质量怎么样。于是把他随机推送一小部分用户,在推广。在推广是注意刷点击率现象,过滤一下,巴拉巴拉。面试官很满意。 你觉得如何看待场景和模型? 我个人非常注重场景,从自己的科研经历开讲,讲到西瓜书的引言,讲了自己完整的心路历程。面试官可以满意。 忘了一部分问题,太多了,讲到嗓子哑了,但是面试官的指导真的是干货满满啊,没有问模型的一些东西,而是怼实际工程,被怼的怀疑人生,怼完结束,面试官说会报给主管,然后等消息就可以了。 面试官这样怼我,我就很想去百度,因为他征服了我。
没有内推,直接在官网上写的简历,好像也是1天还是2天就面试了,但是。。 本来是我最意向公司,现在不是了。 腾讯校招
意向部门TEG 电话直接开始: 研究岗
自我介绍 ,聊聊项目
对我们部分感兴趣吗:部门做日志检测 安全领域
互相了解
要开会,下次继续聊
10点:继续聊上次的内容
全程比较轻松愉快
二面结束,但是状态还是二面待安排。。。
和面试官讨论如何用机器学习的方法去处理危险日志检测。从头复习了各大学习的知识,也算自我反省了。这里能获得的比较突出的经验就是,很多部门还是规则学习为主,对机器学习的分类情况有强烈的可解释性要求。所以树模型和LR等可解释性好的模型很受青睐呀。但最后面试官“感谢”了我,估计是暗示我挂了,桑心
通知笔试五题A了3道半,成绩也还行把,但是部门锁我简历。。。
通知了“两面”,几分钟结束,随便聊聊,说9月份继续面
当前流程已结束,舒服了,按理来说早该结束了呀,这个部门没有机器学习岗,但是想找个算法工程师来开辟一下业务,问我大概要招多少人emm~
拼多多 待感谢信
一面:
自我介绍
科研项目介绍
Kaggle 比赛介绍
腾讯比赛介绍
RNN用过吗 用过:项目 Kaggle
LR用过吗 用过:Kaggle的二分类检测
XGB和LGB区别:
只想到三点,特征排序,特征切分和直方图和全排序
说他们共同点较多 小提一点,又小提了GBDT到XGB和LGB,然后扯了扯实际用这两个模型的感受,然后说只记得三点不同了,实际效果xgb不输LGB但是调参不好搞,而且LGB很快
(
1)更快的训练速度和更高的效率:LightGBM使用基于直方图的算法。
2)直方图做差加速:一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算。
3)更低的内存占用:使用离散的箱子(bins)保存并替换连续值导致更少的内存占用。
4)更高的准确率(相比于其他任何提升算法):它通过leaf-wise分裂方法(在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,很明显leaf-wise这种做法容易过拟合,因为容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。)产生比level-wise分裂方法(对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了务必要的开销)更复杂的树,这就是实现更高准确率的主要因素。然而,它有时候或导致过拟合,但是我们可以通过设置|max-depth|参数来防止过拟合的发生。
5)大数据处理能力:相比于XGBoost,由于它在训练时间上的缩减,它同样能够具有处理大数据的能力。
6)支持并行学习。
7)局部采样:对梯度大的样本(误差大)保留,对梯度小的样本进行采样,从而使得样本数量降低,提高运算速度
)
代码水题,直接让面试官选C++还是Python,面试官(好像所有面试官回应都是一样)“你选就好”
我选就选python了写得快
棋盘有棋子,只能左上走到右下,右走或下走,问最多经过棋子数
dp[i][j]=max(dp[i-1][j],dp[i][j-1])
if chess[i][j]=='棋子':
dp[i][j] =1
二面:估计凉凉,答得不好
又一个自带打断buff的面试官 搞我思路,我不去了还不行吗
1、gbdt和xgb
(gbdt、xgb、lgb凡是项目提到了一定要熟练掌握)
2、BN、Dropout
( Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0,当然这个“一半”是超参数,自己设),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
其实就是个Bagging策略,构造子网组合。)
3、为什么不用先用LR呀(LR这么简单用它干嘛?) 用LR做做二分类,做做stack还是挺好的,但LR总感觉表达能力不够,特征比较粗的话效果可能一般。 4、腾讯比赛特征如何离散化啊 连续性特征也能交叉啊为什么不交叉 离散化就是数据分桶,我这里按百分位分桶,结果和面试官解释了很久为什么百分位分桶比较均匀,百分位是数据排序的百分位,而不是区间的百分位。 连续性特征交叉,连续性特征映射成离散特征后,可以和连续性特征一起送到嵌入层里。 5、AUC知道吧,回归怎么计算AUC
不知道怎么计算,一查 根本没有..是不是我听错了 他其实想说逻辑回归的AUC怎么计算
(回归没有AUC这么一说)
6、堆和栈哪个开辟的快
MMP完全说反了,答完很久才反应过来。说的是堆编译的时候分配好了,不用再开辟伸缩什么的快,栈要伸啊缩啊所以慢(见前面的答案,这个答错了我可以凉凉了)
7、重载和重写
(注意重写是对虚函数的重写,我当时就答错了,所谓重载就是同名函数参数表不同,编译时会对函数改名,其实运行的时候他们已经不是同名的了;重写是虚函数重写,子类对父类的非虚函数在写一遍叫重定义或者隐藏,反正不是重写,重写是对虚函数的重写)
8、大数据 买东西 找买东西最多的100个 怎么做
建个哈希表 小顶堆
9、MAP底层怎么做的
我说还没看底层代码。(话说我一直不知道有MAP这种东西存在,都是手撸哈希表,准备有时间看一下STL源码分析)
(底层红黑树,一种O(log(n)的查找插入和删除数据结构)
索引复杂度呢 我说,log(n) 恍然大悟索引是二叉树
10、有没有O(1) 的?恍然大悟 我擦原来还有哈希表
哈希表冲突怎么办
回答了拉链 重哈希 当前 1
(同样高频问题,拉链:链表,冲突了就在链表后 1个;探测:线性探测,二次探测,就比如当前的值 1;再哈希:多个哈希函数)
其实我不太会STL,我喜欢手撸。不喜欢用STL的库函数,导致我STL不太行。等有空看一波STL源码分析。
蘑菇街
面试体验特别好,一二面很顺利,然后HR又特别好,感觉HR面已经过了,就差中间的交叉面了 这里说一个点:第一次接到面试通知的时候,打开链接是一个界面,上面有个面试时间、可编辑框、确定按钮和放弃按钮。 提示写的是:如果点确定,时间将不能更改。我又不敢点放弃,打电话问的HR,说写上钟意时间在点放弃就行。 第二次面试的时候,这个框的提示语变成了,如果点确定,时间将不能更改,如果时间不合适,请写上合适时间并点取消。 我就感觉HR贼好,于是二面的时候疯狂表达了我对HR工作的满意、支持和欣赏,二面说我的夸奖她会反馈给HR滴。所以我感觉HR面是不是已经过了,就差交叉面了。
不过我说的都是实话,我确实很喜欢她们的HR。
自我介绍,两道题
第一道:
1000以内的最大素数
说了Python能够O(1)空间实现素数生成器,筛选法,但是没写,没要求就不写,直接bool判断就好,注意从大到小
分析复杂度,如何减少复杂度?从上到下,从999开始往下搜,搜到就停,每次-2。 bool判断,从2到根号x开始,全求模,非0跳出False。 但是好像面试官不会python哦?于是改用C++下一题
第二道:
不用除法实现除法,很简单
注意我的写法里,C++里abs(一个负数)可能溢出,但是无所谓面试的时候速度A比较重要,平时要注意这些细节,而且python不会溢出
笔试的时候刚准备二进制优化就下一个话题了,面试的时候写的,凑合看看吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#include <iostream>
using namespace std;
int jianfa(int num1,int num2)
{
int re = 0;
bool fuhao = false;
if ((num1<0 && num2<0) || (num1>0 && num2>0))
{
fuhao = true;
}
num1 = abs(num1);//小心溢出
num2 = abs(num2);//小心溢出
if(num2==0)
{
cout<<"div zero error"<<endl;
return 0x3f3f3f3f;
}
if(num1<num2)
return 0;
int tmp=1;
while(num1>num2)
{
tmp*=2;
num2*=2;
}
num2/=2;
tmp/=2;
while(num2)
{
if(num1>=num2)
{
num1-=num2;
re =tmp;
}
num2/=2;
tmp/=2;
}
if(fuhao)
return re;
else
return -re;
}
int main() {
int num1,num2;
cin>>num1>>num2;
cout<<jianfa(num1,num2);
return 0;
}
问了很多很多:
个别想不起来了失忆了。。
1、为什么没有实习经验?
第一点老师不让找工作。(这是真话,今天老师对另一个同学说,你找到工作了吗,你找到工作但是毕不了业你说工作是不是白找了,。。。)
第二点,为了能够接触到实际工程,在科研之余,参加了比赛,巴拉巴拉。面试官可以满意。
2、LR用过吗?
必须的
3、LGB比XGB好的点?
直接介绍二者不同
4、L1、L2不同?L1为什么能稀疏?
从数学分布讲了,一个是拉普拉斯分布 一个是高斯分布;讲了图解为什么L1能稀疏,一个圈一个菱形,容易交在轴上。工程上讲了,L1的近似求导,区间内0区间外优化。然后L2是直接求导比较简单。
5、哪些学习器是凸优的呀?
LR sigmoid logloss 凸优 。线性回归,最小二乘凸优。SVM凸优。NN肯定不凸优,因为往往收敛到鞍点。PCA无数学解,但是利用特征值反而得到 最优解
(注意sigmoid 平方损失不是凸优化)
6、特征重要性你怎么做,例如特征组合和删除,调参你是怎么调的呀?
答:特征组合用onehot 交叉 EMBEDING。组合的话要看实际分布,讲了自己构造过的一个和标签有线性关系的组合,说自己用的是遍历的方法,用两两数学关系构造新特征,看和标签的线性关系。
特征删除等想到了某个KAGGLE大佬的特征筛选步骤,从他的kernel我也是学到了很多。
调参:
第一步祖传参数。比如树模型的深度、采样频率等,这个主要还是经验
第二部调参,比如尝试新特征,特征采样频率要设为1啊这种细节
7、知道几种激活函数?
我说最简单的SIGMOID TANH RELU我就不提了,讲了讲某个比赛时候用到了leakRELU,然后谷歌的论文里面的swish函数,随口介绍了一下这个论文。
8、鞍点是什么?
我嘴贱说这个干吗,然后我说忘了,但绝对不是局部最优点,看表情面试官可以满意,其实真忘了。
(结合鞍点图像理解更佳。注意一个方向上升,所以很容易坐滑滑梯从上方滑到鞍点。另一个方向是下降,所以可以坐着下降的滑滑梯下去,但是鞍点这里梯度是0,是平的,所以优化就容易困在这里。前面多走几步就是滑滑梯但是他无路可走。 百度百科的的解释: 鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的
临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。
广义而说,一个光滑函数(曲线,曲面,或超曲面)的鞍点邻域的曲线,曲面,或超曲面,都位于这点的切线的不同边。)
先问用没用过RNN
答:项目的RNN效果,分析RNN在项目里不好,和比赛中RNN前期效果(前期效果最好)
用过GRU吗,为什么LSTM能够记忆长时记忆。
答:GRU用过一次,在哪里用的。用的记忆门,保证长时记忆传输。
9、Attention有哪些?
答:之前说到了自己用过attention,只用过,不知道原理。
(作为一个调参侠,各种网络随便试,但是attention的本质我还是不甚理解,attention is all you need?)
10、Dropout为什么预防过拟合?
从bagging的角度答的,NN是偏差小方差大的学习器,适合用bagging,构造子网络在预测的时候组合,相当于构造了学习的多样性,实现了bagging。
11、协同过滤:
说了解 但是没写过代码
(协同过滤,感觉一个学生要是搞科研为主还是很难接触到,感兴趣的可以了解下,特别是面电商的商品推荐工程师呀还是容易问到的)
12、CTR估计,都用什么?
我说LR和FM ,代码写过,FM主要是NFM,其他的FM都知道理论但是没写过代码
13、蘑菇街是干嘛的你造不?
答:卖衣服滴。于是他介绍蘑菇街主要是电商和直播。(听到直播我差点笑了,快憋不住了,就莫名很开心,然后他看我绷不住了赶紧说直播是目前蘑菇街发展最快的模块)
顺利,没有撸代码,因为时间不够面了半小时,二面说一面的评语是代码能力特别好,所以不写代码了
我的项目里有一个完整的软件实现,我负责的主要部分超过了1万行代码,可能是这一点让面试官觉得我不用谢代码了吧。
其实大部分正常手撸代码都可以(除了字符串是我的弱点),真出到不会的题是真的没办法
介绍了项目讲了项目细节
项目里编码领域内特征组合都是异或,所以用RELU BN提特征,BN真的是巨大提升
讲BN原理,公式,实现
(可以去看看BN源代码,不长)
为什么用BN压缩异或后映射的正数部分而不是什么什么(没听清)?
我提到了BN层也算做了数据扩充,而且BN层把只有0,1的编码流做了抖动转化,让梯度能变起来,优化的更好(机器学习可行无非就两点,第二点就是优化问题)
为什么用CNN?然后面试官介绍推荐领域内的另一种东西(Embedding),这个Embedding映射了隐向量,你觉得是CNN交叉好呢 还是隐向量好呢
回答:(其实我知道Embedding,因为一起参加比赛的朋友手撸了NFM,第一层就是这个嵌入层)我的回答偏向于场景,编码领域内的一个特点:只有局部相关,时不变。所以用CNN,做全局相关的Embedding反而不好。推荐里面特征离散化后稀疏,而且特征间本身可能具有高阶交互信息,所以映射成隐向量效果会较好,如果是推荐,我建议用隐向量而不是CNN,其实这是由场景决定的,是数据的特点决定选用什么学习器,使用什么网络。(我还介绍了图像为什么ResNet更好,但是编码里我的两层极限调参网络性能超过了残差网络,其实都是场景决定的)
面试官是个大佬!
自我介绍,你会来蘑菇街吗? 蘑菇街好啊,我一顿舔,但是说的都是我的心里话。 前面对答入流,主要是我在介绍自己的比赛,从开头讲到结尾,比赛的背景,中间的心路历程,最后的处理。 一二面如此顺利,交叉面前面也顺利的不像话,败在了一道会做的水题,好气。 不然我的蘑菇街就稳了啊,本来顺利的不像话,哎
给定括号流,找到字串中合法匹配的连续对数 1 s = '(())(()()()' 输出是3。下面我的dp好像最开头多加1个0?但是无所谓了 面试的时候一看我擦,字符串我不会啊,是我的最大弱点,我就直接表示我字符串不太行,可能做不出来。然后觉得应该用栈和贪心做。写着写着发现这题有点简单,动态规划可以做,这是我强项啊。然而我大早上10点30在成电天台上做的,阳光那个亮啊,屏幕哪个暗呀。最下面的input编辑区我看不见啊,那个区啥都没写,空的。然后代码区开头input(),代码区最后写的是s = '()'我以为输入进去了,实际s读的应该是空。但不知道为什么,出来dp是8个0,当时整个人都惊了,纳尼?哪来的8个0,你就是2个0也行啊。。整个人傻了,不会调了,愣着等死。 回来复盘在notebook上两分钟写完,真水题。后悔啊 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#s = input()
s = '(())(()()()'
#s = '(())(()'
re = []
dp = [0]
for i in s:
if not re:
re.append(i)
dp.append(0)
else:
if i=='(':
re.append(i)
dp.append(0)
else:
if re[-1]=='(':
re.pop()
dp.append(dp.pop()+1)
else:
re.append(')')
dp.append(0)
print(re)
print(dp)
m = 0
cur = 0
for i in dp:
if i!=0:
cur+=i
m = max(cur,m)
else:
cur = 0
print(m)
输出:
['(']
[0, 0, 2, 0, 1, 1, 1]
3
最后问问题的时候,面试官有一点说的很好啊,关于召回排序,他补充了业界的一些做法。一般情况我们排序只要偏序就可以了,但是在一些竞价广告的情形排序,我们就必须要给出准确的估计值,这样才好分钱。比如点击率CTR还是其他的组合,最后要根据这个排序计算收益。 另外,在推荐搜索里,大佬也介绍了去相关的一些东西。即召回的东西可能重复度太高,或者需要被过滤掉(比如少儿不宜,大家都狂点,不太行),所以过滤是如何做的。而且假如是对某个人推荐,一种做法是人群不做特征送进去,因为对某个人推送,这个人对所有广告或其他推荐是等效的,所以和这个人交互召回排序就可以了。 最后我问了公司的平均年龄,因为我个人比较在乎这个,互联网公司很烦的一点就是人群流动性特别大,我想占坑后就蹲坑里了。面试官大佬对我说不要有心里负担,你来了两年,做出自己的贡献,是可以去其他公司的,他自己就去过两个公司,一个是4年多,一个5年多(面试官看着这么年轻,惊了),然后他手下的小姑娘们比他小10岁,他也不好意思问实际年龄(原来是领导。。强啊,长得又帅,实力又强),他是比较支持我干了两年就溜的。而且他说蘑菇街是中大平台,有独特的好处,比BAT更更更加注重人的培养,而且平台的大数据流可能不会像BAT那么大,这种中大的数据流可以用很多模型啊,不像百度(我全程没提百度。。)可能数据流大公司的一些开源包就不行,只能用自己公司造的轮子,来蘑菇街你能更好的施展自己。 收到了HR面的通知,要求等面试官来学校或者直接去公司面试,选择后者,准备体会一下蘑菇街的风土人情。
1、自我介绍
没什么拿得出手的东西呀,我主要是算法工程师,而且实际科研项目要么专业性强(编程算法都不沾),要么是算法的东西
说了自己写的科研软件,代码量1W以上写了一堆报告 其他的简单一提
自我介绍的时候提到了自己喜欢玩游戏(以前玩盗版,现在玩正版,steam50级以上,然后游戏快100了)
(后端开发都是自学了一点,而且互娛不要python)
2、平时喜欢玩什么游戏啊?
最近一段时间科研,没玩游戏。以前喜欢玩塞尔达、黑魂、怪物猎人等
3、网易的游戏玩过吗?
阴阳师和炉石
4、聊聊炉石?
以前特别喜欢玩炉石,主要是喜欢开包(面试官笑),为炉石花了很多钱,因为我喜欢一个游戏就很愿意支持他。炉石的优点在于它有竞技性,而且也是打牌类的游戏,所以本身有趣味性,而且每局有随机性,这样每一句的体验不一样。另外一点就是攒金币开包,金币多了开包后卡池更新,可以有新的构筑,新的体验。这样每过一段时间都会新体验,留住用户,我本身也是喜欢紧张刺激的开包环节
5、三道题,比较简单,要写测试用例
手撕成功,写代码还是比较快的
第一题二分
python写的编译报错,牛客网查不到错在哪,我就赶紧c 重写了一个
讨论了二分的四个边界条件
return st,en二种对应返回搜索边界,data[mid]<value和<=value,两种对应二分上下界
共四种,然后说四种情况对应,每种的取值范围 返回st,返回的取值范围是0到数组长度,返回en,则是-1到数组长度-1 st和en含义不一样,这个最好自己写写理解一下 (更新了一下lower_bound的理解,解释了为什么返回值范围是0到len(data) PS:标准库返回的是迭代器位置,是一个指针,我这里从元素的位置概述。 lower_bound 返回数组大于等于value的第一个位置,假如数组中所有元素均小于value,返回尾部迭代器len(data),第一个元素大于等于value,返回0 (第一个元素大于等于value,则所有元素大于等于value,则返回0) 从定义看,这样定义就不可能返回负1。 找身边的跳动大佬讨论了一下,应该没写错了,有误请指正呀。 upper_bound返回大于value的第一个位置。同理,理论上返回值就不包含-1。 标准库的写法里,返回的是st。 加入返回的是en呢,那么返回的含义是什么呢?即返回的st情况-1 lower_bound :返回大于等于value的第一个位置 lower_bound_en:返回小于value的第一个位置
upper_bound:返回大于value的第一个位置 upper_bound_en:返回小于等于value的第一个位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 def lower_bound(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return st def lower_bound_en(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return en def upper_bound(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<=value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return st def upper_bound_en(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<=value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return en
对比的数改成1。
) 然后说了C++算法标准库(lower_bound和upper_bound)用的哪两种形式:返回st的那两种 注意C++标准库返回的是指针 第二题是二叉树的深度
python手撕,又报错,然后无IDE查bug还好查到了,print大发好,对python,如果print(“XXX”)没输出东西就说明没运行这一行。
定义树class的时候写的是.next,晕了,应该是.left和.right
第三题是数组旋转
左旋转,自信一波分析写完是右旋转,一脸懵逼,怎么看都是左旋转跑完就是右旋转
然后再那试了试改i,j,然后第二次就输出对了,晕,运气比较好
由于循环用的常数限制,要求改成了数组的范围,注意python len(data)是行 len(data[0])是列
正常构造一个和data一样大new数组是先列后行 [[0 for _ in range(len(data[0])] for _ in range(len(data)]
然后循环是先行后列(这样局部性更好,运行速度快,更容易缓存命中,当然面试官也没问我也没提)
写法应该是对的,但我不敢改成行列不相等的情况,万一错了呢.PS:想了想应该不对,因为new数组我照着data开辟的,应该行列反过来开辟才对,先行后列构造的话正好对应旋转后的情况,幸好没深究,不过这种bug很容易改,print()大法print一下就出来了
问问题:好希望他问我机器学习的东东,这样我就能装逼了,然而
6、静态内存和动态内存?
讲了static和堆栈是静态,编译的时候决定了大小,动态内存可以自由开辟->堆,也不知道对不对。。
(回来问了问另一个收割大佬,应该是这样)
7、堆是?
说了向上开辟,速度慢、运行时改,然后开辟的过程,链表存着下一个位置和这一块有没有使用,如果没找到就析构合并内存再找,再找不到返回null(可以参考前面的答案)
8、堆栈是?
说了向下开辟、速度快、编译时分配、主要是存PC指针,然后函数入口参数多组成栈帧存进去等着恢复
9、malloc和new区别 free和delete?
1、一个是函数(面试官没问,但我自觉呀,诚实回答忘了是哪个头文件里的了,事后查了查是stdlib我擦我天天写没想到是这个)一个是关键字
2、malloc要算大小,返回void*(然后随口提到void*可以转XX *),强转后按转完后的类型用,要自己算大小;new的时候传类型,就比如100个int,然后直接开100个就好了,他自动将int长度算进去
3、malloc再堆上,new在自由存储区(然后回答忘了自由存储区再哪了) 讲着讲着忘了free和delete的事了
(自由存储区和堆似乎是概念上的区别?我丢,深入理解计算机基础是按C讲的,我哪知道C++的自由存储区和C的堆有啥区别呀,按理来说假如new是依赖malloc实现的,那么他们不该开辟于同一块区域么。C++默认在堆上开辟new需要的空间,所以new来自自由存储区和堆都行。
网搜的答案:
自由存储区是C++中通过new与delete动态分配和释放对象的抽象概念,而堆(heap)是C语言和操作系统的术语,是操作系统维护的一块动态分配内存。
new所申请的内存区域在C++中称为自由存储区。藉由堆实现的自由存储,可以说new所申请的内存区域在堆上。
堆与自由存储区还是有区别的,它们并非等价。
)
10、智能指针了解不?
我从python的内存管理角度讲了计数法析构内存,和智能指针原理一致。但我自觉诚实的说出我没用过智能指针
11、python怎么解决循环引用的?
是不是想问我智能指针的循环引用解法?我忘了呀,我就直说python本身解不了循环引用的问题(这实话实说,确实解不了,python又不是神,循环引用要靠自己析构,对python来说,循环引用的东西就算程序关了都还在),但python有个库函数可以发现循环引用位置,然后调用垃圾收集器析构掉就好(其实就是定位内存泄露,然后gc把它干掉)
12、计网了解不?计算机网络TCP和UDP的区别?
答自学。回答了很多,挺详细了
(UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信,
TCP用于在传输层有必要实现可靠性传输的情况
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
这里建议不是特别熟的回答首部设置不一样,别说的太详细。
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
)
13、长传输和短传输?
不知道
(是http的长连接和短连接吗?HTTP1.1规定了默认保持长连接(HTTP),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。)
14、操作系统呢?
回答自己看的深入理解计算机系统,看的很详细,收获了特别多
15、进程和线程?
程序不过一段文本,运行起来才是进程,一顿讲,资源/调度单位啊、共享内存啊、并发啊XXXXXX
(见之前的答案)
16、你还有什么问我?
问了两个问题
一问:您能不能了解到其他面试人的信息,然后对着我教研室座位后面的字节大佬猛夸(因为他特别想去互娛做游戏),一开始面试官还以为这个人挂了呢我想捞一手,一听和我同时面了互娱就轻松了说既然这么强一定能过面试,然后我就突然想到好像可以暗示一波,就说我和他报的都是广州,我很想和他当同事(强烈暗示)
二问:我说我是算法工程师,机器学习特别厉害,平时工作内容是啥啊,机器学习这部分我都用上么
求互娱给个开奖机会,教练我想做游戏~(如果百度把我忘了的话),你敢让我过 我就敢去 宁可别被我逮住了
负责360搜索的部门,面试体验很好。
忘了面试的一部分,因为连续4面,其中技术面360两个,网易互联网1个,hr面1面,非常之累。
1、介绍自己
2、介绍自己实现的科研软件
用什么语言:C++
什么写的界面:QT
3、LGB和XGB区别
一开始听错了以为是LSTM,我还在想LSTM和XGB的区别,这怎么说,先介绍介绍XGB吧,然后说完XGB反应过来,面试官不是让我说LGB吧。。那就好说了,一顿讲。
(答案前面有)
4、介绍CNN、卷积层如何实现非线性
使用激活层,不然在卷积都是线性变换。我从猫的视觉锥细胞开始一顿讲,应该讲的挺详细了,CNN的时不变性真的很适合用于信号处理。讲了时不变和局部权值共享,说CNN是DNN的特例。
(
卷积:对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重)做内积操作。
卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。
卷积神经网络CNN是多层感知机(MLP)的变种。20世纪60年代,Hubel等在研究猫脑皮层时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了CNN。
CNN:局部连接和共享权值的方式,减少了的权值的数量使得网络易于优化,另一方面降低了过拟合的风险。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。在二维图像处理上有众多优势。
CNN具有一些传统技术所没有的优点:良好的容错能力、并行处理能力和自学习能力,可处理环境信息复杂,背景知识不清楚,推理规则不明确情况下的问题,允许样品有较大的缺损、畸变,运行速度快,自适应性能好,具有较高的分辨率。它是通过结构重组和减少权值将特征抽取功能融合进多层感知器,省略识别前复杂的图像特征抽取过程。
CNN的泛化能力要显著优于其它方法,卷积神经网络已被应用于模式分类,物体检测和物体识别等方面。利用卷积神经网络建立模式分类器,将卷积神经网络作为通用的模式分类器,直接用于灰度图像。
)
5、卷积层 pooling层怎么放?激活层放哪里比较好,有什么区别?
没听明白,不该是中间夹一个激活层吗。面试官的pooling真的是一言难以呀?我一直以为是最后的全连接FC层,我心想这不是被全局池化代替了么?不会所以一顿乱说?因为我自己也是改网络的时候,经常会尝试层的位置交换,我都是哪个效果好用哪个。讲的时候想起了何凯明大神的论文里的预激活,然后对着预激活、卷积层在Resnet的作用一顿夸。有会的大佬么。请私聊教教我。。。
两道题
1、10进制转K进制 进制转换
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数 输入描述 输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。 输出描述 为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等) 这题很简单,发个自己的写法,过一遍就好,挺简单的。可能个别边界会有问题,但是面试的时候尽量追求速度。 牛客网面试的时候,注意运行全部用例,可以看AC的情况,为什么这么说呢,因为你的输入面试官看不见(他说的),所以他只能给你跑一下看过了多少例子。 像这种水题一定要写得快。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
//map<int,char>table;
//table[0]='0';
//table[10]='A';
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void reverse(vector<int>&a)
{
int l = a.size();
for(int i=0;i<l/2; i)
{
int tmp = a[i];
a[i] = a[l-i-1];
a[l-i-1] = tmp;
}
}
string get(int M,int K)
{
bool ju = false;
if(M<0)
{
ju = true;
}
//注意负数转正数溢出
M=abs(M);
vector<int>data;
while(M)
{
data.push_back(M%K);
M/=K;
}
reverse(data);
string res = "";
if(ju)
res ='-';
for(int i=0;i<data.size();i )
{
if(data[i]<=9)
res ='0' data[i];
else
res ='A'-10 data[i];
}
return res;
}
int main()
{
int M=7,K=2;
cin>>M>>K;
string s = get(M,K);
cout<<s<<endl;
}
2、A->B,B->C,A->C,C->A中有一对链子A->C,C->A问序列里有多少对链子 使用哪种数据结构?
要求:序列很长,只看直接相连,A->B->C->A 不算ABC互联。
讲了比较简单的d[i][j]=(bool)的结构,O(N^2)的时间和空间复杂度
又讲了两次扫描,O(N^2)的时间复杂度,O(1)空间复杂度
最后说了数组+链表,极端情况下时间复杂度也较高,但我心里想的是对链表排序也不慢吧,二分查找,时间空间都OK呀,但我傻就傻在我心里想了,嘴上没说链表排序。
最后有会的大佬么请教教我。。
体验好,一道题,抽的前两道题都做过,一个是奇偶排序,一个是前序中序重建树
都是剑指OFFer原题,面试官见我思路顺畅,问我是不是做过,做过默写就没意思了。
我说做过剑指OFFer原题。 前两道题没手写。
第一道奇偶排序要求稳定排序,思路1就是归并排序,前偶后奇为大于。思路2双指针 二分 偶数倒
第二道 找根节点,二分,没了
第三道没做过,但是也简单,问面试官能不能用python,能的话两分钟结束这道题,说不行就老实写了
这一面主要是深挖项目,深挖!
反问环节,面试官疯狂指导我,真好,这里总结了记住的一部分:
聊了搜索推荐的一些问题,我问的第一个是360对编程能力的要求。面试官的回答是所有的算法工程师都要具备很强的编程能力。
第二个是推荐中排行榜的问题,我说上了排行榜,阅读量就是疯狂增加,一增加就会更留在排行榜上,这种情况怎么办。面试官回答这是正反馈问题,说了很多干货,有兴趣做推荐的可以看看相关内容。
我又问了冷启动的问题,我就说对于新出现的页面,第一次出现,没有任何曝光下,如何给他做推荐呢?这里面试官反问了我,我就回答了自己的思考,先小批次试点曝光,再推广。
面试官开始讲推荐和搜索排序的区别,搜索排序面临的问题更复杂。所谓排序就是获取大数据的网页界面,然后对用户的查询给出一个最可能的结果(LGB可用),用到一些分层、召回(最优可能查询结果捞出来)、排序(对捞出来的东西排序),这里排序要做到去相关性,查询要保证输出结果多样性、表达多样性,还牵扯到了词与词之间的紧密度、运营和相似度命中。
另外排序有很多难点,首先数据量更大,抓取信息很多,但是索引不是越多越好,因为存在重复的(抄袭的网页)、质量不高的网页。另外对于learning to rank,我们不需要像回归那样得到准确的回归值,只要得到他的偏序就好。比如A<B,我们算价值是A:80,B:79和A:80 B:77,偏序都一样,只要排序正确即可。而要检验我们排序的好不好,就是根据反馈,检验模型的优劣,比如我们把A在B前面,但是用户不点A点B,用户改Quary词或者翻页,都可以用于检验模型效果。这三时候可能会用概率图解决这些问题。排序技术难度大,底层需要的技术也比较高级。另外,用户的询问和我们的结果可能存在一定的gap,比如用户搜某车的标价,我们给的搜索结果是某车的成交价,这就存在了gap。
最后我问了这么一个问题,就是我在做学习强国的时候,查询一个答案, 结果第一个是付费的,第二是是免费的,有限的时间里查到的第一个结果让我付费观看,我就很生气。这个怎么看待?面试官的回答也是很棒呀,所谓的搜索排序最终就是给用户满意的结果,结果可能是多样的,有的排版好内容丰富,有的排版差内容差,我们做的就是把最好的结果展示给用户。对于搜索排序,可能产业化的结果分两个,第一种是满足需求的免费内容,特别用户预期的结果。第二种可能是竞价排序的结果,可能付费观看,大部分用户没有付费的欲望觉得不好,少部分付费用户可能也会特别喜欢,但无论如何,前者肯定也会在搜索结果前列。
啊,面到最后没时间了,面试官让我问问题,我就随便问了两个,然后不得不回360电话了,就说我有点事把视频关了,本来面得挺好的,哭
其他的忘了,就记得两道题
第一道 n的二进制表示中有1的个数
1 2 3 4 5 6 int re = 0; while(n) { re; n = n&(n-1); } 然后分析复杂度,最后提示下分析出来了log(1+n)
然后分析平均复杂度,我以为从1 到int_max的所有复杂度求平均。所以怎么都分析不对。
最后才知道是每个的复杂度,晕,面试官告诉我是log前面的系数是0.5。
第二道:
1、建个链表
2、打印链表
3、反转链表
反转链表写的不好,左右边界各判断了一次,正常情况下只判断一次就好,但面试官说也OK,多做一次时间影响不大,结果正确就好。
4、排序链表
做的是真难受,臭牛客,哼哼。写错个变量都指不出来,改bug改到头秃。
排序链表写的是链表快排,最后发现复杂度不是nlog(n),因为我L部分的尾部没有指向mid(base),导致我最后写了个找L部分的尾部,把这一步优化了就没问题了,但是面试官说也行吧排序的结果不会错。
最后问问题的时候,我一边问一边调试,最后终于把链表快排调对了。然后和面试官说我调出来了,就匆匆结束了这次面试,很难过。因为马上360就是二面,我总不能为一面放弃二面把,这里我情商不够处理的不好,哎,难受。面试官人都挺好的,都是我的问题。
面试经验肯定是面的越多越丰富的,从最初乐鑫的笔试挂,到字节跳动笔试不会写输入流(第一道题我本地1分钟就A了,然后不会写输入流,试了15分钟,然后写了第4题,结果本地能过线上报编译错误,我就很生气了,何况这个输入流更复杂我就直接放弃了)笔试直接挂,到现在面试一点也不紧张,可以和面试官愉快吹牛逼了,所以说多点经历也是挺好的(补充,这次字节笔试3.6/4,还可以)
##部分已挂的公司,吐槽一下: OPPO 简历挂?显示简历过,没有通知面试,可能原因是没填内推码,身边的字节大佬也和我一样简历挂。。。问了去面试的算法同学 面试题目婴儿难度。 还有提前批没过,但是简历状态还有,是已处理,不能再次投递。。。 VIVO 笔试挂。。我真没想到笔试还能挂,不过VIVO SP给的还不错,问的问题也不能说难?没中奖呀难受 很气,想想要不要投步步高?三顾茅庐了要 阿里 内推挂(本来在池子里,然后部门的那个人发邮件给你内推,内推完刷新界面挂,可能原因是我扫了内推连接,但是我一般是不选择内推,想一想阿里内推人也不容易,互相体谅吧) 还有一个不知道哪里的公司 挂了我简历,原因是简历是牛客上创建的,都不知道什么时候创建的,简历上面很干净。。
18-28
作者:工大菜鸡
链接:(https://www.nowcoder.com/discuss/295287)
18. 顺丰sp和ihandy牛客专场:
开篇就是吐槽,我为什么写这个?不是因为顺丰面试有多难,而是顺丰答应给我的二面,到现在都没给。。。从8月1号顺丰给了我人生中第一次公司面试到9月28号我结束秋招,在这期间顺丰不断推迟二面时间,现在又给我推到了10月中旬,不得不说,顺丰的hr还真是佛系呢。ihandy这货更狠,给我答应的一面到现在都没兑现,每次打电话过去问hr,都是同一个回答:马上帮您安排,然后我就继续傻傻的等一两个星期,循环往复。
1.自我介绍,为什么转行,你原来实验室干的什么?:因为喜欢算(qian)法(duo),原来实验室干的导航制导与控制;
2.介绍比赛,做了哪些数据的清洗,数据增强的处理?作了哪些特征?怎样提取特征的,为什么会想到这个特征呢?:balabala如实说,还说目前进入了复赛,正在复赛准备阶段XXXXX啥的;
3.我看你比赛用到了xgboost和lightGBM,那说下XGboost原理吧:额……不会;
4.那说下LightGBM吧:咳咳,也不会;
4.额那说下GBDT总行了吧:额……还是不会;
5.那你会啥?我:LR。(面试官快哭了T.T);
6.那好吧那你说说LR吧:balabala;
7.你听过CATboost吗?我:没。(面试官再一次哭了);
8.说说LSTM的原理:balabala还口述了输入门,更新门,输出门的公式;
9.你有什么想了解顺丰的吗?我:X$Y*&^%(&%@1!2¥……;
我知道我答的很菜,但我还是厚着脸皮问了面试官我的表现咋样,能否就我的面试情况和简历提点建议?后面每一次我视频面试我都会向面试官问这个问题,他们也都会热心的给我提出建议,帮我修改简历,收获很多。
结果:没想到一面给我过了,但是二面迟迟不到。
19. 滴滴牛客sp专场(二面挂):
惭愧,当时在面试的时候还以为滴滴是小公司,问面试官问题的时候,我居然问了滴滴的业务存活情况……
1.自我介绍,转行之类的问题;
2.了解那种算法挑一种介绍下:我说了LR,刚说到交叉熵这儿,面试官打断:那你说说LR为什么用交叉熵作为loss函数。我:因为lr从概率密度函数推导出来的对数极大似然函数就是交叉熵函数。面试官说:不全对,其实mse是万能的loss函数,每个模型都可以用mse作为loss函数的,那为什么lr不用mse呢?我:不几道。面试完了才想明白,mse的导数里面有sigmoid函数的导数,而交叉熵导数里面没有sigmoid函数的导数,sigmoid的导数的最大值为0.25,更新数据时太慢了;
3.说说XGB:在上次顺丰面完后,我仔细学习了一遍xgb,这一次大致回答上了面试官的问题,我说了GBDT,再从XGB是如何改进GBDT的角度引入了XGB的一些概念,比如预排序什么的,引入正则项和二阶泰勒展开什么的;
4.介绍比赛,介绍如何分工的,如何构建特征的,如何选择这些特征的;
5.说下常见的处理过拟合手段有哪些?我说了l1,l2,神经网络里的dropout,增加数据量等等,面试官问还有吗?我:不知道了。其实后来才知道bagging和boosting也是降低过拟合的手段,以前还以为仅仅是种特殊的模型。
同样向面试官问了我的表现情况以及如何改进,面试官也热心的提出了建议。
1.自我介绍,大致介绍项目。
2.聊比赛,聊人生。。。。。大概聊了30多分钟。
3.问你会不会什么操作系统,数据库啥的,c++会不会。答:都不会
二面很自然的就挂了,从滴滴的面试可以看出,其实国内的很多公司都挺看中开发能力的,只会python和跑跑模型应该达不到绝大多数公司的要求。
20.快手牛客sp专场(二面挂)
1.基础问题都是老生常谈,问题和回答略了
2.算法题:求最长回文子串,leetcode原题,动态规划求解最好,但我当时不会,用的是中心展开法,勉强做了出来。
1.上来一道leetcode上的hard算法题:求最小编辑距离。不会,直接gg
2.其他闲聊,聊人生
大概等了10多天,官网上给我挂了
21.依图(一面挂)
是我最惨的一次面试,面试官笑眯眯的,也没让我自我介绍,上来四到算法题,一道一道来的那种,题目都忘了,只记得每道都把我摁在地上摩擦,差不多情况就是这样:
面试官:出道算法题吧,第一道:XXXX。
我思索10分钟:不会;
面试官:那我们做第二道吧:XXXX。
我又思索10分钟:不会……;
面试官:那再来一道:XXXX。
我寻思我都这么惨了放过我让我走吧求你了,于是思索了两分钟说:还是不会……;
面试官:那再来一道:XXXX。
我:gun!
后来视频面试结束的时候,我专门去查了这几道题目,他们都有一个统一的解法,那就是动态规划,抱歉我之前真没听过动态规划啊啊啊啊啊,我从此下定决心,进行dp的专项练习。
22.腾讯(一面挂,好后悔没有抓住唯一一次进鹅厂的机会)
其实面试官问的问题都很简单,但是当时比赛刚做完,非常疲惫,不想学习,没有学习新的东西,也没复习旧的东西,就这样躺尸了两天,然后腾讯的技术面试官晚上打来电话面试:
1.自我介绍,介绍比赛
2.看你用到了朴素贝叶斯,说下原理吧。我心想这还不简单,刚要张嘴,才发现坏了,啥叫朴素贝叶斯来着?我给忘了!我就支支吾吾的说:用了贝叶斯公式,然后加上了观测独立假设,面试官无语……
3.说下xgb,lgb和gbdt吧。这个我会,由于前面问了很多了,不用复习也能张口就来。
4.我看你的另一个比赛用了bert和CRF,说说CRF的原理吧。我:……不会(后悔没看)
5.那说下bert的原理吧。我:……还是不会(好后悔啊,太懒了,还是没看)
后面balabala的问了一堆,我都回答上了,但是前面这几个没回答上的太伤了,一面挂
23.远景(四面挂,boss面挂的,真是挂的莫名其妙……)
都是随便介绍项目,问一些基础的问题,没啥难的,印象深刻的是二面面试官问到最后突然让我用英文介绍下比赛里面是如何选择特征的,我用我的工地散装英语一顿乱说,结束时面试官说嗯很不错,我内心:靠,你压根就没听吧!
四面是boss面,现场面的,聊人生,跟我聊了一个半小时,全程也穿插问些问题,我都回答上了,跟boss聊得非常好,然后就给我莫名其妙的挂了……,我想原因应该是boss临走前给我说了一句:你需要多注重工程能力。他可能嫌我工程项目很少吧。
24.百度(一面挂)
百度的笔试就令人印象深刻:
选择题啥都考,很杂,操作系统,数据库,c++,python,机器学习,深度学习啥都考
两道问答题,其中有一问印象深刻:说说针对中文,BERT有什么可以改进的地方。我心想:你丫不就是想吹自己的ERNIE嘛,我就写了ERNIE针对BERT做出的改进,基于知识的mask训练方式,基于知识图谱的改进等等
一道设计题,让你设计一个系统:可以写出春联,必须满足他的要求,平仄音节都要对上,我直接BERT+CRF+GPT一顿乱写。
编程题:RGB括号,我猜应该是道dp题吧,链接:https://www.nowcoder.com/discuss/254095
想看的童鞋可以看一看,无视我的答案就好,我到现在都不知道我的答案对不对。
1.红黑树的几个特点。只答上两个,其实我根本不会
2.python的装饰器@的用法。不会
3.编程,写一个函数,实现python的继承,数据的交换,类中的全局变量等等。写上了一半。
4.快排(不能用简单粗暴的那种,要空间复杂度最低的)和堆排序(必须用最小堆实现)。不是让你写代码,而是给你一个数组,直接让你用快排和堆排的思想直接一个元素一个元素的演示给他看,这个我答上了,幸好之前自己实现过弄懂了。
5.算法题dp两道:最长公共子串,最长公共子列,都是dp题,幸好专门看了九章算法,专项学习了dp,简单或者中等的dp题还是可以一战的,这两道也是lintcode上的原题,有兴趣的童鞋可以查查。
6.介绍xgb,我说到“xgb的预排序是相对于暴力求解的加速”这儿,面试官打断了我,反问我:那具体是为什么加速了呢?一个特征下的数据,没有预排序和预排序了,不都得遍历一遍才能求解出最优分裂点吗?
这个问题给我干蒙了,其实这个问题我之前思考过,但是太懒了,心里不断麻醉自己面试官不会问得这么细,就直接忽略了,没再去想。百度面试完以后我看了原论文的伪代码才明白为什么。所以再次建议尽量能读一读原paper。
7.介绍下xgb是如何调参的,哪一个先调,哪一个后调,为什么?哪几个单独调,哪几个放在一组调,为什么?哪些是处理过拟合的,哪些是增加模型复杂程度的,为什么?我寻思你十万个为什么呢?总之就是被为什么问的头昏脑涨,出了门我就知道肯定挂了。
25.搜狗(面试流程结束)
1.lr为什么用sigmoid函数作为概率函数。我:lr是基于伯努利分布为假设的,伯努利分布的指数形式就是sigmoid函数,而且sigmoid函数可以将数据压缩到0-1内,以便表示概率。
2.介绍下word2vec,说说word2vec和fasttext的区别。我:balabalabala,说的貌似还行,面试官点头
3.印象深刻的推导:
推导下word2vec里面的一个模型CBOW吧。后悔没看,哭了,我说不会。
那推导下SVM吧。这个我会,推出来了,但是到对偶条件这里,面试官问为什么能用对偶条件,我没答上来,还是太菜。
那再推下lr吧。这次顺利的推了出来,面试官问的问题也回答了上来。顺利通过了。
4.算法题:求最长回文子串,没错,和前面快手一面问的笔试题一样,答上了。
5.概率题,严格来说,这道题不是我遇见的,是我同学面搜狗的时候被问到的,我觉得很有意思,而且我们都不知道答案,请大佬解答:
一共54张扑克牌,我抽了几张牌(大于2张),有两种场景: 1.我说我有小王; 2.我说我有大王; 这两种情况,哪种有双王的概率更高?
这题我是一脸懵逼的,求各位大佬解答!
2.搜狗二面:
1.xgb的loss函数的推导(mse以及非mse形式),以及求解推导。
推出来了;
2.求最大连续子列和,要求时间空间复杂度最小。
很简单;
3.xgb是如何实现并行的。
保存预排序的block,用进程间的通信并行寻找最优分裂点。
4.lgb的直方图优化算法说说。
随便说了说,面试官也没深问。
5.讲比赛,讲项目。
balabalabal总之二面持续了差不多一小时
没啥好讲的,聊人生,聊转行,hr说需要综合各地的信息来筛选,让我回去等消息。
26.OPPO(offer)
我整个秋招所经历的所有面试官里面,一共面了三个非常有水平的面试官(我个人觉得):一个是远景的那个boss,微软亚研院呆了四年,百度呆了六年,google呆了六年。和我聊现在的行业形势以及各种模型的应用,很多问题都会直击要害,一语中的。和我的聊天中看出了我工程能力不足,跟我聊了一个半小时,为我未来提出了一些建议和规划,我很感谢那位大叔;第二个是百度的一面面试官,他好像就是住在我肚子里的蛔虫一样,总能在我的回答中揪出我不会的致命知识点,给我痛击,真的是怕啥他考啥,他的基础非常扎实,而且反应和判断非常迅速;第三个就是这个oppo的一面面试官,根本不问固定知识点,就问一些模型、手段、措施背后的本质并且举例说明,在你运用的实际场景中有没有见过。
刚开始都没让我自我介绍,直接让我说比赛。我:balabala,我介绍到CRF的时候,面试官打断我说:“你说CRF说了一大堆,那他它本质是个啥东西,我不要听那些定义,你给我说本质”。我:……支支吾吾……,说它应该是个函数,balabalaba一顿编。
然后他也没说对错,继续问:说下attention吧,我:又是一顿balabala,讲到注意力那儿的时候他问:你能举个case吗,用了attention和没用attention时候的对应的隐状态在哪些地方有区别你有去观察过吗?我:又是一顿瞎bala,他又没说对还是错。
又问我看你这里用到bilstm它和lstm的区别在哪?举例说明,用了和没用的效果。我心想:哎呦终于有个会的了,结果回答完他还是那副样子,又是啥也没说,我心想对还是错你倒是给个准信啊。
又问到了ELMo,让我说明ELMo是如何做到动态词向量的。我:把每个词输入模型,得到的隐状态相加就能得到不同的词向量;
面试官:那说下ELMo的缺点。我说:第一就是多层bilstm天生的缺点:“自己看到自己”的现象,然后举了个例子,balabala……。第二就是无法并行训练,以上两个毛病都可以用bert去改进它;
他又问其实我们可以用加入位置嵌入的方式来改进这个无法并行的问题那为什么非得用bert呢?我一想确实facebook貌似在之前就提出了位置嵌入+textcnn的方式来并行训练。完了,给自己挖坑了。于是乎我就扯了一堆bert里面self-attention的优点,哈哈哈我真是机智。
然后他依旧啥也没说,又让我介绍bert,并且问了multi-head的好处,又问我它的实际物理意义是什么?为什么能这么想?举个case说明下。我用尽了我毕生瞎编的本事,凭借着我自己的一点理解硬是说了10分钟,然后结束了是对是错他还是啥也没说……………………
又让我写LSTM的公式,勉强写上了
又问了我一个实际场景问题:用一个模型去分类一堆数据,在training阶段就无法收敛,反复震荡,有可能是什么原因,你有没有在实际场景中遇见过?
我:可能数据是标注错误的或者是随机数据,面试官补刀:假设数据没问题,那是什么原因?
我:那就是模型无法拟合这个数据或者不适合做这类数据的分类,面试官再补刀:假设模型也没问题,足够复杂。
我:那有可能是优化过程陷入了局部最优,而且一直无法跳出,面试官再次补刀:假如优化过程没问题。
我:那就是正负样本极其不均,网络没法学习到东西?面试官:我没说一定是神经网络模型,而且那再假如样本正负分布是均匀的……
我:……那我真没遇见过这样的……
面试官当时貌似不太满意,跟我聊完居然把我的简历给对折了起来!我第一次见这种场面……,心想:哎呦我去凉了,可能一出门面试官就会把我的简历扔垃圾桶里了吧……。面试官让我回去等,晚上如果收到消息就是过了,没收到就是挂了。晚上感觉想哭,毕竟OPPO是我蛮喜欢的一个公司,结果快睡着了突然来了一个短信提醒,说我OPPO面试过了……,得,这下倒好,睡不着了……
1.聊项目比赛,一路下来没问啥知识点,没啥大问题
2.画出ESIM这个模型的结构,并作介绍
3.面试官看我航天二院的项目跟导弹拦截有关系,是用GRNN预报弹道的,就让我介绍下GRNN的网络结构以及原理,还问预报精度怎么样。我说这个题目现在是我的毕设,还没做完呢……
面试官:哦……那你给我说说你要拦截的这个HTV-2是个啥?
我说:是一种美国的临近空间高超声速飞行器,可用于导弹上,对我国国防安全造成威胁,balabalabala……
面试官好像突然来了兴趣,一直问我导弹的事,跟个好奇宝宝一样:这个HTV-2很厉害吗?
我:点头,嗯嗯嗯
面试官:这个HTV-2有啥特点?你们用经典的方法一般是咋拦截的?balabala……
我:额……这些都是保密的……
面试官:哦,那没事了。
4.聊到后面问我有没有了解过一些其他的搜索排序算法,比如list-wise的,pair-wise的,然后给你一堆非常大的大数据,如何实现全数据的搜索排序,我凭借我的理解大致回答了一些,面试官说还不错,让我等下一面
我拿起我的oppo find x给hr一顿瞎BB,意向书成功到手,虽然是白菜价,但是OPPO是我很想去的一家公司,尤其是近几年开始搞些奇奇怪怪的手机出来以后越想去了- . -。
我原以为一面二面回答的不太好的情况下OPPO也愿意要我,而且hr说今年OPPO机器学习投递的简历,光筛选后的985计算机科班硕士的就多的吓人,所以我感觉OPPO今年应该在机器学习这个岗位上招人需求有很多。没想到签约会时候问hr才得知整个哈尔滨加吉林地区,机器学习的offer只有两个……,瞬间脊背发凉……
27.58同城(口头意向,拒了)
其实能面试58我是非常意外的,因为58的笔试编程题我一道都没做出来,选择题差不多一半都是瞎猜的,甚至面试的时候,面试官还把我做错的选择题拿出来又问了我一遍,并且我还是答错了……囧,而且三个面试官都问了我:为什么编程题一道都没做?………好尴尬,太奇怪了!?58怎么会给我面试呢?不过面试时我表现的还不错,最后也拿到了口头意向,但已经签了OPPO就给拒了。
1.还是各种介绍,自我介绍,比赛,项目,为什么转行啥的。
2.我看你用了ESIM这个模型,把模型结构画一下,并且告诉我为什么有用。很简单。
3.算法题:一个数组中和为k的所有二元组,要求时间复杂度为O(n)。这个也很简单。
4.介绍下BERT以及CRF。老生常谈了,他也没深问。
5.算法题:最小编辑距离,没错又一次被问到了,dp常规思路,只不过需要多考虑边界条件。完美解决。
6.算法题:一块钱一瓶水,三个瓶盖能换一瓶水,问20块最多能买多少瓶水?(用编程方法解决。)面试官午饭没吃,饿的等不及了,我刚想了一分钟还没写出来,面试官说一面就到这儿吧,我以为他要把我挂了,赶快急急地说了思路,面试官说没事你一面过了,走去吃饭吧,噗.......
2.58二面:
二面大多数时候都是我在问面试官,一时间搞不清楚谁才是真面试官……问了些58的业务,以及业务中需要的模型,算法等等的。聊得很开心,当然也有些坑,面试官会穿插着问些技术问题,比如在谈到58的软件内搜索业务的时候,面试官问如何在少量数据的情况下对用户的输入进行快速的意图识别。我说了几条:可以用信息熵来确定用户输入主体,用聚类来做些简单的意图识别等等。
3.58hr面:
一个很漂亮的大姐,很亲和,又是聊人生,结束后告诉我回去等通知。
28.华为(offer,拒了)
我申请的是华为消费者bg软件部的人工智能工程师,自然语言处理/语音处理方向。我听说今年很难进华为,想进消费者更是难上加难,但是我仍然没感觉到有多难进……可能华为比较看重课业成绩和学历吧,因为我感觉我只有这个优势……
上来两到算法题,不过都是很简单的leetcode原题,题目我给忘了,但是都答上了。但是我感觉面试难度看脸,有同学就被甩了两道dp题没答上来一面就挂了。
问的问题都很基础,知识点都是前面的那些,没有什么印象深刻的问题。
算法题:求一个数组中和为k的最长连续数组,暴力法解决的,面试官说没有复杂度要求。
问了槽位的概念,这个我之前真没听过,哎,还是太菜了。
问了些其他的基础问题
聊人生,聊规划,圆满结束,offer到手,签约会的时候,hr说给我安排到北京了,我不太想去北京,而且薪资也不高(我听到的消费者的同学都一个均价,什么硬件研究院、智能车、无线的均价都比消费者高),而且最重要的是,他把我安排到了消费者软件部下的智慧城市这个三级部门,大概率是语音方向的,我不是特别喜欢,就给拒了。
约定电面晚上8点半(阿里是加班到9、10点的节奏?)
主要是商汤无人车实习的项目,问我比baseline提升15个点,怎么来的。
从数据迭代、backbone、模型修改几个层面上说了下。
挑一两个有意思的优化说说,说了cascade、hdcnn的结构,为什么用这种结构。
项目中出现什么情况,怎么解决的?主要就是说小目标检测的解决方案。
对caffe源码熟悉程度。(我扯了扯源码的底层设计模式,数据流怎么流的,如何添加新层、cuda代码的细节)
开放题
给了一个情景,如何训练模型、调优。(题目很空,主要考察你对深度学习的理解)
根据需求(前向传播时间、模型大小),确定模型和基础网络,跑第一版模型。(举了个栗子) 判断模型是否出现过拟合的情况,来决定下一步的优化方向。 结果分析(confusionMatrix等),分析问题,将论文中的方法套上去,如果没有自己创造。(又举了个栗子)
softmax、多个logistic的各自的优势?1、类别数爆炸,2、推了下softmax反向传播的公式,来对比两者的优劣。
算法(走流程题) 字符串判断是否是ipv4,c++。(可能是时间不多了,大佬想下班了)
全程大多都是我在说,没有太多互动。后来经过源神@邢源建议,还是要故意给面试官漏点马脚让他们来怼我们,然后再怼回去,并说明不这么做的原因,不然不好拿高评分。(卧槽,真的是套路深啊~)
大佬貌似涉猎很广泛,对每一个领域都很熟悉,基本上简历中的很多细节,他都能找到点怼我。(聊了很久)
项目是从头怼到尾,主要考察对项目、深度学习的理解。
大佬对我的trickList很感兴趣,我猜想他现在做的工作和我的很相似。
Anchor大小、长宽比选取?我说了业界常用的方法(YOLO9000中的方法),并提了一个更优的方法。
为什么要深层、浅层featureMap concat?提了点细节和我踩的坑,需要数量级上的调整,不然深层的feature可能会被压制。
Cascade的思想? 说了下我的摸索的一个过程。改变样本分布,困难样本挖掘,能达到比较好的效果。
文字识别使用ctc loss的一些细节。
设计一个情景,倾斜字体检测,问我有什么好的想法?(我觉得应该是他现在遇到的问题)
数据增强,加入形变扰动。
非end-to-end版本:分别训练检测和分类,举了之前做过的一个文字识别的项目的实现。
end-to-end版本:加入仿射变换学习因子,学习字体倾斜的角度和形变。
在商汤发论文了吗?
没有,正在攒,项目比较重,但有一些work和insight,讲了下思路。(大佬听的很认真,貌似被我的故事打动了[捂脸])
为啥要换实习?日常吹水。
评价:大佬主动评价我对模型理解挺好的,工作做的挺深的,说等下一面吧。
体会:二面面试官说话很快,思维比较敏捷,觉得和这种人讨论问题很欢畅,如果一起工作会很赞。
以后面试说话语速应该快一些,让人觉得思维比较敏捷,这个可能会有加分项吧。
大佬应该是搞backbone模型优化的,问了我怎么迭代基础网络的版本的,日常扯论文,自己的实验结果和理解。
前两个卷积层通道数不用很多,主要是提取边缘、颜色信息,少量的卷积核足矣。
skip connection有什么好处?推了下反向传播公式,根据链式法则,梯度可以直接作用于浅层网络。
初始学习率怎么设?这个我真的没有总结过,只是说一般使用0.01~0.1。
mobileNet、shufflenet的原理?说了下原理。
为什么mobileNet在理论上速度很快,工程上并没有特别大的提升?先说了卷积源码上的实现,两个超大矩阵相乘,可能是group操作,是一些零散的卷积操作,速度会慢。
大佬觉得不满意,说应该从内存上去考虑。申请空间?确实不太清楚。
问我看过哪些前沿的论文?说了说最近两个月的优质的论文。
扯到了tripleLoss,大佬问样本怎么选择?随机,然后就被大佬嫌弃了。装逼失败,这块确实没怎么深入研究。
为什么用multiLoss?多loss权重如何选?训练普通的模型使其收敛,打印反向传播梯度的大小,这表示该task的难度,以此作为loss的权重,然后我补充说了下可以搞一个动态的loss权重,根据一段时间窗口来决定loss的权重。
凸优化了解吗?牛顿法、SGD、最小二乘法,各自的优势。
凸优化其他东西呢?我说只有一些零散的知识点的记忆,纯数学,没有很系统的研究。(面试官貌似数学功底很好,只能认怂)。
感觉有点虚,我尝试着往我会的地方引[捂脸]。 工程上如何对卷积操作进行优化?答:傅立叶模拟卷积。大佬不满意,说那是cudnn早就实现的,还有什么优化吗?(确实不知道,甩锅给工程组)
样本不均衡怎么处理?一个batch类别均等采样,修改loss对不同样本的权重。
三面面试官懂得不少,不过最后还是过了,有时间凸优化还是要系统整理下。
大佬应该不是做深度学习的,应该是机器学习那块的。交流中能感觉出来对这块不是很熟。挑他不会的玩命说,至少让他看到我的工作量。
SVM的KTT条件?说了说,说到SMO实在说不下去了。
GBDT和randomForest区别?原理角度,方差、偏差角度,过拟合角度,谈了谈之前打阿里天池的一些经验吧。
GBDT和xgboost区别?算法上工程上的优化,面试前专门看了,总结的不错,知乎,更多细节可以看看陈天奇的论文,我没看过[捂脸],做机器学习的小伙伴最好看看。
求和接近于target的连续子数组。(lintcode上有类似的题)
最后说让后面应该还有个hr面。