腾讯Java后台面经

下午,突然收到腾讯的电话面试,心想:“不是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 两者之间的对比

整体来说收获不少,希望以后能有更多面试机会把,争取能够大四秋招上岸啊!!!!

发布了63 篇原创文章 · 获赞 29 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Hpsyche/article/details/91912230