C/C++每日一练(20230223)

news2024/10/7 2:25:00

目录

1. 数据合并

2. 回文链表

3. 完美矩形


1. 数据合并

题目描述

将两个从小到大排列的一维数组 (维长分别为 m,n , 其中 m,n≤100) 仍按从小到大的排列顺序合并到一个新的一维数组中,输出新的数组.

输入描述

第 1 行一个正整数 m , 表示第一个要合并的一维数组中的元素个数
第 2 行一个正整数 n , 表示第二个要合并的一维数组中的元素个数
第 3 行输入 m 个整数 (每个数用空格分开) , 表示第一个数组元素的值.
第 4 行输入 n 个整数 (每个数用空格分开) , 表示第二个数组元素的值.

输出描述

一行,表示合并后的数据,共 m +n 个数

样例输入

3
4
1 3 5
2 4 6 8

样例输出

1 2 3 4 5 6 8

代码:

#include <iostream>
using namespace std;

void merge(int * a1, int m, int * a2, int n)
{
	int m1 = m - 1;
	int n1 = n - 1;
	for (int i = m + n - 1; i >= 0; i--)
	{
		if (m1 < 0) a1[i] = a2[n1--];
		else if (n1 < 0) a1[i] = a1[m1--];
		else if (a1[m1] < a2[n1]) a1[i] = a2[n1--];
		else a1[i] = a1[m1--];
	}
}

int main()
{
	int m;
	int n;
	cin >> m;
	cin >> n;
	int a1[201];
	int a2[101];
	for (int i = 0; i < m; i++) cin >> a1[i];
	for (int i = 0; i < n; i++) cin >> a2[i];
	merge(a1, m, a2, n);
	for (int i = 0; i < m + n; i++) cout << a1[i] << " ";
	return 0;
}

输入输出:

3
4
1 3 5
2 4 6 8
1 2 3 4 5 6 8
--------------------------------
Process exited after 5.567 seconds with return value 0
请按任意键继续. . .

 

2. 回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

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

示例 2:

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

提示:

  • 链表中节点数目在范围[1, 105] 内
  • 0 <= Node.val <= 9

进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

代码:

#include <bits/stdc++.h>
using namespace std;

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution
{
public:
    bool isPalindrome(ListNode *head)
    {
        vector<int> v;
        while (head != NULL)
        {
            v.push_back(head->val);
            head = head->next;
        }
        for (int i = 0; i < v.size(); i++)
        {
            if (v[i] != v[v.size() - i - 1])
                return false;
        }
        return true;
    }
};

int CreateList(ListNode*& p, vector<int>& nums) 
{
	ListNode* q = (ListNode*)malloc(sizeof(ListNode));
	q = p;
	for (const auto& data : nums)
	{
		ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
		if (q != NULL) 
		{
			q->val = data;
			q->next = temp;
			q = temp;
		}
	}
	if(q != NULL)
	{
		q->next = NULL;
	}

}

void PrintList(ListNode* p) 
{
	while(p->next != NULL)
	{
		cout << p->val << "->";
		p = p->next;
	}
	cout << "null" << endl;
}

int main()
{
	Solution s;
	ListNode* head = (ListNode*)malloc(sizeof(ListNode));
	
	vector <int> nums = {1,2,3,2,1};
	CreateList(head, nums); 
	PrintList(head);
	cout << s.isPalindrome(head) << endl;
	
	return 0;

}

3. 完美矩形

我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域。

每个矩形用左下角的点和右上角的点的坐标来表示。例如, 一个单位正方形可以表示为 [1,1,2,2]。 ( 左下角的点的坐标为 (1, 1) 以及右上角的点的坐标为 (2, 2) )。

示例 1:

rectangles = [
[1,1,3,3],
[3,1,4,2],
[3,2,4,4],
[1,3,2,4],
[2,3,3,4]
]

返回 true。5个矩形一起可以精确地覆盖一个矩形区域。

示例 2:

rectangles = [
[1,1,2,3],
[1,3,2,4],
[3,1,4,2],
[3,2,4,4]
]

返回 false。两个矩形之间有间隔,无法覆盖成一个矩形。

示例 3:

