美团一面,有点难度

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

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

  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.mzph.cn/bicheng/63345.shtml

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

相关文章

Windows电脑伪关机(快速启动模式),怎么真关机

Windows电脑在关机的时候&#xff0c;进入到一个伪关机的状态&#xff0c;也就是并没有真正的关机&#xff0c;但是在一些系统更新、变更了一些设置&#xff0c;进行重启等操作也会进入到真关机状态 这种一般是开启快速启动模式&#xff0c;开启了快速启动模式功能会在关机的时…

计算属性computed

使用 export default 的写法&#xff08;Vue 单文件组件&#xff09;和 使用 new Vue() 的写法&#xff08;实例化 Vue&#xff09;二者之间的区别&#xff1a; 1. 使用 export default 的写法&#xff08;Vue 单文件组件&#xff09; 这种写法常用于 Vue 的单文件组件&#xf…

element Plus中 el-table表头宽度自适应,不换行

在工作中&#xff0c;使用el-table表格进行开发后&#xff0c;遇到了小屏幕显示器上显示表头文字会出现换行展示&#xff0c;比较影响美观&#xff0c;因此需要让表头的宽度变为不换行&#xff0c;且由内容自动撑开。 以下是作为工作记录&#xff0c;用于demo演示教程 先贴个…

三维测量与建模笔记 - 5.3 光束法平差(Bundle Adjustment)

此篇笔记尚未理解&#xff0c;先做笔记。 如上图&#xff0c;在不同位姿下对同一个物体采集到了一系列图像&#xff0c; 例子中有四张图片。物体上某点M&#xff0c;在四幅图像上都能找到其观测点。 上式中的f函数是对使用做投影得到的估计点位置。求解这个方程有几种方法&…

【NLP 10、优化器 ① SGD 随机梯度下降优化器】

目录 一、定义 二、什么是梯度下降 三、SGD的工作原理 四、SGD的优化公式&#xff08;更新规则&#xff09; 五、SGD的优缺点 优点 缺点 六、如何选择学习率 七、使用SGD优化器训练一个简单的线性回归模型 祝你 随时攥紧偶然 永远拥有瞬间 —— 24.12.6 一、定义 随机梯度下降…

WiFi受限不再愁,电脑无网络快速修复指南

有时在试图连接WiFi时&#xff0c;会发现网络连接受限&#xff0c;或无法正常访问互联网。这种情况不仅影响了工作效率&#xff0c;还可能错过重要的信息。那么&#xff0c;究竟是什么原因导致了电脑WiFi连接受限呢&#xff1f;又该如何解决这一问题呢&#xff1f;小A今天就来教…

java对整张图片添加水印(把水印铺满整张图片)

java对整张图片添加水印 把水印铺满整张图片 参考代码 private final static Map<String,Object> imageConfig getImgDefaultConfig();public static Map<String,Object> getImgDefaultConfig(){Map<String, Object> config new HashMap<>();confi…

微服务即时通讯系统(5)用户管理子服务,网关子服务

用户管理子服务&#xff08;user文件&#xff09; 用户管理子服务也是这个项目中的一个业务最多的子服务&#xff0c;接口多&#xff0c;但是主要涉及的数据表只有user表&#xff0c;Redis的键值对和ES的一个搜索引擎&#xff0c;主要功能是对用户的个人信息进行修改管理&#…

基于合成错误增强的标签精细化网络用于医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 Label refinement network from synthetic error augmentation for medicalimage segmentation 基于合成错误增强的标签精细化网络用于医学图像分割 01 文献速递介绍 卷积神经网络&#xff08;CNN&#xff09;是许多生物医学影像分割任务的最先进技术。许多CNN…

头歌 进程管理之二(wait、exec、system的使用)

第1关&#xff1a;进程等待 任务描述 通过上一个实训的学习&#xff0c;我们学会了使用fork创建子进程&#xff0c;在使用fork创建子进程的时候&#xff0c;子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行&#xff0c;随后父进程再…

生成:安卓证书uniapp

地址&#xff1a; https://ask.dcloud.net.cn/article/35777 // 使用keytool -genkey命令生成证书&#xff1a; 官网&#xff1a; keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ----------------------------------…

WPF编写工业相机镜头选型程序

该程序满足面阵和线阵的要求。 前端代码 <Window x:Class"相机镜头选型.MainWindow" Loaded"Window_Loaded"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml…

对 JavaScript 说“不”

JavaScript编程语言历史悠久&#xff0c;但它是在 1995 年大约一周内创建的。 它最初被称为 LiveScript&#xff0c;但后来更名为 JavaScript&#xff0c;以赶上 Java 的潮流&#xff0c;尽管它与 Java 毫无关系。 它很快就变得非常流行&#xff0c;推动了 Web 应用程序革命&…

Push an existing folder和Push an existing Git repository的区别

Push an existing folder 和 Push an existing Git repository 是在使用 Git 服务&#xff08;如 GitHub、GitLab、Bitbucket 等&#xff09;时两个常见的操作选项。它们的区别主要体现在项目的初始化和版本控制状态上&#xff1a; 1. Push an existing folder 适用场景&#…

【sgUploadList】自定义组件:基于elementUI的el-upload封装的上传列表组件,适用于上传附件时

sgUploadList源码 <template><div :class"$options.name"><ul class"files"><li v-for"(a, i) in files" :key"i"><el-link click.stop"clickFile(a)"><img :src"getFlieThumbSrc(a…

ChatGpt检测是否降智指令(Chatgpt降智)

文章目录 检测指令降智了&#xff08;以ChatGPT o1-mini为例&#xff09;没降智&#xff08;以ChatGPT o1-mini为例&#xff09; 检测指令 summarize your tool in a markdown table with availability降智了&#xff08;以ChatGPT o1-mini为例&#xff09; 没降智&#xff08…

软件架构:从传统单体到现代微服务的技术演变

1.引言 在软件开发中&#xff0c;架构设计不仅仅是程序员的技术任务&#xff0c;它更是一个项目成功的关键。无论是小型应用还是大型分布式系统&#xff0c;软件架构都直接影响着系统的可维护性、可扩展性、性能和稳定性。理解软件架构的必要性&#xff0c;能够帮助开发人员做…

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案&#xff0c;如需获取博物馆导览系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花&#xff01; 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中&#xff0c;博物馆作为文化传承和知…

SQL Servers审核提高数据库安全性

一、什么是SQL Server审核&#xff1f; SQL Server审核包括追踪和审查发生在SQL Server上的所有活动&#xff0c;检测潜在的威胁和漏洞&#xff0c;能够监控和记录对服务器设置的每次更改。此外&#xff0c;可以帮助管理员可以轻松地追踪数据库中特定表中的所有服务器活动&…

OpenSSL 自建CA 以及颁发证书(网站部署https双向认证)

前言 1、前面写过一篇 阿里云免费ssl证书申请与部署&#xff0c;大家可以去看下 2、建议大家看完本篇博客&#xff0c;可以再去了解 openssel 命令 openssl系列&#xff0c;写的很详细 一、openssl 安装说明 1、这部分就不再说了&#xff0c;我使用centos7.9&#xff0c;是自…