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说了算。“
也不知道这样反问稳不稳妥,说出去的时候其实就有点后悔了,然后向面试官道谢,面试结束。
全部评论
说说我自己对这些八股的理解,有问题可以一起讨论: 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,达到该值就扩容。一般就是「扩容+拉链法」解决,拉链法可以解决哈希冲突问题,但哈希冲突多了性能就差了,通过适当地扩容可以降低因哈希冲突过多导致的性能问题,但不限制地扩容又浪费内存。所以要在内存和性能之间做权衡
28 回复 分享
发布于 03-12 16:01 浙江
.那还有使得HashMap线程安全的其他方法吗?答:你别再线程不安全的情况使用它
22 回复 分享
发布于 03-12 08:09 湖北
肿么全是收藏没有点赞和评论啊
6 回复 分享
发布于 03-11 21:47 吉林
这个问题也太多了吧!佬很厉害,稳了
2 回复 分享
发布于 03-12 17:16 陕西
看起来是稳了
2 回复 分享
发布于 03-12 10:09 江西
2 回复 分享
发布于 03-12 05:00 北京
佬过了吗?
1 回复 分享
发布于 03-13 01:37 广东
我擦,世另我,我的反问跟你一样,面试官也是这么回答的,我感觉自己问的有点呆😳
1 回复 分享
发布于 03-12 17:45 河南
支持博主,加油加油
1 回复 分享
发布于 03-12 01:01 江西
感觉问到TCP头部和具体多少字节就有点不对劲了,像是故意刁难
点赞 回复 分享
发布于 04-16 15:50 陕西
m
点赞 回复 分享
发布于 04-12 02:31 河北
mark 中间件八股
点赞 回复 分享
发布于 04-10 11:37 湖南
mark
点赞 回复 分享
发布于 03-20 11:37 广东
mark
点赞 回复 分享
发布于 03-13 22:12 湖北
算法题有点难
点赞 回复 分享
发布于 03-13 18:02 四川
接好运
点赞 回复 分享
发布于 03-13 16:56 广东
答得这么好都挂。。。。。。
点赞 回复 分享
发布于 03-13 14:32 广东
我们是商品库存团队,商品技术是淘天集团电商的基础域,致力于打造贯穿商家端与消费者端的商品技术能力。我们的工作涵盖商品属性挖掘、标准化建设与运营、AI智能应用、商品与库存架构设计等多个领域,旨在为淘天电商平台提供坚实的技术支撑和创新的产品能力。 岗位职责: 负责商品与库存交易链路中的模型设计、架构规划及稳定性保障,确保系统高效、可靠地运行。 构建高质量的商品数据体系,推动标准商品库的建设,提升商品数据的准确性与一致性。 优化商品运营流程,提升商品的复用性和流通性,实现商品全生命周期管理的灵活化与智能化。 推动商品消费场景的智慧化升级,构建商品的数字化与结构化体系,赋能业务决策与用户体验提升。 结合AI技术,探索并落地商品智能化应用场景,推动技术创新在业务中的深度应用。 岗位要求: 学历背景: 本科及以上学历,计算机、软件等相关专业。 技术能力: 熟练掌握Java语言,具备扎实的编程功底,熟悉Spring Boot等主流Java开发框架。 熟悉常用的数据结构与算法,能够高效解决复杂问题。 对分布式系统架构有深入理解,熟悉缓存、消息队列等开源中间件的应用与优化。 综合素养: 具备独立分析与解决问题的能力,善于沟通协作,拥有良好的逻辑思维与学习能力。 勤于思考,乐于接受挑战,能够在高并发、高流量场景下提出创新性解决方案。 加分项: 有互联网公司相关实习经验或项目开发经历者优先。 在国际顶级会议、期刊发表过论文,或在权威学术竞赛中获奖者优先。 在这里,你将获得: 快速掌握电商领域的核心业务知识,深入了解商品与库存系统的运作机制。 面对高并发、大流量场景(如大促、秒杀等)、缓存优化、热点处理等技术挑战,积累丰富的实战经验。 在一个充满活力与创新的团队中快速成长,持续提升个人技术能力与职业竞争力。 超高的转正机会 有意向的同学请私信或发送简历到yangguangsheng.ygs@taobao.com 期待你的加入
点赞 回复 分享
发布于 03-13 14:21 浙江
这个tcp头部字段感觉好难
点赞 回复 分享
发布于 03-13 13:28 上海
实习生缺人,帮优化简历哦~
点赞 回复 分享
发布于 03-12 20:11 浙江

