当前位置: 首页 > news >正文

剑指offer(一)-链表

(一)找出链表的环的入口结点
JZ23 链表中环的入口结点
中等 通过率:36.78% 时间限制:1秒 空间限制:64M
知识点链表哈希双指针
描述
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。

数据范围: n≤10000,1<=结点值<=10000
要求:空间复杂度 O(1),时间复杂度 O(n)

例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:

可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。
输入描述:
输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这两段组装成一个无环或者有环单链表
返回值描述:
返回链表的环的入口结点即可,我们后台程序会打印这个结点对应的结点值;若没有,则返回对应编程语言的空结点即可。
示例1
输入:
{1,2},{3,4,5}
返回值:
3
说明:
返回环形链表入口结点,我们后台程序会打印该环形链表入口结点对应的结点值,即3
示例2
输入:
{1},{}
返回值:
“null”
说明:
没有环,返回对应编程语言的空结点,后台程序会打印"null"
示例3
输入:
{},{2}

返回值:
2
说明:
环的部分只有一个结点,所以返回该环形链表入口结点,后台程序打印该结点对应的结点值,即2

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};
*/
class Solution {
public:ListNode* EntryNodeOfLoop(ListNode* pHead) {if (pHead == NULL || pHead->next == NULL || pHead->next->next == NULL) {return NULL;}ListNode* slow = pHead->next;ListNode* fast = pHead->next->next;while (slow != fast) {slow = slow->next;if (fast == NULL || fast->next == NULL || fast->next->next == NULL) {return NULL;}fast = fast->next->next;}slow = pHead;while (slow != fast) {slow = slow->next;fast = fast->next;}return slow;}
};

(二)判断链表是否有环
leetcode 141
141. 环形链表
难度简单
给定一个链表,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。

进阶:
你能用 O(1)(即,常量)内存解决此问题吗?

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

提示:
链表中节点的数目范围是 [0, 104]
-105 <= Node.val <= 105
pos 为 -1 或者链表中的一个 有效索引 。
通过次数391,460
提交次数769,105

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {
public:bool hasCycle(ListNode *head) {if (head == NULL || head->next == NULL || head->next->next == NULL) {return false;}ListNode* slow = head->next;ListNode* fast = head->next->next;while (slow != fast) {slow = slow->next;if (fast == NULL || fast->next == NULL || fast->next->next == NULL) {return false;}fast = fast->next->next;}return true;}

(一)重复的结点不保留
JZ76 删除链表中重复的结点
中等 通过率:22.07% 时间限制:1秒 空间限制:64M
知识点链表
描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5

数据范围:链表长度满足 0≤n≤1000 ,链表中的值满足 1≤val≤1000

进阶:空间复杂度 O(n) ,时间复杂度 O(n)

例如输入{1,2,3,3,4,4,5}时,对应的输出为{1,2,5},对应的输入输出链表如下图所示:

示例1
输入:
{1,2,3,3,4,4,5}
返回值:
{1,2,5}
示例2
输入:
{1,1,1,8}
返回值:
{8}
自己答案:

方法:使用unordered_map<int, int> mm 和 创建头结点

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};
*/
class Solution {
public:ListNode* deleteDuplication(ListNode* pHead) {if (pHead == NULL) {return NULL;}std::unordered_map<int, int> m;ListNode* cur = pHead;while (cur != NULL) {m[cur->val]++;cur = cur->next;}ListNode* res = new ListNode(0);res->next = pHead;cur = res;while (cur->next != NULL) {if (m[cur->next->val] != 1) {cur->next = cur->next->next;} else {cur = cur->next;}}return res->next;}
};

(二)重复的结点保留一个
Leetcode 83
83. 删除排序链表中的重复元素
难度简单
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。

示例 1:

输入:head = [1,1,2]
输出:[1,2]

示例 2:

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列
通过次数271,350
提交次数504,656
请问您在哪类招聘中遇到此题?

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* deleteDuplicates(ListNode* head) {ListNode* cur = head;ListNode* nex = head;while(nex != NULL){nex = nex->next;if(nex == NULL) {return head;}if(cur->val == nex->val) {cur->next = nex->next;} else {cur = cur->next;} }return head;}
};

JZ18 删除链表的节点
简单 通过率:60.23% 时间限制:1秒 空间限制:256M
知识点链表
描述
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
1.此题对比原题有改动
2.题目保证链表中节点的值互不相同
3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点

