//博主是只菜鸡,本科是浙江工业大学,打了三年acm,只拿了个ccpc铜。然后,保研进了复旦(学硕),研究方向是协同编辑和人机交互的定性研究,做了快两年研究,目前还尚未发表论文。
//因为研究做的太花时间了,项目经历几乎为0。本科时候和队友为模具工厂做了个成本核算/模具监控的系统。研究生阶段,跟同学,做了一个文本分类的项目。
//故而,博主是真实菜鸡,希望能在结帖时,找到合适的offer,同时,水平能有大的提升,与诸君共勉。
一家做GPU上数据库加速的创业公司,感觉还是不错的,团队规模50人左右,发展很稳定,听说年底会达到100人,地点在漕河泾。
自己报名发的简历。
2轮技术+1轮HR
个人情况简介,研究,项目(30分钟左右),还问了点研究中的细节,如并发量大了,会有影响吗?
【优先级任务安排】
公司N个人,N个任务,每个人会对每个任务有一个优先级排序,每个任务对每个人也会有一个优先级排序,一人完成一个任务。设计算法,使得得到一个稳定状态。稳定状态下,每个人和任务之间不能再进行更换,得到更好的一个分配。
【解法】
貌似面试官希望得到的答案是类似匈牙利算法,二分图匹配的思想。感觉有点难想。我就提了用最小费用最大流来解。设置源点,汇点,每个任务一个点,每个人一个点。源点设置一条到每个任务,权值为0,流量为1的边。任务和人之间两两连接,权值设置为分别优先级的乘积,流量为1。每个人到汇点,设置一条流量为1,费用为0的边。跑一遍最小费用最大流,就可以得到答案了。
面试官让我证明网络流的正确性,很惭愧,以前是看过EK算法细节的,不过只记得怎么用了。
【实现二叉搜索树】
手写代码二叉搜索树的建立。
【其他】
问了下怎么动态管理内存,回答不了解。面试官回答说是智能指针。
个人情况简介,研究,项目(10分钟左右)。
【统计分数】
问:如何快速统计班里每个人的分数?
答:int数组计数?
问:如果数据范围很大呢?
答:map?
问:如果数据条数特别多呢?
答:分块,多线程统计后合并。
.....
【数据库一致性】
问:一个用户在事务中删除一条数据库记录,一个用户也同时,用事务删除了这条数据库记录。问最终状态应该是怎样的?
答:不确定,回答说,看执行先后,一个事务回退。面试官解析说,其实数据库操作的修改,都是删除掉,再插入。
【电话限时】
问:假设电话打超过15分钟,就要掐断。如何快速找到需要掐断的电话。
答:按时间组织,二分查找到需要掐断位置。
问:如果考虑高并发,不能完全按照时间顺序查找呢?
答:大体应该是时间顺序增长的吧,找到合适位置,考虑当时的并发量,前后扫荡。
问:有没有更好的解法?
答:不知。(后来想,其实,为啥二分,不应该顺序扫吗?)
聊面试感觉,聊发展,聊怎么看待创业公司。
感觉发挥还是可以的,但二轮明显感受到自己的不足。语言基础需要回顾,提升。对海量数据处理这块需要专攻。
1.事务的隔离级别;
2.智能指针;
3.海量数据处理。
当场给了offer,薪资待遇不错,感觉发展也会很好。但是考虑到实习阶段,还是希望去大公司锻炼学习,故而目前已经拒掉了。
B站,程序员应该都知道吧。在上海五角场那一块,好几个大楼,公司发展很不错。
朋友内推。
个人情况,研究,项目(20分钟左右)。
简单问了下几项基本技能。
然后就问了实习时间。
回答说,只能暑期实习。
面试官说,他们这边只找能一直实习的,帮我问问别的部门,被拒。
感觉可能要求不是特别高。但是,互联网公司就是要快速找到人作开发。需要习惯这一点。同时,投什么岗最好得有相应的项目经历。另外,后台的话,现在java和Go很火。
实习时间不合适,被拒。
不知道咋地,朋友明明帮我推的上海,就被深圳捞起来了。既来之,则安之,就面吧。
朋友内推。
一面挂。
先是聊了下自己的研究,项目。
【统计中位数】
给定1亿个数,求这一亿个数的中位数。全部读进内存,不够用。
【解法】
按二进制划分,划分到磁盘文件,最后统计计数即可。
【Top K】
给定n行数据,每行都是递增的,求前K小的数据。
【解法】
维护一个大根堆,如果堆元素不足K个,就一直加,加到K个,或扫到行尾,就可以换行。
如果堆大小达到了K个,就和栈顶元素比较(因为栈顶元素最大,要更新,肯定是替换当前最大的),如果元素不满足插入条件,就可以换行了。
【TCP为什么要第三次握手?】
编程算法能力退化,基础知识遗忘,语言基础待提升,海量数据处理(分治思想),项目太过简单。主要还是前期没准备好。
1.海量数据处理;
2.计算机基础知识。
是一个3D寻路的研发项目岗位。
【前K大树】
【快排】
【TCP三次握手】
......
是做游戏运营过程中的开发,并不是单纯的运营,会涉及到基础平台开发,用户数据机器学习等。
【项目经历】
【研究情况】
【简单sql查询】
【python基础问题】
【KNN】
【决策树】
......
被挂了,可能主要还是因为不太对口吧,可能要求脚本能力比较好,其次是机器学习比较熟。
得分: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),实际上可以二分查找。可以看到两个边界条件,要相连起来,中间必有一低谷,(或水平低谷)。那么就可以通过二分,快速去看中间节点和两边的情况,确定哪个区间有低谷,缩小二分区间,直到正好有解即可。
问是否参加头条笔试了?如何看待拼多多,个人职业发展?期望的转正薪资?
基础知识还是较为薄弱,如数据库和C++。另外,做题过于紧张,导致思路不够清晰。
1.B+树;
2.事务隔离级别;
3.TCP协议相关。
人工智能四大独角兽之一。
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枚反向硬币,你可以将硬币分成两堆,然后对硬币进行反转,请问如何分堆和翻转能够使得两堆的正向硬币数目相同。
找了一个师兄内推。听说是阿里最核心的技术部门。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的思想去处理。
【进一步了解】
问了下核心业务,主要技术,如何提高。
【个人研究情况】
你这两个研究在做什么?
【分布式系统】
你对分布式系统了解哪些?
在多线程,操作系统,网络编程,分布式方面都非常薄弱。需要抓紧看书,深入学习。
1.操作系统知识;
2.网络编程;
3.多线程编程;
4.分布式常用知识概念;
就是那家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++智能指针;
得分:1+1+1+1=4;
【最少硬币】
【字符串修改】
按优先级规则递归处理即可。
【最少礼物数】
可以用拓扑排序,也可以用左右两边扫。
【最长绳长】
二分答案绳长,用每段绳子除以绳长,看是否能满足数量要求,决定二分方向。
3轮技术面试
【研究简介】
【内存对齐】
【B+树】
【epoll select】
【网络编程】
【STL】
【线程/协程】
【Redis】
【找中位数】
可以用类似快排的方法,找出刚好的第n/2大。复杂度应该是O(n)。
【两个有序数组,求前K大】
【手写堆】
【字符编辑距离】
【C++ template】
【自学过哪些技术?】
【概率论】
每局A赢的概率是p%,七局四胜,问A赢的概率是多少?
用程序模拟的话,如何保障偏差小于1%?
【地铁数据库设计】
包含路线,换乘。
【最短路径查询及实现】
游戏研发工程师
【研究、项目】
【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实现细节。空间回收。
问了贼多关于操作系统,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,一家创业公司。阿里云到三面。
如果,阿里云和我们这同时要你?你怎么选?
不清楚欸。
你是偏向做技术基础还是业务逻辑类?
技术基础。
我们这是业务逻辑为主。
赶紧圆场,尬。
感觉还是阿里云更适合我的。但是,这时候,就应该讲各种阿里云的不好,腾讯的好。
总的来说,还是各方面积累都不够,同时,针对几个问题答得也不是太理想。
【面试官介绍面试环节】
【自我介绍】
【部门业务简介】
【polynomial】
【override/overload】
【list/array】
【stack/queue】
【recursion】
Under what conditions, there would be stackoverflow?
【deadlock】
【TCP/UDP】
【design pattern】
【database-foreign key】
【智力题】
智力题:一堆硬币,有五毛,有一块。一个电子秤,问如何快速估计这堆硬币的价值?
技术题问的都挺基础的吧,就是全英文面试,很多术语和表达说不上来,然后智力题没想出来....
简单介绍研究,项目。
给定一个正整数数组,数组长度小于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,几分钟后写完了。面试官让设计一下测试用例,(感觉微软面试还真的很在意这个)。
【升级】
然后,这题升级了,问如果图存不下怎么办,内存存不了整张图?
回答了下,面试官找出漏洞了,感觉不是一下能想出来的。
随后,问了下,家里一台路由器,家里两台服务器,问外部如何通过路由器访问其中一台服务器,答不出来,随便回答了下路由表。
【其他】
最后,问了下倾向于去外企还是互联网企业。
1.多态和覆盖
2.线程安全
3.数组和指针的区别
4.引用和指针的区别
1.反转整数;
2.反转链表;
二面感觉凉凉,因为工程能力比较弱,对方主要就聊这个,就聊了15min。
没想到过了。不过感觉待遇一般,暂时不去了。
【研究情况】
【最长回文串】
【聊家常】
感觉华为比较看重个人性格,背景等。
瞎聊,面试官比较严肃,估计是压力面。
春招实习之旅正式结束啦。应该会去阿里云了,希望秋招能拿一些更好的offer。