美团一面,有点难度

前几天分享过一篇训练营的朋友在阿里的一面面经,挺简单的她也是很轻松的过了,感兴趣的可以看一下我之前发的文章。

今天要分享的还是她的面经,美团的一面,感觉比阿里的难一些,各位观众老爷你怎么看?

  1. 自我介绍

2. 如何治理大表?

治理大表通常涉及到以下几个方面:

  • 分库分表:根据业务逻辑或数据分布将数据分散到多个数据库或表中。
  • 分区:对于单个大表,可以采用分区技术(如范围、列表、哈希分区)来提高查询性能。
  • 归档:将不再频繁访问的历史数据迁移到低成本存储介质。
  • 优化查询:确保所有查询语句都是高效的,并且只选择需要的列。
  • 索引管理:为经常用于查询条件的字段创建索引,但避免过度索引以防止写入性能下降。

3. 对于千万级的mysql表,如何能够使他读取的更快?

要加快大型MySQL表的读取速度,可以采取以下措施:

  • 索引优化:为常用的查询条件建立有效的索引,包括联合索引。
  • 覆盖索引:当查询的所有字段都在索引中时,直接从索引树获取结果,而不必回表查找。
  • 分区表:按照时间戳或其他标准对表进行分区,减少扫描的数据量。
  • 缓存机制:利用Redis等内存型数据库作为缓存层,减轻数据库压力。
  • 读写分离:设置主从架构,读操作分发到从节点执行。
  • 调整配置参数:比如增大innodb_buffer_pool_size,提高缓冲区命中率。

4. 索引应该怎么建?

索引的设计应遵循以下原则:

  • 选择性高的字段优先:选择性高意味着该字段能区分更多的记录,这样的索引更加有效。
  • 考虑查询模式:分析应用中最常见的查询模式,确保这些查询能够充分利用索引。
  • 联合索引:如果多个字段总是同时出现在WHERE子句中,可以考虑创建联合索引。
  • 避免过多索引:每增加一个索引都会影响插入、更新和删除操作的速度。
  • 定期审查:随着数据的增长和查询模式的变化,原有的索引可能不再适用,需定期评估并调整。

5. 考察联合索引的最左匹配原则?

联合索引是由多个字段组成的复合索引,它的工作原理是基于最左前缀原则。这意味着查询条件必须包含索引的第一个字段才能有效地使用这个索引。例如,如果有联合索引(a, b),那么查询条件中至少要包含a才能利用该索引;如果只有b,则无法利用此索引。这是因为B+树结构决定了索引的遍历方式是从左至右逐层深入。

6. 说一下一级索引和二级索引?

在关系型数据库中:

  • 一级索引(也称聚集索引)通常是主键索引,它定义了行在磁盘上的物理存储顺序。
  • 二级索引(非聚集索引)是指除了主键之外的其他索引,它们不改变行的物理排序,而是指向主键值来间接定位行位置。

7. 优化sql的方案?

SQL优化可以从多个角度入手:

  • 重写查询:简化复杂查询,分解成简单的子查询或者使用JOIN代替子查询。
  • 限制返回的数据量:只选取必要的列,而不是使用SELECT *
  • 适当使用索引:确保查询条件能够命中索引,从而减少全表扫描。
  • 使用EXPLAIN分析:通过EXPLAIN命令查看查询执行计划,找出潜在的性能瓶颈。
  • 批量处理:尽量使用批量插入、更新,减少网络开销。

8. 分页的优化?

传统的分页方法依赖于LIMITOFFSET,但这会导致性能问题,特别是在大数据集上。优化分页的方法包括:

  • 基于主键或唯一键分页:每次查询指定上次返回的最大ID,然后在此基础上加上新的偏移量。
  • 游标分页:使用特定字段作为游标,每次请求携带上一次响应中的最后一个游标值,以此来确定下一页的数据起点。

9. 不同隔离级别的区别?

