⚡每日肥学⚡——算法&面试题2️⃣
Posted 肥学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⚡每日肥学⚡——算法&面试题2️⃣相关的知识,希望对你有一定的参考价值。
导读
小伙伴们新的学期又要开始了,您是否已经做好了冲刺的准备了呢?如果您想在这个学期收获的比别人更多我建议给肥肥
点个关注。我们一起来增长知识,无论你是考研还是找工作或者是要加薪。这里都是一个不错的选择。让我们红尘作伴,一起肥学!!!
🔮算法题
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
🔮一点点思路
我想这道题的难点在这里**进阶:你能在不修改链表节点值的情况下解决这个问题吗?(也就是说,仅修改节点本身。)**也就是相邻的两个节点进行交换,具体的实现我们就可以用一个新节点来配合链表进行交换。这里在推荐的时候保证代码的整洁性还是推荐用递归的方法。递归法最适合这种有规律的操作了。
🔮源码和详解
public ListNode swapPairs(ListNode head) {
//用来进行初始的判断对应着实例2和3,同时也是递归到最后返回的值
if (head == null || head.next == null) {
return head;
}
//我下面花个图帮助大家理解,数据结构的有图最好理解了
ListNode newHead = head.next;
//这个可以倒着看,从最后一个看就好理解了
head.next = swapPairs(newHead.next);
newHead.next = head;
return newHead;
}
关于写递归我的一些经验:
我们应该关心的主要有三点:
返回值
调用单元做了什么
终止条件
🔮面试题
谈谈消息队列(MessageQueue)
消息队列(MessageQueue)是服务架构中常见的组件,可用于服务间解耦、事件广播、任务异步/延迟处理等,常用于分布式系统之间互相信息的传递。接下来对消息队列的实现如何满足几种消费场景进行简单阐述。
一 . 消息队列相关概念
1、生产者(Producer): 负责产生消息;
2、消费者(Consumer): 负责消费消息;
3、消息(Message): 在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象;
4、消息队列(Message Queue):
一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ
中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
5、消息代理(Message Broker): 负责存储/转发消息,转发分为推和拉两种。
拉是指Consumer主动从Message Broker获取消息; 推是指Message
Broker主动将Consumer感兴趣的消息推送给Consumer。
以上是关于⚡每日肥学⚡——算法&面试题2️⃣的主要内容,如果未能解决你的问题,请参考以下文章
⚡每日算法&面试题⚡一起肥学1️⃣1️⃣(面试linux命令)