百度AIG知识图谱部算法实习生面经(已拿offer)
一面:
1.自我介绍
2.平时用什么编程语言比较多
python,另外学过C语言和JAVA
3.c语言里指针占多少内存
答成8位了,应该根据机器而言是16位或32位
4.python里的map函数,讲一下它的作用和返回值
传入一个函数和一个list,将这个函数作用于这个list的每个元素上.返回值是一个新的list.
5.什么是梯度下降法
6.手写代码:归并两个有序数组
7.知不知道什么数据结构的查找的时间复杂度是O(1)
哈希表,也就是python中的dict
8.哈希表的原理是什么
利用哈希函数映射,构造出一个键值对
9.手写代码:两个大文件a和b,每一行存储的都是一个字符串,找出其中在两个文件中都出现过的字符串
构造一个哈希表,先逐行读入文件a,如果该字符串已经在哈希表中就跳过,如果不存在就存入哈希表中.读完以后逐行读入b,查找哈希表中有没有对应的值.
当时用的是dict,面试官说这种情况直接用set会更好.
10.如何判断一个链表中是不是存在环
一开始理解成是头尾相连的环,先回答了设头结点为一个特殊字符,比如'*',然后一直往下读取,如果读到null说明没有环,如果读到'*'说明有.
面试官提示说不一定是和头结点连成环,先回答了类似上面的想法,每一位设一个特殊字符,然后判断.但是需要用一个额外的空间来存储被设为特殊字符的结点原来的值.
面试官问有没有不需要额外空间的方法,思考了一会想到设立两个指针,都从头部开始遍历,一个指针每次前移一位,另一个指针每次前移两位,如果它们相遇就说明存在环,如果遇到null说明没有环.
面试官问为什么这种方法一定能够找到环.因为假设环的长度是K,前一个指针每次都会比后一个指针多走一步,那么让两个指针一直走下去,肯定会存在一个M,使得K是M的因数,并且两者在环内相遇.
11.有一个内存放不下的大文件,每一行存储的是一个数字,现在要随机从中取100个数字,怎么取比较好
先想到直接随机取一个数M,然后取M~M+100行的数.面试官说无法确定文件的大小,那么这个M也无法随机取.
这道题没有想到太好的思路,后来在网上也没有找到类似题的答案.
二面:
一面过后一天接到了二面的电话
1.自我介绍
2.知道c++中指针和引用的区别吗
我表示没有学过C++,只学过C
3.一个有序数组,现在将它从某个位置翻转后,如何查找其中的数字
翻转有序数组问题,首先有序联想到了二分查找.然后根据查找的情况修改一下判断条件即可.因为一个翻转有序数组从中间截断后,必定有一边是有序数组,另一边仍是翻转有序数组,那么问题就解决了.
4.一个有序数组,给定一个k,要将它第k位后的数字整体移到前面去,如何实现
先回答了最简单的方法,就是新建一个数组,先存入原数组第k位后的数字,再存入前k位数字.空间复杂度为O(n)
然后又想到一种方法,定义一个操作为翻转,可以通过不停地交换数组两边的元素实现.那么首先翻转数组的前k个数字,再翻转数组第k位后的数字,然后再将数组整个翻转一次就可以了.空间复杂度为O(1)
5.一个n步的台阶,每次可以走1步或2步,走完n步有多少种方法
动态规划问题,f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)
6.实现斐波那契数列的时间复杂度是多少
上题的动态规划式子实际上就是斐波那契数列,递归实现的时间复杂度是O(2^n),非递归实现的时间复杂度是O(n)
7.如果有两个单词的组成完全相同,就称为同源单词.例如stop和post.现在有一个字典,如果找出其中所有的同源单词?
想到了trie树.假设都是小写字母的话,那么就构造一个26叉树代表26个小写字母.在将单词存入树中时,将它拆为按字典序排好的字母,例如stop就是头结点->o->p->s->t,然后将stop存入t结点中.类似的post也会被存在头结点->o->p->s->t结点中.这样遍历一次字典后只需要看树结点中有没有多个单词就能找到全部同源单词了.
面试官问如果一个单词很长的话怎么办,回答可以用哈希表存储每个字母的出现次数.但是这种方法适合用于判断两个单词是不是同源单词,不适合查找所有同源单词.
网上一种思路是先按字母数量排序,然后再存入字典树,比较快速.
8.k-means的原理
9.k-means是局部最优还是全局最优,为什么
局部最优.原因我回答的是因为k-means的最终结果和初始点的选取有关,所以不可能是全局最优的.
面试官表示应该从凸函数的角度去解释.另外在网上看到一种说法是k-means是贪心算法的一种实现,所以是局部最优.
10.项目经历
11.有2.5亿个数字,要从中找出所有只出现过一次的数字,如何实现
首先利用哈希表将2.5亿个数字划分成1000个小文件.然后对于每个小文件,采用bitmap的思想.所谓bitmap就是指用位来代替数字,本题数字可能有没出现过,出现过一次,出现过多次三种情况,所以要用2位来表示一个数字.在完成所有文件的bitmap后,00表示没有出现过,01表示出现过一次,10表示出现过多次,那么我们将1000个文件中每组对应的两位bitmap相加,如果一组结果为01就表示对应的数字只出现过一次.
offer流程:
过了一个周末后接到了部门经理的电话,给了口头offer
两天后接到HR电话,商量了入职时间.
又一周后收到了正式offer~
找算法岗实习的一些经验:
- 对你想做的方向(比如机器学习/计算机视觉/自然语言处理/深度学习)的常用算法的数学原理和编程实现要深入了解,很可能会被问到公式推导或者底层实现之类的细节.例如我是机器学习方向的,那么就要着重了解svm\决策树\nb\lr\knn\k-means这些算法,以及相关的损失函数和各种优化方法.推荐的书籍是《统计学习方法》
- 计算机专业的几门大课(计组,计网,操作系统,数据结构)尽可能掌握得扎实一点,其中对算法岗来说最重要的是数据结构与算法,推荐在leetcode或者类似的平台刷题,不用贪多,重要的是掌握几种常用数据结构和算法(数组,树,dfs,bfs,动态规划,哈希表)的应用场景.另外一定要了解常用数据结构操作和算法的时间复杂度.
- 算法岗和大数据是分不开的,面试中的最后一题很可能是关于处理海量数据的.可以参考教你如何迅速秒杀99%的海量数据处理面试题
- 对于常用的语言(c++,java,python中的一门或多门)要深入了解,不能局限于实现简单的代码逻辑.以python为例,要知道列表生成式\各种内置数据结构的原理\map函数\深浅拷贝这些知识.
- 会用一些相关的框架或库,例如数据处理的numpy和pandas,机器学习的sklearn和xgboost,深度学习的tensorflow/pytorch/keras等等.
- 最好有一些相关的竞赛(Kaggle,天池)或项目经历,既可以锻炼自己的工程能力,也会让面试的时候有自己擅长的东西可讲,否则就会被问到很多基础方面的问题.
百度AIG知识图谱部算法实习生面经(已拿offer)的更多相关文章
- 百度大脑UNIT3.0详解之知识图谱与对话
如今,越来越多的企业想要在电商客服.法律顾问等领域做一套包含行业知识的智能对话系统,而行业或领域知识的积累.构建.抽取等工作对于企业来说是个不小的难题,百度大脑UNIT3.0推出「我的知识」版块专门为 ...
- 知识图谱+Recorder︱中文知识图谱API与工具、科研机构与算法框架
目录 分为两个部分,笔者看到的知识图谱在商业领域的应用,外加看到的一些算法框架与研究机构. 文章目录 @ 一.知识图谱商业应用 01 唯品金融大数据 02 PlantData知识图谱数据智能平台 03 ...
- Atitit 知识图谱的数据来源
Atitit 知识图谱的数据来源 2. 知识图谱的数据来源1 a) 百科类数据2 b) 结构化数据3 c) 半结构化数据挖掘AVP (垂直站点爬虫)3 d) 通过搜索日志(query record ...
- 1. 通俗易懂解释知识图谱(Knowledge Graph)
1. 通俗易懂解释知识图谱(Knowledge Graph) 2. 知识图谱-命名实体识别(NER)详解 3. 哈工大LTP解析 1. 前言 从一开始的Google搜索,到现在的聊天机器人.大数据风控 ...
- 知识图谱与Bert结合
论文题目: ERNIE: Enhanced Language Representation with Informative Entities(THU/ACL2019) 本文的工作也是属于对BERT锦 ...
- Atitit 图像处理知识点体系知识图谱 路线图attilax总结 v4 qcb.xlsx
Atitit 图像处理知识点体系知识图谱 路线图attilax总结 v4 qcb.xlsx 分类 图像处理知识点体系 v2 qb24.xlsx 分类 分类 理论知识 图像金字塔 常用底层操作 卷积扫描 ...
- Atitit 图像处理知识点 知识体系 知识图谱v2
Atitit 图像处理知识点 知识体系 知识图谱v2 霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像 ...
- Atitit 图像处理知识点 知识体系 知识图谱
Atitit 图像处理知识点 知识体系 知识图谱 图像处理知识点 图像处理知识点体系 v2 qb24.xlsx 基本知识图像金字塔op膨胀叠加混合变暗识别与检测分类肤色检测other验证码生成 基本 ...
- Atitit 知识图谱解决方案:提供完整知识体系架构的搜索与知识结果overview
Atitit 知识图谱解决方案:提供完整知识体系架构的搜索与知识结果overview 知识图谱的表示和在搜索中的展1 提升Google搜索效果3 1.找到最想要的信息.3 2.提供最全面的摘要.4 ...
随机推荐
- XML_CPP_资料_libxml2库函数详解
http://blog.csdn.net/hanchaoman/article/details/42557195 许多事物符合80/20法则,libxml中也是20%的函数提供了80%的功能.下面的列 ...
- deque_01
A.头尾 添加/移除 A.1.deque::push_back(elemValue); A.2.deque::pop_back(); A.3.deque::push_front(elemValue); ...
- java日期操作 大全
先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http://iamin.blogdriver.com/iamin/847990.html )); } ...
- Codeforces 821C - Okabe and Boxes
821C - Okabe and Boxes 思路:模拟.因为只需要比较栈顶和当前要删除的值就可以了,所以如果栈顶和当前要删除的值不同时,栈就可以清空了(因为下一次的栈顶不可能出现在前面那些值中). ...
- GO 和 KEGG 的区别 | GO KEGG数据库用法 | 基因集功能注释 | 代谢通路富集
一直都搞不清楚这两者的具体区别. 其实初学者搞不清楚很正常,因为它们的本质是相通的,都是对基因进行归类注释的数据库. 建议初学者自己使用一下这两个数据库,应该很快就能明白其中的区别. (抱歉之前没讲清 ...
- memcached set命令的大致处理逻辑笔记
这次记录状态机的主要逻辑,跟踪set命令的执行流程,暂不涉及到内存申请这一块,下面内容基本都是代码注释 首先还是补充了解下客户连接在发送数据到数据被处理并返回过程中conn的各种状态的表示 enum ...
- 我理解的NODE
简介:NODE不是我们想象中的后台语言,它不是一门语言,它是一个和浏览器类似的工具或者平台,在NODE平台中,可以把我们写的JS代码解析出来,而且NODE和谷歌浏览器一样都是采用V8引擎渲染解析的. ...
- javaScript数组的三种属性—数组索引、数组内置属性、数组自定义属性
JS数组也是一种对象. 我们用JavaScript处理的所有东西,都可以视为是一种对象. JavaScript中有两种数据类型,基本类型数对象类型,但是基本类型基本都是包括在对象类型之中的. 数组.函 ...
- windows下线程间的通信方式
1.事件: (在信息交换函数中将控件的值与控件id进行绑定,这样我们就可以更新或者获取控件的值) void CMy0722ThreadTalkingDlg::DoDataExchange(CDataE ...
- nyoj-489-dinic/建图
哭泣天使 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Doctor Who乘着Tardis带着Amy来到了一个星球,一开Tadis大门,发现这个星球上有个壮观的石 ...