相关推荐

05-24 12:03
湖南大学 Java
1、项目什么时候会触发失败,人为介入;2、sql如何分页展示    在sql中,可以使用limit和offset子句或者row_number()窗口参数来实现分页展示数据; limit number_of_rows表示每页展示的行数,offset offset_value表示跳过前面的行数。例如,对于第一页,offset是0,以此类推;3、http包含了哪些内容    请求方式(get、post、delete、put)、状态码(1XX表示请求已被服务器接收,继续处理、2XX表示请求已成功被服务器接收、理解、并接受、3XX表示需要客户端采取进一步的操作才能完成请求、4XX表示客户端请求有语法错误或无法完成请求、5XX表示服务器在处理请求的过程中发生了错误)4、TCP的状态    三次握手、四次挥手5、如果在建立连接的时候,ack后,开始发送数据,但是ack数据包丢失,这个情况下服务器如何处理这个数据包    首先关于服务器状态的改变,在正常情况下,服务器收到客户端的ACK报文之后,连接就进入了ESTABLISHED(已建立)状态,但是ACK数据包丢失,服务器在发送SYN-ACK报文之后,会等待客户端ACK的确认,此时服务器的状态会一直保持在SYN-RCVD(同步已接受)状态。    服务器的重传机制,在一定时间内,没有收到客户端的ACK报文,服务器会重新发送SYN-ACK报文。    在等待ACK的过程中,服务器会为这个半连接分配一定资源。6、操作系统的进程调度方式,win使用哪些进程调度方式,linux是使用哪些进程调度方式操作系统的进程调度方式主要有以下几种:先来先服务调度算法(FCFS)原理 :按照进程进入就绪队列的先后顺序进行调度,先到达的进程先得到处理。特点 :简单易懂,但可能导致后到达的短进程等待过长。短进程优先调度算法(SJF)原理 :优先调度估计运行时间短的进程。特点 :能有效减少进程的平均等待时间,但难以准确预估进程的运行时间。时间片轮转调度算法(RR)原理 :将 CPU 时间划分为一个个时间片,按就绪队列顺序分配时间片给进程运行,若时间片用完而进程未完成,则进入队列等待下一轮调度。特点 :适合多用户分时系统,保证了每个进程都能获得一定的 CPU 时间,但时间片大小的选择较关键。优先级调度算法原理 :为每个进程设置优先级,优先级高的进程先调度,优先级相同则按先来先服务调度。特点 :灵活但易导致低优先级进程饥饿。多级反馈队列调度算法原理 :设置多个就绪队列,每个队列对应一个优先级和时间片大小,进程根据运行时间和抢占情况在不同队列间移动,优先级高的队列中的进程先调度,同一队列中的进程采用时间片轮转调度。特点 :兼顾多个方面,是较复杂的调度算法,能有效处理各种类型的进程。Windows 的进程调度方式:多优先级反馈调度算法 :Windows 将进程分为多个优先级,优先级高的进程优先调度。系统会根据进程的行为动态调整优先级,如交互式进程的优先级会提高,CPU 密集型进程的优先级会降低。实时进程调度 :对于实时进程,Windows 使用先来先服务和轮转算法,确保实时任务及时得到处理。Linux 的进程调度方式:完全公平调度器(CFS) :基于红黑树数据结构管理进程,通过计算进程的虚拟运行时间来确定调度顺序,优先调度虚拟运行时间少的进程,兼顾进程的公平性和吞吐量。实时进程调度 :包括先来先服务(SCHED_FIFO)和轮转(SCHED_RR)两种策略,确保实时进程及时得到 CPU 资源。过时的 O(1)调度算法 :早期 Linux 使用,基于就绪队列和过期队列,优先调度优先级高的进程。pv操作PV 操作是操作系统中进程同步与互斥的一种重要机制,主要用于处理进程之间的资源竞争和同步问题。PV 操作通过信号量(semaphore)来实现,它包含两种操作:P 操作和 V 操作。PV 操作的定义P 操作(wait 操作) :用于测试信号量的值。若信号量的值大于等于 1,则信号量减 1,进程继续执行;若信号量的值小于 0,则进程进入等待队列等待。P 操作的格式如下:V 操作(signal 操作) :用于将信号量的值加 1。若信号量的值大于等于 0,则直接加 1;若信号量的值小于 0,表示有进程在等待该信号量,此时唤醒一个等待的进程,并将信号量的值加 1。V 操作的格式如下:
查看7道真题和解析
点赞 评论 收藏
分享
05-23 12:00
门头沟学院 C++
 5.22一面,总共时长125min1.如何保护用户的隐私2.int* createArray() {int arr[3] = {1, 2, 3}; return arr;} 这段代码有什么问题3.对上述代码进行改进,写出能想到的所有方法(我写了一个malloc,全局数组,静态数组)4.说一下三种方式的优缺点5.全局数组和静态数组有什么区别6.解释完美转发的作用及实现方式7.const int*,int const*,int* const, const int* const的区别8.实现一个无锁计数器9.调用C++11实现一个线程安全的有界环形队列(circular buffer),要求如下:支持多线程环境下的并发push和pop操作,队列有固定容量,满时push操作要阻塞,空时pop操作要阻塞。不允许使用第三方库,只能用C++11标准库,说明你的实现如何保证线程安全,并分析可能的性能瓶颈。10.unique_lock 和 lock_guard的区别,为什么你刚才给我的代码用的是unique_lock 而不是 lock_guard 呢11.你写的代码的性能瓶颈是什么?如果有大量得到生产者和消费者会怎样呢12.把第9个改成非阻塞的,写一下,为什么你这个非阻塞用lock_guard这个锁呢13.有一类二叉树用三叉链表来存储的时候除了带有指向左右孩子节点的两个指针,还有指向父节点的指针,那么这样一棵二叉树有n个节点,那么有多少指针指向NULL(对于不存在的节点表示为空)14.int n = 2019; int count = 0;  while(n){count++; n = n&(n - 1);} cout << count << endl;输出是多少,为什么15.给定一个递增循环整数数组,从里面找出最小的元素,使用的算法越快越好。特别地,最小的元素可能出现在数组中间。比如:50,52,63,90,3,8,15,44,49,int findmin(int array[]){}16.在二叉排序树上面找出第3大的节点。注意:不能把二叉树全量存储到另外的存储空间,比如存储到数组中,然后取出数组的第三个元素。class TreeNode {public:int value;TreeNode*left;TreeNode* right};TreeNode* find(TreeNode*root) {}17.动态规划题:给定一个长度为l的木棍,已知有n个切割点,要求在每个切割点都要切割,注意每次切割的开销为当前木棍的长度,例如一个10米的木棍,切割点为2,4,7。有多种切割方式,其中可以先切2,再切4,再切7,此时开销为10+8+6=24(第1次切木棍为10米,笑2次切木棍为8米,第3次切木棍为6米),也可以先切4,再切2,再切7,出约著销为10+4+6=20,这时开销更小你的任务是计算切割的最小开销。
腾讯一面2118人在聊 查看17道真题和解析
点赞 评论 收藏
分享
评论
142
464
分享

创作者周榜

更多
牛客网
牛客企业服务