抖音后端日常一面面经

1、自我介绍

2、问了简历里第一个项目,介绍了一下功能,自己做了什么,不感兴趣,5分钟(简历里面写了7个项目,估计是看不下去了)开始直接八股

3、键入网址baidu.com到网页显示,都用到了哪些协议:http/https dns tcp ip ,往下MAC网卡什么的没详细说,就说了个网络接口层,应该详细说说的。面试官也没往下问,一下子想不起来

4、DNS解析详细过程:根域名 -> 下一级域名解析服务器 ,重复多次直到取得IP

5、HTTP怎么保障可靠的,没太理解应该从哪个方面答。我说的通过TCP保障可靠性,但是由于TCP是面向流的,所以可能会出现粘包,再通过特殊字符分割或者长度字段解决粘包。后面想了想是不是从状态码之类的?还是不太清楚。

6、知道HTTP3吗,HTTP3怎么保障可靠的:HTTP3底层改用UDP。不太清楚怎么保障的,自己瞎说了一个,UDP是面向报文的,所以即使UDP不可靠,也得实现一个类似TCP的协议,比如一个包确认一次。

7、知道UDP实现TCP的协议名字吗:不知道,真不知道。。。

5、TCP怎么保障可靠传输:重传机制、滑动窗口、流量控制、拥塞控制。自己主动详细说了下几个重传机制、拥塞控制算法

6、linux进程之间哪些通信方式:不太清楚linux的,但是知道windows和操作系统课里面的。管道、消息队列、共享内存、信号量。没说Socket。面试官问了一下,我说Socket好像主要面向的是网络IO,不太清楚

7、事务的隔离级别,经典题目。RURCRRSERIALIZABLE。都能解决什么问题。这块答的乱七八糟的,应该先说明都有哪些问题,列举一下脏读、丢失修改、不可重复读、幻读这几个出现的场景,举个例子。说不可重复读时候还嘴瓢说了新增,面试官问了之后赶紧说是修改。

8、MVCC怎么实现的。Read View加一个log日志,一着急忘了是redo还是undo,说了个redo。面试官说是undo,然后我赶紧说对记错了,undo记录的是每个事务提交之前数据的状态和事务id,用Read View中事务的id和执行顺序查undo就能保障MVCC了。还没说完

9、Mysql默认隔离级别什么,怎么实现的。RR,MVCC。面试官问还有别的吗,我没想起来,他说还有一个Next-Key Lock。我说对忘了,然后主动说了一下几个行级锁。

10、快照读,当前读什么。快照读为了快读不加锁,当前读目标是更新或者新增,需要加锁保障数据不会被修改。这里我没说快照读会使用版本号机制这个事。

11、当前读有哪些语句,我就记得一个FOR UPDATE。后面查了查主动加锁的select也是当前读,学到了。自己又主动补充了一下为什么要加锁。

12、Mysql有哪些索引。按数据结构只说了B+TREE。这里没说HASH,应该主动补充一下innodb不支持HASH这个事的。按功能分有什么前缀、联合、主键、唯一之类的。按存储分是聚簇和不聚簇。

13、聚簇和不聚簇的区别。叶子节点存储的东西不一样,一个是全部的数据,另一个只存了主键和索引列。这里我主动补充了一下,如果一个查询只查询联合索引聚集索引里面的数据,那么这几类索引也可以理解为聚簇索引。

14、为什么选了B+tree而不是BTree。BTree非叶子节点也存数据,一哆嗦说了个空间浪费。B+TREE多了一条叶子节点之间的指针能方便遍历。面试官说没明白空间浪费啥意思,然后才反应过来是IO次数:B的非叶子节点也存数据,而IO的基本单位是PAGE,一次换进一页非叶子节点PAGE,但是其中可能加载了一整页只有几个是有效的。而B+非叶子节点只存索引键,不但可以减少IO次数,还可以直接把索引全部压缩成几页,几次IO就能把整张表的索引加载进来。

15、redis基本数据类型。String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。

16、怎么实现的Zset。跳表。主动讲了一下跳表的思路,上浮机制,查找逻辑二分查找。和Btree的区别。redis选跳表是因为内存,不需要考虑IO时间,而B+Tree能更好地组织数据,以块为单位读写加速查询。没怎么说完就不让我说了

17、一道SQL题:联合索引ABC,查B=xx AND C=xx会不会失效。我说肯定失效,因B+Tree是根据A构建的,这里连A都没用肯定会失效。然后又主动补充了一下最左原则,举了两个失效的情况

18、算法题:没什么难度,就是输入数组转二叉树实在太恶心了,面试官让直接手动建测试用例树,建完了跑了一个测试用例就算过了.

**********************

总体感觉没什么难度,但是因为就准备了五六天还是有很多表述和记忆问题。头疼,是真记不住名字啊。。。

#抖音##字节##面经##日常实习##后端Java#
全部评论
刚突然想到算法题完全没必要建树的,直接数组下标访问就完事了。。。
2 回复 分享
发布于 2024-07-02 16:59 湖北
怎么感觉像是mysql的集合大拷问
1 回复 分享
发布于 2024-08-05 19:41 辽宁
a了还挂
点赞 回复 分享
发布于 2024-07-03 19:50 天津
服了,直接挂😓
点赞 回复 分享
发布于 2024-07-03 14:46 湖北
佬是本还是硕?
点赞 回复 分享
发布于 2024-07-02 20:12 广东

相关推荐

2025-12-24 15:25
已编辑
门头沟学院 前端工程师
是腾讯的csig腾讯云,前天晚上九点突然打电话约面,激动的通宵学了一晚上,第二天状态很差改了今天(以后再也不通宵学习了)感觉自己浪费了面试官一个半小时单纯手写+场景,无八股无项目无算法,打击真的很大,全是在面试官提醒的情况下完成的,自己技术方面真的还是有待提高,实力匹配不上大厂和已经面试的两个公司完全不一样,很注重编码能力和解决问题的能力,然而我这两个方面都很薄弱,面试官人很好很耐心的等我写完题目,遇到瓶颈也会提醒我,写不出题也会很耐心的跟我讲解好感动,到最后面试结束还安慰我打算把下周最后一场面试面完之后就不面啦,如果能去实习还是很开心,但是最重要的还是好好努力提高技术以下是面经第一题// 实现一个解析 url 参数的函数function parseUrl(urlStr) {// TODO}parseUrl('*********************************************');// 返回 {a: 1, b: 2, c: 3}追问:在链接里见过什么部分?用 hash 路由的话放在哪第二题// 考虑有一个异步任务要执行,返回 Promise,这个任务可能会失败,请实现 retry 方法,返回新方法,可以在失败后自动重试指定的次数。/*** 异步任务重试* @param task 要执行的异步任务* @param times 需要重试的次数,默认为 3 次*/function retry(task, times = 3) {// TODO: 请实现}// ---------------测试示例 ----------------// 原方法const request = async (data) => {// 模拟失败if (Math.random() < 0.7) {throw new Error('request failed');}const res = await fetch('https://jsonplaceholder.typicode.com/posts', {method: 'POST',body: JSON.stringify(data),});return res.json();}// 新的方法const requestWithRetry = retry(request);// 使用async function run() {const res = await requestWithRetry({ body: 'content' });console.log(res);}run();第三题就是给 retry 函数添加类型注释,用到泛型第四题:在组件库中将 Alert 用 api 的形式实现(应该就是 message 这个组件)怎么渲染到一个浮层里而不是原地渲染出来
不知道怎么取名字_:技术这个东西,太杂了,而且要下功夫的
查看5道真题和解析
点赞 评论 收藏
分享
评论
12
58
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务