面试实战篇 | 快手本地生活,结合项目谈Redis实战项目场景?MySQL InnoDB存储引擎如何工作的?策略模式?
本期是【你好,面试官】系列文章的第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名当周商铺首页轮询推荐,提高瀑光率。如下图:”
小龙:“同时,会对各个商铺的积分动态变化,和商铺上下榜情况使用 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相关
、设计模式相关
。订阅+星标持续追更
如果你有经典的面试题,可以私信投稿~
相关文章:
面试实战篇 | 快手本地生活,结合项目谈Redis实战项目场景?MySQL InnoDB存储引擎如何工作的?策略模式?
本期是【你好,面试官】系列文章的第21期,持续更新中…。 《你好,面试官》系列目前已经连载20篇了,据说看了这个系列的朋友都拿到了大厂offer~ 你好,面试官 | 你真的理解面向 “对象”?你好,面…...
Hadoop之——WordCount案例与执行本地jar包
目录 一、WordCount代码 (一)WordCount简介 1.wordcount.txt (二)WordCount的java代码 1.WordCountMapper 2.WordCountReduce 3.WordCountDriver (三)IDEA运行结果 (四)Hadoop运行wordcount 1.在HDFS上新建一个文件目录 2.新建一个文件,并上传至该目录下…...
利用git reflog 命令来查看历史提交记录,并使用提交记录恢复已经被删除掉的分支
一.问题描述 当我们在操作中手误删除了某个分支,那该分支中提交的内容也没有了,我们可以利用git reflog这个命令来查看历史提交的记录从而恢复被删除的分支和提交的内容 二.模拟问题 1.创建git仓库,并提交一个文件 [rootcentos7-temp /da…...
【软件测试】大厂测试开发你真的了解吗?测试开发养成记......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 在一些大公司里&…...
Redis中的hash结构和扩容机制
1.rehash原理 hash包含两个数据结构为字典数组ht[0]和ht[1]。其中ht[0]用来存放数据,ht[1]在rehash时使用。 扩容时,ht[1]的大小为第一个大于等于ht[0].used*2的2的幂次方的数; 收缩时,ht[1]的大小为第一个大于等于ht[0].used的…...
【C++奇技淫巧】前置自增与后置自增的区别(++i,i++)【2023.02.08】
简介 先说i和i的区别,判断语句中if(i)是拿i的值先判断,而后自增;if(i)是先自增i再进行判断。涉及到左值与右值也有点区别,i返回的是右值,i返回的是左值。也就是下面的代码要解释的东西。 #include <iostream>i…...
实战打靶集锦-005-HL
**写在前面:**记录一次曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 浏览器访问4.2 目录枚举4.3 探查admin4.4 探查index4.5 探查login5 公共EXP搜索6. 再次目录枚举6.1 探查superadmin.php6.2 查看页面源代码6.3 base64绕过6.4 构建反弹…...
铁路系统各专业介绍(车机工电辆)
目录 1 车务段 1.1 职能简介 1.2 路段名单 1.3 岗位级别 2 机务段 2.1 职能简介 2.2 路段名单 2.3 岗位级别 3 工务段 3.1 职能简介 3.2 路段名单 3.3 岗位级别 4 电务段 4.1 职能简介 4.2 路段名单 4.3 岗位级别 5 车辆段 5.1 职能简介 5.2 路段名单 5.3 …...
2/11考试总结
时间安排 7:30–7:50 读题,T1貌似是个 dp ,T2 数据结构,T3 可能是数据结构。 7:50–9:45 T1,点规模非常大,可以达到 1e18 级别,感觉应该没法直接做,考虑每条新增的边的贡献,想到用 …...
Java Set集合
7 Set集合 7.1 Set集合的概述和特点 Set集合的特点 不包含重复元素的集合没有带索引的方法,所以不能使用普通for循环 Set集合是接口通过实现类实例化(多态的形式) HashSet:添加的元素是无序,不重复,无索引…...
【手写 Vuex 源码】第七篇 - Vuex 的模块安装
一,前言 上一篇,主要介绍了 Vuex 模块收集的实现,主要涉及以下几个点: Vuex 模块的概念;Vuex 模块和命名空间的使用;Vuex 模块收集的实现-构建“模块树”; 本篇,继续介绍 Vuex 模…...
EOC第六章《块与中枢派发》
文章目录第37条:理解block这一概念第38条:为常用的块类型创建typedef第39条:用handler块降低代码分散程度第41条:多用派发队列,少用同步锁方案一:使用串行同步队列来将读写操作都安排到同一个队列里&#x…...
八、Git远程仓库操作——跨团队成员的协作
前言 前面一篇博文介绍了git团队成员之间的协作,现在在介绍下如果是跨团队成员的话,如何协作? 跨团队成员协作,其实就是你不属于那个项目的成员,你没有权限向那个仓库提交代码。但是github还有另一种 pull request&a…...
算法刷题打卡第88天:字母板上的路径
字母板上的路径 难度:中等 我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。 在本题里,字母板为board ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "…...
UVa The Morning after Halloween 万圣节后的早晨 双向BFS
题目链接:The Morning after Halloween 题目描述: 给定一个二维矩阵,图中有障碍物和字母,你需要把小写字母移动到对应的大写字母位置,不同的小写字母可以同时移动(上下左右四个方向或者保持不动 ࿰…...
Connext DDS属性配置参考大全(3)
Transport传输dds.participant.logging.time_based_logging.process_received_messagedds.participant.logging.time_based_logging.process_received_message.timeout...
Docker-安装Jenkins-使用jenkins发版Java项目
文章目录0.前言环境背景1.操作流程1.1前期准备工作1.1.1环境变量的配置1.2使用流水线的方式进行发版1.2.1新建流水线任务1.2.2流水线操作工具tools步骤stages步骤1:拉取代码编译步骤2:发送文件并启动0.前言 学海无涯,旅“途”漫漫,“途”中小记ÿ…...
spring 中的 Bean 是否线程安全
文章目录结论1、spring中的Bean从哪里来?2、spring中什么样的Bean存在线程安全问题?3、如何处理spring Bean的线程安全问题?结论 其实,Spring 中的 Bean 是否线程安全,其实跟 Spring 容器本身无关。Spring框架中没有提…...
微电网两阶段鲁棒优化经济调度方法[3]【升级优化版本】(Matlab代码实现)
💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…...
C++入门教程||C++ 数据类型||C++ 变量类型
C 数据类型 使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。 您可能需要存储各种数据类型(比如字符型、宽字符型、整型…...
【visio使用技巧】图片导出pdf时去掉多余空白
问题 在visio导出pdf格式的图片时,往往会存在多余的白边,如下图所示: 解决方法 依次点击:菜单栏→文件→选项→自定义功能区→勾选“开发工具”→确定。 依次点击菜单栏→开发工具→显示ShapeSheet→页→Print Properties→将…...
Rust语言之Option枚举类型
概述 Option是Rust语言设计中最重要的枚举类型之一,它编码了其它语言中空值与非空值的概念,差异在于,Rust不会允许你像其它语言一样以非空值的方式来使用一个空值,这避免了很多错误。Option在标准库中的定义如下: pu…...
基于TimeQuest时序优化原理和方法
💡 回顾基于RTL逻辑时序优化的基本思路,在关键路径中插入寄存器来优化时序 分析最坏路径 通过前面对TimeQuest软件的理解,基本上可以找到关键路径,此文章主要对关键路径时序进行优化,使设计达到时序要求,以…...
LeetCode第332场周赛
2023.2.12LeetCode第332场周赛 6354. 找出数组的串联值 思路 双指针模拟,两个指针相遇的时候要特判 算法 class Solution { public:long long findTheArrayConcVal(vector<int>& nums) {long long ans 0;int i 0, j nums.size() - 1;while (i <…...
2023-2-12刷题情况
字母板上的路径 题目描述 我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。 在本题里,字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。 我们可以按下面的指令规则行动…...
拉普拉斯矩阵
拉普拉斯算子 Δff(xi1,yj)f(xi−1,yj)f(xi,yj1)f(xi,yj−1)−4f(xi,yj)∑(k,l)∈N(i,j)(f(xk,yl)−f(xi,yj))\begin{aligned} \Delta f & f\left(x_{i1}, y_j\right) f\left(x_{i-1},y_j\right) f\left(x_i,y_{j1}\right)f\left(x_i,y_{j-1}\right) - 4f\left(x_i,y_j\r…...
Top-1错误率、Top-5错误率等常见的模型算法评估指标解析
Top-1 错误率:指预测输出的概率最高的类别与人工标注的类别相符的准确率,就是你预测的label取最后概率向量里面最大的那一个作为预测结果,如过你的预测结果中概率最大的那个分类正确,则预测正确,否则预测错误。比如预测…...
Urho3D 容器类型
Urho3D实现了自己的字符串类型和模板容器,而不是使用STL。其基本原理如下: 在某些情况下提高了性能,例如使用PODVector类时。保证字符串和容器的二进制大小,以允许例如嵌入Variant对象内。减少了编译时间。直接命名和实现&#x…...
C语言学习笔记(四): 循环结构程序设计
while语句 定义 While语句是C语言中的循环语句,它按条件循环执行语句,直到条件不满足为止 语法格式如下: while(condition) {//循环体内容; }使用实例 求123…100 include <stdio.h> int main(){int i 1, sum 0;while (i<100){sum i …...
02 OpenCV图像通道处理
1 通道提取与合并 在数字图像处理中,图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。 RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道,每个通道表示相应颜色的亮度。这种方式是最常…...
网站建设新手/免费发布产品的平台
/*** 书本:《Thinking In Java》* 功能:将异常输出记录到日志中。* 文件:LoggingExceptions.java* 时间:2015年4月8日21:11:51* 作者:cutter_point*/package Lesson12_error_handling_with_exceptions;import java.io.PrintWriter;import java.io.StringWriter;import java.uti…...
网站引导动画/如何做seo优化
1,带缓冲的字符流, BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率 BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率 2&#…...
网站建设与技术团队/怎么营销一个产品
文章目录信号分解为正交函数1 矢量的正交分解2 信号的正交分解3 帕斯瓦尔定理信号分解为正交函数 1 矢量的正交分解 (1)矢量正交 复习:两矢量V1V_1V1与V2V_2V2正交,夹角为90 两正交矢量的内积为零 (2&#x…...
青岛网站设计报价/网站长尾关键词排名软件
概述DelayQueue 也是一种队列,它内部的元素有“延迟”,也就是当从队列中获取元素时,如果它的延迟时间未到,则无法取出。DelayQueue 的类签名和继承结构如下:public class DelayQueue<E extends Delayed> extends…...
网站做淘宝客排名会掉吗/最新旅游热点
某些情况下,为了给业务系统提供可配置化支持,我们一般会用原生态的方式去解析定义好的XML文件,然后转化为配置对象。这种方式对于简单、单一的配置文件,或者是XML配置格式固定的配置文件,还是比较容易处理的。但是对于…...
常用网站开发软件6/谷歌seo快速排名软件首页
本帖记录在迁移到AndroidStudio后所遇到的问题,记录的同时也希望能帮助到别人,因为我也是Standing on Shoulders of Giants。在IDE方面,首先要搞明白Gradle是个什么玩意,以及和Ant构建模式的区别,如果有从Eclipse IDE迁…...