26届腾讯QQ暑期实习后台开发一面面经
#腾讯##腾讯求职进展汇总##腾讯2025实习生招聘##计算机##Java#
总结基本纯八股,基本没有问项目,算法两道
贴主的第一次面试(3.11图里是3.10是因为延后了一天),全程十分的紧张。
首先面试官让自我介绍,应该是想从我的的介绍里引出问题,可是过于紧张只介绍了自己目前的大学大三的一名软件工程学生,没有谈到任何项目和获奖经历,面试官听完我讲完愣了一下,才开始转入面试
1.现在主推语言(先说大二Cpp,大三做项目转Java)
2.介绍一下java中的集合(先紧张卡壳了一下,然后讲了Collection和Map两方面,讲到Map的时候面试官继续发问)
3.说到HashMap,他是线程安全的吗?(回答不是,然后说有CurrentHashMap有线程安全)
4.CurrentHashMap怎么保证线程安全(回答使用了分段锁,介绍了分段锁机制)
5.那除了你刚刚说的CurrentHashMap还有什么方法保证HashMap线程安全(又答了个synchronizedMap,也是通过锁的机制保证线程安全)
6.那还有使得HashMap线程安全的其他方法吗(没答上来)
7.那CurrentHashMap相比于synchronizedMap,通过不同的加锁方式,哪一个性能更好(这我不知道也没答上来)
8.HashMap怎么解决冲突(细说了拉链法解决哈希冲突,提到了哈希表变大之后会变成红黑树存储)
9.红黑树应用于哈希表性能好在哪里?(我从时间复杂度上解释O(logn)优于O(n))
10.还有其他的解决哈希冲突的方式吗?(想起来有线性探测法,但是说不出详细的)
11.查看简历后询问mysql包含哪些索引(组件索引,普通索引,唯一索引,全文索引,然后说了下索引工作方式)
12.mysql常见存储引擎(InnoDB,介绍了innoDB的机制)
13.InnoDB的底层数据结构(B+树,说了B+树的结构)
14.为什么不用B树呢?(先说B+树相对于B树的优点,其中提到使用B+树磁盘读写性能更高)
15.怎么使得读写性能更高?(从B+树存储和查找原理入手,B+树叶子结点存储数据,非叶子结点存储索引,从而使得每个节点存储更多索引信息,降低树的高度,B+树进行查找路径更短,所以磁盘读写操作更少)
16.详细讲讲为什么范围查找性能更好?(从B+树节点有序相连入手,叶子结点通过指针相连形成有序链表,使得查询一旦找到要查的的范围起始点,就可以沿着链表顺序快速访问,而且B+树结构非常适合二分查找,相对的时间复杂度会更低)
17.说B+树的时候提到了Redis也应用了有类似于B+树优势的数据结构,面试官直接抓住发问Redis使用情况(讲了项目里对Redis的使用)
18.Redis常用的数据结构(String项目里用来存储用户信息,set项目里使用来管理帖子赞踩以及并集管理共同关注,还有list和sorted set)
19.那Redis里的Hash你有用过吗?(又是Hash,这部分我背的不熟,老实交代用的不熟练)
20.Sorted Set的底层数据机构是什么?(先想起来有一个跳表,面试关追问还有吗,想了很久说压缩链表,并说只知道名字,不知道具体实现,因为我前面说到的都细致解释了)
21.问Redis持久化机制(回答两种,RDB持久化和AOF持久化)
22.马上询问RDB底层的运行原理和具体执行(说了自动配置和手动配置,提到BGSAVE)
23.追问BGSAVE具体执行(老实交代只记得这个命令,对底层执行还不清楚)
24.开始问计网,TCP和UDP(细说了TCP的三次握手和四次挥手和UDP传输快但是不可靠)
25.TCP的头部结构说一下(开始按顺序说TCP的头部存储的不同参数)
26.那头部里的校验和占多少位?(16位)
27.http中403错误码什么含义?(禁止访问,服务器拒绝客户端发送的请求,权限或者资源问题)
手撕算法,面试官调试腾讯会议上面的ide,调试了五分钟没搞好,让我自己直接在自己的ide上写
十五分钟内完成快速排序和二叉树中序遍历
用c++写,二叉树写的时候被要求不能用递归要用迭代法
算法都不难,但是因为没有腾讯会议上的输入样例提示,面试官也没说具体的输入样例
核心逻辑很快就写好了,但是样例的输入尤其是二叉树那里一时没处理好(向输入前序然后输出后序来着)
到时候面试官上来说因为没有在腾讯会议上写,就不要求运行写输入样例了,要求我细说两个算法的逻辑即可
28.快速排序——经典的分治算法,寻找一个基准数,将小于他的排左边,大于他的排在右边,然后递归处理左右两边
29.快排稳定吗?(不稳定)
30.细说快排不稳定的原因(依赖于交换操作,可能导致数值相等的元素排序后相对位置发生变化)
31.说几个稳定的排序算法(冒泡排序、插入排序、归并排序)
32.二叉树中序遍历——利用栈模拟递归过程,首先将根节点以及其左子节点一次入栈知道左节点为空,然后弹出栈顶节点,再将右子节点作为新的根节点,重复这个过程
到时间了,让我反问,不知道说什么,就问面试官,这是我的第一次面试,您认为我的表现如何,面试官官方回答:”我只是如实的记录你的面试表现然后把档案给上面的leader进行横向评估,这不由我说了算而由leader说了算。“
也不知道这样反问稳不稳妥,说出去的时候其实就有点后悔了,然后向面试官道谢,面试结束。
总结基本纯八股,基本没有问项目,算法两道
贴主的第一次面试(3.11图里是3.10是因为延后了一天),全程十分的紧张。
首先面试官让自我介绍,应该是想从我的的介绍里引出问题,可是过于紧张只介绍了自己目前的大学大三的一名软件工程学生,没有谈到任何项目和获奖经历,面试官听完我讲完愣了一下,才开始转入面试
1.现在主推语言(先说大二Cpp,大三做项目转Java)
2.介绍一下java中的集合(先紧张卡壳了一下,然后讲了Collection和Map两方面,讲到Map的时候面试官继续发问)
3.说到HashMap,他是线程安全的吗?(回答不是,然后说有CurrentHashMap有线程安全)
4.CurrentHashMap怎么保证线程安全(回答使用了分段锁,介绍了分段锁机制)
5.那除了你刚刚说的CurrentHashMap还有什么方法保证HashMap线程安全(又答了个synchronizedMap,也是通过锁的机制保证线程安全)
6.那还有使得HashMap线程安全的其他方法吗(没答上来)
7.那CurrentHashMap相比于synchronizedMap,通过不同的加锁方式,哪一个性能更好(这我不知道也没答上来)
8.HashMap怎么解决冲突(细说了拉链法解决哈希冲突,提到了哈希表变大之后会变成红黑树存储)
9.红黑树应用于哈希表性能好在哪里?(我从时间复杂度上解释O(logn)优于O(n))
10.还有其他的解决哈希冲突的方式吗?(想起来有线性探测法,但是说不出详细的)
11.查看简历后询问mysql包含哪些索引(组件索引,普通索引,唯一索引,全文索引,然后说了下索引工作方式)
12.mysql常见存储引擎(InnoDB,介绍了innoDB的机制)
13.InnoDB的底层数据结构(B+树,说了B+树的结构)
14.为什么不用B树呢?(先说B+树相对于B树的优点,其中提到使用B+树磁盘读写性能更高)
15.怎么使得读写性能更高?(从B+树存储和查找原理入手,B+树叶子结点存储数据,非叶子结点存储索引,从而使得每个节点存储更多索引信息,降低树的高度,B+树进行查找路径更短,所以磁盘读写操作更少)
16.详细讲讲为什么范围查找性能更好?(从B+树节点有序相连入手,叶子结点通过指针相连形成有序链表,使得查询一旦找到要查的的范围起始点,就可以沿着链表顺序快速访问,而且B+树结构非常适合二分查找,相对的时间复杂度会更低)
17.说B+树的时候提到了Redis也应用了有类似于B+树优势的数据结构,面试官直接抓住发问Redis使用情况(讲了项目里对Redis的使用)
18.Redis常用的数据结构(String项目里用来存储用户信息,set项目里使用来管理帖子赞踩以及并集管理共同关注,还有list和sorted set)
19.那Redis里的Hash你有用过吗?(又是Hash,这部分我背的不熟,老实交代用的不熟练)
20.Sorted Set的底层数据机构是什么?(先想起来有一个跳表,面试关追问还有吗,想了很久说压缩链表,并说只知道名字,不知道具体实现,因为我前面说到的都细致解释了)
21.问Redis持久化机制(回答两种,RDB持久化和AOF持久化)
22.马上询问RDB底层的运行原理和具体执行(说了自动配置和手动配置,提到BGSAVE)
23.追问BGSAVE具体执行(老实交代只记得这个命令,对底层执行还不清楚)
24.开始问计网,TCP和UDP(细说了TCP的三次握手和四次挥手和UDP传输快但是不可靠)
25.TCP的头部结构说一下(开始按顺序说TCP的头部存储的不同参数)
26.那头部里的校验和占多少位?(16位)
27.http中403错误码什么含义?(禁止访问,服务器拒绝客户端发送的请求,权限或者资源问题)
手撕算法,面试官调试腾讯会议上面的ide,调试了五分钟没搞好,让我自己直接在自己的ide上写
十五分钟内完成快速排序和二叉树中序遍历
用c++写,二叉树写的时候被要求不能用递归要用迭代法
算法都不难,但是因为没有腾讯会议上的输入样例提示,面试官也没说具体的输入样例
核心逻辑很快就写好了,但是样例的输入尤其是二叉树那里一时没处理好(向输入前序然后输出后序来着)
到时候面试官上来说因为没有在腾讯会议上写,就不要求运行写输入样例了,要求我细说两个算法的逻辑即可
28.快速排序——经典的分治算法,寻找一个基准数,将小于他的排左边,大于他的排在右边,然后递归处理左右两边
29.快排稳定吗?(不稳定)
30.细说快排不稳定的原因(依赖于交换操作,可能导致数值相等的元素排序后相对位置发生变化)
31.说几个稳定的排序算法(冒泡排序、插入排序、归并排序)
32.二叉树中序遍历——利用栈模拟递归过程,首先将根节点以及其左子节点一次入栈知道左节点为空,然后弹出栈顶节点,再将右子节点作为新的根节点,重复这个过程
到时间了,让我反问,不知道说什么,就问面试官,这是我的第一次面试,您认为我的表现如何,面试官官方回答:”我只是如实的记录你的面试表现然后把档案给上面的leader进行横向评估,这不由我说了算而由leader说了算。“
也不知道这样反问稳不稳妥,说出去的时候其实就有点后悔了,然后向面试官道谢,面试结束。
全部评论

