菜鸡博主的2019年春招实习之旅(已完结)

//因为面试之前都没有提到禁止分享面试经验,故此贴仅作个人记录之用,如需删除,可留言联系我,会尽快删除。

【前言】

//博主是只菜鸡,本科是浙江工业大学,打了三年acm,只拿了个ccpc铜。然后,保研进了复旦(学硕),研究方向是协同编辑和人机交互的定性研究,做了快两年研究,目前还尚未发表论文。

//因为研究做的太花时间了,项目经历几乎为0。本科时候和队友为模具工厂做了个成本核算/模具监控的系统。研究生阶段,跟同学,做了一个文本分类的项目。

//故而,博主是真实菜鸡,希望能在结帖时,找到合适的offer,同时,水平能有大的提升,与诸君共勉。

1.Zilliz——软件工程师实习(Offer)

【公司简介】

一家做GPU上数据库加速的创业公司,感觉还是不错的,团队规模50人左右,发展很稳定,听说年底会达到100人,地点在漕河泾。

【途径】

自己报名发的简历。

【面试】

2轮技术+1轮HR

【一轮现场技术面试】

个人情况简介,研究,项目(30分钟左右),还问了点研究中的细节,如并发量大了,会有影响吗?

【优先级任务安排】

公司N个人,N个任务,每个人会对每个任务有一个优先级排序,每个任务对每个人也会有一个优先级排序,一人完成一个任务。设计算法,使得得到一个稳定状态。稳定状态下,每个人和任务之间不能再进行更换,得到更好的一个分配。

【解法】

貌似面试官希望得到的答案是类似匈牙利算法,二分图匹配的思想。感觉有点难想。我就提了用最小费用最大流来解。设置源点,汇点,每个任务一个点,每个人一个点。源点设置一条到每个任务,权值为0,流量为1的边。任务和人之间两两连接,权值设置为分别优先级的乘积,流量为1。每个人到汇点,设置一条流量为1,费用为0的边。跑一遍最小费用最大流,就可以得到答案了。

面试官让我证明网络流的正确性,很惭愧,以前是看过EK算法细节的,不过只记得怎么用了。

【实现二叉搜索树】

手写代码二叉搜索树的建立。

【其他】

问了下怎么动态管理内存,回答不了解。面试官回答说是智能指针。

【二轮现场技术面试】

个人情况简介,研究,项目(10分钟左右)。

【统计分数】

问:如何快速统计班里每个人的分数?

答:int数组计数?

问:如果数据范围很大呢?

答:map?

问:如果数据条数特别多呢?

答:分块,多线程统计后合并。

.....

【数据库一致性】

问:一个用户在事务中删除一条数据库记录,一个用户也同时,用事务删除了这条数据库记录。问最终状态应该是怎样的?

答:不确定,回答说,看执行先后,一个事务回退。面试官解析说,其实数据库操作的修改,都是删除掉,再插入。

【电话限时】

问:假设电话打超过15分钟,就要掐断。如何快速找到需要掐断的电话。

答:按时间组织,二分查找到需要掐断位置。

问:如果考虑高并发,不能完全按照时间顺序查找呢?

答:大体应该是时间顺序增长的吧,找到合适位置,考虑当时的并发量,前后扫荡。

问:有没有更好的解法?

答:不知。(后来想,其实,为啥二分,不应该顺序扫吗?)

【HR面】

聊面试感觉,聊发展,聊怎么看待创业公司。

【面试总结】

感觉发挥还是可以的,但二轮明显感受到自己的不足。语言基础需要回顾,提升。对海量数据处理这块需要专攻。

【待学习知识点】

1.事务的隔离级别;

2.智能指针;

3.海量数据处理。

【Offer情况】

当场给了offer,薪资待遇不错,感觉发展也会很好。但是考虑到实习阶段,还是希望去大公司锻炼学习,故而目前已经拒掉了。

 

 

2.Bilibili——软件开发实习岗(时间不合适)

【公司简介】

B站,程序员应该都知道吧。在上海五角场那一块,好几个大楼,公司发展很不错。