数据范围:
0<=链表节点值<=10000
0<=链表长度<=10000
示例1
输入:
{2,5,1,9},5
返回值:
{2,1,9}

说明:
给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 2 -> 1 -> 9
示例2
输入:
{2,5,1,9},1
返回值:
{2,5,9}

说明:
给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 2 -> 5 -> 9

方法:pcur 指向最后一个结点

/*** struct ListNode {*  int val;*  struct ListNode *next;*  ListNode(int x) : val(x), next(nullptr) {}* };*/
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @param val int整型 * @return ListNode类*/ListNode* deleteNode(ListNode* head, int val) {// write code hereif (head == NULL) {return NULL;}//为了解决第一个节点被删除的问题,新增一个头节点ListNode* res = new ListNode(0);res->next = head;ListNode* cur = res;while (cur->next != NULL) {if (cur->next->val == val) {cur->next = cur->next->next;} else {cur = cur->next;}}return res->next;}
};

JZ35 复杂链表的复制
较难 通过率:23.47% 时间限制:1秒 空间限制:64M
知识点链表
描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。

示例:
输入:{1,2,3,4,5,3,5,#,2,#}
输出:{1,2,3,4,5,3,5,#,2,#}
解析:我们将链表分为两段,前半部分{1,2,3,4,5}为ListNode,后半部分{3,5,#,2,#}是随机指针域表示。
以上示例前半部分可以表示链表为的ListNode:1->2->3->4->5
后半部分,3,5,#,2,#分别的表示为
1的位置指向3,2的位置指向5,3的位置指向null,4的位置指向2,5的位置指向null
如下图:

示例1
输入:
{1,2,3,4,5,3,5,#,2,#}
返回值:
{1,2,3,4,5,3,5,#,2,#}

方法:复制节点放在下一个位置

/*
struct RandomListNode {int label;struct RandomListNode *next, *random;RandomListNode(int x) :label(x), next(NULL), random(NULL) {}
};
*/class Solution {public:RandomListNode* Clone(RandomListNode* pHead) {//空节点直接返回if (pHead == NULL)return pHead;//第一步:使用单指针遍历链表,对每个节点新建一个拷贝节点,并插入到该节点之后。//原始节点RandomListNode* cur = pHead;//遍历原始链表,开始复制while (cur != NULL) {//拷贝节点RandomListNode* clone = new RandomListNode(cur->label);//将拷贝节点插入到原始节点后面clone->next = cur->next;cur->next = clone;cur = clone->next;}//第二步:使用双指针遍历链表,两个指针每次都移动两步,//拷贝节点的随机指针 调整为 指向节点的下一个节点。//原始节点  cur = pHead;//拷贝节点RandomListNode* clone = pHead->next;//返回结果RandomListNode* res = pHead->next;//连接新链表的random节点while (cur != NULL) {//跟随前一个连接randomif (cur->random == NULL)clone->random = NULL;else//后一个节点才是拷贝的clone->random = cur->random->next;//cur->next必定不为空cur = cur->next->next;//检查末尾节点if (clone->next != NULL)clone = clone->next->next;}//第三步:使用双指针再次遍历链表,两个指针每次都移动一步,//原始节点和拷贝节点的next指针 都调整为 指向节点的下一个节点。cur = pHead;clone = pHead->next;while (cur != NULL) {cur->next = cur->next->next;//检查末尾节点if (clone->next != NULL) {clone->next = clone->next->next;}cur = cur->next;clone = clone->next;}return res;}
};

JZ25 合并两个排序的链表
描述
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
数据范围: 0≤n≤1000,−1000≤节点值≤1000
要求:空间复杂度 O(1),时间复杂度 O(n)

如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:

或输入{-1,2,4},{1,3,4}时,合并后的链表为{-1,1,2,3,4,4},所以对应的输出为{-1,1,2,3,4,4},转换过程如下图所示:

示例1
输入:
{1,3,5},{2,4,6}
返回值:
{1,2,3,4,5,6}
示例2
输入:
{},{}
返回值:
{}
示例3
输入:
{-1,2,4},{1,3,4}
返回值:
{-1,1,2,3,4,4}

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {if (pHead1 == NULL && pHead2 == NULL) {return NULL;}if (pHead1 == NULL && pHead2 != NULL) {return pHead2;}if (pHead1 != NULL && pHead2 == NULL) {return pHead1;}if (pHead1->val < pHead2->val) {pHead1->next = Merge(pHead1->next, pHead2);return pHead1;} else {pHead2->next = Merge(pHead1, pHead2->next);return pHead2;}}
};

JZ52 两个链表的第一个公共结点
简单 通过率:38.04% 时间限制:1秒 空间限制:64M
知识点链表
描述
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

数据范围: n≤1000
要求:空间复杂度 O(1),时间复杂度 O(n)

例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:

可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。
输入描述:
输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和第二个链表的公共部分。 后台会将这3个参数组装为两个链表,并将这两个链表对应的头节点传入到函数FindFirstCommonNode里面,用户得到的输入只有pHead1和pHead2。
返回值描述:
返回传入的pHead1和pHead2的第一个公共结点,后台会打印以该节点为头节点的链表。
示例1
输入:
{1,2,3},{4,5},{6,7}
返回值:
{6,7}
说明:
第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部分
这3个参数最后在后台会组装成为2个两个无环的单链表,且是有公共节点的
示例2
输入:
{1},{2,3},{}
返回值:
{}
说明:
2个链表没有公共节点 ,返回null,后台打印{}

方法:交叉遍历法

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {ListNode* head1 = pHead1;ListNode* head2 = pHead2;while (head1 != head2) {head1 = (head1 == NULL ? pHead2 : head1->next);head2 = (head2 == NULL ? pHead1 : head2->next);}return head1;}
};

JZ22 链表中倒数最后k个结点
简单 通过率:39.15% 时间限制:1秒 空间限制:256M
知识点链表
描述
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。
如果该链表长度小于k,请返回一个长度为 0 的链表。

数据范围:0≤n≤105,0≤ai​≤109,0≤k≤109
要求:空间复杂度 O(n),时间复杂度 O(n)
进阶:空间复杂度 O(1),时间复杂度 O(n)

例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:

其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。
示例1
输入:
{1,2,3,4,5},2
返回值:
{4,5}
说明:
返回倒数第2个节点4,系统会打印后面所有的节点来比较。
示例2
输入:
{2},8
返回值:
{}

方法:head指针使用for循环,head指针 走到 最后一个节点

/*** struct ListNode {*  int val;*  struct ListNode *next;*  ListNode(int x) : val(x), next(nullptr) {}* };*/
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param pHead ListNode类 * @param k int整型 * @return ListNode类*/ListNode* FindKthToTail(ListNode* pHead, int k) {// write code hereif (pHead == NULL || k <= 0) {return NULL;}ListNode* head = pHead;ListNode* tail = pHead;for (int i = 0; i < k-1; ++i) {if (head->next != NULL) {head = head->next;} else {return NULL;}}while (head->next != NULL) {head = head->next;tail = tail->next;}return tail;}
};

JZ6 从尾到头打印链表
简单 通过率:28.84% 时间限制:1秒 空间限制:64M
知识点链表
描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。

如输入{1,2,3}的链表如下图:

返回一个数组为[3,2,1]

0 <= 链表长度 <= 10000
示例1
输入:
{1,2,3}
返回值:
[3,2,1]
示例2
输入:
{67,0,24,58}
返回值:
[58,24,0,67]
自己答案:

方法:栈

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {std::vector<int> vec;if (head == NULL) {return vec;}std::stack<int> sta;while (head != NULL) {sta.push(head->val);head = head->next;}while (!sta.empty()) {vec.push_back(sta.top());sta.pop();}return vec;}
};

JZ24 反转链表
简单 通过率:38.82% 时间限制:1秒 空间限制:64M
知识点链表
描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围: 0≤n≤1000
要求:空间复杂度 O(1) ,时间复杂度 O(n) 。

如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:

示例1
输入:
{1,2,3}
返回值:
{3,2,1}
示例2
输入:
{}
返回值:
{}
说明:
空链表则输出空

第一个方法:栈

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* ReverseList(ListNode* pHead) {if (pHead == NULL) {return NULL;}std::stack<ListNode*> sta;while (pHead != NULL) {sta.push(pHead);pHead = pHead->next;}ListNode* res = sta.top();ListNode* cur = sta.top();sta.pop();while (!sta.empty()) {cur->next = sta.top();sta.pop();cur = cur->next;}cur->next = NULL;return res;}
};

第二个方法:数组

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/class Solution {
public:ListNode* ReverseList(ListNode* pHead) {if (pHead == NULL) {return NULL;}std::vector<ListNode*> vec;while (pHead != NULL) {vec.push_back(pHead);pHead = pHead->next;}reverse(vec.begin(), vec.end());ListNode* res = vec[0];ListNode* cur = vec[0];for (int i = 1; i < vec.size(); ++i) {cur->next = vec[i];cur = cur->next;}cur->next = NULL;return res;}
};

相关文章:

剑指offer(一)-链表

&#xff08;一&#xff09;找出链表的环的入口结点 JZ23 链表中环的入口结点 中等 通过率&#xff1a;36.78% 时间限制&#xff1a;1秒 空间限制&#xff1a;64M 知识点链表哈希双指针 描述 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点…...

CDH大数据平台入门篇之搭建与部署

一、CDH介绍 1.CDH 是一个强大的商业版数据中心管理工具 提供了各种能够快速稳定运行的数据计算框架&#xff0c;如Spark&#xff1b; 使用Apache Impala做为对HDFS、HBase的高性能SQL查询引擎&#xff1b; 使用Hive数据仓库工具帮助用户分析数据&#xff1b; 提供CM安装HBas…...

Spark Join

Spark Join关联形式内关联外关联左外关联右外关联全外关联左半/逆关联关联机制NLJSMJHJ分发模式Join 选择等值 Join不等值 JoinJoin 按照关联形式&#xff08;Join Types&#xff09;划分 : 内关联、外关联、左关联、右关联 Join 按实现机制划分 : NLJ (Nested Loop Join) 、S…...

数字的转化规则?

数字的转化规则&#xff1f;js将字符串转换为数字的方式有哪些&#xff1f;1. 使用 parseInt()2. 使用 Number()3. 使用一元运算符 ()4.使用parseFloat()5. 使用 Math.floor()和Math.ceil()6.乘以数字7. 双波浪号 (~~) 运算符其它值到数字的转化规则1.Undefined 类型2.Null 类型…...

MySQL面试题-锁相关

目录 1.MySQL 锁的类型有哪些呢&#xff1f; 2.如何使用全局锁 3.如果要全库只读&#xff0c;为什么不使用set global readonlytrue的方式&#xff1f; 4.表级锁和行级锁有什么区别&#xff1f; 5.行级锁的使用有什么注意事项&#xff1f; 6.InnoDB 有哪几类行锁&#xff…...

Windows 终端编译 C代码

E:\My_SoftWare\Window gcc\windowbianji\mingw64\bin 此电脑--》属性--》系统--》高级系统设置--》环境变量--》Path--》新建--》粘贴路径 E:\My_SoftWare\Window gcc\windowbianji\mingw64\bin 打开命令终端 E: 回车 dir 显示所有文件 cd E:\My_SoftWare\Window gcc\C_co…...

SpringCloud:Feign的使用及配置

目录 Feign的使用及配置 1、Feign替代RestTemplate 2、使用Fegin步骤 3、自定义配置 4、Feign使用优化 5、Feign的最佳实践方式 Feign的使用及配置 1、Feign替代RestTemplate RestTemplate方式远程调用的问题 问题&#xff1a; 1、代码可读性差&#xff0c;编程体验不同…...

Parquet学习与使用之BloomFilter的应用

写在前面 最近在自己做自定义的OLAP系统&#xff0c;文件格式上用的是Parquet&#xff0c;但是发现Parquet各个API的示例代码很少。所以就打算把这个系列的文章写一下。 1. Parquet的Filter Parquet的过滤支持两大类&#xff0c;一类是基于Footer中的元数据进行RowGroup级别…...

95%置信区间计算-理解

机器学习中做多次试验后&#xff0c;需要计算指标的95%置信区间。 假设做了10次试验&#xff0c;计算得出的某指标分别为{x1,…,x10} 其均值为μ(x1...x10)/10\mu(x1 ... x10)/10μ(x1...x10)/10 方差σ∑(xi−μ)2/10\sigma\sum(x_i -\mu)^2/10σ∑(xi​−μ)2/10 95%置信…...

深度学习pytorch实战三:VGG16图像分类篇自建数据集图像分类三类

1.自建数据集与划分训练集与测试集 2.模型相关知识 3.model.py——定义AlexNet网络模型 4.train.py——加载数据集并训练&#xff0c;训练集计算损失值loss&#xff0c;测试集计算accuracy&#xff0c;保存训练好的网络参数 5.predict.py——利用训练好的网络参数后&#xff0c…...

2023年3月软考高项(信息系统项目管理师)报名走起!!!

信息系统项目管理师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资…...

模电学习11 运算放大器学习入门

一、基本概念 运算放大器简称运放&#xff0c;是一种模拟电路实现的集成电路&#xff0c;可以对信号进行很高倍数的放大。一般有正相输入端、反相输入端、输出端口、正电源、负电源等接口。 运放可工作在饱和区、放大区&#xff0c;其中放大区极其陡峭&#xff0c;因为运放的放…...

spring学习3.5

Bean是什么 Spring里面的Bean就类似是定义的一个组件&#xff0c;而这个组件的作用就是实现某个功能的&#xff0c;这里所定义的Bean就相当于给了你一个更为简便的方法来调用这个组件去实现你要完成的功能。 IoC是什么 谁控制谁&#xff0c;控制什么&#xff1f; 传统Java SE程…...

名创优品:国内“触礁”,海外“提速”

在互联网经济十分发达、实体经济不太景气的时代背景下&#xff0c;自有品牌零售商代表名创优品却逆势而上&#xff0c;开始向着全球品牌类生活用品零售市场发起冲击&#xff0c;并凭借着“极致性价比大规模跑量”的独特优势在该领域取得了十分可观的成绩。 随着“Z时代”人群逐…...

Java学习笔记 --- Tomcat

一、JavaWeb 的概念 JavaWeb 是指&#xff0c;所有通过 Java 语言编写可以通过浏览器访问的程序的总称&#xff0c;叫 JavaWeb。 JavaWeb是基于请求和响应来开发的。请求是指客户端给服务器发送数据&#xff0c;叫请求 Request。 响应是指服务器给客户端回传数据&#xff0c;叫…...

面向对象设计模式:行为型模式之状态模式

文章目录一、引入二、状态模式2.1 Intent 意图2.2 Applicability 适用性2.3 类图2.4 Collaborations 合作2.5 Implementation 实现2.5 状态模式与策略模式的对比2.5 状态模式实例&#xff1a;糖果机2.6 状态模式实例&#xff1a;自行车升降档一、引入 State Diagram 状态图&am…...

【Python入门第二十五天】Python 作用域

变量仅在创建区域内可用。这称为作用域。 局部作用域 在函数内部创建的变量属于该函数的局部作用域&#xff0c;并且只能在该函数内部使用。 实例 在函数内部创建的变量在该函数内部可用&#xff1a; def myfunc():x 100print(x)myfunc()运行实例 100函数内部的函数 如…...

运行时数据区及程序计数器

运行时数据区 概述 运行时数据区&#xff0c;也就是下图这部分&#xff0c;它是在类加载完成后的阶段 当我们通过前面的&#xff1a;类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后&#xff0c;就会用到执行引擎对我们的类进行使用&#xff0c;同时…...

手写操作系统+文件系统开源啦

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。喜欢研究底层&#xff0c;聚焦做那些大家想学没地方学的课程&#xff1a;手写操作系统、手写虚拟机、手写模拟器、手写编程语言… 今年是我创业的第二年&#xff0c;已经做了两个课程&#xff1a;手写JVM、手写操作系…...

小众但意外觉得蛮好用的剪辑软件!纯良心分享

爱剪辑 有开屏广告&#xff0c;一共3个界面&#xff1a;首页、剪同款、我的。 剪辑、配乐、字幕、滤镜、加速、贴纸、配音等主流功能都有。 特色功能有剪裁视频、倒放视频、视频旋转、视频转换GIF、转场、提取音频、画中画等。 还可以拼接视频&#xff0c;不过不支持FLV等小众文…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势

一、WebRTC与智能硬件整合趋势​ 随着物联网和实时通信需求的爆发式增长&#xff0c;WebRTC作为开源实时通信技术&#xff0c;为浏览器与移动应用提供免插件的音视频通信能力&#xff0c;在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能&#xff0c;对实时…...