头条面试总结

头条面试问题整理
  • 自我介绍
  • 项目详细介绍
  • 算法题
    • LeetCode上一个题,给定一个二维数组和目标值,该二维数组每一行和每一列都是非递减的,问二维数组中的等于目标值的坐标。
    • 实现一个排序树,能插入,能删除,能平衡
    • 输入一个数组,要求输出数组中每个数字后面第一个比他大的数字,没有比他大的输出-1,时间复杂度O(n)。输入:5,1,9,6,7 输出:9,9,-1,7,-1
    • 二维数组中,只能向右和向下,找到从左上角到右下角路径中和最大的值
    • 堆排序
    • 快排思想
    • 两个栈实现队列
    • 单链表排序
  • 数据库
    • MySQL的索引原理、数据库索引类型
      • 索引原理
        • 本质
          通过不断地缩小想要获取数据的范围来 筛选出 最终想要的结果,同时把随机的事件变成顺序的事件。
        • 数据结构角度考虑,为什么使用B树而不用AVL树or红黑树?
          • 定义:AVL树是严格的二叉排序树(保持平衡),红黑树是非严格的二叉排序树(不用保存平衡)
          • 显然,AVL树和红黑树都比B树的高度h高,因为B树的节点度d更大(B树高度O(logdN))
          • I/O次数越多:一个节点大小占用OS中的一个逻辑页,对应了一次I/O,因此树越高一次查找次数(即为树高)越多。
          • 无法运用程序局部性原理:以为树太高导致逻辑上很近的节点(父子节点)物理上可能很远。
          • 因此,B树的I/O次数明显低于AVL树和红黑树,故选择B树作为索引结构。
        • 计算机组成原理角度考虑,大多数数据库系统为什么使用B+树(对B+树结构做了优化,添加了叶子节点的顺序指针)而不使用B-树?
          • 利用磁盘预读原理(根据局部性原理),DB的设计者将1个节点大小设置为1页,故1个节点只需1个I/O就能完全载入。
          • B树一次查找最多查找次数=h-1(高度为h,根节点常驻内存)
          • 树高度h=O(logdN)。实际应用中,出读d是非常大的数字,通常超过100,因此h非常小。
          • B-树高度>B+树高度
            因为d(B+)>d(B),d的计算公式为:d=节点大小(1页,4或8kB)/(keysize+datasize+pointsize)。而B+树的非叶子节点没有data域,故datasize值为0,故其d更大。
          • 优化后的B+树能干嘛?
            提高区间访问的性能。
            eg:如果要查询key为从18到49的所有数据记录,则从第一个叶子节点开始查找,当找到key=18后,只需顺着结点和指针顺序遍历就可以一次性访问到所有数据结点,极大提到了区间查询效率。
        • 补充常识
          目前大部分数据库系统文件系统都采用B-树或者B+树作为索引结构。
    • 类型
      • 普通索引index :加速查找
      • 唯一索引
        • 主键索引:primary key :加速查找+约束(不为空且唯一)
        • 唯一索引:unique:加速查找+约束 (唯一)
      • 联合索引
        • primary key(id,name):联合主键索引
        • unique(id,name):联合唯一索引
        • index(id,name):联合普通索引
      • 全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。
        db表message_queue_historyÿ
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值