腾讯算法面经秘籍(下)
《AI未来星球》陪伴成长的人工智能社群,价值过万的各种内部资源及活动,限时特惠中,点击查看。
求职跳槽福利:为了便于大家求职、跳槽的准备,大白将45家大厂的面经,按照知识框架,整理成700多页的《人工智能算法岗江湖武林秘籍》,限时开放下载,点击查看下载。
腾讯算法面经秘籍(上):点击查看
4 数据结构与算法分析相关知识点
4.1 数据结构与算法分析
4.1.1 线性表
4.1.1.1 数组
● 数组有序,但是循环右移了几位,问新数组中原数组起始位子的下标是多少?
● 有序含重复值数组找某个值第一次出现的位置
● 无序数组中找第k大的数
● 二维矩阵的查找(每次去掉一行一列,以及分治法)
● 有序数组查找给定值出现的左右位置?
● 找出数组唯一的重复数
● 一个长度为n的数组里面可能有1…n-1出现,一个数字出现多次,其余数字出现0次或1次,怎么判断出现多次的数字是哪个?
● 判断两个数组是否有相同数字?
● 旋转数组的二分查找
● 旋转数组的最小数字
● 一个有序数组[0,0,0,1,1,1,1,1,1,3,3,3,3,,3],给一个k,找出k的左边界,不存在就返回-1(二分)
● 一个整数数组,找最右边数与最左边数的最大差值
● 无序数组找前k大的数,描述思路+复杂度分析
● 给一个长度为n的数组,输出其中任意n-1个数的乘积,可不可以不用除法?
● 给定一个整数数组[a1,a2,.....aN] ,N个数, 现在从里面选择若干数使得他们的和最大,同时满足相邻两数不能同时被选, a1和aN首尾两个也认为是相邻的?
● 子数组最大和
● 给一个数N,k,每一轮可以进行两种操作的其中一种
a. 所有的数拆分成两个更小的数
b. 所有的数-1
已知拆分操作只能进行k次,最少需要多少次把所有数都消去?
● 给一个数组,求连续子数组和为k的倍数的所有子数组
● 给定一个整数数组 A,找到 min(B) 的总和?其中 B 为 A 的每个连续子数组。(连续子数组的最小值之和)
● 一个二维数组,表示地图上该处的高度,一个人滑雪只能从高处滑向低处,方向为相邻四个方向,求最长滑行距离?
4.1.1.2 链表
● 单向链表的反转
● 逆序双向链表
● 单链表判断是否有环 (leetcode easy),以及判断环入口
● 链表判断有环&不在环里的链的长度
● 链表排序(用O(nlogn)的归并写的)
● 合并两个有序链表
● 单向链表输出倒数第k个数
● 写一个函数把两个单调递增的链表连接起来,要求连接之后还是单调递增?
4.1.1.3 栈
● 堆和栈的区别?
4.1.1.4 队列
● 队列和栈的区别?再写代码:用栈实现队列
4.1.1.5 字符串
● 反转字符串
● 去掉字符串中违法的单括号
● 字符串编辑距离
● 求A的长度为L的各个连续子串在B中出现的次数总和?
● 找到字符串中第一个只出现一次的字符?(说明时间复杂度)
● 找数字中只出现一次的字符
● 数字的二分查找,找到始末位置
● 寻找回文串
4.1.2 树
4.1.2.1 二叉树
● 二叉树搜索的复杂度?与红黑树的区别?
● 按照左根右根的方式序列化二叉树?再根据的序列,反序列化一颗二叉搜索树?
● 红黑树怎么调整?红黑树的左旋,右旋?
● 二叉树最长路径长度
● 二叉树最低公共祖先,非递归方法
● 判断平衡二叉树?
● 根据前序,中序创建二叉树
● 二叉树左右子树的翻转
● 二叉搜索树的性质?
● 二叉搜索树的第K大节点?
4.1.2.2 堆
● 对堆排序的介绍
4.1.3 排序
● 排序算法哪些时间复杂度比较低?
● 最长上升子序列并分析复杂度,O(N^2)和O(NlogN)的方法都说一下?
● 最大递增子序列如果是个环,怎么计算?
● 快排的思想是什么?
● 各种排序介绍一下,手写快排,快排复杂度是多少,最差的情况下怎么优化?
● 如何在海量数据中快速查找最相似的文本?
● TopK给出3种解法
● n个数求第k大数(我说用最大堆或者锦标赛排序,但面试官说不是最优解,说用快排,复杂度是n)
● TOPk问题,如果可以并行,如何优化?
● 堆排序的细节
4.1.4 搜索
● 0-1 矩阵,DFS 判断两点是否可达?
4.2 算法思想实战及智力题
4.2.1 算法思想实战
● 疯子坐飞机的算法题
● 高楼扔鸡蛋问题,不需要数学最优解,能把DP解法讲出来就够了
● 圆桌问题(约瑟夫环)
● 数岛屿数目的变体
● 名人问题,给出最优解法
● 上N阶台阶的种类(答完O(n)解后,要求O(logn)复杂度。受到启发,用类似马氏链中状态转移矩阵的方法去做)
● List和set的区别查找插入的时间复杂度,set如何实现O(1)的查找复杂度?
● 三角形数的最大路径和?(dp思想)
4.2.2 智力题
● 有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?
● 有12张生肖卡,每个人吃一顿饭集齐一张,平均吃多少顿能全部集齐?
● 25 匹马,5条赛道,无计时工具,比出前三名最少多少场比赛?
● 64匹马,每次最多可以赛8匹,可以知道结果的相对顺序,测多少次可以选出前4名?
● 给一串数列,这串数列有正有负,但是总和为0。每个数xi代表一个村庄,正的表示村庄想卖出xi份水果,负的表示想买入xi份水果。两相邻村庄间的距离是相同的,单位距离运送一份水果的运费均相同,每份都是k。问,把每个村庄的需求和供给都解决掉需要的最少运送费是多少?
● 一款修仙游戏,设定从凡人到飞升一共100个等级,凡人为0级,飞升对应99级。 从凡人升级到1级需要消耗资源1个单位,成功概率99%,失败还是凡人。 从1级升级到2级,需要消耗资源2个单位,成功概率98%, 失败则降1级为凡人。 类似地,从k(k大于0,小于99)升级到k+1级需要消耗资源k+1个单位,成功率(1-(k+1)/100), 失败则降一级。问从凡人到飞升平均需要消耗多少单位资源 ?
● 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人都出列?
● 有N个人轮流进去一个小黑屋,可开灯、关灯或不操作,每此随机地有一个人进去,互相之间无任何交流,问某人如何知道自己是最后一个进去的人?
● 三个瓶子倒水问题:
11升,5升,6升的瓶子,其中11升的瓶子里装满了水,请倒出8升的水。
4.3 其他方面
4.3.1 数论
● 100块钱随机分给10个人,要求每个人分到的数额在期望上相等(即都是10)
● 求数字的平方根?
4.3.2 计算几何
● KKT 条件
● 拉格朗日乘子法对偶
● 说一下凸优化方法?
● 给出一些点坐标,判断这些点是否关于与y轴平行的轴对称
4.3.3 概率分析
● 给一个实时更新的数据流,最开始大小为N,从里面需要抽取m个数据,问新加入的数据怎么能够保证仍然是等概率抽样?即新加入的数据以多大的概率保留才能保证你所选的样本都是等概率的?(涉及到的蓄水池抽样算法)
● 给100个红球 100个篮球 两个篮子, 怎么分配这些球让你在任意一个篮子中摸到红球的概率最大?
● 甲乙扔骰子,获胜概率相同,投 10 次,已经 5 次了,甲已经赢了 3 次,问甲获胜概率?
● 线段分三段,成三角形的概率
● 给一个均匀生成1-7随机数的生成器,怎样均匀生成一个1-10随机数的生成器?
● 一个函数f()返回0的概率是0.6,返回1的概率是0.4,写一个函数,利用f() 使返回0和1的概率均等?
4.4 Leetcode&剑指offer原题
● Leetcode 3,medium:求最长的不含重复字符的子串
● Leetcode 53:最大子序和
● Leetcode 72
● Leetcode 75
● Leetcode 215:在N个无序无重复的整数中,找到第K大的数字
● Leetcode 422
● Leetcode 458:小白鼠试有毒药水
● Leetcode 887
● LeetCode中等题:开关灯泡:初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关,找出 n 轮后有多少个亮着的灯泡?
● LeetCode中等题:朋友圈:班上有 N名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。输出所有学生中的已知的朋友圈总数。裸题, 需要介绍一下并查集,并且问我并查集是图论的什么问题?
● Leetcode原题:找出一个字符串中所有的回文串
● Leetcode原题:打家劫舍II
● Leetcode原题:丢骰子 https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/
● leetcode原题: https://leetcode-cn.com/problems/container-with-most-water/
● 剑指 Offer 60:n个骰子的点数
● 剑指offer原题:数组的全排列
● 剑指offer原题:给定一个未知长度的单链表,找到倒数第K个节点
● 剑指offer原题:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个
5 编程高频问题:Python&C/C++方面
5.1 python方面
5.1.1 网络框架方面
5.1.1.1 Pytorch相关
● 深度学习框架之间的差别?
● 如何做pytorch的部署与热更新?
5.1.1.2 Tensorflow相关
● Tensorflow与Pytorch的区别?说几个你印象比较深刻的函数API
5.1.2 基础知识
5.1.2.1 线程相关
● Python多线程多进程了解吗?
5.1.2.2 区别比较
● Python的浅拷贝和深拷贝?
● Python中lambda与map的作用?
● Python中,a is b和a=b的区别?
● Python copy() deepcopy() 普通赋值,有啥区别?
● Python2和Python3的区别有哪些?
5.1.2.3 讲解原理
● 可变/不可变类型,函数参数传递是否改变?
可变:int、float、list、dict.values 不可变:str、tuple、dict.keys
● Sort原理是什么?
● 如果a=b,则a is b是否成立?
● Python中使用字典的好处?字典是哈希表,那字典查找跟列表查找的时间复杂度分别是多少?
● Python的生成器和迭代器了解吗?Python的内存管理了解吗?
● Python:callable,垃圾回收
● Python 列表合并方法有哪些:加法、extend,区别,旧内存如何处理;
● Python:Python中字典的底层实现(哈希表)
● 了解Python的GIL(全局解释器)吗?
● Python怎么定义一个类的成员变量?
5.1.3 手写代码相关
● 如何在Python中调用linux系统程度os?
● 如何在Python中遍历文件夹os.walk?
● 字典如何按value排序?sorted(dict.items(), key=lambda x:x[1]) ?
● Python写一个函数,实现给定一个列表,把列表所有0移到列表最后面,其余相对顺序不变,要求时间o(n),空间o(1)
● Python写一个函数,实现有1T 的数据,10亿个不重复单词,给你一台机器,16G的内存和5T的内存,怎么统计每个单词的个数?
● 我有一个文本,那么我要统计每个词出现的频率,Python上应该怎么做?
● 不用库函数的情况下实现split函数
● Python里的正则表达式
● Python的list怎么去重?
● range(10)[::-1]是什么?xrange(10)呢?
● [i for i in range(10)]和(i for i in range(10))区别?
● Python对一个列表删除所有为0的数字?
5.2 C/C++方面
5.2.1 基础知识
5.2.1.1 内存相关
● 清除size可以使用clear(),那释放内存用什么(后来查了下,应该是swap())
● 说一下智能指针,怎么实现的自动释放内存?
5.2.1.2 区别比较
● vector底层实现,size和capacity区别?
5.2.1.3 讲解原理
● 说说C 实现多态的好处,有哪些实现多态的方法?
● 纯虚函数的用处?虚函数的好处?
● C 类里面有一个静态成员,那么有什么特性?
● C的虚基类,stl中的map怎么实现的,复杂度是多少,智能指针讲一下
● C++:多态、虚函数、构造函数和析构函数、继承等等
● 智能指针,static关键字的作用。
● 为什么析构函数要写成虚函数的形式吗?
● 操作系统是如何执行C++代码的?C++智能指针介绍一下?
5.2.1.4 讲解应用
● C/C++为什么比python语言执行速度快?讲讲CMAKE?在CMAKE中如何交叉编译?
● 我说是linux底层时c语言,c/c++调用接口可以直接调用系统的,而python语言调用python,然后python调用c接口
● 面试官说python也可以直接调用c接口,主要是编译的时候,编译python为机器语言会产生一些冗余的机器代码,而c/c++不会或产生很少冗余的机器代码,所以执行效率高。
5.2.2 手写代码相关
● 创建一个N*M的数组,再删除它,释放内存
6 操作系统高频问题:数据库&线程&常用命令等
6.1 数据库方面
无
6.2 操作系统方面
6.2.1 TCP协议相关
● TCP和UDP的区别?
6.2.2 线程和进程相关
● 进程和线程的区别?
6.2.3 常用命令
● linux怎么删除一个进程?那么进程号怎么知道呢?
● linux命令怎么查看硬盘太小?
● linux中查找符合一定规则的文件名怎么查找,或者用脚本也行?
● 对操作系统的了解,Linux命令查看端口netstat -ntlp|grep 80
7 技术&产品&开放性问题
7.1 技术方面
● 10亿个32位正整数,求不同值,只给1GB内存?(我只答出来4GB的情况,时间负责度还不是最优的)
● 文件40亿+无重复数字,排序到新文件。(好像要用bitmap结构)
● 海量数据找其中唯一一个不重复的字符(bitmap)
● 从大数据中抽取m个样本,怎么保证可以代表原数据集?
● 如果给你一些数据集,你会如何分类(我是分情况答的,从数据的大小,特征,是否有缺失,分情况分别答的);
● 如果数据有问题,怎么处理;
● 如果出现重合的人像怎么区分?
● 思维题:A,B为两个文本文件,大小为1G,内容均为数字,给一个机器,硬盘为1T,内存为256M,如何设计来找出A,B中重复的数字(A,B自身也需去重),输出到C文件。
● 如何使用机器学习对代码的相似性进行分析?
● 就一个简单的短文本,怎么挖掘对应的相关的文本,或者挖掘相关的信息?
● 一堆恶意文本 case,怎么检测去除(一些网页上的广告评论),传统方法、AI 方法?
7.2 产品方面
● 一排货架上全是饮料,要专门把可乐找出来,而不要找其它的饮料,神经网络需要怎么玩,需要注意一些什么;以及这个模型如果放到一般室内环境中,预计的工作效果如何。
● 场景分析:如何给玩家的商城界面的皮肤排序(答了一些RNN方法)?如果是新玩家呢?(答了用pre-trained model直接给排序)
● 场景分析:如何给游戏商品定价?结合道具图片、描述。(答了CNN、NLP相关)如何提取道具图片的特征?(答了用CNN)
● 情景题:有上亿的邮件,如何聚类?应该从哪些方面考虑?
● 思维题:如何利用人工智能技术检测两篇文章的相似度?请设计具体的方案,详细介绍用到的技术,及相似度衡量标准选择等。
● 思维题:如何测试两步电梯的性能?请写出详细的测试用例。
● 在应用宝里面用户搜索APP,你如何利用每个APP的标题、描述、历史点击情况等属性为结果排序呢?我就简单想了一下利用历史点击率去设计learning模型,但是他说用户可能会有错别字呀等情况,你应该考虑这些该怎么处理。
● 场景设计:现在你是iphone的设计师,我们需要在锁屏界面左下角的按键处把手电筒替换成一个用户下一个可能用的功能,如何设计一个系统来收集信息并预测这个按键应该放哪个功能。
7.3 开放性问题
● 开放问题:时针分针一天重合多少次
● 讲一下哲学家就餐问题?
● 开放题:如果让你去解决一个陌生领域的问题,从分析问题到设计模型以及评价指标,你会怎么做?
● 开放题:给用户的搜索日志、记录、点击曝光记录等可以解决什么问题,我答了构建用户画像,进一步针对用户画像的问题,利用哪些特征,为什么,特征都如何embedding?
本文由 大白智能 作者:凯哲 发表,其版权均为 大白智能 所有,文章内容系作者个人观点,不代表 大白智能 对观点赞同或支持。如需转载,请注明文章来源。