21秋招提前批面经-字节抖音后台

加班狗今天还在赶需求的时候,收到了抖音的意向书,开心,回馈一波。
过去的有点久了,不太记得清问题了,语言没怎么问,主要是网络和数据库,redis问的很多,能想起的大概写一下。

一面 45min:
没有自我介绍,先写个题吧:二叉树求最长路径;
innodb索引;
b+树相对于b树的改进;
select -> epoll 有哪些改进;
redis字典的实现;重哈希怎么实现;重哈希是同步还是异步;哈希键还用什么数据结构;
怎么设计一个分布式锁,这里问了好多,redlock,原子性,主从,分布式锁的一些问题,差点没顶住,持续了十几分钟;
用什么语言?golang的垃圾回收知道吗?垃圾回收都有哪些做法?智能指针?引用计数有哪些问题?
之前为什么从字节跳动离职?想做后台哪一块?存储,网络,业务后台?你居然想做业务后台(感觉被大佬鄙视了...)?
你等十五分钟,我去叫二面;

二面 1h:
自我介绍一下;
一面问了redis,我们来问下数据结构;
用过什么排序,都有什么排序;
堆排序的思路;时空复杂度;
哈希表底层是什么结构?解决冲突方法;为什么都用链地址法;链表太长有什么问题;
time_wait;
进程和线程的区别;进程隔离哪些资源;
进程的调度,进程切换;
算法题:找波谷数;
智力题:翻硬币;
你等一下,过会三面。

三面 1h:
自我介绍;
之前在字节实习,为什么走了呢?之前的mentor是谁;
介绍在腾讯做的什么东西,有哪些模块,参与了哪些模块,就是crud是吧(感觉又被大佬鄙视...);
不留深圳吗;为什么成都;
高考多少分,高考一本线,本科专业相关;
为什么考研计算机;
对实习的认识和理解;你觉得自己是一个结果导向的人吗;
都看过哪些书;
我们来看看你的基础;
写过socket编程吗;tcp的三次握手对应哪些系统调用;
为什么要三次,挥手为什么要四次;有个半连接状态,对应到具体哪步状态;time_wait状态作用;
进程/线程,进程拥有哪些数据;
一个进程有哪些段,ELF,.rodata/.bss;
给个select语句,怎么创建索引;
mysql的整体结构;
linux调试,top, ps, atop, netstat, awk;
算法题:复制带随机指针的单向链表;
我们是核心业务,用golang,你等hr通知。

写起来好像问的都比较常规,但是有很多东西问的很细,记得有好几次都是在提示后才答出来的。面完等了一周多,之前在字节实习,由于组里做的东西不太对口,只呆了不到一个月,面完一直担心会不会因为这个问题被挂,现在看来字节还是比较包容的,感恩。

#面经##字节跳动##秋招#
全部评论
从三面到收到意向书经过了多久啊?我也是抖音后端三面完没消息🤣。
1 回复 分享
发布于 2020-07-14 13:22
恭喜老哥🎉老哥base哪啊
点赞 回复 分享
发布于 2020-07-13 22:24
来了来了
点赞 回复 分享
发布于 2020-07-13 22:41
慕了慕了 老哥是真的强
点赞 回复 分享
发布于 2020-07-13 23:04
点赞 回复 分享
发布于 2020-07-13 23:18
老姐好强
点赞 回复 分享
发布于 2020-07-13 23:45
成都抖音吗?
点赞 回复 分享
发布于 2020-07-13 23:58
请问进程拥有哪些数据以及进程隔离了哪些数据这两个问题咋回答呀
点赞 回复 分享
发布于 2020-07-14 10:18
楼主这是校招还是社招呀?因为看你好像在工作~
点赞 回复 分享
发布于 2020-07-14 15:26
为什么选择业务后台呢
点赞 回复 分享
发布于 2020-07-16 07:54
老哥怎么知道三面过没过的,hr说的? 还是直接就意向书了
点赞 回复 分享
发布于 2020-07-16 17:41
楼主面的成都?
点赞 回复 分享
发布于 2020-07-27 22:04

