字节跳动后端开发面经汇总(数据库与数据结构部分)

字节后端面经汇总

字节跳动后端开发面经汇总(数据库与数据结构部分)

  • 字节后端面经汇总
  • 四. 数据库
    • ①InnoDB
      • MySQL 的存储引擎用的是什么?(InnoDB)为什么选 InnoDB?
      • InnoDB怎么实现(LRU)
      • InnoDB 怎么防止幻读
      • 介绍一下InnoDB 存储引擎,对比其他存储引擎优点是什么
      • InnoDB 索引数据结构,深入问复合主键索引的数据结构是否有不同
      • InnoDB 数据隔离级别 (四个隔离级别说了下 顺带把脏读 幻读 不可重复度说了下)
      • InnoDB 为什么用b+树 ?多路树的好处?(说了下比较好控制高度 查询稳定 又说了一下对比b树的优势)为什么控制高度?(连续读磁盘 效率高)
      • InnoDB和MyISAM的区别
    • ②Mysql相关
      • Mysql有哪些引擎,区别是什么
      • Mysql的数据库索引是怎么组织的
      • MySQL 的聚簇索引和非聚簇索引有什么区别?
      • 数据库ACID
      • 写一个数据库的sql语句
    • ③索引
      • 索引是什么
      • 索引的作用,主键索引的大致流程,Mysql 主键是什么概念
      • 针对场景如何建立索引,为什么这么建立索引,怎样优化Mysql
      • 数据库中的联合索引,索引失效的情况,是全部失效吗,还是部分失效
      • 联合索引:B+树是什么状态 (画了一下,面试官反复问我高度什么的,我说高度没有影响,说了最左前缀 )
      • 聚簇和非聚簇索引的区别
      • 聚簇索引相对于B+索引的优点
      • 非聚簇索引的查询都要回表么
      • where中or和and对于索引的使用有什么区别
      • 什么样的列或字段不适合建立索引
    • ④B+树
      • 详细描述B+树
      • B+树 和B树 哈希索引
      • 数据库索引实现为什么要用B+树而不是hash
      • 数据库索引实现用红黑树不用B+树可不可以
      • 为什么使用B+而不使用二叉平衡树
      • 为什么要用B+树(B+树的优缺点)
      • B+树中叶子节点间的指针有什么用
      • B+树和AVL树,B树,二叉搜索树的区别
      • B+树 和B树 哈希索引
    • ⑤其他
      • 事务的四大特性
      • 四种隔离级别
      • 什么是幻读
      • 什么是ORM
      • Sql注入
      • 如何分析Sql执行慢的原因
    • ⑥设计题
      • 一个数据库存了以下数据:用户id,登录时间,登出时间;如何找到一天当中的用户峰值(用一个hash map存所有秒数的在线人数)
      • 某脚本同时处理一大堆文件,若脚本突然挂掉,如何判断处理到了哪些文件的哪些部分(开一个文件或者数据库,记录处理了哪些文件,处理到了哪一行。)
      • 给定两个文件A,里面有id name,文件B,里面有id age,怎么将两个文件的内容join起来。(最开始回答的是全部放入数据库,然后用数据库的union操作,然后他说没有数据库,然后就回答先分块,再根据ID排序,然后再每个块去进行join)
      • 订单 order 实体有几个属性:产品(product_id)、下单日期(date)等,请设计 索引 实现下列需求并优化索引:①查询某个产品的所有订单②查询某一天的所有订单③查询有个产品最近一个月的所有订单
  • 五. 数据结构与算法
    • ①哈希相关
      • 一致性哈希
      • 哈希冲突怎么解决
      • 插到key-value节点之前后面:一个个链表有什么问题(其实就是链表很长,达不到扩容的要求,容易受到hash攻击)
      • LRU实现、插入操作、 描述数据结构如何变化 (说双向链表加哈希,在双向链表上做lru,加哈希表是为了快速定位要移动的节点)
    • ②运算及字符串相关
      • 求x的y次方,想出比直接for循环更好的方案(给出一个数x,求sqrt(x), 精度在1e-6,还是用的二分)
      • url翻转
      • 查找一个字符串中最长的无重复字串
      • 一个超级长的数字(有几十位那种),允许进行任意多次的任意两位交换,得到的比他大的最小的数字是多少
      • 在1个10G大小的文件中,存储的都是int型的数据,如何在内存使用小于8M的情况下进行排序
      • 实现输入英文单词联想的功能
      • 字符串转整数(包括正数负数小数,以及异常处理溢出的情况)
      • 给一个很大的数字,怎么返回固定长度的substring(DP)
      • 怎么用一个骰子等概率表示1到7
      • 给定一个 0-4随机数生成器 如何生成0-6随机数
      • 1亿个正整数范围是0-42亿。求出现次数是2的数字,空间复杂度
      • 对两个二进制字符串求十进制的和
    • 数组相关
      • 最长上升子序列
      • 无序的数组的中位数
      • M*N 横向递增矩阵找指定数
      • 给一个乱序数组,输出每一个数字后面第一个比它大的数字(单调栈)
      • 单调不减数组二分查找,如果存在返回出现的第一个位置,不存在的话返回-1
      • 一个数组 组成N位的数字去掉K位 保证数字最小
      • 给出数组A,找到最大的(Ai-Aj)(i>j)
      • 两千万高考生的成绩 如何排序
      • 给一个等腰直角三角形,从左上角开始,结束点任选,给出经过路径的节点的和的最大值并打印出路径
      • 逆序输出偶数的平方 ( [1,2,3,4,5,6,7,8,9] 输出 [64,36,16,4] )
      • 有许多八位数的电话号码,设计一个存储方案,用尽可能少的内存,达到比较高效的检索(“位图”。就是用一个类似于数组的结构,每个二进制位代表一个电话号码的存在与否(1位存在,0为不存在)可以用整数数组加上位运算比较方便的实现)
      • Dynamic Programming,相邻两个数只能选一个,求能返回最大数(如[1,4,33,67,34] )
      • 矩阵旋转 (复杂度O(1)
      • 求绝对众数
    • ③树及相关
      • S型输出二叉树的节点值
      • 寻找中位数(堆)
      • 从上往下打印二叉树
      • 二叉树的非递归后序遍历
      • 一棵树 寻找节点中最长路径(动态规划)
      • 二叉树最深子节点的最近公共父节点(二叉树的最近公共祖先,lc 236稍有不同,原题2个节点,面试多个节点)
      • 二叉树,输出所有和为n的路径(可以从中间结点到中间结点)
      • 二叉树中的最大路径和 ( lc124 )
      • 为什么选择二叉平衡树,并给时间复杂度(查找和删除)
    • ④链表
      • 两个链表的公共节点
      • 大数加法 链表
      • 链表求和
      • 单链表结构很长,怎么优化使得增删查改效果好
      • 链表,奇位上升偶位下降,整合成升序链表(频率爆表)
    • ⑤图相关
      • 一个图中联通为1的块的个数
      • 图的广度优先遍历

四. 数据库

①InnoDB

InnoDB是Mysql默认的表存储引擎。其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU
一. 结构
字节跳动后端开发面经汇总(数据库与数据结构部分)_第1张图片
详情

MySQL 的存储引擎用的是什么?(InnoDB)为什么选 InnoDB?

字节跳动后端开发面经汇总(数据库与数据结构部分)_第2张图片

InnoDB怎么实现(LRU)

详情

InnoDB 怎么防止幻读

详解

介绍一下InnoDB 存储引擎,对比其他存储引擎优点是什么

详解

InnoDB 索引数据结构,深入问复合主键索引的数据结构是否有不同

详解

InnoDB 数据隔离级别 (四个隔离级别说了下 顺带把脏读 幻读 不可重复度说了下)

详解

InnoDB 为什么用b+树 ?多路树的好处?(说了下比较好控制高度 查询稳定 又说了一下对比b树的优势)为什么控制高度?(连续读磁盘 效率高)

详解

InnoDB和MyISAM的区别

②Mysql相关

Mysql有哪些引擎,区别是什么

见上

Mysql的数据库索引是怎么组织的

聚簇索引(主键索引),非聚簇索引(辅助索引)

MySQL 的聚簇索引和非聚簇索引有什么区别?

见上

数据库ACID

详解

写一个数据库的sql语句

详解

③索引

索引是什么

简单说就是方便查找

索引的作用,主键索引的大致流程,Mysql 主键是什么概念

字节跳动后端开发面经汇总(数据库与数据结构部分)_第3张图片

针对场景如何建立索引,为什么这么建立索引,怎样优化Mysql

用反复查询的变量作为索引,索引不要太长

数据库中的联合索引,索引失效的情况,是全部失效吗,还是部分失效

联合索引知识
索引失效

联合索引:B+树是什么状态 (画了一下,面试官反复问我高度什么的,我说高度没有影响,说了最左前缀 )

这块有分歧

聚簇和非聚簇索引的区别

见上

聚簇索引相对于B+索引的优点

一米万卡奈

非聚簇索引的查询都要回表么

详解

where中or和and对于索引的使用有什么区别

什么样的列或字段不适合建立索引

这里

④B+树

详细描述B+树

见上

B+树 和B树 哈希索引

详解

数据库索引实现为什么要用B+树而不是hash

见上题

数据库索引实现用红黑树不用B+树可不可以

字节跳动后端开发面经汇总(数据库与数据结构部分)_第4张图片

为什么使用B+而不使用二叉平衡树

跟红黑树类似

为什么要用B+树(B+树的优缺点)

详解

B+树中叶子节点间的指针有什么用

方便范围遍历

B+树和AVL树,B树,二叉搜索树的区别

见上

B+树 和B树 哈希索引

见上

⑤其他

事务的四大特性

ACID:

  1. 原子性(Atomicity)
    原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响
  2. 一致性(Consistency)
    一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
    拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性
  3. 隔离性(Isolation)
    隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
      即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行
  4. 持久性(Durability)
      持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
      例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。
      
    ref

四种隔离级别

什么是幻读

详解

什么是ORM

一种封装

Sql注入

攻击手段

如何分析Sql执行慢的原因

⑥设计题

一个数据库存了以下数据:用户id,登录时间,登出时间;如何找到一天当中的用户峰值(用一个hash map存所有秒数的在线人数)

某脚本同时处理一大堆文件,若脚本突然挂掉,如何判断处理到了哪些文件的哪些部分(开一个文件或者数据库,记录处理了哪些文件,处理到了哪一行。)

给定两个文件A,里面有id name,文件B,里面有id age,怎么将两个文件的内容join起来。(最开始回答的是全部放入数据库,然后用数据库的union操作,然后他说没有数据库,然后就回答先分块,再根据ID排序,然后再每个块去进行join)

订单 order 实体有几个属性:产品(product_id)、下单日期(date)等,请设计 索引 实现下列需求并优化索引:①查询某个产品的所有订单②查询某一天的所有订单③查询有个产品最近一个月的所有订单

五. 数据结构与算法

①哈希相关

一致性哈希

解决服务器宕机或新增服务器时,需要大量重新哈希的问题

哈希冲突怎么解决

四种方法

插到key-value节点之前后面:一个个链表有什么问题(其实就是链表很长,达不到扩容的要求,容易受到hash攻击)

一个个链表是什么意思

LRU实现、插入操作、 描述数据结构如何变化 (说双向链表加哈希,在双向链表上做lru,加哈希表是为了快速定位要移动的节点)

Leetcode有原题
力扣地址

②运算及字符串相关

求x的y次方,想出比直接for循环更好的方案(给出一个数x,求sqrt(x), 精度在1e-6,还是用的二分)

url翻转

查找一个字符串中最长的无重复字串

一个超级长的数字(有几十位那种),允许进行任意多次的任意两位交换,得到的比他大的最小的数字是多少

在1个10G大小的文件中,存储的都是int型的数据,如何在内存使用小于8M的情况下进行排序

实现输入英文单词联想的功能

字符串转整数(包括正数负数小数,以及异常处理溢出的情况)

给一个很大的数字,怎么返回固定长度的substring(DP)

怎么用一个骰子等概率表示1到7

给定一个 0-4随机数生成器 如何生成0-6随机数

1亿个正整数范围是0-42亿。求出现次数是2的数字,空间复杂度

对两个二进制字符串求十进制的和

数组相关

最长上升子序列

无序的数组的中位数

M*N 横向递增矩阵找指定数

给一个乱序数组,输出每一个数字后面第一个比它大的数字(单调栈)

单调不减数组二分查找,如果存在返回出现的第一个位置,不存在的话返回-1

一个数组 组成N位的数字去掉K位 保证数字最小

给出数组A,找到最大的(Ai-Aj)(i>j)

两千万高考生的成绩 如何排序

给一个等腰直角三角形,从左上角开始,结束点任选,给出经过路径的节点的和的最大值并打印出路径

逆序输出偶数的平方 ( [1,2,3,4,5,6,7,8,9] 输出 [64,36,16,4] )

有许多八位数的电话号码,设计一个存储方案,用尽可能少的内存,达到比较高效的检索(“位图”。就是用一个类似于数组的结构,每个二进制位代表一个电话号码的存在与否(1位存在,0为不存在)可以用整数数组加上位运算比较方便的实现)

Dynamic Programming,相邻两个数只能选一个,求能返回最大数(如[1,4,33,67,34] )

矩阵旋转 (复杂度O(1)

求绝对众数

③树及相关

S型输出二叉树的节点值

寻找中位数(堆)

从上往下打印二叉树

二叉树的非递归后序遍历

一棵树 寻找节点中最长路径(动态规划)

二叉树最深子节点的最近公共父节点(二叉树的最近公共祖先,lc 236稍有不同,原题2个节点,面试多个节点)

二叉树,输出所有和为n的路径(可以从中间结点到中间结点)

二叉树中的最大路径和 ( lc124 )

为什么选择二叉平衡树,并给时间复杂度(查找和删除)

④链表

两个链表的公共节点

大数加法 链表

链表求和

单链表结构很长,怎么优化使得增删查改效果好

链表,奇位上升偶位下降,整合成升序链表(频率爆表)

⑤图相关

一个图中联通为1的块的个数

图的广度优先遍历

你可能感兴趣的:(字节跳动后端开发面经汇总(数据库与数据结构部分))