面试实战篇 | 快手本地生活,结合项目谈Redis实战项目场景?MySQL InnoDB存储引擎如何工作的?策略模式?

news2024/12/23 3:58:15

本期是【你好,面试官】系列文章的第21期,持续更新中…。

《你好,面试官》系列目前已经连载20篇了,据说看了这个系列的朋友都拿到了大厂offer~

  • 你好,面试官 | 你真的理解面向 “对象”?
  • 你好,面试官 | 我用Java List 狂怼面试官~
  • 你好,面试官 | 你拿Java Map考验老干部?
  • 你好,面试官 | 你觉得MySQL自增主键连续吗?
  • 你好,面试官 | 呵,我怎么可能不知道索引!
  • 你好,面试官 | 我不仅知道MySQL索引,还会优化呢~
  • 你好,面试官 | 我可以凭借MySQL架构体系,事务锁机制原理进你公司吗?
  • 你好,面试官 | 初识 Java 并发,拿捏这些业务可能遇到的问题~
  • 你好,面试官 | 百度是这样问 synchronized 的…
  • 你好,面试官 | Redis不只是做缓存,你看过Redis数据结构底层实现吗?
  • 你好,面试官 | 分析一下SQL执行慢的原因?如何排查,优化思路?(加餐篇)
  • 你好,面试官 | MySQL事务与锁机制相关(加餐篇)
  • 你好,面试官 | 不会点JVM的骚操作,还镇不住面试官了嗦!
  • 你好,面试官 |阿里二面,一条SQL更新的底层回答让我逼格拉满!
  • 你好,面试官 | 阿里云二面,Redis经典使用场景与雪崩处理(我猜你根本没考虑到这个…)?
  • 你好,面试官 | 面完腾讯,没想到操作系统会考这么多…
  • 你好,面试官 | 简单聊聊JVM调优相关
  • 欢迎星标+订阅,持续更新中。。。致力打造校招核心面试攻略~

小龙有话说

本期会进行大厂面试 实战模拟。

涉及知识点,Redis场景、数据结构,MySQL 优化,Linux/设计模式、并发等

本期题改编自 ——2023届春招 快手本地生活 一面

面试现场

叮叮叮…

面试官:“你好,我是XX面试官,请问是小龙吗?”

小龙:“您好,面试官,我是小龙”

面试官:“好的,现在有空吗,我们开始面试吧”

小龙:“嗯嗯,准备好啦”

other questions

面试官:“好的,Redis 你平时是怎样使用的呢?或者说在哪些场景下你会考虑使用 Redis 呢?”

小龙:“嗯~,因为 Redis 是基于内存操作的,速度贼快,在很多情况下,我们都会将 Redis 作为缓存使用。”

小龙:“并且 Redis 底层实现采用了很多丰富的数据结构,我们可以结合其不同的数据结构的特点在很多应用场景下都可以使用。”

面试官:“嗯嗯,你所了解的有哪些呢?能举例说说吗?”

独白:“一般人回答都是把可能知道的一些例子一股脑说出来,高手会将这些场景尽可能形成完整的场景链。”

功能点

小龙:“嗯~,以我项目《基于人工智能的智慧校园助手V2.0》为例,考虑到以后服务在多台服务器上部署会出现session共享的问题,登录采用了 Redis+JWT 来解决登录问题;”

小龙:“在同城电商模块,商铺本周上榜使用了 底层的 zset 结构,根据用户在商铺的购物次数,评论、点赞等累加积分,每周排名一次,前12名当周商铺首页轮询推荐,提高瀑光率。如下图:”

1>

小龙:“同时,会对各个商铺的积分动态变化,和商铺上下榜情况使用 list 队列结构进行消息顺序推送。”

在这里插入图片描述