事务隔离级别决定了并发事务之间可见性和相互影响的程度,主要有四种:

  • 读未提交(Read Uncommitted):最低隔离级别,允许脏读、不可重复读和幻读。
  • 读已提交(Read Committed):禁止脏读,但仍可能发生不可重复读和幻读。
  • 可重复读(Repeatable Read):保证同一事务内多次读取相同数据的一致性,但可能存在幻读。
  • 序列化(Serializable):最高隔离级别,完全杜绝了脏读、不可重复读和幻读的问题。

10. 如何在实践中构造一个不可重复读的现象?

要在较低的隔离级别(如读已提交)下构造不可重复读现象,可以通过以下步骤:

  • 开启两个事务T1和T2。
  • T1执行查询并读取某条记录。
  • 在T1尚未提交之前,T2修改这条记录并提交。
  • T1再次查询同一记录,发现内容发生变化,这就是不可重复读。

11. Redis的使用场景?

Redis适用于多种场景:

  • 缓存:快速访问热点数据,减轻数据库负担。
  • 消息队列:发布/订阅模型适合实时通知和异步任务处理。
  • 会话存储:替代传统数据库保存用户会话信息。
  • 排行榜:利用有序集合实现排名统计。
  • 计数器:原子递增/递减操作非常适合计数用途。

12. 为什么直接更新缓存会有一致性问题?

直接更新缓存而不同步更新数据库可能导致数据不一致,因为缓存和持久层之间的状态不同步。例如,当缓存失效期间或缓存被清除后重新加载数据时,可能会出现缓存中的数据与数据库中的最新数据不符的情况。

13. 删除缓存也会有一致性问题,什么场景下使用删除缓存会产生一致性问题?

删除缓存时的一致性问题通常发生在多实例环境下,其中不同的服务器可能持有不同的缓存副本。具体场景如下:

  • 缓存击穿:当大量并发请求同时到达,导致缓存全部失效,所有请求直接打到数据库,造成数据库压力骤增。
  • 缓存雪崩:某个时间段内大量缓存同时过期,造成短时间内大量请求涌向数据库。
  • 缓存穿透:恶意请求故意查询不存在的数据,导致每次查询都去数据库查找,浪费资源。

14. 延迟双删的具体实现是什么样的?

延迟双删是一种解决缓存击穿的策略,其实现方式是:

  • 当缓存项到期时,不是立即删除,而是将其标记为“正在刷新”状态。
  • 设置一个短暂的时间窗口,在这段时间内任何尝试访问该缓存项的请求都将被阻塞,直到新值生成完毕。
  • 如果在这段时间内没有成功刷新缓存,则真正删除该项,否则更新其内容。

15. 当你设计一个系统会考虑哪些?

设计系统时应考虑的因素包括但不限于:

  • 功能性需求:确保满足业务要求。
  • 非功能性需求:如性能、安全性、可用性、扩展性等。
  • 数据一致性:尤其是在分布式环境中,确保数据同步正确。
  • 容错能力:系统应当具备一定的故障恢复机制。
  • 用户体验:界面友好,易于使用。
  • 成本效益:控制硬件资源消耗,降低运营成本。

16. 监控告警一般监控哪些东西?

监控系统通常会关注以下几个方面:

  • 系统资源利用率:CPU、内存、磁盘I/O、网络带宽等。
  • 应用程序健康状况:响应时间、错误率、吞吐量等。
  • 日志文件:捕捉异常信息,帮助排查问题。
  • 自定义指标:根据业务特性设定关键绩效指标(KPI),如订单处理时间、交易成功率等。

编程题

编程题 1:合并两个有序链表
package maintype ListNode struct {Val  intNext *ListNode
}func mergeTwoLists(l1, l2 *ListNode) *ListNode {dummy := &ListNode{}current := dummyfor l1 != nil && l2 != nil {if l1.Val < l2.Val {current.Next = l1l1 = l1.Next} else {current.Next = l2l2 = l2.Next}current = current.Next}if l1 != nil {current.Next = l1} else {current.Next = l2}return dummy.Next
}
编程题 2:合并多个有序链表

这个问题可以通过优先队列(最小堆)来高效解决:

package mainimport "container/heap"type ListNode struct {Val  intNext *ListNode
}// MinHeap 实现了一个最小堆
type MinHeap []*ListNodefunc (h MinHeap) Len() int           { return len(h) }
func (h MinHeap) Less(i, j int) bool { return h[i].Val < h[j].Val }
func (h MinHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }
func (h *MinHeap) Push(x interface{}) { *h = append(*h, x.(*ListNode)) }
func (h *MinHeap) Pop() interface{} {old := *hn := len(old)item := old[n-1]*h = old[0 : n-1]return item
}func mergeKLists(lists []*ListNode) *ListNode {minHeap := &MinHeap{}heap.Init(minHeap)// 将每个链表的第一个元素加入最小堆for _, l := range lists {if l != nil {heap.Push(minHeap, l)}}dummy := &ListNode{}tail := dummyfor minHeap.Len() > 0 {smallest := heap.Pop(minHeap).(*ListNode)tail.Next = smallesttail = tail.Nextif smallest.Next != nil {heap.Push(minHeap, smallest.Next)}}return dummy.Next
}

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以直接私信我:面经

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/485644.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring6:2入门

spring6&#xff1a;2入门 目录 spring6&#xff1a;2入门2.1、环境要求2.2、构建模块2.3、程序开发2.3.1、引入依赖2.3.2、创建java类2.3.3、创建配置文件2.3.4、创建测试类测试2.3.5、运行测试程序 2.4、程序分析2.5、启用Log4j2日志框架2.5.1、Log4j2日志概述2.5.2、引入Log…

03、Node.js安装及环境配置

1.下载node.js 下载地址&#xff1a;Node.js 2.安装 2.1 自定义安装路径&#xff08;可以选择默认&#xff09; 下图根据本身的需要进行&#xff0c;我选择了默认Node.js runtime&#xff0c;然后Next&#xff1a; Node.js runtime &#xff1a;表示运行环境 npm package mana…

容器镜像仓库

文章目录 1、docker hub1_注册2_登录3_创建容器镜像仓库4_在本地登录Docker Hub5_上传容器镜像6_下载容器镜像 2、harbor1_获取 docker compose二进制文件2_获取harbor安装文件3_获取TLS文件4_修改配置文件5_执行预备脚本6_执行安装脚本7_验证运行情况8_访问harborUI界面9_harb…

在paddle中安装python-bidi出错

翻看网上解决方式&#xff0c;是由于系统中缺少 Rust 及其包管理器 Cargo。python-bidi 依赖 Rust 来编译其扩展&#xff0c;如果没有安装 Rust 和 Cargo&#xff0c;安装过程将无法继续。 解决方式 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh但是我的终端…

buuctf:被嗅探的流量

解压后用wireshark查看 flag{da73d88936010da1eeeb36e945ec4b97}

Windows 11 文件管理器隐藏主文件夹、图库和OneDrive

Windows 11 文件管理器隐藏主文件夹、图库和OneDrive 注册表编辑器⌈ 主文件夹 ⌋⌈ 图库 ⌋⌈ OneDrive ⌋ 注册表编辑器 使用 Windows R 快捷键打开「运行」对话框&#xff0c;执行 regedit 打开注册表编辑器。 ⌈ 主文件夹 ⌋ 注册表路径 &#xff1a; 计算机\HKEY_LOCA…

数据结构与算法-03链表-04

链表与递归 在链表操作中移除、反转经常会用到递归实现。通过力扣案例理解链表常规操作中的递归实现。 移除数据 删除链表的节点 问题 LCR 136. 删除链表的节点 - 力扣&#xff08;LeetCode&#xff09; 问题描述 给定单向链表的头指针和一个要删除的节点的值&#xff0c;定…

什么是敏捷(Agile)开发?Scrum和Kanban有什么关系?

最近面试过程中被问到和敏捷开发相关的内容&#xff0c;在产品实际工作中经常会涉及到敏捷开发&#xff0c;但其实我自己没有系列了解过敏捷开发&#xff0c;除了考PMP的时候接触了下&#xff0c;大多数都是在工作中实践积累的&#xff0c;太接地气&#xff0c;为了稍显理论知识…

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

容积卡尔曼滤波(CKF)仿真抛物线运动