rectangles = [
[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[3,2,4,4]
]

返回 false。图形顶端留有间隔,无法覆盖成一个矩形。

示例 4:

rectangles = [
[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[2,2,4,4]
]

返回 false。因为中间有相交区域,虽然形成了矩形,但不是精确覆盖。

代码:

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    bool isRectangleCover(vector<vector<int>> &ret)
    {
        set<pair<int, int>> s;
        int x1 = INT_MAX, y1 = INT_MAX, x2 = INT_MIN, y2 = INT_MIN, area = 0;
        for (int i = 0; i < ret.size(); ++i)
        {
            x1 = min(ret[i][0], x1);
            x2 = max(ret[i][2], x2);
            y1 = min(ret[i][1], y1);
            y2 = max(ret[i][3], y2);
            area += (ret[i][2] - ret[i][0]) * (ret[i][3] - ret[i][1]);
            if (s.find({ret[i][0], ret[i][1]}) == s.end())
                s.insert({ret[i][0], ret[i][1]});
            else
                s.erase({ret[i][0], ret[i][1]});
            if (s.find({ret[i][2], ret[i][3]}) == s.end())
                s.insert({ret[i][2], ret[i][3]});
            else
                s.erase({ret[i][2], ret[i][3]});
            if (s.find({ret[i][0], ret[i][3]}) == s.end())
                s.insert({ret[i][0], ret[i][3]});
            else
                s.erase({ret[i][0], ret[i][3]});
            if (s.find({ret[i][2], ret[i][1]}) == s.end())
                s.insert({ret[i][2], ret[i][1]});
            else
                s.erase({ret[i][2], ret[i][1]});
        }
        if (s.size() != 4 || !s.count({x1, y1}) || !s.count({x1, y2}) || !s.count({x2, y1}) || !s.count({x2, y2}))
            return false;
        return area == (x2 - x1) * (y2 - y1);
    }
};

int main()
{
	Solution s;
	vector<vector<int>> rect = {
		{1,1,3,3},
		{3,1,4,2},
		{3,2,4,4},
		{1,3,2,4},
		{2,3,3,4}
	};
	cout << s.isRectangleCover(rect) << endl;
	
	rect = {{1,1,2,3}, {1,3,2,4}, {3,1,4,2}, {3,2,4,4}};
	cout << s.isRectangleCover(rect) << endl;
	
	return 0;
}

附: 单链表的操作

基本操作:

1、单链表的初始化
2、单链表的创建
3、单链表的插入
4、单链表的删除
5、单链表的取值
6、单链表的查找
7、单链表的判空
8、单链表的求长
9、单链表的清空
10、单链表的销毁
11、单链表的打印

线性表链式存储结构的优点:

1、结点空间可以动态申请和释放;
2、数据元素的逻辑次序靠结点的指针来指示,插入和删除时不需要移动数据元素。

线性表链式存储结构的缺点:

1、存储密度小,每个结点的指针域需额外占用存储空间。当每个结点的数据域所占字节不多时,指针域所占存储空间的比重显得很大;
2、链式存储结构是非随机存取结构。对任一结点的操作都要从头指针依指针链查找到该结点,这增加了算法的复杂度。

以下为单链表的常用操作代码,来源于网络未经测试,仅供参考。

#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
struct ListNode
{
	int data;
	ListNode* next;//结构体指针
};
void Listprintf(ListNode* phead)
{
	ListNode* cur=phead;
	while (cur != NULL)
	{
		cout << cur->data << "->";
		cur = cur->next;
	}
}
void Listpushback(ListNode** pphead, int x)
{
	ListNode* newnode = new ListNode{ x,NULL };
	if (*pphead == NULL)
	{
		*pphead = newnode;
	}
	else
	{
		ListNode* tail=  *pphead;
		while(tail->next != NULL)
		{
			tail = tail->next;
		}
		tail->next = newnode;
	}
}
void test_1()
{
	ListNode* phead = NULL;
	Listpushback(&phead, 1);
	Listpushback(&phead, 2);
	Listpushback(&phead, 3); 
	Listprintf(phead);
}
int main()
{
	test_1();
	return 0;
}

#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
struct ListNode
{
	int data;
	ListNode* next;//结构体指针
};
void Listprintf(ListNode* phead)
{
	ListNode* cur=phead;
	while (cur != NULL)
	{
		cout << cur->data << "->";
		cur = cur->next;
	}
	cout << "NULL" << endl;
}
//尾插
void Listpushback(ListNode** pphead, int x)
{
	ListNode* newnode = new ListNode{ x,NULL };
	if (*pphead == NULL)
	{
		*pphead = newnode;
	}
	else
	{
		ListNode* tail=  *pphead;
		while(tail->next != NULL)
		{
			tail = tail->next;
		}
		tail->next = newnode;
	}
}
//头插
void Listpushfront(ListNode** pphead, int x)
{
	ListNode* newnode = new ListNode{ x,NULL };
	newnode->next = *pphead;
	*pphead = newnode;
}
//尾删
void Listpopback(ListNode** pphead)
{
	if (*pphead == NULL)
	{
		return;
	}
	if ((*pphead)->next == NULL)
	{
		delete(*pphead);
		*pphead = NULL;
	}
	else
	{
		ListNode* tail = *pphead;
		ListNode* prev = NULL;
		while (tail->next)
		{
			prev = tail;
			tail = tail->next;
		}
		delete(tail);
		tail = NULL;
		prev->next = NULL;
	}
}
//头删
void Listpopfront(ListNode** pphead)
{
	if (*pphead == NULL)
	{
		return;
	}
	else
	{
		ListNode* newnode = (*pphead)->next;
		delete(*pphead);
		*pphead = newnode;
	}
}
//查找元素,返回值是地址
ListNode* Listfind(ListNode* phead, int x)
{
	ListNode* cur = phead;
	while (cur)
	{
		if (cur->data == x)
		{
			return cur;
		}
		else
		{
			cur = cur->next;
		}
	}
	return NULL;
}
//插入元素,在pos的前一个位置插入
//配合Listfind使用,具体使用见test_insert函数
void Listinsert(ListNode** phead, ListNode* pos, int x)
{
	ListNode* newnode = new ListNode{ x,NULL };
	if (*phead == pos)
	{
		newnode->next = (*phead);
		*phead = newnode;
	}
	else
	{
		ListNode* posprev = *phead;
		while (posprev->next != pos)
		{
			posprev = posprev->next;
		}
		posprev->next = newnode;
		newnode->next = pos;
	}
}
//单链表并不适合在前一个位置插入,因为运算较麻烦,会损失效率
//包括c++中为单链表提供的库函数也只有一个insert_after而没有前一个位置插入
//在后一个位置插入相对简单
void Listinsert_after(ListNode** phead, ListNode* pos, int x)
{
	ListNode* newnode = new ListNode{ x,NULL };
	newnode->next = pos->next;
	pos->next = newnode;
}
//删除指定位置的节点
void Listerase(ListNode** pphead, ListNode* pos)
{
	if (*pphead == pos)
	{
		*pphead = pos->next;
		delete(pos);
	}
	else
	{
		ListNode* prev = *pphead;
		while (prev->next!=pos)
		{
			prev = prev->next;
		}
		prev->next = pos->next;
		delete(pos);
	}
}
//释放链表
void Listdestory(ListNode** pphead)
{
	ListNode* cur = *pphead;
	while(cur)
	{
		ListNode* next = cur->next;
		delete(cur);
		cur = next;
	}
	*pphead = NULL;
}
void test_insert()
{
	ListNode* phead = NULL;
	Listpushback(&phead, 1);
	Listpushback(&phead, 2);
	Listpushback(&phead, 3);
	Listprintf(phead);
	ListNode* pos = Listfind(phead, 2);
	if (pos != NULL)
	{
		Listinsert(&phead, pos, 20);
	}
	Listprintf(phead);
	pos = Listfind(phead, 2);
	if (pos != NULL)
	{
		Listinsert_after(&phead, pos, 20);
	}
	Listprintf(phead);
	Listdestory(&phead);
}
void test_find()
{
	ListNode* phead = NULL;
	Listpushback(&phead, 1);
	Listpushback(&phead, 2);
	Listpushback(&phead, 3);
	Listprintf(phead);
	ListNode* pos = Listfind(phead, 2);
	if (pos != NULL)
	{
		pos->data = 20;//Listfind不仅能查找,也能借此修改,这也是函数返回地址的原因
	}
	Listprintf(phead);
	Listdestory(&phead);
}
void test_erase()
{
	ListNode* phead = NULL;
	Listpushback(&phead, 1);
	Listpushback(&phead, 2);
	Listpushback(&phead, 3);
	Listprintf(phead);
	ListNode* pos = Listfind(phead, 2);
	if (pos != NULL)
	{
		Listerase(&phead, pos);
	}
	Listprintf(phead);
	Listdestory(&phead);
}
void test_pop_and_push()
{
	ListNode* phead = NULL;
	Listpushback(&phead, 1);
	Listpushback(&phead, 2);
	Listpushback(&phead, 3);
	Listprintf(phead);
	Listpushfront(&phead, 1);
	Listpushfront(&phead, 2);
	Listpushfront(&phead, 3);
	Listprintf(phead);
	Listpopback(&phead);
	Listpopfront(&phead);
	Listprintf(phead);
	Listdestory(&phead);
}
int main()
{
	//test_pop_and_push();
	test_find();
	//test_insert();
	//test_erase();
	return 0;
}

 

#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
struct ListNode
{
	int data;
	ListNode* next;//结构体指针
};
void Listprintf(ListNode* phead)
{
	ListNode* cur=phead;
	while (cur != NULL)
	{
		cout << cur->data << "->";
		cur = cur->next;
	}
	cout << "NULL" << endl;
}
void Listpushback(ListNode** pphead, int x)
{
	ListNode* newnode = new ListNode{ x,NULL };
	if (*pphead == NULL)
	{
		*pphead = newnode;
	}
	else
	{
		ListNode* tail=  *pphead;
		while(tail->next != NULL)
		{
			tail = tail->next;
		}
		tail->next = newnode;
	}
}
ListNode* creatlist()
{
	ListNode* phead = NULL;
	Listpushback(&phead, 1);
	Listpushback(&phead, 9);
	Listpushback(&phead, 6);
	Listpushback(&phead, 8);
	Listpushback(&phead, 6);
	Listpushback(&phead, 2);
	Listpushback(&phead, 3);
	return phead;
}
ListNode* removeElements(ListNode* head, int x)
{
	ListNode* prev = NULL;
	ListNode* cur = head;
	while (cur)
	{
		if (cur->data == x)
		{
			if (cur == head)//如果第一个元素就是要删除的,进行头删
			{
				head = cur->next;
				delete(cur);
				cur = head;
			}
			else
			{
				prev->next = cur->next;
				delete(cur);
				cur = prev->next;
			}
		}
		else
		{
			prev = cur;
			cur = cur->next;
		}
	}
	return head;
}
int main()
{
	ListNode*phead = creatlist();//先创建一条链表
	Listprintf(phead);
	phead = removeElements(phead, 6);//删除值为6的节点
	Listprintf(phead);
	return 0;
}

ListNode* reverseList(ListNode* head)
{
	if (head == NULL)
	{
		return NULL;
	}
	ListNode* prev, * cur, * next;
	prev = NULL;
	cur = head;
	next = cur->next;
	while (cur)
	{
		cur->next = prev;//翻转指针
 
		//往后迭代
		prev = cur;
		cur = next;
		if (next)//这里是因为当cur指向最后一个节点的时候,next就已经是NULL了,这个时候如果再执行next=next->next则会出现错误
		{
			next = next->next;
		}
	}
	return prev;
}

ListNode* reverseList(ListNode* head)
{
	ListNode* cur = head;
	ListNode* newlist = NULL;
	ListNode* next = NULL;
	while (cur)
	{
		next = cur->next;
		//头插
		cur->next = newlist;
		newlist = cur;
		//往后迭代
		cur = next;
	}
	return newlist;
}

ListNode* middleNode(ListNode* head)
{
	ListNode* slow, * fast;
	slow = fast = head;
	while (fast && fast->next)
	{
		slow = slow->next;
		fast = fast->next->next;
	}
	return slow;
}

ListNode* findK(ListNode* head, int k)
{
	ListNode* fast, * slow;
	fast = slow = head;
	while(k--)
	{
		if (fast == NULL)//如果当fast等于NULL时k仍不为0,则k大于链表长度
		{
			return NULL;
		}
		fast = fast->next;
	}
	while (fast)
	{
		fast = fast->next;
		slow = slow->next;
	}
	return slow;
}

 

 

ListNode* mergeTwoList(ListNode* l1, ListNode* l2)
{
	if (l1 == NULL)//如果一个链表为空,则返回另一个
	{
		return l2;
	}
	if (l2 == NULL)
	{
		return l1;
	}
	ListNode* head = NULL;
	ListNode* tail = NULL;
	while (l1 && l2)
	{
		if (l1->data < l2->data)
		{
			if (head == NULL)
			{
				head = tail =l1;
			}
			else
			{
				tail->next = l1;
				tail = l1;
			}
			l1 = l1->next;
		}
		else
		{
			if (head == NULL)
			{
				head = tail = l2;
			}
			else
			{
				tail->next = l2;
				tail = l2;
			}
			l2 = l2->next;
		}
	}
	if (l1)
	{
		tail->next = l1;
	}
	if(l2)
	{
		tail->next = l2;
	}
	return head;
}

ListNode* mergeTwoList(ListNode* l1, ListNode* l2)
{
	if (l1 == NULL)//如果一个链表为空,则返回另一个
	{
		return l2;
	}
	if (l2 == NULL)
	{
		return l1;
	}
	ListNode* head = NULL, * tail = NULL;
	head = tail = new ListNode;//哨兵位的头结点
	while (l1 && l2)
	{
		if (l1->data < l2->data)
		{
		    tail->next = l1;
		    tail = l1;
		    l1 = l1->next;
	 	}
		else
		{
			tail->next = l2;
			tail = l2;
			l2 = l2->next;
		}
	}
	if (l1)
	{
		tail->next = l1;
	}
	if (l2)
	{
		tail->next = l2;
	}
	ListNode* list = head->next;
	delete(head);
	return list;
}

 

ListNode* partition(ListNode* phead, int x)
{
	ListNode* lesshead, * lesstail, * greaterhead, * greatertail;
 
	lesshead = lesstail = new ListNode;//定义一个哨兵位头结点,方便尾插
	lesstail->next = NULL;
	greaterhead = greatertail = new ListNode;
	greatertail->next = NULL;
 
	ListNode* cur = phead;
	while (cur)
	{
		if (cur->data < x)
		{
			lesstail->next = cur;
			lesstail = cur;
		}
		else
		{
			greatertail->next = cur;
			greatertail = cur;
		}
		cur = cur->next;
	}
	lesstail->next = greaterhead->next;
	greatertail->next = NULL;//举个例子,这样一条链表:1->4->15->5,现在给的x是6,那么排序后15应该在最后,正因如此,重新排序后15的next是没变的,仍然指向5,不手动将next改为NULL,就会成环,无限排下去。
	
	ListNode* newhead = lesshead->next;
	delete(lesshead);
	delete(greaterhead);
	return newhead;
}

ListNode* middleNode(ListNode* head)
{
	ListNode* slow, * fast;
	slow = fast = head;
	while (fast && fast->next)
	{
		slow = slow->next;
		fast = fast->next->next;
	}
	return slow;
}
ListNode* reverseList(ListNode* head)
{
	ListNode* cur = head;
	ListNode* newlist = NULL;
	ListNode* next = NULL;
	while (cur)
	{
		next = cur->next;
		//头插
		cur->next = newlist;
		newlist = cur;
		//往后迭代
		cur = next;
	}
	return newlist;
}
bool check(ListNode* head)
{
	ListNode* mid = middleNode(head);
	ListNode* rhead = reverseList(mid);
	ListNode* curHead = head;
	ListNode* curRhead = rhead;
	while(curHead&&curRhead)
	{
		if (curHead->data != curRhead->data)
			return false;
		else
		{
			curHead = curHead->next;
			curRhead = curRhead->next;
		}
	}
	return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/366108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】AVL树

AVL树一、AVL树的概念二、AVL的接口2.1 插入2.2 旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋三、验证四、源码一、AVL树的概念 当我们用普通的搜索树插入数据的时候&#xff0c;如果插入的数据是有序的&#xff0c;那么就退化成了一个链表&#xff0c;搜索效率…

纵然是在产业互联网的时代业已来临的大背景下,人们对于它的认识依然是短浅的

纵然是在产业互联网的时代业已来临的大背景下&#xff0c;人们对于它的认识依然是短浅的。这样一种认识的最为直接的结果&#xff0c;便是我们看到了各式各样的产业互联网平台的出现。如果一定要找到这些互联网平台的特点的话&#xff0c;以产业端为出发点&#xff0c;无疑是它…

嵌入式:UCOS移植+简单创建任务

目录 一、UCOS操作系统 二、UCOS移植 1、文件介绍 2、UCOS || 源码分析 3、打开Software文件 三、UCOS任务创建 一、UCOS操作系统 C/OS 是 Micrium 公司出品的实时操作系统&#xff0c; C/OS 目前有两个版本&#xff1a; C/OS-II 和 C/OS-III。 C/OS 是一种基于优先级…

Linux GPIO 开发指南

文章目录Linux GPIO 开发指南1 概述1.1 编写目的1.2 适用范围1.3 相关人员2 模块介绍2.1 模块功能介绍2.2 相关术语介绍2.3 总体框架2.4 state/pinmux/pinconfig2.5 源码结构介绍3 模块配置3.1 kernel menuconfig 配置3.2 device tree 源码结构和路径3.2.1 device tree 对 gpio…

Python计算 -- 内附蓝桥题:相乘

计算 ~~不定时更新&#x1f383;&#xff0c;上次更新&#xff1a;2023/02/23 &#x1f5e1;常用函数&#xff08;方法&#xff09; 1. 求一个整数的最末位 举个栗子&#x1f330; n int(input()) end n % 10蓝桥例题1 - 相乘✖️ 题目描述 本题为填空题&#xff0c;…

MySQL 11:MySQL锁

锁是一种机制&#xff0c;计算机通过这种机制协调多个进程或线程对资源的并发访问&#xff08;以避免争用&#xff09;。在数据库中&#xff0c;除了传统的计算资源&#xff08;如CPU、RAM、I/O等&#xff09;的争夺外&#xff0c;数据也是一种被众多用户共享的资源。如何保证并…

叠氮炔点击化学634926-63-9,Propargyl-PEG1-NHBoc,氨基叔丁酯PEG1丙炔基相关性质分享

●外观以及性质&#xff1a;Propargyl-PEG1-NHBoc产物呈固体或粘性液体&#xff0c;取决于PEG分子量&#xff0c;包含1个丙炔基和一个氨基叔丁酯&#xff0c;炔丙基可通过铜催化的叠氮炔点击化学与含叠氮化合物或生物分子反应&#xff0c;以产生稳定的三唑键&#xff0c;带有 P…

Windows下载安装Redis的详细步骤

目录 一、概述 1.redis的版本维护介绍 2.msi安装包和压缩包的优点和缺点 二、操作步骤 三、测试是否安装成功&#xff08;查看版本&#xff09; 四、获取资源 一、概述 1.redis的版本维护介绍 Redis的官网只提供Linux系统的下载。但是微软的技术团队长期开发和维护着这…

Tina_Linux_启动优化_开发指南

文章目录Tina_Linux_启动优化_开发指南1 概述2 启动速度优化简介2.1 启动流程2.2 测量方法2.2.1 printk time2.2.2 initcall_debug2.2.3 bootgraph.2.2.4 bootchart2.2.5 gpio 示波器.2.2.6 grabserial.2.3 优化方法2.3.1 boot0启动优化2.3.1.1 非安全启动.2.3.1.2 安全启动2.3…

jmeter接口自动化测试框架

接口测试可以分为两部分&#xff1a; 一是线上接口&#xff08;生产环境&#xff09;自动化测试&#xff0c;需要自动定时执行&#xff0c;每5分钟自动执行一次&#xff0c;相当于每5分钟就检查一遍线上的接口是否正常&#xff0c;有异常能够及时发现&#xff0c;不至于影响用…

易点易动助力企业固定资产信息化管理

对于生产制造或者互联网企业而言&#xff0c;固定资产比重较高&#xff0c;是企业资产的大头&#xff0c;一些办公设备、生产设备数量和金额都比较大。提升企业固定资产管理水平&#xff0c;是企业实现信息化建设的必要条件。 目前&#xff0c;国内的很多企业在固定资产管理中…

零售航母沃尔玛公布业绩:喜忧参半

2月21日美股盘前&#xff0c;零售巨无霸沃尔玛公布了截至1月的2023财年第四季度业绩报告。财报中不乏可圈可点之处&#xff0c;但是利润迎来六年首降&#xff0c;新财年的利润指引要也比预期低很多&#xff0c;可以说喜忧参半。 一、Q4业绩可圈可点 营收方面&#xff1a;在本…

漏斗分析法

一什么是漏斗分析&#xff1f; 漏斗分析是数据领域最常见的一种“程式化”数据分析方法&#xff0c;它能够科学地评估一种业务过程&#xff0c;从起点到终点&#xff0c;各个阶段的转化情况。通过可以量化的数据分析&#xff0c;帮助业务找到有问题的业务环节&#xff0c;并进…

插画网课平台排名

插画网课平台哪个好&#xff0c;插画网课排名靠前的有哪些&#xff0c;今天给大家梳理了国内5家专业的插画网课平台&#xff0c;各有优势和特色&#xff0c;给学插画的小伙伴提供选择&#xff0c;报插画网课一定要选择靠谱的&#xff0c;否则人钱两空泪两行&#xff01; 一&am…

使用 xshell 远程连接(使用 xftp 远程传输)

xshell 和 xftp的使用都基于ssh协议&#xff0c;我们需要先在远程服务端或者虚拟机上安装ssh服务&#xff0c;然后才能远程连接。 目录 1、什么是ssh协议&#xff1f; 2、安装 openssh (1) 安装 openssh 服务器 (2) 关闭服务器防火墙&#xff08;或者开放端口22&#xff09…

四个步骤在CRM系统中设置游戏化机制

长期高强度的单一工作会让销售人员逐渐失去对工作的兴趣&#xff0c;导致销售状态缺少动力和激情&#xff0c;工作开展愈加困难。不少企业通过CRM销售管理系统设置游戏化竞赛&#xff0c;调动销售人员的工作积极性。那么&#xff0c;如何在CRM系统中设置游戏化机制&#xff1f;…

深入浅出 MySQL 索引(一)

MySQL 索引&#xff08;基础篇&#xff09; 你好&#xff0c;我是悟空。 本文目录如下&#xff1a; 一、前言 最近在梳理 MySQL 核心知识&#xff0c;刚好梳理到了 MySQL 索引相关的知识&#xff0c;我的文章风格很多都是原理 实战的方式带你去了解知识点&#xff0c;所以…

Spring+MVC+MYbatis注解开发

Spring常见注解 注解一&#xff1a;Configuration 用在类上面&#xff0c;加上这个注解的类可以成为一个spring的xml配置文件&#xff0c;使用的是java代码的配置 注解二&#xff1a;ComponentScan 用在类上&#xff0c;加上注解可以指定扫描路径 注解三&#xff1a;创建对…

Uni-app使用vant和uview组件

目录 1.安装vant组件 1.1安装前需知 1.2.安装 1.3.创建uni-app项目 2.安装uview-ui组件 2.1官网 2.2安装 2.3安装成功 1.安装vant组件 1.1安装前需知 小程序能使用vant-weapp组件&#xff0c;且官网的安装是直接导入小程序中&#xff0c;不能直接导入uni-app框架中 V…

Python的标准模块介绍:sys、os、random和time

Python内置了许多标准模块&#xff0c;例如sys、os、random和time模块等&#xff0c;下面为大家介绍几个常用的标准模块。 1.sys模块 sys模块中提供了一系列与Python解释器交互的函数和变量&#xff0c;用于操控Python的运行时环境。sys模块中常用变量与函数如表1所示。 表1…