【C++刷题集】-- day5

news2024/11/18 21:36:56

目录

选择题

单选

编程题

统计回文⭐

【题目解析】

【解题思路 - 穷举】

【优化】

连续最大和⭐

【题目解析】

【解题思路】

【空间优化】


选择题

单选

1、 在上下文和头文件均正常情况下,以下程序的输出结果是 ( )
int x = 1;
do {
	printf("%2d\n", x++);
} while (x--);
1
无任何输出
2
陷入死循环

正确答案:


解析:

  • do while循环是先执行do再执行while的条件判断。
    • x++:后置++,先使用x的值然后再x + 1,所以此处是输出时可以说恒等于1,where判断的时候x恒等于2进行x--等于1,于是陷入死循环。
  • 格式化输出:
    ​​​​​​来源printf 函数转换说明完整格式详解-CSDN博客

精度:

  1. 对于整型数据类型(如:int、long、short),精度修饰符没有任何作用,会被忽略。
  2. 对于浮点数数据类型(如:float、double),可以使用格式说明符%.nf来指定输出的小数位数例如:%.2f表示保留两位小数。
  3. 对于字符型数据类型(如:char),精度修饰符也没有任何作用,会被忽略。
  4. 对于字符串类型(如:char*),可以使用格式说明符%.ns来指定输出的字符个数例如:%.5s表示只输出字符串的前五个字符。

数据长度字段宽度精度的关系:

  • 字符串:%m.ns
    • 字符串长度 > n > m:此时m的作用失效,是只受n的控制。
      const char* str = "abcdefg";
      printf("%2.5s\n", str); //abcde
    • n:是右对齐补空格。
      const char* str = "abcdefg";
      printf("%5.2s\n", str); //   ab
    • > 字符串长度:作用与%s一样。
      const char* str = "abcdefg";
      printf("%5.100s\n", str); //abcdefg
  • 浮点数:%m.nf
    • m < 整数部分 + n此时m的作用失效,是只受n的控制。
      float number = 202383.1415;
      printf("%4.1f\n", number); //202383.1
    • m > 整数部分 + n是右对齐补空格。
      float number = 202383.1415;
      printf("%10.1f\n", number); //  202383.1
    • n > 小数位数注意,在指定精度时要确保实际数据长度大于精度才有意义,否则可能会导致不必要的错误或者无法预料的结果。
      float number = 202383.1415;
      printf("%20.10f\n", number); //   202383.1406250000

----------------------------------------------

2、 定义char dog[]="wang\0miao";那么sizeof(dog)与strlen(dog)分别是多少 ( )
10,4
4,4
9,9
9,4

正确答案: 


解析:

  • sizeof 求变量对应类型所占字节数:C语言字符串结尾最后会自动补充一个'\0',所以为:9 + 1。
  • strlen求字符串的有效长度不包含 '\0' 在内:该字符串第5个字符为'\0',所以为:4。

----------------------------------------------

3、 下列程序的打印结果是 ( )
char p1[15] = "abcd", * p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);
xyabcAB
abcABz
ABabcz
xycdBCD

正确答案:


解析:

  • char p1[15] = "abcd";一维数组。
  • char * p2 = "ABCD"; 指向常量字符串,该字符串中的内容是不能被修改的,存储在代码段。
  • char str[50] = "xyz";一维数组。

字符串函数功能:

  • strcpy(dest, src):将src字符串中的内容拷贝到dest所在的空间中,最后返回dest。(注意:dest的空间大小一定要能够存的下src中的字符总数,否则程序会崩溃)
  • strcat(dest, src):将src字符串中的内容拼接在dest字符串之后,最终返回dest。(注意:dest空间一定要能够容忍下src拼接进来的字符,否则程序会崩溃)

strcat(p1 + 2, p2 + 1): "cd" 拼接 "BCD" 为 "cdBCD" 。

strcpy(str + 2, "cdBCD"):将 "cdBCD" 拷贝到str+2的位置为 "xycdBCD" 。

----------------------------------------------

4、 下面程序的输出结果是 ( )
#include<iosteam.h>
void main() {
	int n[][3] = { 10,20,30,40,50,60 };
	int(*p)[3];
	p = n;
	cout << p[0][0] << "," << *(p[0] + 1) << "," << (*p)[2] << endl;
}
10,30,50
10,20,30
20,40,60
10,30,60

正确答案:


