腾讯【CDG广告】后端开发实习一、二面面经和参考答案

之前的一篇抖音的秋招面试经历的链接在这,需要的同学点击传送门:https://www.nowcoder.com/discuss/834599?source_id=profile_create_nctrack&channel=-1

1. 前言

2021年4月面的腾讯cdg的实习,一、二面面经一起总结在一起了,这个部门和大数据联系比较紧密,技术栈是Java和Scala这些。我只会Java,所以面经相关的问题也都是Java的。

总体来说二面的八股文比较常规,但一面有点难,这确实和面试官有关系。

2. 面经问题汇总

2.1 八股文

  • 常规(基本都是二面问的)
    • 1 死锁产生的条件是什么?
    • 2 TCP/IP 三次四次。
    • 3 JVM内存结构讲讲
    • 4 Java的锁有哪些,尽可能说你知道的就行。
    • 5 sychronized和Lock锁的区别,承接上一个问题。
    • 6 TreadLocal 是干啥的?能否简单讲一下?
    • 7 outterJoin和InnerJoin的区别?
    • 8 简历里写了了解设计模式,你是如何理解设计模式的?
  • 进阶
    • 9 要给很多学生的高考成绩进行排序,用什么算法?
    • 10 如果一个后台的服务跑着跑着挂了,你觉得是什么原因?

2.2 算法题

  • 11 二叉树的Morris遍历(一面)
  • 12 n个一组反转链表(一面)
  • 13 字符串转整数(二面)

3. 答案

3.1 八股文答案

1 死锁产生的条件是什么?

图片说明

2 TCP/IP 三次握手四次挥手

三次握手:客户端的连接请求:首先客户端发送一个带 SYN 标志位的连接请求到服务器,客户端进入 SYN-SENT 状态。
服务端的连接确认请求:服务器收到之后回复一个 SYN 和 ACK 的确认报文到客户端,此时服务端进入 SYN-RECV 状态,等待第三次握手。
客户端的连接确认请求:客户端接收到确认报文后,向服务端再次发出带 ACK 的确认报文,后客户端这边连接建立,服务端收到客户端的第三次确认报文后,连接建立。

为什么要三次握手?从第一个角度。通信是双方的行为,双方都需要确认四件事,自身的接收发送是否正常以及对方的接收发送是否正常。如果仅两次的话,服务端是没有办法确认自己发送和对方接收是否正常的,不是可靠的连接。从第二个角度。也可以防止失效连接到达服务器后重新打开连接。客户端发送的请求如果阻塞。那么客户端等待一个超时重传时间以后,会重发一个连接请求。假设这个来迟滞留的请求最终到达了服务器,如果不三次握手的话,服务器就会打开两个连接。如果有第三次握手,客户端就会忽略掉服务器之后的连接确认请求。

四次挥手:客户端发送一个带 FIN 标志位的关闭连接请求,此时客户端进入 FIN - WAIT - 1 阶段。服务器收到该请求后,返回一个 ACK。客户端收到 ACK 之后,进入 FIN - WAIT - 2 阶段,此时处于半关闭状态,服务器能给客户端发消息,但客户端不能给服务器发消息。当服务器把剩下的消息发完之后,会发送一个 带 FIN 标志位的关闭连接请求给客户端。客户端收到该请求后,发出 ACK 确认,并进入最后的 TIME - WAIT 状态,等待 2MSL(最大报文存活时间) 后释放连接。B 收到确认后,释放连接。

为什么要四次挥手?服务端在收到客户端的 FIN 报文后,仅表示客户端不在发送数据了,但客户端还可以接,而服务端也不是说数据都发完了,所以服务端可以立即关闭,也可以再发送一段时间的数据后再发送 FIN 报文给客户端表示同意关闭。因此服务端的 ACK 和 FIN 标志位会分开发送,在 ACK 和 FIN 之间可能还会给客户端传数据,导致多了一次。

3 JVM内存结构讲讲

分两块儿讲,线程共有的和线程私有的来讲。

  • 线程私有
    • 程序计数器
    • 虚拟机栈
    • 本地方法栈
  • 线程共有
    • 堆空间
    • 方法区
    • 直接内存

4 Java的锁有哪些,尽可能说你知道的就行

说了只了解sychronized和lock锁

5 sychronized和Lock锁的区别,承接上一个问题。

图片说明

6 TreadLocal 是干啥的?能否简单讲一下?

图片说明

我总结的文档,面试不用说这么多,点出ThreadLocal是如何实现的就行了:http://note.youdao.com/noteshare?id=29ffa7b20e697cb2408451db7a03bda4&sub=DE005AAA30264B79801683634B134EA4

7 outterJoin和InnerJoin的区别?

图片说明

8 简历里写了了解设计模式,你是如何理解设计模式的?

推荐大家去看一下《Head First 设计模式》的一些内容,不要把中间的引导语忽略,我就是看着引导语才有一种醍醐灌顶的感觉。
我当时的回答是这样的:设计模式其实就是为了把代码中变化的部分和不变的部分给尽可能的剥离开,使得代码的可维护性大大增强。总的来说就是:程序设计的三大原则是最终的目的!设计模式是方法论!继承、多态是实现的基础!

9 要给很多学生的高考成绩进行排序,用什么算法?

桶排序。

10 如果一个后台的服务跑着跑着挂了,你觉得是什么原因?

