一面 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月底发意向书
全部评论
(7) 回帖