后端开发实习生-抖音支付职位的面试-一面面经
记录一下2022年3月25日下午两点的字节跳动面试过程。
我提前30分钟到场,然后面试官也很准时。
上来就直接开始,下面是今天的面试过程简单回顾:
1、做一个自我介绍
2、聊一聊你的项目(我做的是一个秒杀系统)
3、如何解决多用户并发访问秒杀商品的请求问题和数据存储问题?
4、如何使用MQ进行削峰?
5、多用户是怎么存储记录和跟踪的?
6、你的项目高并发体现在哪里,你做了哪些优化?
其实我没怎么回顾我的项目,项目答的不是很好。。。
7、那我们来聊一聊Redis的基本数据类型和场景吧
redis居然没问我太多,基本都在盘问我项目中的redis啦
8、MySQL的索引了解吗,都有哪一些,可以展开说一下吗?
9、你知道Hash,B树,B+树的存储结构和使用场景吗?
10,我现在有一个查询语句,你告诉我应该用什么数据结构查询?
select * from 表 whre id =3 for update。。。
11、你了解MySQL的锁吗,都有哪一些呢?能展开说说吗?
12、如果我有这样一种情景,它使用什么锁机制?
where id= 3的查询语句?。。。
where id> 3的查询语句?。。。
这里没有回答好
13、你了解网络模型吗?说一说epoll吧
14、操作系统情景模拟题:假如我有10个线程同时运行,每个线程加1,10秒钟之后运行结果是多少?
这道题我描述的不是很准确,面试官说差不多可以理解为
for循环,i++到10;
但是也没说是单核还是多核。我没回答出结果。
15、聊一聊TCP吧?
16、你知道流量控制和网络拥塞吗?他们属于接收端还是发送端?能展开讲一讲吗?
17、你知道time_wait是什么吗?如何解决呢?
18、说一说volatile吧?
这个我其实看了,但是问的时候脑袋一下子空了,不知道如何回答
volatile
要求
-
掌握线程安全要考虑的三个问题
-
掌握 volatile 能解决哪些问题
原子性
-
起因:多线程下,不同线程的指令发生了交错导致的共享变量的读写混乱
-
解决:用悲观锁或乐观锁解决,volatile 并不能解决原子性
可见性
-
起因:由于编译器优化、或缓存优化、或 CPU 指令重排序优化导致的对共享变量所做的修改另外的线程看不到
-
解决:用 volatile 修饰共享变量,能够防止编译器等优化发生,让一个线程对共享变量的修改对另一个线程可见
有序性
-
起因:由于编译器优化、或缓存优化、或 CPU 指令重排序优化导致指令的实际执行顺序与编写顺序不一致
-
解决:用 volatile 修饰共享变量会在读、写共享变量时加入不同的屏障,阻止其他读写操作越过屏障,从而达到阻止重排序的效果
-
注意:
-
volatile 变量写加的屏障是阻止上方其它写操作越过屏障排到 volatile 变量写之下
-
volatile 变量读加的屏障是阻止下方其它读操作越过屏障排到 volatile 变量读之上
-
volatile 读写加入的屏障只能防止同一线程内的指令重排
-
20、最后的算法题是 判断子树问题
写一个算法,判断A是否是B的子树。
总体感受就是:第一次面试还是有点儿紧张,背过的东西会一下子给忘记了,还是得好好巩固一下基础,另外提一下,字节真的很喜欢问网络和操作系统的问题!!!
面试官还问了我什么时候可以去实习?我感觉我应该还有机会吧?虽然今天表现得不是很好
最后,附上我最近一周备战面试的笔记吧。
语雀:https://www.yuque.com/books/share/a93481e3-bf69-431f-9c61-29a2ad0ec2b3?# 《后端开发实习生-抖音支付职位的面试》密码:xxr4
链接有效期至 2022-03-28 15:48:15
链接有效期至 2022-03-28 15:48:15