面试复盘|文远知行一二三四面面经
文远知行(算法工程师)一面
自我介绍
聊黑白棋如何实现的自动下棋AI;权值+dfs
O(n)找第k大(没想出来,哭了,就快排)
一个长度为n(n<1e7)的序列,区间和最大的值是多少
进阶版:一个长度为n(n<1e7)的序列,找到两个区间和,并且相加起来的最大的值是多少; 勉强狗了出来
36俩汽车,6条轨道,比赛最少次数找到最快的第1,2,3名次的汽车。最少3次就可以。分析错了一波,最后一次只要比赛5俩汽车就可以了。
两个数组A,B;B比A都一个数,怎么找到B中多的那个数;异或
面试体验很棒;
文远知行二面
自我介绍;被打断说,刚才聊的都是学校里做了些什么,可以聊聊专业方面的知识,比如acm这么久有什么好玩的事情。
后面聊了几分钟的如何带新生;又问到为什么我对竞赛感兴趣;瞎聊了几分钟。
碰到程序上的问题如何解决?会通过国外网站嘛? 不会,百度,csdn
英文怎么样?听写不行,读勉强可以;说他们内部都是英文发邮件的,但是没事英文可以后面补
为什么做这两个项目;课程设计/自己兴趣
聊web项目:项目做了啥; 状态机的工作原理;为什么用状态机解析请求头;
tcp和udp的区别及其各自的应用场景:其中讲到了http3.0
问http3.0:讲了基于udp和重传机制实现
问那http3.0可以完全代替2.0了吗:不知道,瞎说有可能发展不成熟,支持的浏览器不多
后面他说他现在也不知道http3.0,工作好几年了。
设计题:100个任务需要上传到服务器,但是上传前需要先上传1个资源包;资源包可以共用;不知道哪个任务会先执行。只需要上传1次资源包;问如何解决?
答:互斥量/信号量
文远知行三面
先聊ACM,怎么出题的;每个阶段讲讲是怎么出题的,出什么样的题目。
http2.0和http1.0的区别,主要改进点;
讲的讲着被打断说:不要讲细节,就讲哪里有改进,改进了哪些。(懵了)
利用多路复用:改进了效率、减少了连接
利用https:更加安全
被问其他的:不晓得了
长连接解决了什么问题:讲了下http1.1的长连接
长连接的应用场景:完全不会(被告知是物联网的主要应用)
问出ACM题涉及到一些统计题嘛?讲到桶排
讲讲桶排
服务器如何使用最小内存保存所有不同ip地址请求了各多少次;答:map或者hash
网络设备如何保存不同ip地址请求了各多少次;使用了内存多少:答:2^32(一共有这么多ip地址)*2^8次方(一个ip地址使用了多少位)
问上面那个大小占用了多少GB:讲错了,讲错了好久,然后跟他扯了好久,最后他告诉我了答案。我人傻了,这个都算错了。4GB
因为网络设备不能存4GB,所以如何用最小的内存开销来保存:答不会,告知,这个问题比较复杂,不了解的话就过了
一个很大的文件,里面保存了很多字符串,现在内存是有限制大小的,磁盘空间很大如何排序?每一步怎么做的?答:归并,但是后面不会了,又讲了按第一个字符分类是a的话分到a这个文件。被认为不够优。后面经过引导,先排序成很多个小文件,然后每次从小文件里面取出第一个,在进行排序。
什么样的数据结构可以做这个排序:答:最小堆
后面问这样做的复杂度是多少?答:mlog(n);被问对嘛,整破防了,mlog(m);
这个算法哪一个是瓶颈:不会,后面引导了半天也不知道是啥,貌似是IO读取。
计算机操作系统了解嘛:了解
操作系统如何从磁盘读数据:利用磁头从磁盘读数据
读多大数据,一个字符串20字节,那么一次会读多大:不会,不了解;讲了下猜想,有可能会读一个固定大小的整数倍。
磁盘数据读到哪里:内存,后面在问:讲到是磁盘缓冲区的大小;
磁盘缓冲区大小多少?
被问学习过数据库?回答不了解,没问了
IO多路复用是什么:讲了讲epoll、poll、select,讲讲IO多路复用是做什么事情的。
反问:没问啥了,自闭了;问了问没有人做过的方面,怎么解决:回答:计算机基础科学一般都能解决。使用了什么语言:回答什么语言都可以。被问会不会bash,回答了解一点,被问如何用一行语句统计一个字符串,每个字符出现了多少次,bash语句。不会
文远知行四面
先问能不能实习
自我介绍
稍微了解了下web项目,多少行(hang),用了什么框架。
http的get和post的区别:答:答的不大行,有点错误
什么样的数据会放到http的header里面;这个header忘了结果;回答忘了。
学了什么数据库,mysql
mysql设计表之间有什么关系?不会,被说最基本的。
问了学了啥,我说索引;
问了下索引实现:b+树
b+树的分裂和合并。
问其他语言学过?答:只了解
写过模板嘛?写过一些算法
英文怎么样?听不行
对哪些方面的技术比较感兴趣,了解过前端后端大数据嘛?答:之前学过haoop的使用