【途径】

朋友内推。

【现场面试】

个人情况,研究,项目(20分钟左右)。

简单问了下几项基本技能。

然后就问了实习时间。

回答说,只能暑期实习。

面试官说,他们这边只找能一直实习的,帮我问问别的部门,被拒。

【面试总结】

感觉可能要求不是特别高。但是,互联网公司就是要快速找到人作开发。需要习惯这一点。同时,投什么岗最好得有相应的项目经历。另外,后台的话,现在java和Go很火。

【Offer情况】

实习时间不合适,被拒。

 

3.腾讯(深圳)——后台开发(挂)

【部门简介】

不知道咋地,朋友明明帮我推的上海,就被深圳捞起来了。既来之,则安之,就面吧。

【途径】

朋友内推。

【电话面试】

一面挂。

先是聊了下自己的研究,项目。

【统计中位数】

给定1亿个数,求这一亿个数的中位数。全部读进内存,不够用。

【解法】

按二进制划分,划分到磁盘文件,最后统计计数即可。

【Top K】

给定n行数据,每行都是递增的,求前K小的数据。

【解法】

维护一个大根堆,如果堆元素不足K个,就一直加,加到K个,或扫到行尾,就可以换行。

如果堆大小达到了K个,就和栈顶元素比较(因为栈顶元素最大,要更新,肯定是替换当前最大的),如果元素不满足插入条件,就可以换行了。

【TCP为什么要第三次握手?】

【面试总结】

编程算法能力退化,基础知识遗忘,语言基础待提升,海量数据处理(分治思想),项目太过简单。主要还是前期没准备好。

【待学习知识点】

1.海量数据处理;

2.计算机基础知识。

 

4.网易游戏——预践项目+游戏引擎(挂)

【岗位简介】

是一个3D寻路的研发项目岗位。

【面试】

【前K大树】

【快排】

【TCP三次握手】

......

 

5.腾讯(上海)——运营开发(挂)

【部门简介】

是做游戏运营过程中的开发,并不是单纯的运营,会涉及到基础平台开发,用户数据机器学习等。

【面试】

【项目经历】

【研究情况】

【简单sql查询】

【python基础问题】

【KNN】

【决策树】

......

【总结】

被挂了,可能主要还是因为不太对口吧,可能要求脚本能力比较好,其次是机器学习比较熟。

6.拼多多——服务端实习生(挂)

【在线笔试】

得分:1+1+1+0.1=3.1分

【调数组顺序】

给定等长数组A,B。应该都是整数。调整数组A中的顺序,使得两数组各位对应相乘之和最小。

【解法】

贪心。虽然只让调整A,实际上调整A,就相当于调整AB。A从小到大,B从大到小。相乘累加即可。

【字符串】

具体题目不记得了,应该蛮简单的。

【抢银行】

一个一维空间上有N个银行,每个银行有存款数,坐标。劫匪会抢两个银行,且这两个银行间距离要大于等于d。问能抢到的最大值。

【解法】

先做一个从右到左的O(n)预处理,记录maxx[i],表示i位置往后的最大值。然后从左往右扫,根据当前点的坐标,二分找到第一个大于等于d的位置,随后取i的值和二分到的那个位置的maxx[j]值相加,维护最大值即可。复杂度O(nlogn)。

【合理的括号方案数】

给定两个字符串,由'('和')'组成。问有多少种穿插方案,可以得到一个合理的状态。如X,Y是一个合法状态,那么(X),(XY)都是合法的状态。

【解法】

dp[i][j]表示第一个字符串取i个,第二个字符串取j个的合理解的方案数。注意,合理和合法是不一样的。合法是指处于一个完全合法的状态,即左右括号完全匹配。合理指的是,当前状态是可以往后推到合法状态,即左括号数大于右括号数,这是压栈原则,碰见左括号进栈,碰见右括号出栈,不会出现右括号出现,栈内无左括号就好,但是,直接判断左右括号数是可以的吗?单状态是不可以的,但是dp状态是逐步递推的,故而可以从一个合理状态推到另外一个,故而只要判断左右括号数量即可,其中左右括号数可以做一个O(n)的预处理,数左括号数,相应的右括号数也可以得到了。最后,答案就是dp[m][n]。故而复杂度为O(n*m)。

