7.10飞书一面面经

问题描述

Redis为什么快?

这个问题我遇到过,但是没有好好总结,导致答得很乱。
答:Redis基于内存操作: 传统的磁盘文件操作相比减少了IO,提高了操作的速度。

Redis高效的数据结构:Redis专门设计了STRING、LIST、HASH等⾼效的数据结构,依赖各种数据结构提升了读写的效率。

Redis是单线程模型,单线程操作省去了上下⽂切换带来的开销和CPU的消耗,同时不存在资源竞争,避免了死锁现象的发生。

Redis采用I/O多路复⽤,同时监听多个Socket,根据Socket上的事件来选择对应的事件处理器进⾏处理。

介绍一下Mysql的索引?

这里我第一时间不知道从哪里入手,面试官引导我从数据结构说。

B+树的⾮叶⼦节点不存放实际的记录数据,仅存放索引,所以数据量相同的情况下,相⽐存储即存索引⼜存记录的 B 树,B+树的⾮叶⼦节点可以存放更多的索引,因此 B+ 树可以⽐ B 树更「矮胖」,查询底层节点的磁盘 I/O次数会更少。
B+ 树有⼤量的冗余节点(所有⾮叶⼦节点都是冗余索引),这些冗余索引让 B+ 树在插⼊、删除的效率都更⾼,⽐如删除根节点的时候,不会像 B 树那样会发⽣复杂的树的变化;
B+ 树叶⼦节点之间⽤链表连接了起来,有利于范围查询,⽽ B 树要实现范围查询,因此只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 I/O 操作,范围查询效率不如 B+ 树。

说一下Redis集群。

这个我说只是了解,没有答。

在Redis中提供的集群方案总共有三种:主从复制、哨兵模式、Redis分片集群
主从复制:单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,可以搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据,主节点写入数据之后,需要把数据同步到从节点中。

哨兵模式建立在主从复制模式上,通过引入了哨兵来监控与自动处理故障。哨兵模式可以实现主从集群的自动故障恢复,里面就包含了对主从服务的监控、自动
故障恢复、通知;如果master故障,Sentinel会将一个slave提升为master。
当故障实例恢复后也以新的master为主;同时Sentinel也充当Redis客户端的
服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户
端,所以一般项目都会采用哨兵的模式来保证redis的高并发高可用

哨兵模式解决了主从复制不能自动故障转移,达不到高可用的问题,但还是存在难以在线扩容,Redis容量受限于单机配置的问题。分片集群模式实现了Redis的分布式存储,即每台节点存储不同的内容,来解决在线扩容的问题。

算法:

峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞ 。
你必须实现时间复杂度为 O(log n) 的算法来解决此问题。

public class Solution {
    public int findPeakElement(int[] nums) {
        int left = 0, right = nums.length - 1;
        
        while (left < right) {
            int mid = left + (right - left) / 2;
            
            // 比较中间元素与其右侧邻居
            if (nums[mid] > nums[mid + 1]) {
                // 峰值在左侧或者就在 mid 位置
                right = mid;
            } else {
                // 峰值在右侧
                left = mid + 1;
            }
        }
        
        // left 和 right 会相遇在峰值位置
        return left;
    }
}

相关推荐

  1. 7.10一面

    2024-07-11 18:02:04       24 阅读
  2. spring security-字节生产力工具后端一面

    2024-07-11 18:02:04       51 阅读
  3. 】4月17日 小红/商业技术/一面/1h

    2024-07-11 18:02:04       35 阅读
  4. 科大讯详解!

    2024-07-11 18:02:04       26 阅读
  5. 小红Android实习

    2024-07-11 18:02:04       38 阅读
  6. 7.10一面

    2024-07-11 18:02:04       18 阅读
  7. 字节一(年前)测开—

    2024-07-11 18:02:04       30 阅读
  8. 后端开发系列 -- 中望C++一面

    2024-07-11 18:02:04       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 18:02:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 18:02:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 18:02:04       58 阅读
  4. Python语言-面向对象

    2024-07-11 18:02:04       69 阅读

热门阅读

  1. mysql bit 对gorm使用何种类型?

    2024-07-11 18:02:04       25 阅读
  2. python爬虫学习(三十三天)---多线程上篇

    2024-07-11 18:02:04       22 阅读
  3. 一、Python 日志系统设计之不同级别的系统日志

    2024-07-11 18:02:04       20 阅读
  4. SpringAMQP收发消息demo

    2024-07-11 18:02:04       20 阅读
  5. SpringSecurity中文文档(Servlet OAuth 2.0 Login)

    2024-07-11 18:02:04       19 阅读
  6. ant-design-vue表格设置某列标题部分文字颜色

    2024-07-11 18:02:04       24 阅读
  7. python-redis-lock是如何实现锁自动续期的

    2024-07-11 18:02:04       22 阅读