小龙:“当然,巧用这些数据结构可以实现很多有趣实用的功能。此外,考虑到同城商城模块首页商品分类多级分类数据 以及 TOP12商户热榜中商户数据访问量大,并且变动频次不高,为了优化提高首页数据加载性能,会对商品多级分类数据以及热榜商户数据进行缓存。”

小龙:“在首页校园社交动态模块,关于心情动态的点赞点踩,也采用了 set 结构,使用redis存储或取消点赞userId。采用 GEO (允许存储地理坐标信息,帮助我们根据经纬度来检索数据)结合用户画像标签,实现缘分一线牵,推荐附近兴趣爱好相似之人.”

在这里插入图片描述

独白:“结合具体场景串一下,形成完整的闭环,然后进行结论总结回到最原始的问题。”

小龙:“总之,我想表达的是,redis 基于内存不仅速度快,同时底层为我们提供了丰富的数据结构,常用的 string、set、zset、list、geo等等,在合适的场景下结合其不同数据结构的特性能达到事半功倍的效果。”

面试官:“讲得很好,对啦,你对 Linux 了解多少呢?平时是怎么使用的?”

小龙:“这个在每个大一点的公司其实应该都有专门的系统故障、系统/业务指标等的监控平台,对于亲自到服务器上去进行问题排查之类的不多,或者也专门有运维监管。”

独白:“假如遇到不是太擅长的,可以分析说明情况,再如实回答。”

小龙:“因此,对于 Linux 的使用,我目前涉猎的只有一些 日志的查看,比如:cat、tail,进程的查看 比如:ps -ef | grep xx,有时可能直接上服务器查看 服务 jar 包的代码(代码修改后,线下没有问题,线上却始终不生效)可以考虑vim、jar相关命令去排查。”

面试官:“Ok,对 MySQL 了解多少呢?自己总结一下你对 MySQL 的认识。”

独白:“沃卡,高难度,直接把所有问题抛给我了我。。。”

小龙:“全面认识 MySQL,首先得知道 MySQL 全貌,了解整体一个体系架构。MySQL 总览可细分为 网络连接层、服务层、存储引擎层、系统文件层。”

在这里插入图片描述

小龙:“现在我们默认用的都是 InnoDB 引擎,因此,主要核心在于 InnoDB 引擎的理解。关于 InnoDB 其实主要由 许多后台线程、InnoDB引擎内存池(缓冲池(Buffer Poll))、磁盘构成。这就是一个整体宏观认知啦。”

面试官:“ok、刚才你说的后台线程是什么呢?内存结构又是什么呢?能结合起来讲讲吗?”

小龙:"我们 InnoDB 引擎其实是基于磁盘存储的,但是我们做增删等操作时,不可能基于磁盘去操作,大量IO这样会非常慢。这时需要一个基于内存的缓存池(buffer Pool)来做个缓冲,操作请求来时,若缓冲池有存在数据的页就直接修改,没有就从磁盘读取。而数据页的读取和刷库就需要有特定的后台线程来维护啦,此时,就得我们后台线程(Master Thread)来完成脏页的刷新保证数据的一致性啦。

小龙:“当然,这只是联动起来讲的一个例子,我们的内存和后台线程还有很多。比如,IO Thread、Purge Thread;修改缓冲区(Change Buffer)、自适应hash索引(Adaptive Hash Index)、日志缓冲区(Log Buffer)。”

在这里插入图片描述

独白:“完整的体系架构会在后续章节进行讲解。”

面试官:“牛逼,看你底层讲得都头头是道,我考考基础哎。你平时项目设计模式用过哪些,除了单例、工厂之类的。”

小龙:“还用过责任链模式、策略模式之类的。”

面试官:“可以说说策略模式吗?”

小龙:“比如,在完成项目《基于人工智能的智慧校园助手v2.0》时,目前登录涉及:手机号,账号密码 考虑后续可能会对登录进行扩展,比如接入QQ、github、邮箱登陆等各种渠道的登录。”