面试的时候听说,没人做出来。实在可惜,也不是很难。

【面试】

【一轮技术现场面试】

【笔试核验】

先是抽了道笔试题问思路,看是不是自己写的。

【简介研究情况】

【B+树/B树】

了解B树/B+树吗?介绍一下。

【数据库ACID特性】

简介一下。

【LRU】

least recent used,介绍一下LRU,如何实现这个数据结构?

【C++三特性】

封装,继承,多态。分别用大白话简介一下。

【事务的隔离级别】

介绍一下事务的隔离级别。

【构造函数可以是虚函数吗?】

不可以。

【数组去重】

代码实现。去掉连续重复的数字,如1,2,2,1,3,3,5变成1,1,5。

【聊天】

了解了一下拼多多的工作概况,部门情况。

【二轮技术现场面试】

【研究情况】

介绍研究情况,就着研究顺带问了几个问题。

【B+树/B树】

请详细介绍一下B树,B+树。

【数据库索引】

数据库索引如何实现?为什么用B+树?不用map?好处在哪里?

https://blog.csdn.net/qq_35571554/article/details/82796278

【浏览器+Tab标签】

Chrome新开一个Tab页,是进程还是线程,为什么?

进程线程有什么区别?

【TCP三次握手】

为什么一定要三次握手?

【找低谷】

有一个数组大于等于3个元素。其中A0>=A1,An-2<=An-1。找出一个Ai,使得Ai<=Ai-1,且Ai>=Ai+1。

【解法】

乍一看,只能O(n),实际上可以二分查找。可以看到两个边界条件,要相连起来,中间必有一低谷,(或水平低谷)。那么就可以通过二分,快速去看中间节点和两边的情况,确定哪个区间有低谷,缩小二分区间,直到正好有解即可。

【HR面】

问是否参加头条笔试了?如何看待拼多多,个人职业发展?期望的转正薪资?

【面试总结】

基础知识还是较为薄弱,如数据库和C++。另外,做题过于紧张,导致思路不够清晰。

【待补充知识点】

1.B+树;

2.事务隔离级别;

3.TCP协议相关。

 

7.依图——Research研发工程师实习(offer)

【公司简介】

人工智能四大独角兽之一。

【面试】

4轮技术+1轮HR。

【手写大数乘法】

leetcode43

【一天时针分针遇几次?】

[0,12) [0,12)每转一圈相遇11次,因此一天为22次

【根据时间戳淘汰最久未使用的值(LRU),实现类的set(key,value),get(key)】

leetcode146

类似题型有LFU leetcode460

【整数点判断正n边形的数量】

只有正四边形是可以的。

【商品价格的每日曲线】

leetcode121 123

【两个增序数组如何求前k小个数】

二分其中一个下标,另外一个下标随之改变。复杂度log(k)。

【翻硬币】

10枚正向硬币,20枚反向硬币,你可以将硬币分成两堆,然后对硬币进行反转,请问如何分堆和翻转能够使得两堆的正向硬币数目相同。

 

8.阿里云 —— C++岗(Offer)

【部门简介】

找了一个师兄内推。听说是阿里最核心的技术部门。Oceanbase什么的,很厉害。

【途径】

师兄内推。

【面试】

目前进行了2轮技术面试。

【一轮技术面试】

聊了下个人的研究,项目情况。

【Top K元素】

给定一个数组,如何求的前K大的元素(可以无序),代码实现。

【解法】

剑指offer原题,P210。快排思想。说是O(n),n+n/2+n/4+....约等于2n.

【二轮技术面试】

简单介绍研究情况。

【内存池】

内存池是什么?优势是什么?

【hash】

1.hash碰撞

2.hash扩容怎么做?(一致性哈希原理细节)

【cap】

1.cap基本概念?

2.分布式系统设计遵循什么思想?如何理解cap?