容积卡尔曼滤波&#xff08;CKF&#xff09;仿真抛物线运动 容积卡尔曼滤波&#xff08;Cubature Kalman Filter, CKF&#xff09;的MATLAB实现。CKF是一种用于非线性系统状态估计的算法&#xff0c;它通过在状态空间中采样点&#xff08;容积点&#xff09;来近似非线性函数的…

leetcode:1995. 统计特殊四元组(python3解法)

难度&#xff1a;简单 给你一个 下标从 0 开始 的整数数组 nums &#xff0c;返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 &#xff1a; nums[a] nums[b] nums[c] nums[d] &#xff0c;且a < b < c < d 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3…

几个Linux系统安装体验: 开源欧拉系统

本文介绍开源欧拉系统&#xff08;openEuler&#xff09;的安装。 下载 下载地址&#xff1a; https://www.openeuler.org/zh/download/archive/detail/?versionopenEuler%2022.03%20LTS 本文下载的文件名称为openEuler-22.03-LTS-x86_64-dvd.iso。 帮助文档地址如下&…

Data Uncertainty Learning in Face Recognition 论文阅读

Data Uncertainty Learning in Face Recognition 论文阅读 Abstract1. Introduction2. Related Work3. Methodology3.1. Preliminaries3.2. Classification-based DUL for FR3.3. Regression-based DUL for FR3.4. Discussion of Related Works 4. Experiments4.1. Datasets an…

用友BIP与旺店通数据集成方案解析

用友BIP与旺店通企业奇门的供应商集成同步方案 在现代企业的数据管理中&#xff0c;跨平台的数据集成是实现高效业务运作的关键环节。本文将分享一个实际案例&#xff1a;如何通过轻易云数据集成平台&#xff0c;将用友BIP系统中的供应商数据无缝对接到旺店通企业奇门&#xf…

代码随想录Day34 本周小结动态规划,62.不同路径,63. 不同路径 II,343. 整数拆分,96.不同的二叉搜索树。

1.本周小结动态规划 周一 在关于动态规划&#xff0c;你该了解这些&#xff01; (opens new window)中我们讲解了动态规划的基础知识。 首先讲一下动规和贪心的区别&#xff0c;其实大家不用太强调理论上的区别&#xff0c;做做题&#xff0c;就感受出来了。 然后我们讲了动…

vue中使用socket.io统计在线用户

目录 一、引入相关模块 二、store/modules 中封装socketio 三、后端代码(nodejs) 一、引入相关模块 main.js 中参考以下代码 ,另外socketio的使用在查阅其它相关文章时有出入,还是尽量以官方文档为准 import VueSocketIO from vue-socket.io import SocketIO from socket.io-…

Agent Network Protocol技术白皮书:一个对标Anthropic MCP的协议

Agent Network Protocol技术白皮书&#xff1a;一个对标Anthropic MCP的协议 Anthropic MCP让人们看到智能体通过API或协议与外部数据对接的巨大潜力。我们在几个月之前就发布了Agent Network Protocol技术白皮书&#xff0c;一个和MCP类似的协议&#xff0c;致力于解决智能体…

dbeaver安装

数据库常用的管理工具就是navicat&#xff0c;页面简洁大方&#xff0c;且易上手&#xff0c;唯一不好的就是要收费&#xff0c;个人使用的话可以用dbeaver&#xff0c;一款开源的数据库管理工具。 下载地址&#xff1a;https://dbeaver.io/download/ 直接下载这个windows(inst…

每日计划-1206

1. 完成 300. 最长上升子序列 有两种办法&#xff0c;一是使用状态规划&#xff0c;二是用二分法&#xff0c;递推。利用桶排序思想&#xff0c;出自最长递增子序列&#xff08;nlogn 二分法、DAG 模型 和 延伸问题&#xff09; | 春水煎茶 代码实现&#xff1a; class Soluti…

PHP 表单处理

在php接口中创建一个html&#xff0c;并添加一个提交按钮&#xff0c;当填写完文本框里面的内容后&#xff0c;点击提交会自动使用post方法传过去我们写的shop.php接口中。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&q…