不愧是腾讯天美,面的贼细!
The following article is from 小林coding Author 小林coding
文 | 小林coding
出品 | 小林coding(ID:CodingLin )
已获得原公众号的授权转载
今天分享一位同学的腾讯天美面经,对的就是那个王者荣耀部门的天美,问的问题很细节,会追着基础问题一直深问,直到你不会,才会换话题,主要注重计算机基础,操作系统这方面了。
面试题
说一下你的认识和倾向,对哪些感兴趣,想从事什么
这个一来我就懵逼了,就说自己目前还是比较喜欢开发,加上研究生期间基本也都是开发,所以比较倾向于后台开发方向。
说一下你学习了那些课程
编程语言,数据库,计网等 说一下操作系统中虚拟内存的实现和为什么要使用虚拟内存
实现:操作系统给进程提供虚拟内存的地址,进程要访问的时候由操作系统将虚拟地址转换成实际的物理地址读取数据,实现方法有页式、段式、段页式
好处:将有限的物理内存映射成了无限的虚拟内存,可以满足更多进程的需要;避免进程直接操作物理内存引发的安全问题
说一下进程,线程,协程
进程是系统分配资源的最小单位,线程作为进程的子一级,是分配cpu的最小单位,而协程算是用户态的线程,切换时不需要进入内核态。
追问:你这里提到了线程的上下文切换,上下文指什么,怎么存储?
上下文指线程当前执行到那一步以及一些运算结果,线程有自己私有的虚拟机栈和程序计数器
再追问:线程运行过程中申请到的东西在切换时是否全部要保存,比如线程中有个循环,或者声明了很多对象,这些是否都要保存,也存在线程私有区吗
(这个有些懵了)都要存,有些会存在公用的堆中(然后面试官说跳过)
说一下同步和异步
同步是指需要等待响应后继续后面的操作,异步是不需要等待响应,可以直接继续后面操作。这里我举了个读写例子:A发出读写请求,同步的话他要等读写完成后才继续后续;异步的话发出请求后就可以继续,等到读写完成后通知A或者直接将内容发给A
追问:那谁来通知A,或者谁来检查读写完了没
由操作系统或者是对应的服务方
再追问:但是你A怎么确定是否读完,就算B告诉读取完了,A也需要回过头来检查一次。(这一套问题没大懂)
再追问:epoll有了解吗
了解过,说明不清楚....(然后面试官说跳过)
再再追问:****硬中断、软中断有了解过吗
我:硬中断:中断发生后立即处理中断内容,软中断:中断发生后可以稍缓再处理(完蛋)
查到的软硬中断是触发源不一样,硬中断是硬件触发,软中断是软件模拟触发
更新:软硬中断是根据中断的实现机制来进行区分,硬中断指由CPU硬件实现的中断(Intel CPU中中断、异常、INT指令都是),软中断是指由软件实现的,常见如linux系统中守护进程来实现
软中断是为了解决中断处理时间过长和中断丢失的问题。常见用来延迟处理硬中断未完成的工作
说一下TCP和UDP的区别
TCP是有链接的可靠交付,UDP是无连接的尽最大努力交付
追问:说明下有无链接的体现
TCP在通信时需要通过三次招收建立链接,通信完成后需要通过四次挥手断开链接;而UDP是直接将报文发出
数据竞争有了解过吗
(没有)猜的是多线程数据读写导致的问题,如多个线程执行i++ 栈帧是什么,如何计算长度,汇编语言中sp寄存器、bp寄存器还记得吗
像函数调用或递归的时候,会将原本的数据压入栈中,就是一个栈帧。(感觉这个也说的很混乱,后面的长度计算和寄存器都不知道了) 说一下你了解的排序算法,稳定性,什么时候选择稳定的排序
选择、冒泡,归并,基数排序,快排,稳定性是指排序之后先前在前面的元素还是在前面,(开始诌)选择稳定的排序算法是元素的起始顺序对后面的操作有意义,不能随意打乱。 手撕,合并区间问题,输入若干开始结束时间段,将有重叠的覆盖在一起
先说思路,按开始时间对二元组们进行排序,之后就遍历合并 算法写完了,但是本地ide卡输入输出了,调试过程中面试官指出了一个问题。然后这时已经一个小时了,就没继续让跑了 说一下你近期遇到的困难
30所项目问题,对方在验收后又提出了很多原本设计上没有考虑的需求,最后经过协商和其他系统合作勉强达到了要求 说一下你的未来2-3年的规划****(我问具体指什么规划,面试官说什么都行,工作,生活都行)
提升自己技术,见识和学习更多主流和前言的技术 生活上更加规律
反问
后台开发负责内容 技术栈 学习建议
面试总结
感觉
很久没有面试了,上次面试还是电话面,感觉还是有些紧张,不能稳定清晰的表述自己的内容 问了很多基础但又深入的问题,不少还是拿不准
不足之处
感觉被面试官牵着走,老是被带到说不清楚的问题然后尴尬收场 未来规划感觉经常被问,但是也没有什么好的回答