解析:

        二维数组的行可以省略,所以n是两行三列的二维数组。

        int(*p)[3]:是数组指针,本质是一个指针,该指针只能指向具有3个int类型元素的一段连续空间。

        数组名表示的就是数组搜元素的地址,此处二维数组n的每一个元素实际上就是一个一维数组int[3],n的二维数组中,首元素的地址就是int(*)[3]。

  • p[0][0] == *(*(p + 0) + 0)
  • *(p[0] + 1) == *(*(p + 0) + 1)
  • (*p)[2] == *(*(p + 0) + 2)

        所以,最后显示的全是第0行,第一个元素,第二个元素。第三个元素。

----------------------------------------------

5、 以下说法中正确的是 ( ) 。
C++程序中的main()函数必须放在程序的开始部分。
C++程序的入口函数是main函数。
在C++程序中,要调用的函数必须在main()函数中。

正确答案:


解析:

  • main函数可以放在任何位置,只要不放在某一个函数的定义之内即可。
  • 在C / C++中,函数的定义是不能嵌套的。

----------------------------------------------

6、 有以下程序运行结果为 ( )
#include <iostream>
using namespace std;
char fun(char x, char y) {
	if (x < y)
		return x;
	return y;
}
int main() {
	int a = '1', b = '1', c = '2';
	cout << fun(fun(a, b), fun(b, c));
	return 0;
}
运行出错
2
3
1

正确答案:


解析:

        可以看出fun函数的算法是拿出x和y中的最小值。

----------------------------------------------

7、 对于int* pa[5];的描述,以下哪个选项是正确的 ( )
pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针。
pa是一个指向数组的指针,所指向的数组是5个int类型的元素。
pa[5]表示某个数的第5个元素的值。
pa是一个指向某个数组中第5个元素的指针,该元素是int类型的变量。

正确答案:


解析:

        int* pa[5]:pa是一个指针数组,该数组中的每个元素都是 int* 类型的指针。

----------------------------------------------

8、 下面两个结构体
struct One {
	double d;
	char c;
	int i;
}
struct Two {
	char c;
	double d;
	int i;
}
在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是 ( )
16 24,16 24
16 20,16 20
16 16,16 24
16 16,24 24

正确答案:


解析:

结构体的大小计算遵循结构体的对齐规则:

  • 结构体的第一个成员放在结构体变量在内存中存储位置的0偏移处开始

  • 从第2个成员往后的所有成员,都要放在一个对齐数(成员的大小和默认对齐数的较小值)的整数的整数倍的地址处,VS中默认对齐数为8

  • 结构体的总大小是结构体的所有成员的对齐数中最大对齐数的整数倍。

  • 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍

        #注:VS中的默认对齐数为8,不是所有编译器都有默认对齐数,当编译器没有默认对齐数的时候,成员变量的大小就是该成员的对齐数。(Linux中就没有默认对齐数概念)


补充:

#结构体为什么要内存对齐?

  • 平台原因(移植原因):
    • 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
  • 性能原因:
    • 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

总体来说:结构体的内存对齐是拿空间来换取时间的做法。

----------------------------------------------

9、 下面哪个指针表达式可以用来引用数组元素a[i][j][k][l] ( )
(((a+i)+j)+k)+l)
*(*(*(*(a+i)+j)+k)+l)
(((a+i)+j)+k+l)
((a+i)+j+k+l)

正确答案:


解析:

        既然是要访问用来引用,那肯定需要解引用,已知:a[1] == *(a + 1)。

  • *(*(*(*(a+i)+j)+k)+l)  ==  *(*(*(a+i)+j)+k)[l]  ==  *(*(a+i)+j)[k][l]  ==  *(a+i)[j][k][l]  ==  a[i][j][k][l]

----------------------------------------------

10、 由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义 ( )
预处理
编译
链接
执行

正确答案:


解析:

知识铺垫:

        现在所使用的编译器为满足复杂的软件开发需求,如:Linux下使用的GCC,是被称为 编译器套装 ,是因为它不仅仅包含了一个编译器,而是由多个编译器及相关工具组成的一个完整的编程环境。除了g++、gcc和gfortran等编译器之外,GCC还包括了预处理器、汇编器、链接器等多个工具。这些工具协同工作,可以将源代码转换成可执行文件或库文件。 

        因此,GCC被称为编译器套装是因为它提供了完整的编译、链接和调试工具链,能够满足复杂的软件开发需求。

