腾讯Java后台面试经验总结
Hpsyche
下午,突然收到腾讯的电话面试,心想:“不是3、4月份投的简历吗,,,现在我还有机会被捞,管他,面了再说”
由于腾讯本身不是Java的主场,而且本身是一面,问的都是基础,所以面试基本没有问到Java、JVM等详细的知识。面试大体问题如下:
计算机网络
-
讲下七层协议:讲得还ok,大体说了下每层的功能等
-
三次握手、四次挥手:由于之前认真看过,所以讲得也算流畅,详细说了下过程
面试官问:“四次挥手最后B给A请求的等待时间(是什么时间)”
我:“emmmmmmmm,不知道”
后查询发现还是自己掌握得不好,其实答案也很简单,如下:TCP关闭连接用四次握手来实现,即A--->B Fin, B--->A ACK, B--->A Fin, A--->B ACK,为什么要这样?
A--->B Fin, B--->A ACK ,A属于主动关闭方,收到B的ACK后,A到B的方向连接关闭,即half shutown ,
这时A不能再发送数据了。这种状态下B还是可以单向发送数据的,B的数据发送完毕,也做关闭动作了:B--->A Fin
A--->B ACKB收到ACK,关闭连接。但是A无法知道ACK是否已经到达B,于是开始等待?
等待什么呢?假如ACK没有到达B,B会为FIN这个消息超时重传 timeout retransmit ,
那如果A等待时间足够,又再次收到FIN消息,说明刚才A返回的ACK没有到达B,于是再发送ACK,
直到在足够的时间内没有收到FIN,说明ACK成功到达。
这个等待时间至少是:B的timeout + FIN的传输时间,为了保证可靠,采用更加保守的等待时间2MSL。按照《趣谈网络协议》的形象说法:
断开的时候,我们可以看到,当 A 说“不玩了”,就进入 FIN_WAIT_1 的状态,B 收到“A 不玩”的消息后,发送知道了,就进入 CLOSE_WAIT 的状态。
A 收到“B 说知道了”,就进入 FIN_WAIT_2 的状态,如果这个时候 B 直接跑路,则 A 将永远在这个状态。TCP 协议里面并没有对这个状态的处理,但是 Linux 有,可以调整 tcp_fin_timeout 这个参数,设置一个超时时间。
如果 B 没有跑路,发送了“B 也不玩了”的请求到达 A 时,A 发送“知道 B 也不玩了”的 ACK 后,从FIN_WAIT_2 状态结束,按说 A 可以跑路了,但是最后的这个 ACK 万一 B 收不到呢?则 B 会重新发一个“B 不玩了”,这个时候 A 已经跑路了的话,B 就再也收不到 ACK 了,因而 TCP 协议要求 A 最后等待一段时间 TIME_WAIT,这个时间要足够长,长到如果 B 没收到 ACK 的话,“B 说不玩了”会重发的,A 会重新发一个 ACK 并且足够时间到达 B。 -
https(大概说了下,但自我感觉讲得不好)
-
慢启动算法、滑动窗口(之前看过,不过由于没认真看,且当时脑子一短路,没想起来是什么,回答面试官“忘了”的时候,我就知道自己凉了)
https://github.com/Hpsyche/note/blob/master/计算机网络/滑动窗口.md -
一个请求报文包含了什么信息
(请求方式(Get/Post) url 协议名 请求头部 空行 请求体) -
响应码状态有什么?
200 204 206 301 302 303 304 400 404 500 501 503
415(不支持的媒体类型,说错成了“514”,不过面试官没发现,或是没有拆穿我)
操作系统
- 线程及进程区别:讲得还ok
- 查看CPU状态命令:不懂
- top命令:真不懂(一开始还听成了tail)
- 管道命令,只说了两个
查看进程:ps -ef|grep
查看端口占用情况:netstat -anp |grep 3306* - linux查看配置网络的一些指令(我说:“只懂得ifconfig”)
- 协程(说了下是“线程的更小单位,能够进一步提高效率什么的”,感觉自己还是了解得不清晰)
https://github.com/Hpsyche/note/blob/master/操作系统/协程.md
数据结构
数据结构是面试使用最长的一个环节。。
- 栈和队列区别
- hash原理
- hash扩容
- 各种map区别
- 红黑树特征
- 为什么使用红黑树,相比AVL优势
- 快排
- 快排是稳定排序吗?(这个回答正确了,但是原因解释错了)
所谓排序的稳定性,就是指在排序过程中,在对a关键字排序后会不会改变其他关键字的顺序。
自己都可以试试,在比较有相同关键字序列的情况下,稳定的排序会将较早出现的元素排在前面,而不会是后面。
比如:对(49,38,49,20,97,76)排序,就是不稳定排序 - 跳表
- 链表+hash(这不知道是不是我听错了,不过我真不知道能组成什么数据结构)
- HashMap:如果树深度太大,怎么改进?(这个现在还不知道答案?取模分多树?)
数据库
- 简单讲一下sql
- 常用sql命令
- InnoBD 与 MyISAM 两者之间的对比
整体来说收获不少,希望以后能有更多面试机会把,争取能够大四秋招上岸啊!!!!