之前看到过一个很好的思路,从大到小的去找。

  • 网络原因(机房抖动)
  • 机器层面
    • 宿主机问题(硬件上的问题)
    • 虚拟机问题(cpu打满、内存打满、IO过高假死)
    • 中间件问题(Redis击穿了,Kafka废了)
  • 下游服务挂了

3.2 算法题

11 二叉树的Morris遍历(一面)

会有这种遍历方法是我万万没想到的,我觉得这不用死记硬背,能看懂答案,说出思路就可以了。。感觉也不会有太多面试官会考这个遍历方法的。

12 n个一组反转链表(一面)

必刷题,不啰嗦了。

13 字符串转整数(二面)

比较简单,不啰嗦了。

#实习经验分享##实习##春招##腾讯##秋招#
全部评论
morris遍历好像还挺重要的
2 回复 分享
发布于 2022-02-08 01:26
大佬,是base哪里的啊?cdg广告后端进去是给内部人员做开发平台的吗?
点赞 回复 分享
发布于 2022-03-13 17:55
感谢分享,支持大佬
点赞 回复 分享
发布于 2022-03-07 11:19
楼主是真的会学习,学习方法学习了想问楼主个问题,可以稍微说下中金的笔面试吗
点赞 回复 分享
发布于 2022-02-20 20:51
谢谢分享
点赞 回复 分享
发布于 2022-02-14 23:00
总结很不错
点赞 回复 分享
发布于 2022-02-14 08:56
想问问楼主,面试算法的话是用什么写,记事本吗,还是给指定用什么平台,还是只需要说思路😥
点赞 回复 分享
发布于 2022-02-10 17:42
bd
点赞 回复 分享
发布于 2022-02-08 18:08
请问楼主这个部门有转正机会吗?
点赞 回复 分享
发布于 2022-02-08 17:12
请问用的什么做的思维导图笔记呀
点赞 回复 分享
发布于 2022-02-08 15:39
🎉恭喜牛友成功参与 【实习经验分享】活动! ------------------- 分享你的实习面经,进行复盘和总结,为大家助力春招!参与即有奖~ 👉快来参加:https://www.nowcoder.com/discuss/832274
点赞 回复 分享
发布于 2022-02-08 15:20
牛啊牛啊,太强了呀!
点赞 回复 分享
发布于 2022-02-08 12:43
面试官问项目经历了吗?
点赞 回复 分享
发布于 2022-02-08 10:05
感谢分享
点赞 回复 分享
发布于 2022-02-08 08:24
有答案我没写明白的可以在评论区一起讨论哈
点赞 回复 分享
发布于 2022-02-08 00:17

相关推荐

1. 除了java别的语言用过吗?2. 计算机专业课哪些课学的比较好?3. FTP协议4. 做一个FTP server你会怎么做5. 你的FTP怎么做重传?是个什么结构?6. 你的FTP如何接收和处理请求呢?(说的http请求地址,后端处理请求。面试官说那是http,FTP怎么做?不会,道歉)7. 网络通信做的时候要考虑什么?(说的安全性和可靠性,重传、控制那些)8. 有没有用FTP或者TCP协议做过一些网络通信,客户端或者服务端?9. websocket的服务端是通过什么手段通知到商家?10. 这个web socket是谁创建的?11. websocket和http区别?12. 能不能用UDP实现TCP的可靠通信?(说了QUIC协议,被打断说你会怎么做?答了重传和流量控制)13. 所以说你超声重传就是发送一个包,然后看对方有没有回是吧,回来的话再发下一个包是吧?(我应该不是这么说的,但是脑子很乱,说这样会导致队头阻塞问题)14. 继续上一个,队头阻塞你会怎么做?(回答后续的包不需要等第一个包,直接进行处理)15. 继续上一个,那你说的队头阻塞是什么呢?这种就是解决办法吗?(脑子越来越乱)16. 继续上一个,队头阻塞你会怎么做?(道歉,我说请教一下,面试官说下去自己查吧)17. 设计一个扫描器,去探测网络上有多少个服务器,它开放了什么功能,那你觉得这个扫描器是怎么做的?(说的发请求看有没有响应,然后道歉)18. 如何发请求?(postman?)19. 那postman发的什么请求?(已经不知道在问什么了,说的http请求?)20. 怎么优化浏览器访问网页的过程?21. 服务端是什么呢?你说有上锁体验比较差,有什么办法解决吗?22. 缓存为什么可以加快速度呢?23. 除了DNS缓存,还有什么缓存?(说的浏览器缓存)24. 浏览器缓存怎么工作呢?25. 你请求一个页面的时候,你会去缓存里面去看吗?(不了解)26. 回到缓存的本质来说,我们会怎么用?(回答redis)27. 要实现一个保存网页的缓存的数据结构,你会用什么结构?(回答map)28. 缓存还有没有什么要考虑的?(ttl,以及缓存淘汰)29. 怎么淘汰呢?(惰性、定期、延迟队列、定时)30. 定期是怎么去删的呢?31. 定期有的时候是不是也会存在一些问题?(不知道)32. 进程间通信有哪些方式?(OS不会)33. 实现一个队列怎么实现,是一个什么数据结构?34. 用数组能不能实现?35. ES里面的数据它是怎么做快速查找,原理是什么?36. ES怎么建立索引,用什么数据结构?(前缀树?)5.19一面一直没反应,5.25公众号留言更新为复试状态,5.27邮件催进度,5.28回复并约下午面30min,这时候已经感觉不对了。不开摄像头+一直道歉+无反问手撕=秒挂。有没有会的bro回答一下面试问题,让我学一学
点赞 评论 收藏
分享
评论
46
243
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务