COUNT()和COUNT(列名)的区别阿里强制规范不要使用count(列名)或count(常量)来替代count()。count()是SQL92定义的标准统计行数的语法,和数据库无关,和NULL、非NULL无关。count(列名)不会统计为NULL值的行。Varchar的最大长度,varchar255与varchar256区别最长65535字节,255使用一字节记录字节数,256使用两字节记录字节数。MVCC原理,解决的是什么MVCC是基于快照的多版本并发控制。原理是生成一个数据请求时间点的一致性数据...
2023-11-15 15:09:06 2806浏览 0点赞 0回复 0收藏
哈喽大家好啊,我是Hydra。上篇讲面试经验的文章最后,说过要整理一下最近的高频面试题,最终挑选了一些有针对性的问题后已经给大家整理好啦,有需要的小伙伴们可以先收藏一波,或者下载32页的PDF版本慢慢看,公众号后台回复【八股】直接获取PDF。话不多说,看看这些问题你能答上多少吧synchronized底层实现原理,怎么做的锁升级锁升级过程:无锁>偏向锁>轻量级锁>重量级锁。JDK15后,默认关闭了偏向锁。对象头中MarkWord...
2023-11-15 15:06:14 4204浏览 0点赞 0回复 0收藏
哈喽大家好啊,我是Hydra。好久不见,甚是想念。这段时间没有更新什么文章,其实是因为我跳了一波槽,出去面了一圈后,也顺利拿了不少架构岗位的offer。正好马上要金九银十了,相信有不少小伙伴们估计也有跳槽涨薪的想法,那么就从我最近的经历出发,说说我的一些建议。简历简历作为敲门砖,能够给用人单位一个最初的直观印象。这两年互联网的就业环境远比不上前几年,很可能一个岗位一天就会收到几十甚至上百份简历,而HR阅读...
2023-11-15 15:00:34 1868浏览 0点赞 0回复 0收藏
大家好,我是君哥。大家都知道,RocketMQ消费模式有PULL模式和PUSH模式,不过本质上都是PULL模式,而在实际使用时,一般使用PUSH模式。不过,RocketMQ的PUSH模式有明显的不足,主要体现在以下几个方面:消息积压了,增加消费者不一定能解决。PUSH模式如下图:上面的图中,消费组中的消费者每个消费者消费两个MessageQueue,这种情况下,增加消费者是可以提高消费能力的。但是下面这张图,每个消费者消费一个MessageQueue,因为...
2023-07-25 11:30:55 2749浏览 0点赞 0回复 0收藏
大家好,我是君哥!最近面试了很多候选人,感触很多,给大家分享一下。今年我们团队在西安的招聘名额比较多,我作为团队的招聘组长,筛选了一波又一波的候选人。西安是一个有实力的城市,名校云集,985211院校很多,包括西安交大、长安大学、西北工业大学、西安电子科技大学、西北大学、西北农林科技大学。多数候选人也是出自这些名校。但是跟北京、上海、杭州这些互联网氛围浓厚的城市相比,西安的互联网氛围还是逊色一些。从...
2023-07-25 11:30:24 3402浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天来聊一聊RocketMQ5.0中的Proxy。RocketMQ5.0为了更好地拥抱云原生,引入了无状态的Proxy模块,新的架构图如下:引入Proxy模块后,Proxy承担了协议适配、权限管理、消息管理等计算功能,Broker则更加专注于存储。这样存储和计算相分离,在云原生环境下可以更好地进行资源调度。1.Proxy介绍RocketMQ5.0把客户端的部分功能下沉到Proxy,Proxy承接了之前客户端的计算能力,客户端变得更加轻量级。1.1NameServ...
2023-07-25 11:29:54 2921浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天来分享RocketMQ中一个非常重要又不太好理解的知识点ProcessQueue。一句话概括,ProcessQueue就是MessageQueue的消费快照。看下面这张图:1ProcessQueue构建RocketMQ客户端启动时,会开启一个rebalance线程,代码如下:MQClientInstance.javapublicvoidstart()throwsMQClientException{synchronized(this){switch(this.serviceState){caseCREATEJUST:...Startrebalanceservicethis.rebalanceService.start(...
2023-07-25 11:28:41 2291浏览 0点赞 0回复 0收藏
大家好,我是君哥。最近有读者参加面试时被问了一个问题,如果消费者拉取了一批消息,比如100条,第100条消息消费成功了,但是第50条消费失败,偏移量会怎样更新?就着这个问题,今天来聊一下,如果一批消息有消费失败的情况时,偏移量怎么保存。1拉取消息1.1封装拉取请求以RocketMQ推模式为例,RocketMQ消费者启动代码如下:publicstaticvoidmain(String[]args)throwsInterruptedException,MQClientException{DefaultMQPushCon...
2023-07-25 11:28:17 2253浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天来分享RocketMQ的定时任务。通过这些定时任务,能让我们更加理解RocketMQ的消息处理机制和设计理念。从RocketMQ4.9.4的源代码上看,RocketMQ的定时任务有很多,今天主要讲解一些核心的定时任务。1架构回顾首先再来回顾一下RocketMQ的架构图:NameServer集群部署,但是节点之间并不会同步数据,因为每个节点都会保存完整的数据。因此单个节点挂掉,并不会对集群产生影响。Broker可以采用主从集群部署,实...
2023-07-25 11:27:45 2900浏览 0点赞 0回复 0收藏
大家好,我是君哥。Java中AQS是AbstractQueuedSynchronizer类,AQS依赖FIFO队列来提供一个框架,这个框架用于实现锁以及锁相关的同步器,比如信号量、事件等。在AQS中,主要有两部分功能,一部分是操作state变量,第二部分是实现排队和阻塞机制。注意,AQS并没有实现任何同步接口,它只是提供了类似acquireInterruptible的方法,调用这些方法可以实现锁和同步器。1管程模型Java使用MESA管程模型来管理类的成员变量和方法,让这...
2023-07-25 11:26:49 2292浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天来聊一聊RocketMQ的灰度方案。灰度发布是指在黑与白之间,平滑过渡的一种发布方式。在大流量的系统中,如果一次升级改造范围比较大,或者影响内容不太确定,一般会采用切量的方式进行升级,这样可以减少生产变更带来的影响。如上图,对ServiceA这个服务进行升级,采用灰度发布,先升级Server5,一周后如果没有问题,升级Server4和Server3,再运行一周没有问题,把剩下两个节点都升级。上面的案例是一个RP...
2023-07-25 11:21:30 2237浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天来介绍一下RocketMQ5.0源码上的变化。RocketMQ5.0是一个里程碑式的版本,经历了近5年的打磨,代码变更达到60%。首先看一下源码中模块的变化,如下图:从图中可以看到,RocketMQ5.0主要增加了4个模块儿,下面介绍一下这4个模块儿。1bazelbazel是Google开源的构建工具,目前广泛用于云计算领域的开源软件(如Kubernetes)构建,它有如下特点:1.支持增量式编译、支持缓存、支持分布式扩展;2.bazel可以清晰...
2023-07-25 11:20:49 2165浏览 0点赞 0回复 0收藏
大家好,我是君哥。在RocketMQ4.x版本,使用延时消息来实现消息的定时消费。延时消息可以一定程度上实现定时发送,但是有一些局限。RocketMQ新版本基于时间轮算法引入了定时消息,目前,精确到秒级的定时消息实现的pr已经提交到社区,今天来介绍一下。1延时消息1.1简介RocketMQ的延时消息是指Producer发送消息后,Consumer不会立即消费,而是需要等待固定的时间才能消费。在一些场景下,延时消息是很有用的,比如电商场景下关...
2023-07-21 11:36:24 2977浏览 0点赞 0回复 0收藏
大家好,我是君哥。RocketMQ5.0已经发布一段时间了,今天来分享一下RocketMQ5.0有哪些新特性。1架构变化RocketMQ5.0架构上的变化主要是为了更好的走向云原生。RocketMQ4.x架构如下:Broker向NameServer注册Topic路由信息,Producer和Consumer则从NameServer获取路由信息,然后Producer根据路由信息向Broker发送消息,Consumer则根据路由信息从Broker拉取消息。这个架构存在以下几个问题:1.富客户端,客户端同时支持Java、C++...
2023-07-21 11:35:51 2654浏览 0点赞 0回复 0收藏
大家好,我是君哥,今天分享RocketMQ是怎样保存消息的。1简介首先,在RocketMQ集群中创建一个Topic,叫做MyTestTopic,配置如下图:这里解释一下图中的几个参数:writeQueueNums:客户端在发送消息时,可以向多少个队列进行发送;readQueueNums:客户端在消费消息时,可以从多少个队列进行拉取;perm:当前Topic读写权限,2只允许读、4只允许写、6允许读写,默认是6。RocketMQ主要有3个消息相关的文件:commitlog、consumeque...
2023-07-21 11:35:23 2289浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天分享RocketMQ的Broker挂了,会带来什么影响。面试官:你好,如果RocketMQ集群中的一个Broker挂了,会造成什么影响呢?我:Broker挂了,首先会导致Producer发送消息失败。对于普通消息,Producer同步发送的情况下会有重试机制,重试时把消息发送到其他Broker。如下图,Broker1宕机了,把消息发送到了Broker2:发送消息的逻辑其实是是一个循环,发送失败后会不断尝试重新发送,代码如下:inttimesTotalcomm...
2023-07-21 11:34:23 3192浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天来分享怎样搭建RocketMQ集群。本文搭建集群使用的环境是2个云主机,架构如下:在47.xx.xx.xx和39.xx.xx.xx上分别部署一个NameServer和Broker主节点,这里不搭建从节点。也就是官网介绍的2mnoslave构建模式。注意:官网有三种配置模式:2m2ssync、2m2sasync、2mnoslave。这三种配置都是使用异步刷盘策略:ASYNCFLUSH。集群搭建成功后,Broker会向NameServer注册Topic路由信息,Producer和Consumer则...
2023-07-21 11:33:48 2610浏览 0点赞 0回复 0收藏
大家好,我是君哥。对消息队列来说,偏移量是一个非常重要的概念,如果偏移量保存失败,可能会造成消息丢失、消息重复消费等问题。今天来聊一聊RocketMQ是怎么保存消息偏移量的。1消息拉取RocketMQ客户端启动的时候,会启动重平衡线程RebalanceService,在这里创建拉取消息的请求。下面UML类图展示了客户端启动重平衡线程的调用关系:业务入口是MQClientInstance中的start方法,start方法中启动了RebalanceService线程,线程中...
2023-07-21 11:30:06 2446浏览 0点赞 0回复 0收藏
大家好,我是君哥。今天聊聊RocketMQ的广播消息实现机制。RocketMQ有两种消费模式,集群模式和广播模式。集群模式是指RocketMQ中的一条消息只能被同一个消费者组中的一个消费者消费。如下图,Producer向TopicTest这个Topic并发写入3条新消息,分别被分配到了MessageQueue1MessageQueue3这3个队列,然后Group中的三个Consumer分别消费了一条消息:广播模式是RocketMQ中的消息会被消费组中的每个消费者都消费一次,如下图:使用Ro...
2023-07-21 11:29:38 3663浏览 0点赞 0回复 0收藏
大家好,我是君哥。为了方便跟踪消息发送和消费的轨迹,RocketMQ引入了轨迹消息,今天一起来学习一下。1开启轨迹消息默认情况下,RocketMQ是不开启轨迹消息的,需要我们手工开启。1.1BrokerBroker端开启轨迹消息,需要增加下面的配置:traceTopicEnabletrue1.2生产者对于生产者端,要开启轨迹消息,需要在定义生产者时增加参数。定义消费者使用类DefaultMQProducer,这个类支持开启轨迹消息的构造函数如下:publicDefaultMQProd...
2023-07-21 11:28:58 2803浏览 0点赞 0回复 0收藏