8.2 数据结构王道复习 2.3.3 2.3.7选择题错题review
王道中这章主讲了线性表的定义、基本操作、顺序表示、链式表示。下方内容主分了文字部分和代码部分,便于记忆和整理。
在901中这章的要求集中在链表的基础操作中,应用题大概会出问答题。
【当前每一小节的应用题待做,先把选择题过完,预计1个月。每日15-20页】
7.31 | 15-30页:线性表、顺序表+练习题 |
---|---|
8.1 | 31-45页:单链表、双链表、循环链表、静态链表 |
8.2 | 46-62页:链表部分35道选择题review |
8.3 & 8.4 | 预63-92页:第三章 |
第二章 线性表
文字内容
问
- 线性表的特点:元素个数 关系 形式 数据类型 表达含义
- 线性表、顺序表、链表不同之处
- 顺序表的特点 (相对于链表而言,一句话概括)
- 顺序表 静态分配优缺点
- 顺序表动态分配的过程 和 链式存储的区别
- 顺序表的优缺点
- 链式存储与顺序表的不同 (讨论:存取+删除+插入操作)
- 单链表在存储空间上的优缺点
- 单链表的存储结构是什么,具体说明一下
- 单链表如何查找特定结点
- 头结点和头指针的关系
- 引入头结点有什么优点(两个一致)
- 双链表解决了单链表什么问题?如何解决的?
- 循环单链表与单链表的区别【其插入 删除 算法与单链表一样吗】
- 为什么会说:有时对循环单链表仅设尾指针,可以使得操作效率更高
- 循环双链表与循环单链表的定义不同之处,为空表时是怎样的
答
- 元素个数有限;元素之间具有先后次序即顺序性;均为数据元素,每个元素都是单个元素;数据类型都相同,每个元素都占有相同的存储空间;具有抽象性,元素可以表达很多内容,但主要考虑的是元素之间的逻辑关系。
- 线性表是一种逻辑结构,表示元素之间一对一的相邻关系。而顺序表和链表是存储结构。顺序表是顺序存储形式,而链表是链式存储,一般前者在代码中使用数组实现,后者使用指针实现。
- 逻辑顺序与其存储的物理顺序相同。
- 对数组静态分配时,因为数组的大小和空间事先已经固定,所以一旦空间占满,再加入新数据就会产生溢出,进而导致程序崩溃。
- 动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,从而达到数组存储空间的目的,而不需要为线性表一次性地划分所有的空间。但动态分配仍属于顺序存储结构,物理结构没有改变,依然是随机存取的方式,只是分配的空间大小可以在运行时动态分配。
- 优:可进行随机访问,通过首地址和元素序号可以在O(1)时间内找到指定元素;存储密度高,每个结点只存储数据元素;缺:元素的插入和删除需要移动大量的元素,插入平均移动n/2,删除平均移动(n-1)/2;顺序存储分配需要一段连续的存储空间,不够灵活。
- 顺序表的存储位置可以用一个简单直观的公式表示,它可以随机存取表中任意元素,但插入和删除操作需要移动大量元素;链式存储线性表时, 不需要使用地址连续的存储单元,即不要求逻辑顺序与物理位置顺序一致,它通过“链”建立元素之间的逻辑关系,因此插入和删除操作不需要移动元素,只需要修改指针,但也会失去顺序表可随机存取的优点。
- 优点:解决顺序表需要大量连续存储单元的缺点;缺点:附加的指针域,也存在浪费存储空间的缺点。
- 单链表的存储结构是非随机存取的,是由于单链表的元素离散地分布在存储空间中,所以不能直接找到表中的某个特定的结点。
- 从表头开始遍历,依次查找。
头指针是一定存在的,只不过区别在于单链表是否带头结点,从而导致头指针指向结点不同不管带不带头结点,头指针都始终指向链表的第一个节点,而头结点是带头结点的链表的第一个结点,结点内通常不存储信息。- ①由于第一个数据结点的位置被存放在头结点的指针域中,因此在链表的第一个位置上的操作和在表的其他位置上的操作一致,无需进行特殊处理。②无论链表是否为空,其头指针都是指向头结点的非空指针(空表中的头结点的指针域为NULL),因此空表和非空表的处理也得到了一致。
- 单链表只有一个指向后继的指针,使得单链表只能从前往后依次遍历,如果要访问前驱只能从头开始,访问前驱的时间复杂度为O(n),为了克服这个缺点,引入了双链表。双链表中有两个指针prior 和 next分别指向了直接前驱和直接后继。
- 单链表的尾部指向NULL,循环单链表的尾部指向头结点,从而整个链表形成一个环。在单链表中只能从头结点开始往后顺序遍历整个list但是循环单链表可以从表中的任意一个结点开始遍历整个list。【几乎一样,这里你明白表尾不同就行,他操作是一样的就算是表尾,它的前驱结点指向它的next不就还是尾部结点指向头结点,所以过程中无需判断是否为表尾。】
- 若是设的头结点,对在表尾插入元素需要O(n)的时间复杂度,而若是设的是尾指针r,r->next即为头指针,对在表头或表尾插入元素都只需要O(1)的时间复杂度。
- 头结点的prior指针指向尾结点,尾结点的next指向头结点。当循环双链表为空表时,head->prior = head; head->next = head;
挖
- 顺序表是用一组【】存储线性表中的【】,从而使得逻辑上相邻的两个元素在【】也相邻。
- 线性表的链式存储又称【】,它是指通过一组【】来存储线性表中的【】。为了建立数据元素之间的【】关系,对每个链表结点,除存放元素自身的信息之外,还需要存放【】。
- 通常用【】来标识一个单链表,指出链表的起始地址,其为【】时是一个空表。
- 头结点是【】,其数据域【】。单链表带头结点时,头指针head指向【】,不带头结点时,head指向【】。
- 代码中设p为指向链表结点的结构体指针,则*p表示【】,访问数据域代码为【】;其中.的左侧为【】,->的左侧为【】,得到下一个结点的存储数据【】。
- 静态链表是用【】来描述线性表的链式存储结构,结点也有指针域next和数据域data,与之前的链表不同的是,这里的指针是【】又称游标。和顺序表一样,静态链表也要预先【】。
- 顺序表和链表的比较
存取方式 | |
---|---|
逻辑结构和物理结构 | |
插入、查找、删除操作 | |
空间分配 |
空
- 地址连续的存储单元、数据元素、物理位置上
- 单链表、任意的存储单元、数据元素、线性、一个指向其后继的指针
- 头指针head or L、NULL
- 单链表在第一个数据结点前附加的一个结点、可以不设置任何信息也可以记录表长等信息、头结点、第一个数据结点。
- 这个结点本身、p->data or (*p).data、普通结构体变量、结构体指针、p->next->data or (*(*p).next).data
- 数组、结点在数组中的相对地址(数组下标)、分配一块连续的内存空间。
存取方式 | 顺序表顺序存取也可以随机存取;链表只能从表头开始依次顺序存取。 |
---|---|
逻辑结构和物理结构 | 顺序表中,逻辑上相邻的两个元素,对应的物理结构也相邻;链表就不一定了,其对应的逻辑关系是通过指针链表来表示的。 |
插入、查找、删除操作 | 按值查找:顺序表无序,O(n),有序时,O(logn)【二分法】;按位置查找:顺序表支持随机访问O(1),链表的平均时间复杂度为O(n)。删除插入:顺序表移动半个表长的元素,链表只需要修改相关节点的指针域即可。 |
空间分配 | 顺序存储在静态分配的情况下,装满就不能扩充,若再加入新元素,就会内存溢出,因此需要实现分配足够大的存储空间,这个很难把控,过大造成闲置,过小造成溢出;顺序表的动态存储虽然存储空间可以扩充,但需要移动大量元素,造成操作效率降低,而且若内存中没有更大块的连续存储空间,会导致分配失败;链表存储的节点空间只在需要时申请分配,操作灵活、高效。由于链表的每个结点都需要指针域,存储密度不够大。 |
选择(仅错题)缩放:150%
2.2.3 试题精选
【错误答案】A or C
【思路】随机存取:可以直接通过地址或下标在常数时间内访问数据的存取方式。而且,线性表 顺序存储结构使用数组实现,所以是 可以随机存取的存储结构;
【补充】
索引存取:通过索引(类似目录或指针)来查找和访问数据的存取方式。e.g.数据库的索引、B树、B+树、哈希表。
链式结构应该是顺序存取的存储结构;
【错误答案】A
【思路】随机存取:和下标有关的选项 肯定是和n无关 所以BD先排除 A :需要遍历整个顺序表 因为不能根据值索引 C:正确 故C
【错误答案】A
【思路】
Ⅰ SeqList.data[i] SeqList.data[i-1]
Ⅱ len <= MaxSize 时 data[len] = newnode
Ⅲ 需要移动后面len-1个结点往前移位 和n有关
Ⅳ 移动len-i个节点 和n有关
所以ⅠⅡ时间复杂度O(1) 选C
【错误答案】A
【思路】顺序表的效率高于链表:随机存取
Ⅰ 符合随机存取的能力,链表还需要顺序查找到指向i结点的指针才能输出它的数据域
Ⅱ 交换值,虽然交换动作二者比较不出,但是链表还需要将指针移动到位置3所以还是顺序表效率高
Ⅲ 二者都需要遍历,差不太多。所以C
2.3.7 尸体精选 试题精选
做题的时候确实已经可以直接把我脑子入土了,错了好多,没事巩固的知识也多
【错误答案】C
【思路】 结点内的存储单元地址≠结点的存储空间
结点内的存储单元地址是指:在每个节点内部,数据域和指针域的存储单元地址,肯定是连续的。所以A
结点的存储空间是不连续的。链式存储:链表 逻辑顺序和物理位置不一致
【错误答案】B
【思路】
Ⅰ顺序存储结构直接理解为数组,也可以链式结构吧 静态链表 ×
Ⅱ 删除表尾元素,需要知道这个尾结点的前驱结点,但在单链表中需要遍历,所以还是和表长有关的 ×
Ⅲ 带头节点的单循环链表为空表时head指向自己
Ⅳ 对,我当时好像想成了数组可以折半查找所以O(logn)
Ⅴ 队列 先进先出原则 进:头插法 出:应该是带尾指针的循环双链表吧,不然尾结点的前驱找不到哇 ×
判断完了,才发现如果Ⅱ不对,那只能选BCD Ⅴ肯定对 所以D
【补充知识】循环单链表表示队列:对Ⅴ的判别错误,是对单链表实现队列 分析有误:
【错误答案】B
【思路】有序单链表,首先将一维数组有序的话是O(nlogn)各种排序一般好像是快速排序,然后分配空间建立链表O(n)所以D
【错误答案】C or B 选了B 我感觉C太笼统了:)
【思路】记住就好,不增加头结点也会标识出结点中首结点的位置,所以C。单链表中增加一个头结点的目的是方便运算的实现。
【错误答案】B
【思路】读题啊大哥 线性表:所以分为链表和顺序表 如果顺序表 50 链表 0 所以D
【错误答案】D 无语死了
【思路】有序单链表插入一个新结点,最低 头部 O(1) 最高 尾部 O(n) 所以B
【错误答案】D
【思路】循环单链表 欸 为空表 head->next == head 所以?头结点的指针域与L的值相等
【错误原因】L *L分别不清楚
【错误答案】C
【思路】末尾插入结点:能快速指向尾部就节省时间,尾指针或者循环+头指针; 删除结点:能够随时遍历整个链表 ,要求最节省时间:方便找前驱,所以A
【错误答案】D
【思路】头尾相接的时间复杂度为O(1) 循环单链表 前一个链表的尾部改为指向后一个链表的头部 后一个链表的尾部改为指向前一个链表的头部。所以,都指向尾部比较合适,因为都要改变他们的尾部结点指向,所以B。
【错误答案】B
【思路】看下图思路 选D
【错误答案】B
【思路】看下图所以选C
代码内容
注意:一般可以忽略边界条件判断,变量定义内存分配等细节,主要体现算法思想。所以这里更要多过几遍,以防考场上对于细节过于细究或者模糊浪费时间。纸质考试≠上机考!!!
顺序表
静态分配一维数组的顺序表存储结构描述:
#define MaxSize 50
typedef struct {ElemType data[MaxSize]; // 顺序表的元素int length; //顺序表当前长度
}SqList;//顺序表类型定义
动态分配一维数组的顺序表存储结构描述:
#define InitSize 100
typedef strcut{ElemType *data;//动态分配数组的指针int MaxSize,length;//数组的最大容量和当前个数
}SeqList;
//C ++ 动态分配语句
L.data = new ElemType(InirSize);
//C 动态分配语句
L.data =(ElemType*)malloc(sizeof(ElemType)*InitSize);
顺序表的初始化InitList(SqList &L) or SeqList &L
静态只需要设置length 动态对maxsize length data都需要进行设置或分配。
//声明一个顺序表SqList 静态分配
void InitList (SqList &L){L.length = 0;
}
//动态分配
void InitList(SeqList &L){L.data = (ElemType*)malloc(sizeof(ElemType)*MaxSize);L.length = 0;L.MaxSize = InitSize;
}
顺序表的插入操作InsertList()
已知:顺序表L 新元素e 插入为序i ----> 数组下标为i-1【如果搞不清,则判断插入位置是否合法和for循环细节上就会搞错】
bool ListInsert(SqList &L, int i, ElemType e) {// 判断i是否有效,i的取值范围应该在1到L.length+1之间if (i < 1 || i > L.length + 1) { // 插入位置不合法return false;}// 当前存储空间已满if (L.length >= MaxSize) {return false;}// 从最后一个元素开始,依次向后移动,直到第i个位置for (int j = L.length; j >= i; --j) {L.data[j] = L.data[j - 1];}// 在第i个位置插入新元素L.data[i - 1] = e;// 长度加1L.length++;return true;
}
顺序表的删除操作ListDelete()
已知:顺序表 删除位置 删除元素的返回
bool ListDelete(SqList &L , int i , ElemType &e){//判断iif(i < 0 || i > L.length) return false;//不用判断当前长度e = L.data[i-1];for(int j = i-1 ; j < L.length-1; j++){L.data[j] = L.data[j+1];//j+1不能越界 越length}L.length--;return true;
}
顺序表的按值查找 LocateElem()
已知:顺序表 查找元素 返回位序
int LocateElem(SqList &L , ElmeType e){int i;for(i = 0 ; i < L.length ; i++){if(L.data[i] == e) return i+1;}return 0;
}
单链表 默认带头结点
存储结构描述LNode LinkList
typedef struct LNode{ElemType data;struct LNode *next;
}LNode , *LinkList;
带头结点の单链表的初始化InitList()
bool InitList(LinkList &head){head = (LNode*)malloc(sizeof(LNode));head->next = NULL;return true;
}
不带头结点の单链表的初始化InitList()
bool InitList(LinkList &head){head = NULL;return true;
}
单链表求表长Length()
//带头结点
int Length(LinkList L){int len = 0;LNode *p = L->next;while(p){p=p->next;len ++;}return len;
}orint Length(LinkList L){int len = 0;LNode *p = L;while(p->next){p = p->next;len++;}return len;
}
单链表按序号查找结点GetElem()
已知:L、第i个结点 如果i超过了表长返回NULL【书中写的小于表长???那不就可以找到的吗】
LNode *GetElem(LinkList L , int i){LNode *p = L;int j = 0;while(p != NULL && j < i){//我写成了p->next && j<i 错的家人们!!p=p->next;j++;}return p;
}
单链表按值查找表结点LocateElem()
已知:给定值e 当没有这个值返回NULL
LNode *LocateElem(LinkList head , ElemType e){LNode *p = head->next;while( p != NULL && p->data != e){p = p->next;}return p;
}
单链表插入结点操作ListInsert()【后插】
已知:L、第i个结点处插入、data 为 e
bool ListInsert(LinkList &head , int i , ElemType e){LNode *newNode = (LNode*)malloc(sizeof(LNode));newNode->data = e;//移动到i-1的位置LNode *p = head;int j = 0;while(p != NULL && j<i-1){p = p->next;}//!!!!!!判定i是否合法if(p == NULL) return false;//插入结点newNode->next = p->next; //颠倒的话需要多增加一个指针变量存储被覆盖的p->next;p->next = newNode;return true;
}
前插操作,是p在位置i处的这个结点之前插入newNode.书上的思路结点上仍然是后插操作,结束后将newNode与p内的数据域进行交换。
单链表删除结点操作ListDelete()
已知:L、位置i、要返还的ElemType e
bool ListDelete(LinkList &head , int i, ElemType &e){LNode *p = head;//移动至i-1处int j = 0;while(p != NULL && j<i-1){p = p->next;j++;}//判定i是否合法 比【插入】多一个条件if(p ==NULL || p->next ==NULL)return false;//删除操作 因为要释放被删除结点 所以新开一个指针LNode *q = p->next;e = q->data;p->next = q->next;free(q);return true;
}
扩展不知道他在干啥,遇到了再说吧【坑 located in 电子版48页】
头插法建立单链表
LinkList List_HeadInsert(LinkList &head){LNode *newNode ; int x;head = (LNode*)malloc(sizeof(LNode));head->next = NULL;scanf("%d",&x);while(x != 9999){//输入9999表示结束newNode = (LNode*)malloc(sizeof(LNode));newNode->next = head->next;newNode->data = x;head->next = newNode;scanf("%d" ,&x);}return head;
}
尾插法建立单链表
LinkList List_TailInsert(LinkList &head){LNode *newNode; int x;head = (LNode*)malloc(sizeof(LNode));head->next = NULL;LNode *p = head;//尾指针scanf("%d",&x);while(x!=9999){newNode = (LNode*)malloc(sizeof(LNode));newNode->next = NULL;newNode->data = x;p->next = newNode;p = p->next;scanf("%d" ,&x);}return head;
}
书上
LinkList List_TailInsert(LinkList &L){int x;L = (LNode*)malloc(sizeof(LNode));LNode *s , *r;//r为尾指针 s为新结点scanf("%d" ,&x);while(x!=9999){s = (LNode*)malloc(sizeof(LNode));s->data = x;r->next = s;r = s;scanf("%d",&x);}r->next = NULL;return L;
}
双链表
要疯了本来以为就结束了结果才到35!!!!
存储结构描述DNode DLinkList
typedef struct DNode{ElemType data;strcut DNode *prior;strcut DNode *next;
}DNode, *DLinkList;
插入操作 结点p后插入结点s
p->next->prior = s;s->prior = p;s->next = p->next;p->next = s;
删除操作 结点p的后继结点q
q->next->prior = p;p->next = q->next;free(q);
静态链表
存储结构描述
以next == -1 作为其结束的标志。删除插入与动态一致,只需要修改指针,不需要移动元素,没有单链表方便。
#define MaxSize 50
typedef struct {ElemType data;int next;
}SLinkList(MaxSize);
第三章 栈、队列和数组
文字内容
问
答
挖
空
选择(仅错题)
代码内容
相关文章:
8.2 数据结构王道复习 2.3.3 2.3.7选择题错题review
王道中这章主讲了线性表的定义、基本操作、顺序表示、链式表示。下方内容主分了文字部分和代码部分,便于记忆和整理。 在901中这章的要求集中在链表的基础操作中,应用题大概会出问答题。 【当前每一小节的应用题待做,先把选择题过完ÿ…...
【DL】神经网络与机器学习基础知识介绍(二)【附程序】
原文:https://mengwoods.github.io/post/dl/009-dl-fundamental-2/ 文章目录 激活函数卷积神经网络超参数其他程序 激活函数 激活函数的目的是在模型中引入非线性,使网络能够学习和表示数据中的复杂模式。列出常见的激活函数。 线性函数: y…...
6万字嵌入式最全八股文面试题大全及参考答案(持续更新)
目录 冒泡排序算法的平均时间复杂度和最坏时间复杂度分别是多少?在什么情况下使用冒泡排序较为合适? 选择排序算法是稳定的排序算法吗?为什么? 插入排序在近乎有序的数组中表现如何?为什么? 快速排序的基本思想是什么?它在最坏情况下的时间复杂度是多少? 归并排序…...
iceberg 用户文档(持续更新)
iceberg 用户文档 表 Schema 变更查看表的元数据信息表参数变更 表 Schema 变更 Iceberg 支持使用 Alter table … alter column 语法对 Schema 进行变更,示例如下 -- spark sql -- 更改字段类型 ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE doubl…...
基于YOLOv8的船舶检测系统
基于YOLOv8的船舶检测系统 (价格85) 包含 【散货船,集装箱船,渔船,杂货船,矿砂船,客船】 6个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该…...
使用腾讯云域名解析实现网站重定向
前言 最近,在CSDN平台上我写了一系列博客,希望能与同学分享一些技术心得。然而,每当需要向他人推荐我的博客时,那串复杂且缺乏规律的CSDN博客首页域名总让我感到不便。这让我开始思考,如果能将这一域名替换为一个既个…...
为什么相比直接使用new和std::shared_ptr构造函数,make_shared在内存分配和管理方面更为高效。
使用std::make_shared相比于直接使用new和std::shared_ptr构造函数在内存分配和管理方面更为高效,主要原因如下: 内存分配效率 std::make_shared通过一次内存分配来同时分配控制块(用于引用计数等)和对象的内存。这种方式减少了…...
7-Python数据类型——列表和元组的详解(增删改查、索引、切片、步长、循环)
一、列表 1.1 列表 list 有序且可变的容器,可以存放多个不同类型的元素 列表就是专门用来记录多个同种属性的值 列表:存储同一个类别的数据,方便操作 字符串,不可变:即:创建好之后内部就无法修改【内置…...
大数据-61 Kafka 高级特性 消息消费02-主题与分区 自定义反序列化 拦截器 位移提交 位移管理 重平衡
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
Google Gemma2 2B:语言模型的“小时代”到来?
北京时间8月1日凌晨(当地时间7月31日下午),Google发布了其Gemma系列开源语言模型的更新,在AI领域引发了巨大的震动。Google Developer的官方博客宣布,与6月发布的27B和9B参数版本相比,新的2B参数模型在保持…...
三线程顺序打印1-100
三线程顺序打印1-100 题目 三个线程顺序打印1-100; 解题 基本思路 首先需要创建三个线程, 确定使用线程1打印 num % 3 1 的数, 线程2打印 num % 3 2 的数, 线程3打印 num % 3 0 的数;使用 synchronized 同步锁让每次只有一个线程进行打印, 每个线程打印前先判断当前数是…...
中央处理器CPU
中央处理器CPU cpu的组成(从功能方面来看)cpu的执行过程★.取指令阶段★.解码阶段★.执行阶段 重点: 1.cpu的组成 2.cpu怎么执行程序(命令) cpu的组成(从功能方面来看) 寄存器:用来临…...
用Python实现AI人脸识别
实现AI人脸识别通常涉及到使用深度学习库,如TensorFlow或PyTorch,配合预训练的人脸识别模型。以下是一个使用Python和TensorFlow框架中的tensorflow_hub模块来加载和使用一个预训练的人脸识别模型的简单示例。 步骤 1: 安装必要的库 首先,你…...
MSPM0G3507_2024电赛自动行驶小车(H题)_问题与感悟
这次电赛题目选的简单了,还规定不能使用到摄像头,这让我之前学习的Opencv 4与树莓派无用武之地了,但我当时对于三子棋题目饶有兴趣,但架不住队友想稳奖,只能选择这个H题了...... 之后我还想抽空将这个E题三子棋题目做…...
C语言:指针(2)
一.数组名 在了解数组名前我们先看一段代码 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 根据我们上一篇学习的知识,我们知道&arr[0]是数组第一个元素的地址,这时我们再看另一段代码的运行结果。 #include <stdio.h> int ma…...
数组——二维数组
数组(中) 二维数组 定义 二维数组本质上是一个行列式的组合,也就是说二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一维数组。 …...
深入 Vue 组件与状态管理的教程
目录 深入 Vue 组件与状态管理的教程第一部分:深入组件1. 理解插槽(Slots)的使用1.1 基础插槽示例1.2 具名插槽1.3 作用域插槽 第二部分:Vue Router1. 学习 Vue Router 的基本配置1.1 基本路由配置1.2 嵌套路由1.3 路由参数 2. 导…...
Spring Boot 实现异步处理多个并行任务
在现代Web应用开发中,异步处理和多任务并行处理对于提高系统的响应性和吞吐量至关重要。Spring Boot 提供了多种机制来实现异步任务处理,本文将介绍如何利用这些机制来优化您的应用程序性能。 1. 引言 在高负载情况下,如果所有的请求都采用…...
TiDB系列之:使用Flink TiDB CDC Connector采集数据
TiDB系列之:使用Flink TiDB CDC Connector采集数据 一、依赖项二、Maven依赖三、SQL Client JAR四、如何创建 TiDB CDC 表五、连接器选项六、可用元数据七、特征一次性处理启动阅读位置多线程读取DataStream Source 八、数据类型映射 TiDB CDC 连接器允许从 TiDB 数…...
每日一道算法题 最接近的三数之和
题目 16. 最接近的三数之和 - 力扣(LeetCode) Python class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:nums.sort()nlen(nums)ans0min_diffinf # infinite 无穷for i in range(n-2):tmpnums[i]li1rn-1while l<…...
搭建自己的金融数据源和量化分析平台(六):下载并存储沪深两市上市公司财报
基于不依赖wind、某花顺等第三方平台数据的考虑,尝试直接从财报中解析三大报表进而计算ROE等财务指标,因此需要下载沪深两市的上市公司财报数据,便于后续从pdf中解析三大报表。 深市爬虫好做,先放深市爬虫: 根据时间段…...
C语言-常见关键字详解
一、const 关键字const用于声明常量,赋值后,其值不能再被修改。 示例: const int MAX_COUNT 100; 二、static static关键字在不同情境下有不同作用: 1.函数中的静态变量:保留变量状态,仅初始化一次&a…...
异步编程之std::future(一): 使用
目录 1.概述 2.std::future的基本用法 3.使用 std::shared_future 4.std::future的使用场景 5.总结 1.概述 在编程实践中,我们常常需要使用异步调用。通过异步调用,我们可以将一些耗时、阻塞的任务交给其他线程来执行,从而保证当前线程的…...
Vue3 + JS项目配置ESLint Pretter
前言 如果在开发大型项目 同时为多人协作开发 那么 ESLint 在项目中极为重要 在使用 ESLint 的同时 也需要使用 Pretter插件 统一对代码进行格式化 二者相辅相成 缺一不可 1. 安装 VsCode 插件 在 VsCode 插件市场搜索安装 ESLint 和 Pretter 2. 安装依赖 这里直接在 pac…...
JavaScript (十四)——JavaScript typeof和类型转换
目录 JavaScript typeof, null, 和 undefined typeof 操作符 null undefined undefined 和 null 的区别 JavaScript 类型转换 JavaScript 数据类型 JavaScript 类型转换 将数字转换为字符串 将布尔值转换为字符串 将日期转换为字符串 将字符串转换为数字 一元运算符…...
CTF-web 基础
网络协议 OSI七层参考模型:一个标准的参考模型 物理层 网线,网线接口等。 数据链路层 可以处理物理层传入的信息。 网络层 比如IP地址 传输层 控制传输的内容的传输,在传输的过程中将要传输的信息分块传输完成之后再进行合并。 应用…...
CP AUTOSAR标准之ChineseV2XNetwork(AUTOSAR_SWS_ChineseV2XNetwork)(更新中……)
1 简介和功能概述 本文档指定了AUTOSAR基础软件模块中国车辆对接网络(CnV2xNet)的功能、API和配置。 中国车联网网络(CnV2xNet)与中国车联网消息(CnV2xMsg)、中国车联网管理(CnV2xMgt)、中国车联网安全(CnV2xSec)以及AUTOSAR BSW模块以太网接口(EthIf)共同构成了AUTOSAR架构…...
【hloc】 项目流程
hloc 项目流程 1. 数据集准备2. 特征提取3. 匹配特征4. 三维重建5. 定位6. 结果评估7. 示例脚本 这个项目涉及到了视觉定位和三维重建的一系列步骤,从特征提取、匹配、三维重建到定位和结果评估。通过提供的脚本文件,用户可以方便地运行整个流程。 1. 数…...
鸿蒙系统开发【应用接续】基本功能
应用接续 介绍 基于ArkTS扩展的声明式开发范式编程语言编写的一个分布式视频播放器,主要包括一个直播视频播放界面,实现视频播放时可以从一台设备迁移到另一台设备继续运行,来选择更合适的设备继续执行播放功能以及PAD视频播放时协同调用手…...
nextTick方法的作用是什么?什么时候会用到
nextTick 方法在 Vue.js 中扮演着重要的角色,它用于在下次 DOM 更新循环结束之后执行延迟回调。这主要用于确保在 Vue 完成 DOM 更新后执行依赖于 DOM 的操作。 作用 确保 DOM 更新完成:Vue 的 DOM 更新是异步的,当你修改了数据后࿰…...
微信小程序开发注册/seo排名是什么意思
/*游标的简单学习*/一.概念:1.游标:游标是用于在存储过程中迭代SELECT查询出的数据。2.什么是游标?①游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标…...
南京网站制作报价/网络广告推广方式
深度学习编译器综合研究报告 本文主要参考了: The Deep Learning Compiler: A Comprehensive Survey 本文主要回答以下几个问题: 为什么需要dl compiler当下流行的dl framwwork有哪些深度学习硬件有三类 都有哪些dl compiler的关键组件和技术流行的dl c…...
研究生做网站开发/100%能上热门的文案
之前在windows下写了hello world,终归是不够用啊,因为开发环境是Linux,怎么办呢~~~学习学习再学习 写在前面的话:我从百度文库的一个文章里摘出来的,原文章名称《Linux下安装ApachePHPMySql 搭建PHP运行环境》 http://…...
装修招标网站/宁波seo外包平台
2019独角兽企业重金招聘Python工程师标准>>> git clone gitubuntu-12.04-LTS:gitolite-admin.git 如果克隆失败,需要 git clone gitubuntu-12.04-LTS:repositories/gitolite-admin.git 即可, 如果还是失败, 需要 git clone gitubuntu-12.04-L…...
政府网站建设管理办法/上海网络推广
设计师同学们,我想大家都会在被指点江山之后,产生这样一个疑问:该如何让你的非设计师同事更好的了解设计,从而避免因彼此的主观而导致的理解鸿沟呢? 想必下面这篇文章,你真该要推荐他们读一下了。…...
海尔网站建设水平/一键seo提交收录
方案(模式)是一个属于某个用户的所有对象的统称。 当你建立表空间、用户,并且建立了对象(如表、存储过程...)后,你就有了方案。 也就是这些对象的统称。 我曾经测试过oracle自带的hr方案,用system/manage连接,呵呵,当…...