⚡每日肥学⚡——算法&面试题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命令)

⚡每日算法&面试题⚡一起肥学6️⃣

⚡每日肥学⚡——算法&面试题3️⃣

⚡每日算法&面试题⚡一起肥学1️⃣0️⃣( 含 HashMap& TreeMap)

⚡每日算法&面试题⚡一起肥学7️⃣

⚡每日算法&面试题⚡一起肥学5️⃣