20秋招 后台开发 腾讯WXG一二三四面 意向书+1

一面 2020年9月3号
自我介绍
介绍实习的主要工作

即时聊天项目支持横向扩容吗?
群聊功能是如何实现的?
如果后台有多个服务器组成的集群,客户端A连接到一台服务器上,客户端B连接到另一台服务器上,A如何将消息转发给B的呢?
我:可以再多个服务器上共享客户端的连接信息,使用类似zookeeper的注册中心来为进行信息共享
面试官:你的做法是有问题的,可以使用NameServer保存连接与服务器之间的映射关系,服务器通过查询NameServer可以得知客户端B所连接的服务器

如何保证缓存和数据库的一致性?
我:先更新数据库,再删除缓存
面试官:如果在并发较大的情况下:A线程进行读操作,缓存中没有相应的数据,A从数据库中读到数据后阻塞;B线程执行写操作,更新数据库,淘汰缓存;B线程写操作完成后,A线程才将数据库的旧数据读入缓存。这样缓存中保存的就是旧数据,这种情况应该怎么处理?
我:不知道(面试结束后去查了下,可以用“延迟双删”策略,在A线程读操作完成后再淘汰一次缓存,参考这篇文章https://developer.aliyun.com/article/712285

MySQL数据库的隔离级别?
可重复读隔离级别下使用InnoDB存储引擎是否会出现幻读?为什么?

编程题:
1.写一个生产者消费者的demo,生产者产生一个随机整数,消费者取出该数判断它是否为2的n次幂。(面试官说可以使用自带的BlockingQueue)

2. 给定一个二叉树,请从根结点开始,按照前序遍历的顺序打印所有的节点,每次打印完一个子树后再打印一次它的父节点。比如:
2
/ \
3   4
/   \    \
5   6    7
打印的结果是 2 3 5 3 6 3 2 4 7 4 2

3. 假设这是一颗二叉搜索树(左边的子树的数字都比根结点小,右边的子树的数据都比根节点大),能否根据遍历后的打印结果,将这棵树建起来。比如打印的结果是:3 1 2 1 3 6 5 6 7 6 3 那么这棵树就应该是:
3
/  \
1     6
\   /  \
2 5    7

面试官真的真的非常nice,答不上来的问题会很耐心地给你讲一遍,然后再和你说应该去补习哪方面的知识点,整个面试过程非常愉快。

===============================  分割线  ==================================

二面 面委会 2020年9月11号
自我介绍
聊实习项目

有一个选课系统,有老师、课程、学生三个实体,设计ER图
MySQL事务的默认隔离级别
有联合索引(a, b),只用条件A能否走索引?只能条件B呢?如果是A and B呢?
联合索引的B+树结构是什么样的?

有哪些时间复杂度为O(nlogn)的排序算法?
快速排序稳定吗?
什么叫做稳定的排序?
堆排序中如果取走堆顶节点,如何调整?

只使用O(1)额外空间,整数无序双向链表能不能转为排序二叉树(BST)?
能转为什么能转,不能转为什么不能转?能转怎么转?
单向链表能转为排序二叉树吗?
(头疼,我说的单链表也能转,而实际上不能,单链表只有一个指针域,而二叉树有两个,这样消耗的额外空间就不只O(1)了)

Linux中Usleep函数的参数定义上支持微秒时间的传入,实际上能不能做到微秒级的定时精度?
(这个问题讨论了好久,问的我自闭了,聊到了Linux内核的进程调度,面试官一直在说我说的只是概念,反复问我到底是怎么实现的,我真的一脸懵逼)

最后还有一个智力题:有容量为10斤、7斤、3斤的桶,10斤的桶中有10斤油,用这3个容器将油均分为5斤

===============================  分割线  ==================================

三面 面委会 2020年9月17号
1.自我介绍

2.编写代码,实现下面格式打印功能
输入(简单起见,字符串总长度为16的倍数):
This utility is a filter which displays the specified files,&nbs***bsp;the standard input, if no files are specified, in a user specifi
输出:
00000000  54 68 69 73 20 75 74 69  6c 69 74 79 20 69 73 20  This utility is
00000010  61 20 66 69 6c 74 65 72  20 77 68 69 63 68 20 64  a filter which d
00000020  69 73 70 6c 61 79 73 20  74 68 65 20 73 70 65 63  isplays the spec
00000030  69 66 69 65 64 20 66 69  6c 65 73 2c 20 6f 72 20  ified files, or
00000040  74 68 65 20 73 74 61 6e  64 61 72 64 20 69 6e 70  the standard inp
00000050  75 74 2c 20 69 66 20 6e  6f 20 66 69 6c 65 73 20  ut, if no files
00000060  61 72 65 20 73 70 65 63  69 66 69 65 64 2c 20 69  are specified, i
00000070  6e 20 61 20 75 73 65 72  20 73 70 65 63 69 66 69  n a user specifi

3.后台开发场景中经常会使用到“定时器(Timer)”服务:比如启动Timer定期输出日志,或网络断连后启动Timer定期尝试重连;现在需要自行设计一个Timer,需求/约束如下:
1)对外表现得颗粒度为秒级;
2)能处理海量定时任务;
3)单机、单线程实现;
请回答Timer的实现思路。
时间轮 + 小顶堆

4.聊实习项目的技术难点

===============================  分割线  ==================================

四面 HR面 2020年9月18号
简单聊了下个人情况,部门base北京,做微信视频号
加了HR小姐姐微信,大约9月底发意向书

#面经##校招##腾讯##Java工程师#
全部评论
同一个二面面委会面试官😬
点赞 回复 分享
发布于 2020-09-19 15:55
咱们两轮面委会都是同样的面试官,问的问题也都差不多。。。😂
点赞 回复 分享
发布于 2020-09-20 14:57
不是9.15流程就截止了吗,怎么还有面试的
点赞 回复 分享
发布于 2020-09-20 19:10
大佬太强了,一半我都不会
点赞 回复 分享
发布于 2020-11-03 14:57
可以用“延迟双删”策略,在A线程读操作完成后再淘汰一次缓存,这句话里A线程应该改为B线程吧,因为前面的例子和链接文章里的例子是反过来的。
点赞 回复 分享
发布于 2020-11-12 18:02
想问一下 只使用O(1)额外空间,整数无序双向链表能不能转为排序二叉树(BST)? 能转为什么能转,不能转为什么不能转?能转怎么转? 这个应该不能转吧?我想到用递归,但用递归明显用栈空间了
点赞 回复 分享
发布于 2020-11-25 21:33
视频号劝退,唉
点赞 回复 分享
发布于 2021-01-24 11:45

相关推荐

6 55 评论
分享
牛客网
牛客企业服务