最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)
最新整理电子书
}
条件过滤
在使用时需要开启条件过滤启动配置 否则会报错
The broker does not support consumer to filter message by SQL92
修改broker.conf文件 加入
enablePropertyFilter = true
同时启动broker 命令为
The broker does not support consumer to filter message by SQL92
筛选固定条件消息
数值比较:>, >=, <, <=, BETWEEN, =;
字符比较 =, <>, IN;
IS NULL or IS NOT NULL;
逻辑:AND, OR, NOT;
使用限制:
只有push consumer可以通过SQL92选择消息。接口是:
public void subscribe(final String topic, final MessageSelector messageSelector)
代码示例
调用方法
@RestController
@RequestMapping(“/test”)
public class TestControllor {
private static final Logger logger = LoggerFactory.getLogger(TestControllor.class);
/**
- 使用RocketMq的生产者
*/
@Resource(name = “customRocketMQProducer”)
private DefaultMQProducer defaultMQProducer;
@RequestMapping(“/send”)
public void send() throws MQClientException, RemotingException, MQBrokerException, InterruptedException {
for (int i = 0; i < 100; i++) {
final int index = i;
String msg = “demo msg test”;
logger.info(“开始发送消息:” + msg);
Message sendMsg = new Message(“DemoTopic”,
“DemoTag”,
("Hello RocketMQ " + i).getBytes()
);
//消费者根据a进行过滤
sendMsg.putUserProperty(“a”, String.valueOf(i));
SendResult sendResult = defaultMQProducer.send(sendMsg);
logger.info(“消息发送响应信息:” + sendResult.toString() + “当前为第” + i + “次”);
}
}
}
消费者
@SpringBootConfiguration
public class MQConsumerConfiguration {
public static final Logger LOGGER = LoggerFactory.getLogger(MQConsumerConfiguration.class);
@Value(“${rocketmq.consumer.namesrvAddr}”)
private String namesrvAddr;
@Value(“${rocketmq.consumer.groupName}”)
private String groupName;
@Value(“${rocketmq.consumer.consumeThreadMin}”)
private int consumeThreadMin;
@Value(“${rocketmq.consumer.consumeThreadMax}”)
private int consumeThreadMax;
@Value(“${rocketmq.consumer.topics}”)
private String topics;
@Value(“${rocketmq.consumer.consumeMessageBatchMaxSize}”)
private int consumeMessageBatchMaxSize;
@Autowired
private MQConsumeMsgListenerProcessor mqMessageListenerProcessor;
@Bean
public DefaultMQPushConsumer testRocketMQConsumer() throws Exception {
if (StringUtils.isEmpty(groupName)){
throw new Exception(“groupName is null !!!”);
}
if (StringUtils.isEmpty(namesrvAddr)){
throw new Exception(“namesrvAddr is null !!!”);
}
if(StringUtils.isEmpty(topics)){
throw new Exception(“topics is null !!!”);
}
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(groupName);
consumer.setNamesrvAddr(namesrvAddr);
consumer.setConsumeThreadMin(consumeThreadMin);
consumer.setConsumeThreadMax(consumeThreadMax);
consumer.registerMessageListener(mqMessageListenerProcessor);
/**
-
设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费
-
如果非第一次启动,那么按照上次消费的位置继续消费
*/
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
/**
- 设置消费模型,集群还是广播,默认为集群
*/
consumer.setMessageModel(MessageModel.CLUSTERING);
/**
- 设置一次消费消息的条数,默认为1条
*/
consumer.setConsumeMessageBatchMaxSize(consumeMessageBatchMaxSize);
try {
//根据条件过滤消息
consumer.subscribe(“DemoTopic”, MessageSelector.bySql(“a between 0 and 3”));
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-dc6MRnEj-1715496992578)]