.那还有使得HashMap线程安全的其他方法吗?答:你别再线程不安全的情况使用它

说说我自己对这些八股的理解,有问题可以一起讨论
:
1.CurrentHashMap,面试官应该是想让你回答 JDK1.7 和 JDK1.8 的实现区别,为什么 1.8 的更好?1.7 是分段锁,但是锁的粒度还是比较大。所以 1.8 做了改进,如果目标位置上的节点为 null,就先 CAS 把节点直接放进去,避免加锁。如果目标位置存在节点,就使用 synchronized 对“头节点”加锁,接下来读写链表或红黑树就可以保证线程安全了,因为只有一个线程能访问该链表或红黑树。总结就是 CAS + synchronized 更小的锁粒度 + 避免创建 Segment 节约内存
2.哈希冲突的解决方案。开放寻址法,在数组中找到下一个位置放入元素,常见的有线性探测、二次探测、双重哈希。在 ThreadLocal 中,就采用了线性探测法;拉链法,典型的就是 hashmap;扩容,hashmap 和 ThreadLocal 都有通过扩容的方式解决哈希冲突,会设置一个负载因子,比如 0.75,达到该值就扩容。一般就是「扩容+拉链法」解决,拉链法可以解决哈希冲突问题,但哈希冲突多了性能就差了,通过适当地扩容可以降低因哈希冲突过多导致的性能问题,但不限制地扩容又浪费内存。所以要在内存和性能之间做权衡
肿么全是收藏没有点赞和评论啊
稳
看起来是稳了
这个问题也太多了吧!佬很厉害,稳了
我擦,世另我,我的反问跟你一样,面试官也是这么回答的,我感觉自己问的有点呆😳
记得好细致
你这写的太详细了
支持博主,加油加油


初面这样已经很厉害了
不过第9个问题 说的是红黑树相比于链表的好处吧?
还有个hashtable不知道他想问的是不是这个,不过这个很老了,和synchronizedMap差不多,也是锁整个哈希数组,并发度低
我勒个八股盛宴啊
实习生缺人,帮优化简历哦~
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享