【网络通信】

1.TCP基本概念(三次握手,四次挥手)

2.Http状态码

【Linux】

1.如何启一个进程?

2.Linux系统启进程会经历什么状态?

【Paxos算法】

zookeeper

【Mutable/Read Write锁】

区别。

【进制进位】

给定一个字符串,求其加1,进位后的结果。代码实现。

如"abc"变成"abd"。

【三轮技术视频面试】

【疯狂问项目】

爆炸。

【简介研究】

对方貌似不感兴趣。

【操作系统】

1.进程调度策略;

2.虚拟地址和物理地址;

【计算机网络】

1.TCP/IP协议栈;

2.三次握手;

【大方块找小方块】

在一个三维的大方块里面,找到一个每个元素都一一对应的小方块的索引位置。

【解法】

只会暴力N^3。估计可以用kmp的思想去处理。

【进一步了解】

问了下核心业务,主要技术,如何提高。

【四轮电话技术面试】

【个人研究情况】

你这两个研究在做什么?

【分布式系统】

你对分布式系统了解哪些?

【面试总结】

在多线程,操作系统,网络编程,分布式方面都非常薄弱。需要抓紧看书,深入学习。

【HR面】

【待学习知识点】

1.操作系统知识;

2.网络编程;

3.多线程编程;

4.分布式常用知识概念;

 

 

9.Unity ——软件工程师实习岗(offer)

【公司简介】

就是那家Unity引擎的公司,外企,感觉里面的人都还挺厉害的,不过中国这边没有太多的引擎开发。

【面试】

【笔试题】

【好数计数】

好数定义,好数是其每位数180°旋转之后,仍是一个合理的数,但和原数不同的数。比如,2,5,6,9。

1和8 就不是。

问,1到N,这个区间内有多少个好数。

解法1:

打表判断。

解法2:

dfs构造+判断。

解法3:

dp直接规律计数(数据范围大时)。

【找链表中点位置】

如果链表是奇数长,则是中间位置。偶数长,则是后一个中间位置。

解法:

两个指针,P1一个走一步,P2一个走两步。当一个走到尾,一个正好在中间。注意一下边界处理。最后P1指针多走一步即可。

【互换奇偶】

一个表,一个属性是id,一个属性是姓名。通过sql语句调换相邻奇偶行的座位。如 1 2, 3 4 互换。

解法:

取巧 改ID, 1变2, 2变1。设当前id为x,那么就是(x+1)/2*2-(x+1)%2。

select (x+1)/2*2-(x+1)%2 as id, name as id order by id asc

【一轮技术面试】

【unity对象同步】

【设计模式】

单例设计模式怎么写?

【智能指针】

智能指针原理 为什么要有weak_ptr?有什么区别?

【RAII】

自己实现智能指针? RAII。

【二轮技术面试】

【多态】

多态是什么?

【new/malloc】

new和malloc的区别?

【二叉树联通块】

一个二叉树,不遵循左小右大规则,会有重复元素。问如何查有几个联通块?

比较父子节点,不同则数量+1。

【样例设计】

设计上题的测试样例。

【三轮技术面试】

【二叉树查找】

如何在一个有序二叉树上找到两个数,加起来是一个sum。

中序遍历,读到数组里,两头指针扫。

【非递归中序遍历】

不用递归,如何写中序遍历。

用栈实现。

【待学习知识点】

1.设计模式;

2.C++智能指针;

10.头条——C++研发(offer)

【笔试】

得分:1+1+1+1=4;

【最少硬币】

【字符串修改】

按优先级规则递归处理即可。

【最少礼物数】

可以用拓扑排序,也可以用左右两边扫。

【最长绳长】

二分答案绳长,用每段绳子除以绳长,看是否能满足数量要求,决定二分方向。

【面试】

3轮技术面试

【一轮视频技术面试】

【研究简介】

【内存对齐】

【B+树】

【epoll select】

【网络编程】

【STL】

【线程/协程】

【Redis】

【找中位数】

可以用类似快排的方法,找出刚好的第n/2大。复杂度应该是O(n)。

