YXZ的博客

好好努力,天天向上


  • 主页

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

为什么使用消息队列?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

  • 为什么使用消息队列?
  • 消息队列有什么优点和缺点?
  • Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?

面试官心理分析

其实面试官主要是想看看:

  • 第一,你知不知道你们系统里为什么要用消息队列这个东西?

    不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。

    没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好。因为面试官担心你进了团队之后只会木头木脑的干呆活儿,不会自己思考。

  • 第二,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处?

    你要是没考虑过这个,那你盲目弄个 MQ 进系统里,后面出了问题你是不是就自己溜了给公司留坑?你要是没考虑过引入一个技术可能存在的弊端和风险,面试官把这类候选人招进来了,基本可能就是挖坑型选手。就怕你干 1 年挖一堆坑,自己跳槽了,给公司留下无穷后患。

  • 第三,既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研?

    你别傻乎乎的自己拍脑袋看个人喜好就瞎用了一个 MQ,比如 Kafka,甚至都从没调研过业界流行的 MQ 到底有哪几种。每一个 MQ 的优点和缺点是什么。每一个 MQ 没有绝对的好坏,但是就是看用在哪个场景可以扬长避短,利用其优势,规避其劣势。

    如果是一个不考虑技术选型的候选人招进了团队,leader 交给他一个任务,去设计个什么系统,他在里面用一些技术,可能都没考虑过选型,最后选的技术可能并不一定合适,一样是留坑。

    阅读全文 »

redis 集群模式的工作原理能说一下么?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

面试官心理分析

在前几年,redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有 codis,或者 twemproxy,都有。有一些 redis 中间件,你读写 redis 中间件,redis 中间件负责将你的数据分布式存储在多台机器上的 redis 实例中。

这两年,redis 不断在发展,redis 也不断的有新的版本,现在的 redis 集群模式,可以做到在多台机器上,部署多个 redis 实例,每个实例存储一部分的数据,同时每个 redis 实例可以挂 redis 从实例,自动确保说,如果 redis 主实例挂了,会自动切换到 redis 从实例顶上来。

现在 redis 的新版本,大家都是用 redis cluster 的,也就是 redis 原生支持的 redis 集群模式,那么面试官肯定会就 redis cluster 对你来个几连炮。要是你没用过 redis cluster,正常,以前很多人用 codis 之类的客户端来支持集群,但是起码你得研究一下 redis cluster 吧。

如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个 G,单机就足够了,可以使用 replication,一个 master 多个 slaves,要几个 slave 跟你要求的读吞吐量有关,然后自己搭建一个 sentinel 集群去保证 redis 主从架构的高可用性。

redis cluster,主要是针对海量数据+高并发+高可用的场景。redis cluster 支撑 N 个 redis master node,每个 master node 都可以挂载多个 slave node。这样整个 redis 就可以横向扩容了。如果你要支撑更大数据量的缓存,那就横向扩容更多的 master 节点,每个 master 节点就能存放更多的数据了。

阅读全文 »

es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

面试官心理分析

这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s,坑爹了。第一次搜索的时候,是 5~10s,后面反而就快了,可能就几百毫秒。

你就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 es,或者就是自己玩玩儿 demo,被问到这个问题容易懵逼,显示出你对 es 确实玩儿的不怎么样?

面试题剖析

说实话,es 性能优化是没有什么银弹的,啥意思呢?就是不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景。也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样。

阅读全文 »

dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?

面试官心理分析

上一个问题,说说 dubbo 的基本工作原理,那是你必须知道的,至少要知道 dubbo 分成哪些层,然后平时怎么发起 rpc 请求的,注册、发现、调用,这些是基本的。

接着就可以针对底层进行深入的问问了,比如第一步就可以先问问序列化协议这块,就是平时 RPC 的时候怎么走的?

面试题剖析

序列化,就是把数据结构或者是一些对象,转换为二进制串的过程,而反序列化是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。

serialize-deserialize

阅读全文 »

dubbo 的 spi 思想是什么?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

dubbo 的 spi 思想是什么?

面试官心理分析

继续深入问呗,前面一些基础性的东西问完了,确定你应该都 ok,了解 dubbo 的一些基本东西,那么问个稍微难一点点的问题,就是 spi,先问问你 spi 是啥?然后问问你 dubbo 的 spi 是怎么实现的?

其实就是看看你对 dubbo 的掌握如何。

面试题剖析

spi 是啥?

spi,简单来说,就是 service provider interface,说白了是什么意思呢,比如你有个接口,现在这个接口有 3 个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要 spi 了,需要根据指定的配置或者是默认的配置,去找到对应的实现类加载进来,然后用这个实现类的实例对象。

阅读全文 »

dubbo负载均衡策略和集群容错策略都有哪些?动态代理策略呢?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?

面试官心理分析

继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理。

说白了,就是看你对 dubbo 熟悉不熟悉:

  • dubbo 工作原理:服务注册、注册中心、消费者、代理通信、负载均衡;
  • 网络通信、序列化:dubbo 协议、长连接、NIO、hessian 序列化协议;
  • 负载均衡策略、集群容错策略、动态代理策略:dubbo 跑起来的时候一些功能是如何运转的?怎么做负载均衡?怎么做集群容错?怎么生成动态代理?
  • dubbo SPI 机制:你了解不了解 dubbo 的 SPI 机制?如何基于 SPI 机制对 dubbo 进行扩展?
    阅读全文 »

