【秋招正式批】北京字节抖音直播——后端开发工程师(已意向书)
9.1 一面(80min)
自我介绍,介绍实习项目(20分钟)
TCP与UDP区别,TCP为什么可靠?
流量控制实现机制
http请求有哪几种?哪几种具有幂等性
http与https区别?https原理
数据结构与算法:口述在实现一个栈的基础上,实现一个方法获取栈里面元素的最小值,时间O(1)
口述快排实现原理,快排是否稳定的排序?为什么?怎么判断一个排序是否稳定?
数据库:问我增删改查会不会(????)于是他就跟我举例子有几个字段,让我口述怎么查询(并且为什么要这么查询),怎么根据某个条件更新某个字字段,问我性别字段是否适合建立索引,为什么?
于是又在例子的基础上新增字段,举了一个应用场景问我如何建立一个联合索引,这么建立的理由(就从索引覆盖、回表这些机制来分析)
操作系统:死锁产生的必要条件,并分别解释
算法题:无序数组中找到左侧所有数比他小,右侧所有数比他大的所有元素,时间O(n)
反问:问了下字节那边的技术栈,听说要用go语言,得转语言了
9.6 二面(50min)
自我介绍
进程、线程、协程
线程通信的两种模型和一些方式,为什么socket不能使用线程通信
进程通信的几种方式,并分别详细介绍管道、共享内存、socket套接字
fork()一个子线程的过程,子线程的内存与主线程的内存关系
数据结构:说说对有序二叉树的理解,时间复杂度,有什么优化手段,我提到了平衡二叉查找树、红黑树,之后还说到了多路搜索树(也是就b树、B+树)
之后问我B树、B+树的区别,各自的使用常见(B树的使用场景因为我没记过,就根据自己对数据库的理解答的)
介绍数据库中使用的四个join
mysql优化器以及mysql还有哪些优化机制
mysql触发器
算法题:有一个正整数数组A[N],每个元素小于N,统计每个元素出现次数,要求时间O(N),空间O(1)
9.8 三面(60min)
自我介绍
这次由于面试官当时还在处理线上问题,就边处理边面试我,所以问的八股都很笼统,自己发挥
mysql事务、索引、锁(自己发挥,能说多少说多少)
分布式锁,redis怎么实现?zookeeper怎么实现?两者有什么差别?
限流自己有什么设计思想(我当时没听清楚限流两个字,就没答出来)
用户态和内核态的区别
算法题:环形子数组的最大和
线程题:两个线程交替打印1到100个数(之前面阿里考了一个更难的交替打印,这里竟然又考了)