【二轮视频技术面试】

【两个有序数组,求前K大】

【手写堆】

【字符编辑距离】

【三轮视频技术面试】

【C++ template】

【自学过哪些技术?】

【概率论】

每局A赢的概率是p%,七局四胜,问A赢的概率是多少?

用程序模拟的话,如何保障偏差小于1%?

【地铁数据库设计】

包含路线,换乘。

【最短路径查询及实现】

11.网易游戏,——游戏研发工程师实习(offer)

【岗位介绍】

游戏研发工程师

【面试】

【一轮技术电话面试】

【研究、项目】

【python垃圾回收机制】

【多线程同步】

多线程同步有哪些方法?

【多线程通信】

有名管道,无名管道,消息队列,共享内存,信号量,socket。

【虚拟内存和物理内存】

这两者的区别?

【死锁】

银行家算法,死锁检测。

【智能指针】

三种指针分别有什么特性?

【内存对齐】

struct A{

   int a;

   char b;

  short c; 

};

struct B{

  char a;

  int b;

 short c;

};

分别占几个字节?

【链表的第倒数K个节点】

一个先走K步,然后同步走。

【连通块】

一张无向图,有几个联通块?

dfs

【等概率圆覆盖】

一个产生0到1的随机函数,如何产生均匀落在圆内的点的函数?

【STL】

vector/map实现细节。空间回收。

12.腾讯(上海)——后台(二面挂)

【面试】

【一轮现场技术面试】

问了贼多关于操作系统,C++语言特性,计算机网络的知识,STL,感觉特别多,只记下来了一小部分。

【研究情况】

【const】

1.const常用用法;

2.const变量可以改变吗?

const_cast强转。

【STL容器】

1.都了解哪些容器?

2.分别内部实现和操作有哪些?复杂度是怎样的?

【多态】

1.简介多态。

2.多态是怎样实现的?

【内存对齐】

struct的内放不同类型,其大小。

【sizeof】

1.sizeof指针,数组的大小。

2.sizeof指针是该机器位数大小,数组的话,则是相应类型乘以元素大小。

【TCP】

1.TCP状态图

2.TCP四层模型

3.TCP在哪一层?

4.三次握手

【二分查找】

代码实现二分查找。

【Linux指令】

Linux常用哪些指令?

kill都用过哪些?

【二轮技术现场面试】

【研究情况】

【Redis】

1.Redis还有哪些数据结构?

2.Redis的有序结构怎么实现?

【进程】

1.进程、线程、协程概念;

2.进程间通信方式;

3.最快的方式是什么?为什么?

【关系型和非关系型数据库】

区别是什么?

......

【自我评价】

1.你的优势是什么?

2.你的劣势是什么?

【offer】

1.你有offer吗?

2.如果阿里云和我们同时要你,你会去哪?

【技术类/业务类】

你偏向做技术类,还是业务类?

【面试总结】

感觉确实问了很多很全面,很细致地考察了计算机网络,操作系统,C++语言特性等方面的知识。的确是自己太菜了,感觉类比一下的话,对方可能希望你达到的是计算机网络有看过TCP/IP详卷这种程度。

另外,真的是面试技巧了。

面试官问了目前有几个offer?

答依图,Unity,一家创业公司。阿里云到三面。

如果,阿里云和我们这同时要你?你怎么选?

不清楚欸。

你是偏向做技术基础还是业务逻辑类?

技术基础。

我们这是业务逻辑为主。

赶紧圆场,尬。

感觉还是阿里云更适合我的。但是,这时候,就应该讲各种阿里云的不好,腾讯的好。

总的来说,还是各方面积累都不够,同时,针对几个问题答得也不是太理想。

13.摩根斯坦利——软件开发(一面挂)

【面试】

【一轮电话面试】

【面试官介绍面试环节】

【自我介绍】

【部门业务简介】

【polynomial】

【override/overload】

【list/array】

【stack/queue】

【recursion】

Under what conditions, there would be stackoverflow?

【deadlock】

【TCP/UDP】

【design pattern】

【database-foreign key】

