高级必会问题

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 面试过不下于百号人,总结一下自己常问的问题,及参考答案

1Mysql的存储引擎,以及他们之间的区别

1InnoDB支持事务,MyISAM不支持

2InnoDB 支持外键,而 MyISAM 不支持

     3InnoDB 支持表、行锁,而 MyISAM 支持表级锁

4InnoDB 必须有唯一索引(主键),如果没有指定的话 InnoDB 会自己生成一个隐藏列Row_id来充当默认主键,MyISAM 可以没有

5、等等包括不限于

 

2、一条 Sql 语句查询一直慢会是什么原因

1.没有用到索引

比如函数导致的索引失效,或者本身就没有加索引

2.表数据量太大

考虑分库分表吧

3.优化器选错了索引

考虑使用 force index 强制走索引

 

3、面对一个上百行,多张表关联,编写比较复杂,性能存在问题的sql优化,你的优化思路是什么?

1、先分析sql的执行情况,判断慢的原因,考虑建立合适的索引或是否建立索引

2、业务涉及到多表关联查询,还编写比较复杂,考虑表设计是否合理,是否有有改变表结构的可能,或者建立所需查询的大表,使用大表查询

3、简化sql,判断sql查询是否可以在业务代码中处理,没必要一条sql查出所需数据

4、综合判断所查询的数据更新是否频繁,查询的条件是否比较均一,使用缓存处理

5、引入搜索引擎,比如es,数据查询走搜索引擎能高效查询

6、。。。。。。

4、分布式事务怎么实现

1.本地消息表

2.消息事务

3.二阶段提交

4.三阶段提交

5.TCC

6.最大努力通知

7.LCN框架

8.Seata 框架

可以通过以下七种方案解决方案,根据回答继续问该方案实现的思路

 

5Redis 的持久化机制有哪些?优缺点说说

 

redis 两种持久化的方式,AOF RDB.

AOF:

redis 每次执行一个命令时,都会把这个「命令原本的语句记录到一个.aod的文件当中,然后通过fsync策略,将命令执行后的数据持久化到磁盘中」(不包括读命令)

image.png

 

RDB:

某个时间点 redis 内存中的数据以二进制的形式存储的一个.rdb为后缀的文件当中,也就是「周期性的备份redis中的整个数据,这是redis默认的持久化方式,也就是我们说的快照(snapshot),是采用 fork 子进程的方式来写时同步的。

 image.png

6Redis除了用在缓存方面,还有没有用在别的场景,可以说一下

        例如:分布式锁、消息队列、地图距离查找(GEO)、分布式限流等等

7、怎么实现分布式锁

实现方案例如:

基于Spring Integration实现分布式锁、基于redisson实现分布式锁

谈谈你是怎么通过redis实现分布式锁的

 

8、为什么需要限流

限流可以应对:热点业务带来的突发请求;调用方bug导致的突发请求;恶意攻击请求。

9、有没有使用过消息队列(RabbitMq等等)

 

优点比较核心的有 3 个:解耦、异步、削峰。
缺点有以下几个:

1.     系统可用性降低

系统引入的外部依赖越多,越容易挂掉。

2.     系统复杂度提高

硬生生加个 MQ 进来,如何保证消息的传递及消费成功

3.     一致性问题

A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,这数据就不一致了。

所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉。

如何保证消息的传递和成功消费?

 

需要考虑:

消息发送确认机制;消费确认机制;消息的重新投递;消费幂等性, 等等

10、什么是IOCAOP

 

IOC就是控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Springbean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOCSpring针对解决程序耦合而存在的。在实际应用中,Spring通过配置文件(xml或者properties)指定需要实例化的java类(类名的完整字符串),包括这些java类的一组初始化值,通过加载读取配置文件,用Spring提供的方法(getBean())就可以获取到我们想要的根据指定配置进行初始化的实例对象。

AOP(Aspect-Oriented Programming),  面向切面编程, 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角. OOP , 我们以类(class)作为我们的基本单元, AOP 中的基本单元是 Aspect(切面)

 

 

11、有没有使用过微服务

 

介绍一下常用的微服务组件,以及你自己的项目是怎么拆分服务的

 

参考图

image.png

12、其他问题

-      nacoseureka的区别,还有他们服务注册和发现的机制分别是什么

-      分布式配置中心的实现原理是什么

-      项目里面你是怎么实现鉴权的

-      远程调用时token怎么传递

-      项目的优化有没有做过什么全局处理

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
前端开发 JavaScript 安全
深入探索 Qt WebEngineCore:从基础原理到高级应用与技巧
深入探索 Qt WebEngineCore:从基础原理到高级应用与技巧
108 0
|
安全 虚拟化 芯片
GICv3/v4-软件概述
GICv3/v4-软件概述
|
数据采集 开发者 iOS开发
向 Windows 高级用户进阶,这 5 款效率工具帮你开路
工欲善其事,必先利其器。作为全球最多人使用的桌面操作系统,Windows 的使用效率与我们的工作学习息息相关。今天,小编就为大家整理了 10 款提高效率的利器,让你的 Windows 更具生产力。
188 0
向 Windows 高级用户进阶,这 5 款效率工具帮你开路
|
数据采集 机器学习/深度学习 监控
企业端功能概述|学习笔记
快速学习企业端功能概述
105 0
企业端功能概述|学习笔记
|
JavaScript 前端开发 网络架构
ESMAScript 6.0高级
ESMAScript 6.0高级
112 0
ESMAScript 6.0高级
|
存储 Web App开发 前端开发
【干货】私藏的这些高级工具函数,你拥有几个?
很多功能,其实内置的Web API已支持, 比如基于URLSearchParams或者URL的queryString获取和生成 比如基于btoa,atob的base64的编码和解码 比如基于sendBeacon的数据上报 比如基于 Array.from的序列生成 比如基于canvas的视频截图 比如基于URL的UUID生成 我们用精简的代码来实现相对复杂的功能,没有第三方库,你也能秀得飞起。
118 0
【干货】私藏的这些高级工具函数,你拥有几个?
|
监控 关系型数据库
你的监控够高级吗?
你的监控够高级吗?
151 0
你的监控够高级吗?
|
数据采集 监控 架构师
架构师究竟比高级开发厉害在哪?
架构师究竟比高级开发厉害在哪?
194 0
|
存储 JavaScript 前端开发
带你玩转七牛云存储——高级篇
七牛云图片存储优点 支持各种尺寸的图片缩放; 支持图片自动压缩; 支持水印添加:图片水印、文字水印两种模式; 图片防盗链,限制访问来源; 设置ip黑白名单,防止恶意盗刷、攻击; 自定义图片域名,看起来更具有归属性; 统计图片的各种访问数据; 支持上传日志文件,可保存30天,便于排除程序问题; 水印 灵活的水印配置:可设置位置、透明度等,同时支持图片和文字两种水印模式,如图: 图片处理 图片处理里面最好用的是生成各种缩略图,超好用只需要加参数就好。
1630 0