相关推荐

03-13 09:04
已编辑
门头沟学院 Java
也是去年存货,十一月的,当时以为秋招结束了,突然收到面试邮件猝不及防。总共面了大概一个小时,体验还不错。一、开局先来两道手撕他告诉我题目,要我用本地ide写1. Leetcode原题 56. 合并区间2. 多线程题: 两个线程交替打印奇偶数早起脑子不清楚,本地写,出bug卡了会儿二、聊了下简历上的内容实习期间做了什么 / 介绍下业务聊了会儿PostgreSQL和MySQL有什么区别?查询量和数据量有多大?Kafka用在哪?哪个工作觉得最有技术难度?三、顺着问了些八股如果不用MQ怎么进行微服务间的异步通信?分布式锁实现原理。直接吟唱就完了。遇到SQL慢查询,你会怎么去入手优化?索引结构是怎么样的...
想潜水的哈士奇面向对象:PostgreSQL和MySQL的区别 PostgreSQL功能更丰富,支持复杂数据类型、JSON、地理信息系统,MySQL更专注于简单高效的Web应用 pg完全支持ACID和MVCC,mysql在InnoDB引擎下支持 mysql有较广泛的部署和第三方工具支持 微服务间不用MQ的异步通信方式 服务A调用服务B后,服务B处理完成后通过webhook回调服务A 数据库轮询: 服务A写入请求到数据库,服务B定期查询新请求 httpSSE建立持久连接进行实时双向通信 分布式锁实现原理 分布式锁基本原理是在分布式环境中创建一个全局唯一的标识,获得该标识的进程拥有访问共享资源的权限。主要实现方式: 1. 数据库实现: 利用数据库的唯一索引约束,插入成功则获得锁 2. Redis实现: 使用SETNX命令设置值,设置成功则获得锁,通常配合过期时间 3. Zookeeper实现: 创建临时顺序节点,最小序号节点获得锁,节点监听机制实现等待队列 4. Etcd实现: 利用其分布式一致性特性和租约机制 SQL慢查询优化方法 使用EXPLAIN分析SQL执行计划,找出性能瓶颈 优化索引 减少select的列 减少join 保证走索引 分库分表(连接数不够或者表数据量太大) 关闭长事务 分析锁竞争 调整数据库的io频率(比如redolog binlog的罗盘策略 索引结构和B树/B+树区别 关系型数据库中常见的索引结构有B树、B+树、哈希索引等,其中B+树是最常用的。 B树与B+树区别: 1. 数据存储位置 B树: 所有节点(内部节点和叶子节点)都存储数据 B+树: 只有叶子节点存储数据,内部节点只存储键值 2. 叶子节点连接: B树: 叶子节点之间没有连接 B+树: 叶子节点通过指针连接形成有序链表,便于范围查询 3. 查询效率: B树: 查询可能在非叶子节点结束 B+树: 查询总是到达叶子节点,路径长度相等,IO次数稳定 4. 空间利用率: B+树内部节点不存数据,相同容量能够存储更多索引项 Bean的生命周期 写go的不会 Linux查看日志的常用命令 cat 查看完整日志 less/more 分页查看 head tail 查看头尾 grep 检索 journalctl 查看system日志
查看13道真题和解析
点赞 评论 收藏
分享
去年的存货面试公司:字节【基架部门】面试岗位:后端开发面试问题:1.实习项目2.有哪些方案可以避免流量高峰造成的问题- 消息队列削峰填谷- 缓存预热- 负载均衡,分散请求- 限流和降级3.了解常用的限流或者降级的算法嘛?描述一下原理?固定窗口计数器:按照时间段划分窗口,有一次请求就+1,最为简单的算法,但是限流不够平滑且无法应对突然激增的流量。滑动窗口计数器:通过将窗口再细分,并且按照时间“滑动”来解决突破限制的问题,但是时间区间的精度越高,算法所需的空间容量就越大。漏桶:请求类似水滴,先放到桶里,服务的提供方则按照固定的速率从桶里面取出请求并执行。缺陷也很明显,当短时间内有大量的突发请求时,即便此时服务器没有任何负载,每个请求也都得在队列中等待一段时间才能被响应。令牌桶:往桶里面发放令牌,每个请求过来之后拿走一个令牌,然后只处理有令牌的请求。令牌桶满了则多余的令牌会直接丢弃。令牌桶算法既能够将所有的请求平均分布到时间区间内,又能接受服务器能够承受范围内的突发请求,因此是目前使用较为广泛的一种限流算法。4.滑动窗口相对固定窗口算法解决了什么问题相比于固定窗口算法,滑动窗口计数器算法可以应对突然激增的流量。5.【手撕】字符串的z型变换6.操作系统,进程和线程的区别进程是操作系统资源分配的基本单位,线程是cpu调度的基本单位。进程是一个程序的动态运行实例,而线程是进程当中的一条执行流程。进程包含多个线程,线程从属于一个进程;各进程间相互独立,但线程不一定,同一个进程的多个线程可能相互影响。进程切换的开销显著高于线程切换。7.threadlocal的原理就是线程本地变量,如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。ThreadLocal的底层数据建构就是ThreadLocalMap,它的key就是ThreadLocal的引用,值就是Object对象。8.用户的请求进来,用户的信息怎样在一个请求内传递?在web应用程序中,ThreadLocal可以用来存储当前请求的上下文信息,使得不同请求之间相互独立9.epoll?当调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,用于存放通过epoll_ctl方法向epoll对象中添加进来的事件。这些事件都会挂载在红黑树中,如此,重复添加的事件就可以通过红黑树而高效的识别出来。而所有添加到epoll中的事件都会与设备(网卡)驱动程序建立回调关系,也就是说,当相应的事件发生时会调用这个回调方法,它会将发生的事件添加到rdlist双链表中。当调用epoll_wait检查是否有事件发生时,只需要检查eventpoll对象中的rdlist双链表中是否有epitem元素即可。如果rdlist不为空,则把发生的事件复制到用户态,同时将事件数量返回给用户。10.项目的代码结构是怎样的微服务架构,ddd11.流量是rpc进来还是http进来12.介绍一下rpc和http在使用场景上的区别rpc通常使用在分布式系统、跨语言调用、高性能服务中。http通常使用在网页浏览、RESTful API、文件下载等13.用rpc代替http会有什么问题???14.http底层连接可以基于连接池嘛15.了解golang嘛?了解golang的协程吗16.描述一下动态规划的核心思想?什么样的问题可以用它去解决?17.排序算法有哪些?挑选排序算法的时候要考量哪些?考量:时间复杂度、空间复杂度、稳定性、实现难度、数据规模和特性18.快排是稳定排序的算法嘛?哪些算法是稳定排序的?不是。稳定排序的算法:冒泡排序、插入排序和归并排序19.红黑树相对于普通的树有哪些特征?通常用来解决什么问题?20.mysql的事务隔离级别?21.读已提交和可重复读的底层区别?22.mysql有哪些日志?23.了解redolog吗?24.redolog的刷盘机制是怎样的?25.kafka和rocketmq在业务中使用场景上有什么区别?26.git中版本管理的模型是什么?Git 中的版本管理模型是围绕快照(snapshot)的概念构建的。每次提交(commit)都会记录一个当前所有文件的快照。快照包含了当时整个目录树的状态,包括文件内容和目录结构。27.git的常见操作28.git merge和rebase的区别`git merge` 合并后的历史记录保留了所有分支的历史,呈现出分叉后再合并的结构。`git rebase` 会将当前分支的提交按顺序应用到另一个分支的顶端,这相当于在另一个分支的基础上重新应用当前分支的更改。29.反问#软件开发笔面经##字节跳动#
查看28道真题和解析 软件开发笔面经
点赞 评论 收藏
分享
评论
11
115
分享

创作者周榜

更多
牛客网
牛客企业服务