(VS2019、DEV C++等,被称作集成开发环境-IDE,其具备编辑预处理编译汇编链接调试运行

阶段:  

  • 编辑(编辑器):将程序员 编写源代码 保存到文件中,并进行必要的格式化处理。
  • 预处理(编译器):完成包含的 头文件的展开  注释删除  define宏替换  条件编译 等,最终形成 xxx.i 文件。头文件是不参与编译的,因为在预处理阶段已经将头文件展开了,编译只对源文件进行编译。

        链接之前每个源文件都是独立的单元,它们之间并没有直接的联系。在链接阶段,编译器才会将这些独立的目标文件链接在一起,生成可执行文件或者共享库。

        使用条件编译和#pragma once:能够防止一个源文件内多次包含同一个头文件,即能够确保在多个源文件下,各个源文件对于同一个头文件各自只包含一次。

  • 编译(编译器):完成 词法分析 语法分析 语义分析 符号汇总 (编译器对源代码语法规则进行检测,如此才可以交付后续转换为可执行代码),检查无误后将代码翻译成 汇编 指令,最终形成 xxx.s 文件。
  • 汇编(编译器): 汇编 指令转换成 二进制 指令,形成 符号表 ,最终形成 xxx.o 文件。

  • 链接(编译器):将生成的各个 xxx.o 文件进行 链接 合并段表 符号表的合并和重定位 ,最终形成 .exe(.out) 可执行程序。

  • 运行(计算机执行): .exe(.out) 可执行程序会被加载到内存中,并按照预定的逻辑进行计算和处理。

各类阶段错误:

  • 预处理错误:程序编译之前发生的错误,这些错误通常与头文件、宏定义、条件编译等相关。
    • 找不到头文件:当程序中引用了不存在的头文件时,会发生找不到头文件的错误。
    • 宏定义问题:当程序中使用了未定义或重复定义的宏时,会发生宏定义问题。
    • 条件编译问题:当程序中使用了不正确的条件编译语句时,会发生条件编译问题。
    • 编码格式问题:当程序中出现了不支持的编码格式时,会发生编码格式问题。
  • 编译错误:编译器会检测代码中存在的错误。如有错误,则会导致程序无法通过编译,并给出相应的错误提示信息,指出哪一行代码存在问题以及具体的错误类型。
    • 语法错误(Syntax Error):代码中存在拼写错误、缺少分号、括号不匹配等语法问题。
    • 未定义变量(Undefined Variable Error):在程序中引用了未定义的变量。
    • 类型错误(Type Error):代码中使用了不兼容的数据类型,例如:将字符串赋值给整数变量。
    • 函数调用错误(Function Call Error):函数调用参数数量不匹配、参数类型不正确等问题。
    • 头文件引用错误(Header File Error):头文件不存在或者路径不正确等问题。
    • 环境配置错误(Environment Configuration Error):编译器或者开发环境配置不正确导致编译失败。
    • 内存错误(Memory Error):程序访问了无效的内存地址,例如:空指针引用等。
    • 重复定义(Redeclaration Error):在同一作用域中重复定义变量、函数等。
    • 编译器警告(Compiler Warning):这种警告通常是编译器发现了代码中可能存在问题或潜在风险,例如:未使用的变量、类型转换可能会丢失精度等,出现在编译阶段。
  • 链接错误:也称为连接错误,链接器将多个目标文件和库文件合并成一个可执行程序,并需要解决符号引用和符号定义之间的关系。如果检测到错误,链接器将停止链接并显示错误消息。
    • 未定义符号(Undefined Symbol Error):使用未定义的函数或变量。
      • 手误拼写了变量、函数或对象的名称。
      • 没有包含必要的头文件。
      • 在使用外部库时,没有正确地链接库文件。
      • 在多个源文件中使用同一个全局变量,但只在其中一个源文件中进行了定义。
    • 重复定义符号(Duplicate Symbol Error):多次定义同一个函数或变量。
      • 头文件重复包含:如果多个源文件都包含同一个头文件,并且该头文件中定义了全局变量或函数,那么在编译时就会出现重复定义符号错误。
      • 全局变量重复定义:如果多个源文件中都定义了同名的全局变量,并且这些变量的作用域超出了各自的源文件范围,那么在链接时就会出现重复定义符号错误。
      • 函数重复定义:如果多个源文件中都定义了同名的函数,并且这些函数的作用域超出了各自的源文件范围,那么在链接时就会出现重复定义符号错误。
        多文件 (嵌套文件包含) 编译的重点问题 -> 解决方案
        在头文件中只声明变量和函数,而不要定义它们,在一个源文件中定义变量和函数,并将其它源文件需要使用的声明放在头文件中。
        使用 static 关键字来限制变量的作用域,避免在不同源文件中产生冲突。
        使用 条件编译 #pragma once 预处理指令来避免头文件被重复引用。
        使用 命名空间 等技术来避免符号冲突问题。
    • 缺少库文件:使用未包含或版本不兼容的库文件。
    • 符号冲突:不同目标文件包含具有相同名称但实现不同的函数或变量。
      • 重复定义变量或函数名:在程序中定义了两个或多个同名的变量或函数。
      • 重复定义标签:在程序中定义了两个或多个同名的标签。
      • 命名规则不规范:在程序中使用了与汇编器保留字相同的名称,导致汇编器无法识别。
      • 头文件包含重复定义的内容:头文件中包含了与当前程序中已有的变量、函数等同名的内容。
      • 模块之间命名冲突:在一个大型项目中,不同模块之间可能会出现命名冲突问题。
      • 宏定义名称重复:在宏定义时使用了与已有宏定义相同的名称。
    • 数据对齐错误:在不同的目标文件中使用了不同的数据对齐方法。
      • 访问未对齐的地址:当访问一个未按照对齐方式对齐的内存地址时,会出现数据对齐错误。
      • 结构体成员对齐不一致:结构体成员在默认情况下按照其自身大小进行对齐,但可以通过编译器指定结构体成员的对齐方式。如果不同结构体成员的对齐方式不一致,可能会导致数据对齐错误。
      • 指针类型不匹配:一个指针指向的内存区域按照某种对齐方式进行对齐时,如果将该指针强制转换成另一种类型的指针,而新类型的对齐方式与原先的不同,就可能会导致数据对齐错误。例如:将一个按照8字节对齐方式进行对齐的double类型数组强制转换成int类型数组的指针,可能会导致数据对齐错误。
      • 编译器优化:编译器在进行优化时可能会改变内存布局,从而导致数据对齐错误。
      • 跨平台移植:在跨平台移植时,由于不同平台的字节顺序、大小和对齐方式可能不同,需要特别注意数据对齐问题。
  • 运行错误:程序在运行时发生了异常或错误,这种错误可能会导致程序崩溃、停止工作或产生不正确的结果。
    • 空指针引用:程序试图访问一个空指针时,会发生空指针引用错误。
      • 没有初始化指针变量就使用它。
      • 对已经释放的内存进行操作。
      • 函数返回了一个空指针,但没有进行检查就使用它。
      • 在结构体中访问了一个不存在的成员变量。
        解决措施
        使用指针变量之前,始终确保对其进行初始化。
        释放内存之后,将指针变量设置为 NULL。
        使用函数返回值之前,始终检查其是否为空指针。
        访问结构体成员变量之前,始终检查该成员是否存在。
    • 数组越界:程序试图访问一个超出数组边界的元素时,会发生数组越界错误。
    • 内存泄漏:程序分配了一块内存但没有释放时,会发生内存泄漏错误。
      • 忘记释放动态分配的内存:通过 malloc 或 new 等函数动态分配了内存,但没有及时释放,会导致内存泄漏。
      • 指针操作不当:存在指针操作不当的情况,如:指针未初始化、指针越界、重复释放等,会导致内存泄漏。
      • 异常处理不当:存在异常处理不当的情况,如:在抛出异常前未释放资源等,也会导致内存泄漏。
        解决措施
        在使用完动态分配的内存后及时调用free或delete等函数进行释放。
        对于指针操作,要确保指针正确初始化,并且避免指针越界、重复释放等情况。
        在异常处理中及时进行资源清理,并且避免在抛出异常前未释放资源等情况。
        使用智能指针等自动化管理内存的方式来减少手动管理带来的风险。
    • 栈溢出:程序使用过多的栈空间时,会发生栈溢出错误。
      • 递归调用:递归函数没有正确终止条件或者递归深度太大,会导致栈溢出。
      • 局部变量过多:函数中定义了太多的局部变量,会导致栈空间不足导致栈溢出。
      • 缓冲区溢出:程序尝试向缓冲区写入超过其大小的数据,会导致栈溢出。
      • 函数调用嵌套过深:函数调用嵌套层数太多,会导致栈空间不足。
        解决措施
        确保递归函数有正确的终止条件,并且递归深度不会太大。
        尽可能减少局部变量的数量,并且使用动态内存分配来代替数组等静态分配方式。
        对于缓冲区操作,要确保输入数据不会超过缓冲区大小,并且使用安全的字符串处理函数(如:strcpy_s)来代替不安全的函数(如:strcpy)。
        合理设计程序结构,避免函数嵌套层数过深。
    • 除0错误:程序试图将一个数除以零时,会发生除零错误。

对于函数未定义的错误:
        函数未定义属于链接错误。在C++中,当我们调用一个函数时,编译器会在当前文件或外部文件中查找该函数的定义。如果找不到该函数的定义,编译器就会报 "未定义的引用" 错误,并停止编译。

        这时,我们需要检查是否正确包含了相关头文件、是否正确链接了相关库文件、是否正确实现了该函数等。

补充:

        对于#include 引入源文件,一般情况下是不建议的,而是应该包含对应的头文件。

  • 引入源文件缺陷:
    • 编译时间增加:当一个头文件被多个源文件包含时,每个源文件都需要重新编译该头文件,这会增加编译时间。
    • 命名空间污染:如果被包含的头文件定义了全局变量或函数,那么这些定义将出现在包含它的每个源文件中,可能导致命名冲突和意外行为。
    • 不必要的依赖关系:当一个头文件被包含到多个源文件中时,这些源文件之间就会出现不必要的依赖关系。如果修改了这个头文件,所有依赖它的源文件都需要重新编译。
  • 应该遵循规则:
    • 只包含必要的头文件。
    • 在头文件中使用前置声明 (forward declaration) 而不是包含其他头文件来声明类或函数。
    • 使用命名空间避免全局命名冲突。
    • 将常用的头文件放在预编译头 (precompiled header) 中以提高编译速度。

---------------------------------------------

编程题

统计回文⭐

统计回文_牛客题霸_牛客网 (nowcoder.com)


【题目解析】

        回文判断:正读和反读都一样的字符串。

【解题思路 - 穷举】

         本题使用暴力求解方式计算即可,遍历str,将sub insert进入str的每个位置,判断是否是回文,是就++count。(需要注意不能 str.insert(i, sub),如此会改变str,所以每次使用str拷贝构造一个tmp,然后tmp.insert(i, sub),再判断。
#include<iostream>
#include<string>
using namespace std;
// 判断是否是回文
bool IsCircle(const string& s)
{
    size_t begin = 0;
    size_t end = s.size() - 1;
    while (begin < end)
        if (s[begin++] != s[end--])
            return false;
    return true;
}

int main()
{
    // 时间复杂度:O(n^2)
    // 空间复杂度:O(n)

    string str, sub;
    getline(cin, str);
    getline(cin, sub);

    size_t count = 0;
    for (size_t i = 0; i <= str.size(); ++i)
    {
        // 将字符串2插入到字符串1的每个位置,再判断是否是回文
        string tmp = str;
        tmp.insert(i, sub);
        if(IsCircle(tmp))
            ++count;
    }
    cout << count << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

【优化】

        使用暴力求解方式计算,使用拼接实现两个字符串的插入合并,避免insert(其需要移动),采取空间换时间,再将其进行判断是否符合回文。

#include <iostream>
#include <string>
using namespace std;

// 判断是否为回文
bool IsCircle(const string& s)
{
    size_t begin = 0;
    size_t end = s.size() - 1;
    while (begin < end)
        if (s[begin++] != s[end--])
            return false;
    return true;
}


int main() 
{
    // 时间复杂度:O(n^2)
    // 空间复杂度:O(n)

    string str;
    string sub;
    getline(cin, str);
    getline(cin, sub);

    size_t count = 0;
    string tmp;
    for(size_t index = 0; index <= str.size(); index++) // index是sub插入的位置
    {
        // 拼接 - 避免insert(其需要移动),采取空间换时间
        tmp = str.substr(0, index);
        tmp += sub;
        tmp += str.substr(index);

        // 验证是否为回文
        if(IsCircle(tmp))
            ++count;
    }

    cout << count << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

连续最大和⭐

连续最大和_牛客题霸_牛客网 (nowcoder.com)


【题目解析】

        本题是一个经典的动规问题,简称dp问题。

【解题思路】

状态方程式: max(dp[i]) = max(dp[i-1] + arr[i], arr[i]);
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    // 时间复杂度:O(n)
    // 空间复杂度:O(n)

    int n = 0;
    cin >> n;
    vector<int> nums;
    nums.reserve(n);
    while(n--)
    {
        int num;
        cin >> num;
        nums.push_back(num);
    }

    vector<int> dp(nums.size(), 0);
    dp[0] = nums[0];
    for(size_t i = 1; i < nums.size(); i++)
        dp[i] = max(dp[i - 1] + nums[i], nums[i]);
    
    cout << *max_element(dp.begin(), dp.end()) << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

【空间优化】

        将一维数组变为一个元素,并保证其内部,在执行中使用为执行部分的最大值。

#include <iostream>
#include <vector>
#include <climits>
using namespace std;

int main()
{
    // 时间复杂度:O(n)
    // 空间复杂度:O(1)

    int n = 0;
    cin >> n;
    vector<int> nums;
    nums.reserve(n);

    while(n--)
    {
        int num;
        cin >> num;
        nums.push_back(num);
    }

    int ret_max = -INT_MAX; // 取一个很小很小的值
    int tmp_max = 0; // 对应元素的最大值 - 第0个元素最大值为0
    for(auto val : nums)
    {
        int next = tmp_max + val;
        if(ret_max < next) 
            ret_max = next; 

        if(next < 0)
            next = 0;
        tmp_max = next;
    }
    cout << ret_max << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

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

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

相关文章

Python批量查字典和双语例句

最近&#xff0c;有网友反映&#xff0c;我的批量查字典工具换到其它的网站就不好用了。对此&#xff0c;我想说的是&#xff0c;互联网包罗万象&#xff0c;网站的各种设置也有所不同&#xff0c;并不是所有的在线字典都可以用Python爬取的。事实上&#xff0c;很多网站为了防…

Python入门自学进阶-Web框架——38、redis、rabbitmq、git

缓存数据库redis&#xff1a; NoSQL&#xff08;Not only SQL&#xff09;泛指非关系型的数据库。为了解决大规模数据集合多重数据类的挑战。 NoSQL数据库的四大分类&#xff1a; 键值&#xff08;Key-Value&#xff09;存储数据库列存储数据库文档型数据库图形&#xff08;…

MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字

一、&#x1f49b;并发基本概念 并发的基本意思&#xff1a; 什么是并发呢&#xff1f;简单的理解就是同一时间执行 服务器同一时刻&#xff0c;给多个客户端提供服务&#xff5e;&#xff5e;&#xff0c;这两个客户端都可以给服务器提交事务。 如果提交两个事务&#xff0c;改…

召唤神龙打造自己的ChatGPT

在之前的两篇文章中&#xff0c;我介绍了GPT 1和2的模型&#xff0c;并分别用Tensorflow和Pytorch来实现了模型的训练。具体可以见以下文章链接&#xff1a; 1. 基于Tensorflow来重现GPT v1模型_gzroy的博客-CSDN博客 2. 花费7元训练自己的GPT 2模型_gzroy的博客-CSDN博客 有…

C++STL——map/multimap容器详解

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 &#x1f4ac;文章目录 一.对组&#xff08;pair&#xff09;二.map/multimap基本概念三.map容器常用操作①map构造函数②map迭代器获取③map赋值操作④map大小操作⑤map…

突破视觉边界:深入探索AI图像识别的现状与挑战

图像识别作为人工智能领域的一个重要研究方向&#xff0c;取得了许多令人瞩目的成就。深入探索当前AI图像识别技术的现状以及所面临的挑战&#xff0c;讨论各种方法的优势和局限性。 目录 引言1.1 AI图像识别的背景和概述1.2 人工智能在图像识别中的应用和重要性 图像识别基础知…

RISC-V基础指令之逻辑指令 and、or、xor、not

RISC-V的逻辑指令是用于对两个寄存器或一个寄存器和一个立即数进行按位的逻辑运算&#xff0c;并将结果存放在另一个寄存器中的指令。按位的逻辑运算就是把两个操作数的每一位分别进行相应的逻辑运算&#xff0c;得到一个新的位。RISC-V的逻辑指令有以下几种&#xff1a; and&…

c++高性能多进程 cuda编程:GPU结构和通信速度+tiling的代码实现

根据c高性能多进程 cuda编程:GPU结构和通信速度tiling的分析&#xff0c;依靠pytorch的JIT进行了实现&#xff0c;所以在安装pytorch的环境中&#xff0c;直接执行test.py就能直接运行。 代码结构如下&#xff0c;地址 mm.h void function_mm(float *c,const float *a,cons…

一文辨析,性能分析top命令中进程NI和PR

分析 Linux 服务器性能&#xff0c;首先想到的命令肯定是 top, 通过它&#xff0c;我们可以看到当前服务器资源使用情况和进程运行资源占用情况。 如果你想学习自动化测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的自动化测试教程&…

网络安全【黑客】自学

1.什么是网络安全&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有…

MySql UNION 一行转多列

背景:DataEase饼图有特定格式&#xff0c;并且报表要求全部使用SQL语句获取数据 原先数据格式如下&#xff0c;需要行转换列 转换后结果&#xff1a; 原理 字段1&#xff0c;target作为一个不存在的字段&#xff0c;用于命名。 字段2&#xff0c;count字段是关键&#xff0c;…

Centos更换网卡名称为eth0

Centos更换网卡名称为eth0 已安装好系统后需要修改网卡名称为eth0 编辑配置文件将ens33信息替换为eth0,可在vim命令模式输入%s/ens33/eth0/g替换相关内容 修改内核文件,添加内容:net.ifnames=0 biosdevname=0 [root@nova3 ~]# vim /etc/default/grub 使用命令重新生成g…

高级IO:五种IO模型

五种IO模型 阻塞IO 阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式. 非阻塞IO 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EAGAIN/EWOULDBLOCK错误码. 非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这…

无人驾驶实战-第六课(动态环境感知与Tracking)

跟踪是在连续帧中根据物体信息关联(确定)同一物体 运动模型(motion model)&#xff1a;根据历史的位置和速度 ( 大小和方向) 建立模型&#xff0c;预测当前帧中物体的大致位置 外观模型(appearance model)&#xff1a;根据历史外观&#xff08;颜色 尺寸 2D/3D框 轮廓等&#…

开发运营监控

DevOps 监控使管理员能够实时了解生产环境中的元素&#xff0c;并有助于确保应用程序平稳运行&#xff0c;同时提供最高的业务价值&#xff0c;对于采用 DevOps 文化和方法的公司来说&#xff0c;这一点至关重要。 什么是开发运营监控 DevOps 通过持续开发、集成、测试、监控…

如何将超大文件传输给别人,超大文件如何传输呢?

我们在日常生活和工作中&#xff0c;经常会遇到需要把超大文件发送给别人的情况。但是&#xff0c;在互联网发展如此迅速的今天&#xff0c;我们还有哪些方法可以快速地传输超大文件呢&#xff1f;超大文件应该怎样传输才能保证效率和安全呢&#xff1f;这些问题一直困扰着我们…

利用PostGIS自带工具导入shp数据

一、shapefile导入PostGIS 1、利用PostGIS自带工具导入 开始程序搜索如下工具 打开工具界面如下图&#xff0c;点击View conncetion details进行数据库连接&#xff0c;点击Add File进行Shapefile所在路径加载&#xff0c;点击Option进行编码设置&#xff0c;设置完成后点击Im…

mac录屏怎么打开?很简单,让我来教你!

mac电脑作为一款广受欢迎的电脑系统&#xff0c;提供了多种方式来满足用户录屏的需求。无论您是要录制教学视频、制作演示文稿&#xff0c;还是记录游戏精彩瞬间&#xff0c;mac电脑都能帮助您实现这些目标。本文将为您介绍两种mac录屏的方法。通过本文的指导&#xff0c;您将能…

8.4一日总结

1.远程仓库的提交方式(免密提交) a.ssh:隧道加密传输协议,一般用来登录远程服务器 b.使用 git clone 仓库名 配置(生成公私钥对) ssh-Keygen [-t rsa -C 邮箱地址] 通过执行上述命令,全程回车,就会在~/.ssh/id_rsa(私钥)和id_rsa.pub(公钥),私钥是必须要保存好的,并不能…

明白均线信号的投资者就知道如何交易

在Forexclub上的交易的投资者&#xff0c;都在使用5、25和50周期的均线来分析收盘价。其中&#xff0c;5周期的均线为红色&#xff0c;25和50周期的均线为黄色。同时使用抛物面SAR指标&#xff0c;保留其默认参数。 开立多头头寸的条件是&#xff1a;5周期的红色均线从下方突破…