es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?

面试官心理分析

这个问题,包括后面的 redis 什么的,谈到 es、redis、mysql 分库分表等等技术,面试必问!就是你生产环境咋部署的?说白了,这个问题没啥技术含量,就是看你有没有在真正的生产环境里干过这事儿!

有些同学可能是没在生产环境中干过的,没实际去拿线上机器部署过 es 集群,也没实际玩儿过,也没往 es 集群里面导入过几千万甚至是几亿的数据量,可能你就不太清楚这里面的一些生产项目中的细节。

如果你是自己就玩儿过 demo,没碰过真实的 es 集群,那你可能此时会懵。别懵,你一定要云淡风轻的回答出来这个问题,表示你确实干过这事儿。

阅读全文 »

es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)?

面试官心理分析

在搜索这块,lucene 是最流行的搜索库。几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗?现在早已经 out 了,因为现在很多项目都是直接用基于 lucene 的分布式搜索引擎—— ElasticSearch,简称为 es。

而现在分布式搜索基本已经成为大部分互联网行业的 Java 系统的标配,其中尤为流行的就是 es,前几年 es 没火的时候,大家一般用 solr。但是这两年基本大部分企业和项目都开始转向 es 了。

所以互联网面试,肯定会跟你聊聊分布式搜索引擎,也就一定会聊聊 es,如果你确实不知道,那你真的就 out 了。

如果面试官问你第一个问题,确实一般都会问你 es 的分布式架构设计能介绍一下么?就看看你对分布式搜索引擎架构的一个基本理解。

面试题剖析

ElasticSearch 设计的理念就是分布式搜索引擎,底层其实还是基于 lucene 的。核心思想就是在多台机器上启动多个 es 进程实例,组成了一个 es 集群。

es 中存储数据的基本单位是索引,比如说你现在要在 es 中存储一些订单数据,你就应该在 es 中创建一个索引 order_idx,所有的订单数据就都写到这个索引里面去,一个索引差不多就是相当于是 mysql 里的一张表。

阅读全文 »

es 写入数据的工作原理是什么啊?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?

面试官心理分析

问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是……

对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢?

面试题剖析

es 写数据过程

  • 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。
  • coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。
  • 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node。
  • coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。
    阅读全文 »

如何保证消息队列的高可用?

发表于 2019-03-04 | 分类于 面试题 | 评论数: | 阅读次数:

面试题

如何保证消息队列的高可用?

面试官心理分析

如果有人问到你 MQ 的知识,高可用是必问的。上一讲提到,MQ 会导致系统可用性降低。所以只要你用了 MQ,接下来问的一些要点肯定就是围绕着 MQ 的那些缺点怎么来解决了。

要是你傻乎乎的就干用了一个 MQ,各种问题从来没考虑过,那你就杯具了,面试官对你的感觉就是,只会简单使用一些技术,没任何思考,马上对你的印象就不太好了。这样的同学招进来要是做个 20k 薪资以内的普通小弟还凑合,要是做薪资 20k+ 的高工,那就惨了,让你设计个系统,里面肯定一堆坑,出了事故公司受损失,团队一起背锅。

面试题剖析

这个问题这么问是很好的,因为不能问你 Kafka 的高可用性怎么保证?ActiveMQ 的高可用性怎么保证?一个面试官要是这么问就显得很没水平,人家可能用的就是 RabbitMQ,没用过 Kafka,你上来问人家 Kafka 干什么?这不是摆明了刁难人么。

所以有水平的面试官,问的是 MQ 的高可用性怎么保证?这样就是你用过哪个 MQ,你就说说你对那个 MQ 的高可用性的理解。

RabbitMQ 的高可用性

RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用性的,我们就以 RabbitMQ 为例子讲解第一种 MQ 的高可用性怎么实现。

RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模式。

阅读全文 »
1…345…13
YXZ

YXZ

127 日志
15 分类
57 标签

标签云

  • @Async1
  • AOP1
  • Activity3
  • Android1
  • Angular5
  • Binder1
  • Canvas2
  • Centos3
  • ES3
  • Event1
  • EventBus1
  • Handler1
  • Hexo4
  • Hystrix7
  • Intent1
  • Jakeson1
  • Java11
  • Javascript3
  • Java面试题1
  • Json1
  • Linux1
  • ListView1
  • Maven1
  • Mybatis4
  • Mysql6
  • Service1
  • Spring2
  • Springboot3
  • Springcloud7
  • View2
  • Websocket3
  • Window1
  • Yilia2
  • dubbo7
  • lucene1
  • redis9
  • replaceAll1
  • yilia主题1
  • zookeeper1
  • 分布式6
  • 小程序4
  • 广播1
  • 微服务1
  • 性能优化1
  • 懒加载1
  • 扫福字1
  • 推送1
  • 插件1
  • 正则表达式1
  • 消息队列6
  • 系统架构1
  • 缓存技术1
  • 自动注入1
  • 进程1
  • 面试题38
  • 项目发布1
  • 高并发1
RSS
GitHub 微博

Advertising Position

苏ICP备18068125号-1 © 2019 YXZ的个人博客
|
0%