【智力题】

智力题:一堆硬币,有五毛,有一块。一个电子秤,问如何快速估计这堆硬币的价值?

【面试总结】

技术题问的都挺基础的吧,就是全英文面试,很多术语和表达说不上来,然后智力题没想出来....

14.微软——AI+Cloud Software Engineer 实习(offer)

【一面】

简单介绍研究,项目。

【题目】

给定一个正整数数组,数组长度小于10000,每个元素值小于1000,给定一个K,求该数组有多少连续子数组的乘积是小于K的。

【解法】

一开始只想到保存连乘值,但很明显有溢出问题。面试官让先讲。

假设数组为a;

mult[0]=1;

mult[i]=mult[i-1]*a[i];

外层循环计算时,根据连乘积O(1)计算值,二分当前位置的前面位置,计算个数。

这样有溢出问题,复杂度为O(nlogn)。

面试官提示,可以用对数函数处理。那么连乘就变成连加,且没有溢出问题了。

但是,目前复杂度是O(nlogn).

面试官问可以优化吗?

这其实就变成一道经典题了。设定两个下标,线性扫描,如果大于了ln(k),就把前面的下标后移,如果没有大于等于,则加入以当前元素为结尾的数组方案数,(直接以两个下标相减加一)。否则,就继续后移,这样复杂度就降到了O(n)。

一面基本上就是这样了,感觉难度不大,可能是leetcode原题吧,还是得多刷题,要不然吃亏。

 

 

【二面】

 

二面的时候就贼尴尬了。面试官刚出题不久,导师就给打了电话,于是乎,在面试官面前聊了半个小时....

打完后,面试官说,你的时间不多了,还好题目不难。

【题目】

给定一个传感器,传感器每1s产生一个温度值。求当前往前1min的温度的平均值。

【解法】

思路挺简单的,用一个60大小的数组,结合%运算,实现下标的移动。维护一个sum值,数组满之后,用sum减去旧值,加上新值,同时,更新数组。若没满,直接更新。其实,这两段也可以合成一段,设定温度初始值为0.

在获取温度的函数内,需要看是不是满,除以60或已有的秒数。

代码没有问题。

面试官另外问了如果有异常值怎么办?

回答了看与之前的比较,看比例或方差。

感觉微软很重视这个,之前笔试,也是数据里有异常值。

然后,简单聊了下简历就结束了。

 

【三面】

三面的面试官很和蔼,也很健谈,先让我介绍了下自己的研究。

【题目】

随后问了一个简单的给定一张1/0图,求图中联通块的个数。

【解法】

简单的dfs,几分钟后写完了。面试官让设计一下测试用例,(感觉微软面试还真的很在意这个)。

【升级】

然后,这题升级了,问如果图存不下怎么办,内存存不了整张图?

回答了下,面试官找出漏洞了,感觉不是一下能想出来的。

随后,问了下,家里一台路由器,家里两台服务器,问外部如何通过路由器访问其中一台服务器,答不出来,随便回答了下路由表。

【其他】

最后,问了下倾向于去外企还是互联网企业。

 

15.苹果软件工程师实习岗(Offer)

【一面】

【研究情况】

【小作品】

【C++题】

1.多态和覆盖

2.线程安全

3.数组和指针的区别

4.引用和指针的区别

【算法题】

1.反转整数;

2.反转链表;

【实习时间】

【二面】

二面感觉凉凉,因为工程能力比较弱,对方主要就聊这个,就聊了15min。

没想到过了。不过感觉待遇一般,暂时不去了。

16.华为——通用软件开发(Offer)

【一面】

【研究情况】

【最长回文串】

【聊家常】

感觉华为比较看重个人性格,背景等。

【二面】

瞎聊,面试官比较严肃,估计是压力面。

17.盛趣——服务端开发(Offer)

【一面】

【洗牌】

【STL】

【Visual Studio】

【Redis】

【Git】

 

春招实习之旅正式结束啦。应该会去阿里云了,希望秋招能拿一些更好的offer。

你可能感兴趣的:(总结,面经)