字节跳动算法面经秘籍(下)
《AI未来星球》陪伴成长的人工智能社群,价值过万的各种内部资源及活动,限时特惠中,点击查看。
求职跳槽福利:为了便于大家求职、跳槽的准备,大白将45家大厂的面经,按照知识框架,整理成700多页的《人工智能算法岗江湖武林秘籍》,限时开放下载,点击查看下载。
字节跳动算法秘籍(上):点击查看
字节跳动算法秘籍(中):点击查看
5 编程高频问题:Python&C/C++方面
5.1 python方面
5.1.1 网络框架方面
5.1.1.1 Pytorch相关
● torch.Tensor 和torch.tensor 有什么区别?
● torch.no_grad 和 required_grad=False 的区别?
● pytorch里function和module有什么区别?
● pytorch里dataset、dataloader、sampler有什么区别?
5.1.1.2 Tensorflow相关
● 问TensorFlow如何实现并行,我讲了下PS架构,又问梯度更新时是同步还是异步,同步异步的优缺点。最后问到优缺点说明面试官经验还是非常丰富的,刨根问底可以看出你是否真的深入思考过这个问题,抑或是从别人博客看来的人云亦云。
● 用TensorFlow多吗?它的优化器都是什么?分别介绍一下
● TensorFlow怎么实现梯度传递?
● Tf、keras、pytorch区别?
5.1.2 基础知识
5.1.2.1 线程相关
● 你比较熟悉Python?你了解过他的多线程么? 为什么多线程比较鸡肋
● python GIL解释一下
● python里的多线程,怎么让它占满核呢?
● 问了 python中的进程和线程?python中线程有什么缺点吗(全局锁)?
● 既然 python中的线程有全局锁是不是没有啥用(不是,虽然有全局锁但是对于一些 I/O操作较大的应用影响不大,因为他们并不需要真正的并行运算)?
● Python中多进程多线程的应用
5.1.2.2 内存相关
● STL中vector的低层实现,STL中插入的操作时间复杂度,要考虑内存复制扩充,
● 如何实现一个栈,支持动态扩充
● python里面的深拷贝和浅拷贝
● python 的回收机制
5.1.2.3 区别比较
● python是解释语言还是编译语言
● xrange与range的区别,xrange通过什么关键字实现的?yield语句底层如何实现?
● python中 is与== 的区别
● new和malloc区别
● map和unordered_map区别
● 了解 utf8吗?utf8有几位?英文在 utf8中占几位?utf8和 utf16有什么区别?(utf8四连把我给问蒙了,出师不利)
● python2和python3的区别,python2为什么要更新成python3,print为什么要加括号?
5.1.2.4 讲解原理
● python装饰器,python迭代器和生成器介绍一下
● python全局锁是什么?
● python的动态数组是如何实现的
● python中dict的底层是啥
● 问python中list的底层怎么实现
● python有多线程吗?
● python里的生成器是什么?
5.1.2.5 讲解应用
● Python数据结构有哪些?
● python中的C拓展的具体例子
5.1.3 手写代码相关
● 交换a和b两个数,不借助第三个变量
● 用lambda表达式生成奇数的数组
● 实现sqrt函数,结果保留5位小数
5.2 C/C++方面
5.2.1 基础知识
5.2.1.1 内存相关
● C语言的动态内存分配器
● 是否了解虚函数,虚继承,多态。 vector底层如何实现插入的时候不改变内存空间
● C++共享内存实现原理,多线程通信,互斥锁
5.2.1.2 区别比较
● 参数传递时,传值、传引用和传指针的区别
● 函数返回时,返回值、返回引用和返回指针的区别
● dynamic_cast、static_cast和reinterpret_cast区别
● const A&func(const B& b) const 中三个const的区别
● new 和malloc有什么区别
● C++的虚函数和虚继承的作用
● 数组和链表的优缺点?
5.2.1.3 讲解原理
● 重载和重写
● 什么是多态,如何实现多态
● 多态;虚函数表;虚函数表指针大小;gcc编译过程;
● c++11新特性;const;new、malloc区别; 虚继承;四种类型转换;智能指针
● C++ static关键词的作用,初始化参数列表有什么用
● 介绍C++的虚函数,析构函数一定要是虚函数吗?
● C++面向对象介绍下?
● static修饰符有什么用?如果不加会出现什么后果?
● List的底层实现?
● Hashmap特点?HashMap的实现原理?如何解决Hash冲突?
● LRU算法讲一下?
● FFmpeg熟悉程度?
● 研究过h264,h265和h266吗?写过解码器吗?
● 设计一个带TTL的容量有限的hash map,在TTL=0后从map中移除。在装满后,如果还有元素进入,将TTL最小的元素移除。
5.2.1.4 讲解应用
● C语言中结构体struct{int i; bool b}一共占几个字节?
● C++的析构函数一定要是虚函数吗?
● 如何从用户态进入内核态?
● C++定义图和节点
● 这样声明变量有没有问题:int a[10000000]?
● C++ map中自定义的class 为什么不能作为key?
5.2.2 手写代码相关
● 实现一个C++双向链表类
● 手写双向链表插入新元素;
● 稀疏向量的点乘。先要我自定义存储的结构体,然后写函数头,再编程,本来要我用template但我不会就算了
● 如果实现c++中的vector,只需push_back和查找两个功能,底层如何实现。
● 实现memcpy
● 手写拓扑排序?
● 底层基于xnor运算的二值化卷积算子你是怎么实现的? 可以简单实现一下吗?现场用CUDA写了 底层基于位运算的GEMM kernel ,实现im2col的矩阵乘法。
6 操作系统高频问题:数据库&线程&常用命令等
6.1 数据库方面
6.1.1 基础问题
6.1.1.1 区别比较
● SQL中count(1), count(*), count(列)区别
6.1.1.2 讲解原理
● Mysql的数据存储结构
● MySQL底层是什么、B树和B 树的区别(因为我回答MySQL用B 树)
6.1.2 手写代码
● SQL如何取出成绩表中各科的前三名?
6.2 操作系统方面
6.2.1 TCP协议相关
● TCP和UDP的区别:一个面向连接,一个面向无连接。
● 为什么TCP比较慢,另外怎么保证可靠性
● TCP如何保证消息安全?
● 拥塞控制,流量控制,然后问流量控制会不会发生死锁?
● 三次握手和四次挥手的原理?
6.2.2 线程和进程相关
6.2.2.1 区别比较
● 线程和进程的区别和联系,进程和线程相比有什么好处?
● 同步 IO 和异步 IO
6.2.2.2 讲解原理
● 进程之间的通信方式 ,进程之间的序列
● 常见的进程调度算法?公平调度?时间片调度?
● 32位操作系统和64位操作系统的寻址范围?
● 线程如何保证原子性?
6.2.2.3 讲解应用
● 讲一下进程和线程的应用场景(多线程爬虫)。
● 加问死循环发生原因:
● 多个线程执行put操作时同时触发了rehash方法,可能会生成环形链
● 两个线程,每个线程有一个数组,交替输出,怎么做?
(问操作系统、数据库、网络哪个比较会。。答差不多都忘了,随便问吧,应该就是跪在这里了吧?所以说投算法的同学还是要复习计算机基础的,基础不能放下啊)
6.2.3 常用命令
● Linux系统怎么查看进程CPU使用率?
7 技术&产品&开放性问题
7.1 技术方面
● 电梯算法设计,机器学习怎么搞?
● 听音乐,怎么推荐,10亿首,怎么设计方案(K-D树以及实现)
● 有一个1000w的视频库,每个视频3-5分钟。 新来一个视频,我们需要去这1000w的视频库里查询,是否存在相同视频。 1.选择使用什么样的特征 。 2.设计一个好的index,使得查询尽可能快 (这1000w视频可以离线处理)-抽帧+Pooling+相似性哈希
● 工程中遇到了哪些优化复杂度的方法。
● 正负样本数据不均衡怎么处理。说了几种方案,欠采样,负采样,生成负样本等。接着问我怎么生成负样本,说了图像处理,GAN等等。就问我生产样本需要注意什么,我说最重要的是要和原始样本的分布保持一致。接着问我怎么能保证分布一致,到这基本就是我的知识盲区了,靠着经验和理解开始扯,期间他一直盯着屏幕打字,中间还打了几个哈欠,让我一直纠结还要不要接着说下去,最后实在扯不下去了,经历了十几秒尴尬的沉默之后。他说,问你道题吧。
● 如果遇到一个模型的归回效果特别差,怎么考虑和解决?A:首先考虑模型的选取是否符合问题,然后考虑数据样本映射到更易回归的空间中(后来觉得应该是:先看数据是否有很多异常值、离群点影响模型效果,然后再看模型的复杂度够不够,通过增加模型复杂度来提升模型拟合能力,好了,我不瞎说了,说的都是皮毛,纸上谈兵罢了,自行百度,真的可以很复杂)
● 如何判断机器是大端模式还是小端模式
● 优化搜索引擎时,如何从用户的行为上判断用户对我们提供的搜索结果的满意程度?很实际的问题,但对我而言是完全陌生的领域,估计研究推荐系统的人都懂这个,我当时绞尽脑汁:如果用户经常点开的链接不是第一个结果,而是后面的若干结果,那么说明用户对结果不满意。
● 三维视觉,你的研究方向在我们的产品中可以用到哪里?
回答了抖音的动态贴图和头部三维建模
现在大部分手机都是单目摄像头没有深度摄像头,怎么解决,来应用你的算法
回答了模型需要通过三维数据进行训练,但是应用模型时可以直接单张图片重建三维模型
了解动作捕捉吗?现在有一个人在做表情,有一个动画模型,怎么让动画模型做出人脸同样的表情?
回答了3DMM的表情系数
● 现代cpu算力在什么量级
● 开放题:有一个1000w的视频库,新来一个视频,我们需要去库里查询是否存在相同视频。存储这么多视频时应该选择什么样的特征,查询要用什么方法。(这个回答的还行,楼主大致说了一下用LSTM提特征再哈希的思路,面试官没说什么就过了)
● 开放题:磁盘上有M个数组(M很大),每个数组长度不确定,数组内数值不会重复。现在要求其中n个数组的交集。设计算法使这个求交集的速度最快,另外有内存限制。(这题真的雪崩!楼主在看题的时候把交集当成了并集来做,所以思路完全跑偏了。。。后面是快结束的时候面试官一提醒才发现的。。。然后赶紧说了一个两个数组求交集的实现就结束了)
● 开放题:你觉得影响模型效果的因素有什么,并排个序。(我回答的是特征>模型>优化器,才疏学浅只答了这些)
● 开放式问题:怎么论证现有的模型需要多少额外的标注数据
● 给你一亿个特征,现在来了一个新的特征如何处理。
● 2.5亿个整数找不重复的整数,内存无法一下存下这2.5亿个数,怎么做。
● 写一个函数,输入是N个文件,每个文件中是很多float的数值,文件内部无序。输出是一个有序的大文件,内存约束2个G,磁盘可以随便用,具体怎么实现比较高效?
● 设计一个函数,判断传入的IP地址在过去一个小时之内的访问次数是否大于10000次。这个问题没有做出来。(还是没有get到面试官出这个题的点,当时自己想的太过于复杂,就不知如何去实现了)
● 推荐系统方面:具体场景应用是由词向量引出的,首先问了词向量负采样的细节,数学原理,然后问大规模的用户导致维度爆炸怎么处理?如果让你设计一个推荐系统怎么做?
● NLP方面:设计一个系统来筛选抖音中的低俗视频?(从视频帧,图片,文字三方面来提取特征)
● NLP方面:现在有一些新闻,包含军事、体育、经济等,想分出它属于哪个类,该怎么做?
● 开放题:在一个只能传输0,1的信道里面,如何传输两个数字?(面试AI Lab机器学习实习生时问的,非常规)
7.2 产品方面
● 模型升级后,放到线上使用,发现线上效果不好,此时你该怎么办?
● 给图片去水印怎么去?
● 面试官解释题目:假如抖音里面有5亿用户,那么每个用户打开一次抖音就有5亿条记录,如果每个用户打开两次抖音,就有10亿条记录。也就是说,用户每打开一次抖音,就记录一下他的uid。请找出打开抖音次数最频繁的前10个用户。
● 聊了一些开放性问题,问抖音APP的冷启动怎么做。如何推测用户的性别,怎么手机训练模型用的数据。你觉得你使用抖音有什么问题,有什么解决方案。
● 怎么推测抖音用户是男性还是女性?怎么确认判断结果的靠谱程度?
● 从一段长视频中截取或者拼凑10s-20s的短视频用于广告投放,吸引用户点击下载app,怎么得到目标短视频?
● 任务,找出大量数据中的宠物猫
7.3 开放性问题
● 抖音你觉得如何刻画用户画像?用户在不同时间段刷,怎么理解用户的属性?如果一个时间段用户活跃度不高,怎么从数据挖掘角度看呢?
● 如何给主播打标签?
● 给你一个产品,作为一个算法工程师,你会做些什么,来让你的产品变得更好?
本文由 大白智能 作者:凯哲 发表,其版权均为 大白智能 所有,文章内容系作者个人观点,不代表 大白智能 对观点赞同或支持。如需转载,请注明文章来源。