腾讯校招面试常见问题
2023-08-11
前几天我参加了腾讯校招面试,总体感觉腾讯问的问题不难,只不过我太水而已,没有深入研究某些问题。
一开始进入面试场,先自我介绍一下,然后面试官可能就会根据你的介绍开始插入谈话,这样就算正式开始技术面了。
面试官问我的第一个问题是:
问题1:怎么在linux下查找一个文件中有多少个给定的字符串
答:这题本来想考察我的shell编程的能力吧,不过我说这个不会,然后他问我如果写程序实现呢
我答我会用trie树去记录字符串出现的次数
然后有被问道更深入一点的,如果文件过大呢?
我答,那就把文件内容hash取模分成多个足够小的文件,然后每个小文件trie记录结果,输出一个小文件,最后把所有结果文件合并就可以得到最终结果
问题2个整数集合,找出他们的交集
我的回答是这样的:如果对于数据较小(10W以下)我会采取哈希的方法去求数集较小的那个集合的hash值存在hash表中,然后对另一个表中每一个数进行hash,如果在hash表中找到则这个数是交集的数,输出。这个算法时间效率是O(n+m),空间效率O(3n+m);(因为hash几乎浪费掉一半空间)
对于大数据,我则先把数据hash%100的样子分到许多个小文件中,然后对这些hash值的次数建立一颗二叉查找树,遍历另一个集合的数来找,找到一个就输出一个,最后得到集合数。算法效率是O(n/100*m*log(n/100)),空间效率O(n+m)
之后,面试官见我多次提到二叉查找树,就叫我
问题3:写二叉查找树的查找算法,答案就不写了,简单。
写完之后,面试官又问我由这里到一个什么地方的,要求最短时间,怎么求
这个就是问最短路算法,我就答了这个,然后他又问我怎么知道去的路径通不通,我答用传递闭包去计算,
他问我如何传递闭包,然后我就画图演示了一下这个过程
问题4:进程与线程的区别
这题我答得非常不好,我只答了进程有资源,线程没资源,进程个数有限,而线程的个数几乎不限,进程的调度慢,线程的调度快这些基础点
但是被问到为什么进程调度比线程慢时,我答不出,我答是因为用户态和内核态的转换造成的,但是百度一下,答案应该是因为线程调度是在进程中进行,在同一存储区内操作,而进程则在不同存储区操作,所以进程调度数度比线程慢
问题5:问我TCP/IP有多少层
我答OSI标准有7层,但是目前工业大多使用5层的标准,然后回答了一下这些标准,我只会答5层标准的那一个。。。
接着又问我IP层(网络层)的作用,
我答了很多,又说了什么TCP、UDP的`,然后在面试官的知道下,我才答出,网络层的作用是映射作用,主要是IP和MAC地址、端口的映射(我不知道对不对。。)
接着又问我TCP和UDP的区别
我就答,TCP是有连接的,UDP是无连接的,TCP通过三次握手保证数据的可靠性,UDP则没有
最后还问我滑动窗口的东西,我就答了滑动窗口是为了保证数据被客户端正确接收了,他又问我为什么能保证,然后我就画图演示滑动窗口的发送、接收、移动过程
问题6:写一个函数,计算给定的一个整数中有多少个0,这个简单,不多说了
经过这次的面试,我总结如下:
1.准备要充足,多打听一些已经面试的人面经
2.对于热门问题,准备的时候要深入研究一些点,不然很容易被人问倒,比如我被问到进程和线程区别那里
3.简历上写的东西很重要,几乎你简历上写什么,面试官就会问你什么,比如我简历上写我数据结构、最短路径、字符串处理方面学得比较好,他就问我这些算法了
4.提前到面试地点,对面试官礼貌