小龙:“然后又会有不同用户类型,用户、租户之类的,会有很多if-else分支,然后就尝试使用策略模式对代码进行重构,避免过多的if-else分支。后续再增加不同的用户类型或者登录方式,直接增加一种策略即可。”

小龙:“定义策略接口(登陆方法等接口),然后不同实现方法定义一个类实现策略接口,然后再定义一个环境类,根据传来的不同实现子类去调用不同实现方法即可”

面试官:“真心不错~”

知识总结

本期我们通过面试模拟简单介绍了 Reids 关于 相关场景 的相关知识,MySQL相关设计模式相关订阅+星标持续追更

如果你有经典的面试题,可以私信投稿~

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

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

相关文章

在Flask中构建API接口的相关概念

重定向行为斜杠以下两个路由的不同之处在于是否使用尾部的斜杠。第一个路由的URL尾部有一个斜杠,看起来就像一个文件夹,访问一个没有斜杠结尾的URL时,Flask会自动进行重定向,在结尾加上一个斜杠。第二个路由的URL没有尾部斜杠&…

ChatGpt-2 对话单页功能实现vue3+elementplus

接口可参照CHATGPT.NET自行实现 <script setup> import { RouterLink, RouterView } from "vue-router"; import HelloWorld from "./components/HelloWorld.vue"; import { MoreFilled ,CircleCheck} from "element-plus/icons-vue"; …

GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)

