2022年腾讯Java高级面试题及答案,Java程序员资源

前言

了解 JVM 是对 Java 开发人员的基本要求,JVM 的相关内容自然也成了现在 Java 程序员面试的重要考点。不过估计很多小伙伴和我一样,长时间醉心于 CRUD,却忘了去了解一下更底层、更基础的东西,殊不知这些才是决定你能在这条路上走多远的关键因素,那接下来我们就一起来深入学习一下看似神秘的 JVM 吧。JVM 总体来看内容还是很多的,我会把最重要的内容介绍给大家,不过如果你有时间和精力的话,还是推荐你去看一下《深入理解Java虚拟机》这本书,确实是有口皆碑。本文也会引用很多此书的内容并加上我自己的理解,如果你坚持看下去的话,相信会有很大的收获。

首先对 JVM 做个简单的介绍,JVM 是 JDK 的一部分,《Java 虚拟机规范》(The Java Virtual Machine Specification) 是平行于《Java 语言规范》(The Java Language Specification)的一套独立的规范,不同的公司对其有不同的实现 (类似于一个接口被不同的类实现),比较著名的 Java 虚拟机实现版本有 HotSpot、JRockit 和 J9 等。

复习过程

  • 项目准备;
  • leetcode:刷完剑指之后每天会刷2-4道leetcode
  • java基础: 主要刷面经、重点掌握垃圾回收机制
  • 操作系统: 之前没学过,用几天时间看了一下最重要的进程线程、死锁、消费者生产者、哲学家问题、银行家算法
  • 计算机网络:花几天时间复习了一下,重点复习tcp(三次握手四次挥手拥塞控制流量控制)、udp、https
  • 数据库: 重点了解了索引的实现以及引擎的区别
  • 数据结构和算法: 主要通过剑指offer和leetcode进行复习
  • 其他:期间也做过大大小小好几次笔试,还有一些往届练习卷

腾讯

一面(3.13电话面)

  1. 自我介绍
  2. 介绍项目以及项目遇到的难点
  3. java的hashmap是否安全?hashmap、hashtable、concurrenthashmap的区别、底层和实现
  4. mysql索引的底层实现
  5. jvm垃圾回收机制
  6. tcp、udp区别和适用场景
  7. tcp三次握手、四次挥手,为什么挥手不能只有三次
  8. 线程和进程的区别
  9. 进程通信的方式有哪些
  10. 堆是线程共有还是私有,堆是进程共有还是私有,栈呢
  11. 了解过协程吗(我:携程???不了解呜呜呜)
  12. mysql查询优化
  13. 快速排序的时间复杂度、原理(口述算法)
  14. 最近在看什么书
  15. 除了腾讯还投了其他的公司吗
  16. 问我愿不愿意转go,并推荐我了解一下协程,最后让我耐心等待,面试的人太多,需要对面试的同学进行挑选,两周内会告知我结果
  17. 有什么想问的(对我的评价和学习建议)

二面(3.22现场面)

  1. 自我介绍
  2. 问我为什么发现自己不喜欢做客户端(简历中有一个安卓实习项目)而想做后台
  3. 介绍项目(一个电商小程序)
  4. 项目中的商品是否有考虑过xxx(忘记叫什么了,意思就是是否有考虑过同一种商品有不同的颜色、规格,在数据库中如何区分这些不同)
  5. 介绍项目的支付流程,并画一下流程(白板)
  6. 介绍一下订单状态码的含义,以及交易过程中订单状态码如何变化
  7. 如何防止商品的超卖现象
  8. 项目是否具有秒杀功能
  9. 并发的时候,如何保证性能
  10. 在分库之后,如何设计id
  11. 在分库后,一条插入请求,在上层不做处理,如何直接在数据库找到相应的库并插入库中的某个表
  12. 当服务器的cpu一直很高时,如何找出原因
  13. 是否用过调试工具
  14. 当项目一直无法访问的时候,如何定位错误
  15. 介绍一下aop和ioc
  16. 如何将一个ip地址由点分制(xxx.xxx.xxx.xxx)和int类型间进行相互转化
  17. 如何判断一个数是否为2的n次方
  18. 可实习时间
  19. 是否愿意转go
  20. 有什么想问的(对我的评价和学习建议)

hr面(3.26电话面)

  1. 自我介绍
  2. 介绍一下实习经历
  3. 实习中遇到的困难以及如何解决这些困难
  4. 未来计划,是否读研

面试总结

一面的问题都很中规中矩,唯一卡住的就是协程了,确实不会,只能和面试官说我不了解。
主要和大家分享一下二面的面试体验吧。因为二面自我感觉答得不是很好,有很多问题当时没记录下来,现在一时也想不起来。所以上面的面经并不完整。
当时面试完走出大厦以为自己挂掉了,结果刷新了一下状态发现变为hr面,真的超级意外。现在想想大概是因为我在遇到不会的问题时,没有直接说自己不会,尽量把答案往自己知道的方向回答。

  • 第7题,项目没有秒杀功能我也没做过,但是了解过一些,只能和面试官说确实没有,然后让他听我讲一下我的实现思路,期间又让面试官挖出了很多问题考我TAT
  • 第9题、第10题,面试官要求我在分库的场景下回答问题,我先回答了分表情况下如何实现,他肯定了我在分表下的做法,但是分库情况还需要另外考虑,我实在想不出来,才和他说自己没有办法实现,但这总比我直接说自己不会好。
  • 第13题,如何定位错误的时候,先讲了一下无法访问的几种情况,以及大量tcp处于time_wait、close_wait这两种状态的原因和解决方法。
  • 面试结束后,等电梯的时候突然想起面试中一个一直理解错误导致解不出的问题,发现自己想歪了之后赶紧编辑完答案又给面试官发了过去,这个答案后来得到了面试官的认可。

最后

为什么我不完全主张自学?
平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。

除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。

我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。

应该学哪些技术才能达到企业的要求?(下图总结)

2022年腾讯Java高级面试题及答案,Java程序员资源_第1张图片

2022年腾讯Java高级面试题及答案,Java程序员资源_第2张图片

企业的要求?(下图总结)**

[外链图片转存中…(img-N0cjEzLm-1651994475156)]

[外链图片转存中…(img-Kh5jyurr-1651994475158)]

你可能感兴趣的