文章目录前言一、坐标系1.地球坐标 (WGS84)2.国测局坐标系(GCJ-02、火星坐标系)3.百度坐标(BD-09)4.国家大地2000坐标系(CGCS2000)二、百度坐标系(BD-09) 与火星坐标系(GCJ-02)的转换1.核心代码2.转换验证百度地图高德地图腾讯地图三、火星坐标系 (GCJ-02) 与百度坐标系 (BD-09…

【青训营】RPC框架分层设计简述

远程函数调用&#xff0c;Remote Procedute Calls&#xff0c;简称RPC。RPC需要解决的问题有&#xff1a;完成远程函数的映射&#xff0c;并且将数据转化为字节流&#xff0c;使用网络进行传输 RPC基本概念 IDL文件&#xff1a;IDL通过一种中立的方式来描述接口&#xff0c;使…

OpenCV 图像梯度算子

本文是OpenCV图像视觉入门之路的第12篇文章&#xff0c;本文详细的介绍了图像梯度算子的各种操作&#xff0c;例如&#xff1a;Sobel算子Scharr算子laplacian算子等操作。 OpenCV 图像梯度算子目录 1 Sobel算子 2 Scharr算子 3 laplacian算子 1 Sobel算子 Sobel算子是一种图…

.Net Core对于`RabbitMQ`封装分布式事件总线

首先我们需要了解到分布式事件总线是什么&#xff1b;分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信&#xff0c;而无需直接耦合或了解彼此的实现细节。通过事件总线&#xff0c;组件或微服务可以通过发布或…

基于STM32的虚拟示波器

仓库地址 https://github.com/shuai132/ScopeMCU ScopeMCU Oscilloscope for MCU MCU: STM32F103C8Tx 需配合ScopeGUI使用 截图说明见wiki 最新版Releases Introduction 用最少的硬件成本&#xff0c;做一个实用的虚拟示波器。 这是硬件部分&#xff0c;基于STM32最小…

提取DataFrame中每一行的DataFrame.itertuples()方法

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】提取DataFrame中的每一行DataFrame.itertuples()选择题关于以下python代码说法错误的一项是?import pandas as pddf pd.DataFrame({A:[a1,a2],B:[b1,b2]},index[i1,i2])print("【显示】d…

基于SpringBoot实现ChatGPT-QQ机器人

概述 近期ChatGPT火爆全球&#xff0c;在其官方网站上也列举了非常全面的应用案例&#xff0c;仅仅上线两个月活跃用户数已经达到1亿&#xff0c;成为历史上用户数增长最快的面向消费者的应用 快速体验 OpenAI官网对外提供了标准的 API 接口&#xff0c;可以通过HTTP请求进行…

SignalR注册成Windows后台服务,并实现web前端断线重连

注意下文里面的 SignalR 不是 Core 版本&#xff0c;而是 Framework 下的 本文使用的方式是把 SignalR 写在控制台项目里&#xff0c;再用 Topshelf 注册成 Windows 服务 这样做有两点好处 传统 Window 服务项目调试时需要“附加到进程”&#xff0c;开发体验比较差&#xf…

RibbitMQ 入门到应用 ( 二 ) 安装

3.安装基本操作 3.1.下载安装 3.1.1.官网 下载地址 https://rabbitmq.com/download.html 与Erlang语言对应版本 https://rabbitmq.com/which-erlang.html 3.1.2.安装 Erlang 在确定了RabbitMQ版本号后&#xff0c;先下载安装Erlang环境 Erlang下载链接 https://packa…

vue通用后台管理系统

用到的js库 遇到的问题 vuex和 localStorage区别 vuex在内存中&#xff0c;localStorage存在本地localStorage只能存储字符串类型数据&#xff0c;存储对象需要JSON.stringify() 和 parse()…读取内存比读取硬盘速度要快刷新页面vuex数据丢失&#xff0c;localStorage不会vuex…

图的基本介绍和表示方式

图的基本介绍 为什么要有图这个基本数据结构? 我们还学习过线性表&#xff08;数组、队列、链表和栈&#xff09;和树&#xff0c;但是我们可以发现&#xff0c;线性表局限于一个直接前驱&#xff08;就是只能有唯一一个前面的结点&#xff09;和一个直接后继的&#xff08;…

Python+dilb 简单实现人脸检测(附代码)

如果dilb和face_recognition第三方包安装失败&#xff0c;请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客 目录 一、环境配置 二、前期知识 1 读取图片 2 灰度转换 解决报错cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\o…

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…

【Spark分布式内存计算框架——Spark Core】9. Spark 内核调度(上)

第八章 Spark 内核调度 Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据RDD的依赖关系构建DAG&#xff0c;基于DAG划分Stag…

PVE虚拟机篇-PVE虚拟机安装

安装包下载 前往Proxmox Virtual Environment下载ISO镜像文件&#xff0c;可以直接选择最新版本。 但是如果没有海外线路一般下载十分缓慢&#xff0c;甚至下不动&#xff0c;所以可以去中科大镜像源&#xff1a;中科大Proxmox Virtual Environment 制作U盘启动盘 可以使用…

SpringMVC:拦截器(12)

拦截器1. 拦截器概念2. 拦截器入门案例2.1 环境准备2.2 拦截器开发步骤1: 创建拦截器类步骤2: 配置拦截器类步骤3: SpringMVC添加SpringMvcSupport包扫描和interceptor包扫描步骤4: 简化SpringMvcSupport的编写5 测试3. 拦截器参数解析&#xff08;了解&#xff09;3.1 前置处理…

字节一面:在浏览器地址栏输入一个 URL 后回车,背后发生了什么?

近段时间&#xff0c;有小伙伴面试字节&#xff0c;说遇到一个面试题&#xff1a; 在浏览器地址栏输入一个 URL 后回车&#xff0c;背后发生了什么&#xff1f; 这里尼恩给大家做一下系统化、体系化的梳理&#xff0c;使得大家可以充分展示一下大家雄厚的 “技术肌肉”&#xf…

c# 自定义隐式转换与运算符重载

用户定义的显式和隐式转换运算符 参考代码 用户定义的显式和隐式转换运算符 - 提供对不同类型的转换 | Microsoft Learn 代码例程 using System;public readonly struct Digit {private readonly byte digit;public Digit(byte digit){if (digit > 9){throw new Argumen…