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

linux与c语言基础知识(未全部完成)

文章很多处理论,没办法写出来,(linux的一些理论问题,我有时间后,会逐个解决)

文章大多数的理论来字这个链接,

C语言快速入门-C语言基础知识-CSDN博客

一. linux(Ubuntu)

1. 基础命令(未完成,稍后补)

1.1. vim

vim是一个文本编辑器,挺强的

1.1.1 安装vim

(1)检查是否已安装 Vim

vim --version
  • 如果显示版本信息,说明已安装。

  • 如果提示未安装,继续下一步。

(2)安装完整版 Vim

sudo apt update && sudo apt install vim
  • Ubuntu 默认可能安装的是 vim-tiny(精简版),建议替换为完整版。

1.1.2 Vim 的基本使用

Vim 是一个模态编辑器,分为 普通模式(Normal Mode)插入模式(Insert Mode) 和 命令行模式(Command-Line Mode)。 


1.1.3 基本操作流程

1. 启动 Vim(打开/新建文件:)

vim 文件名  # 打开文件(若文件不存在则新建)

 2.进入插入模式

  • 按下 i:在光标前进入插入模式。

  • 按下 a:在光标后进入插入模式。

  • 按下 o:在下一行插入新行并进入插入模式。

3.推出插入模式

  • 按下 Esc 键返回普通模式。

4.保存与退出

  • :w:保存文件。

  • :q:退出 Vim。

  • :wq 或 :x:保存并退出。

  • :q!:强制退出(不保存修改)。

1.2 gdb工具

1.2.1 如何调试
1.2.2 设置断点(p,n,continue)

1.3 vsc中的调试

二. c语言基础知识

1 基础语法

-g:          使用该参数编译可以执行文件,得到调试表。
gdb ./a.out
list:         list 1 列出源码。根据源码指定 行号设置断点。
b:            b 20 在 20 行位置设置断点。
run/r:         运行程序
n/next:      下一条指令(会越过函数)
s/step:      下一条指令(会进入函数)
p/print:    p i 查看变量的值。
continue:继续执行断点后续指令。
finish:      结束当前函数调用。
quit:        退出 gdb 当前调试。

2 二进制(符号位)(结合数据类型的范围来讲)(从Linux来讲)

1.源码

2.反码

3.补码

负整数存的是补码

3 数据类型

1.数据类型

char           //字符数据类型

short          //短整型

int              //整形

long           //长整型

long long   //更长的整形

float           //单精度浮点数

double       //双精度浮点数

C语言中没有String字符串类型吗????

c语言中string用char的数组形式来表示。下方代码有举例。

#include <stdio.h>int main() {char a = 'a'; // 字符型变量 achar a1[] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 字符型数组 a1,注意加上结束符 '\0'char str1[] = "Hello"; // 字符数组表示字符串,即java中的stringchar *str2 = "World";  // 字符指针表示字符串short b = 10; // 短整型变量 bint c = 10; // 整型变量 clong d = 10; // 长整型变量 dfloat f = 10.0f; // 单精度浮点数 fdouble g = 10.00000; // 双精度浮点数 g// 输出变量的值printf("字符 a: %c\n", a);printf("字符数组 a1: %s\n", a1);printf("%s %s\n", str1, str2); printf("Length of str1: %zu\n", strlen(str1));//输出str1的长度,即为5printf("短整型 b: %d\n", b);printf("整型 c: %d\n", c);printf("长整型 d: %ld\n", d);printf("单精度浮点数 f: %.2f\n", f);printf("双精度浮点数 g: %.5f\n", g);return 0;}

2.intger型

int              //整形

#include <stdio.h>  // 引入stdio.h头文件以使用printf函数
#include <limits.h> // 引入limits.h头文件以获取取数据类型的范围
int main()
{/* 数据类型*/int a = 10;                            // 整数类型 (设置变量默认类型)float b = 3.14f;                       // 浮点数类型 (设置变量默认类型)char c = 'A';                          // 字符类型 (设置变量默认类型)short d = 5;                           // 短整型 (设置变量默认类型)long e = 100000L;                      // 长整型 (设置变量默认类型)long long f = 10000000000LL;           // 长长整型 (设置变量默认类型)unsigned int g = 20;                   // 无符号整数类型 (设置变量默认类型)unsigned char h = 'B';                 // 无符号字符类型 (设置变量默认类型)unsigned short i = 10;                 // 无符号短整型 (设置变量默认类型)unsigned long j = 100000UL;            // 无符号长整型 (设置变量默认类型)unsigned long long k = 10000000000ULL; // 无符号长长整型 (设置变量默认类型)// 打印变量的值printf("a = %d\n", a); // 注意:%d用于打印整数printf("b = %f\n", b); // 注意:%f用于打印浮点数// 打印数据类型的范围printf("int 最小 = %d,int 最大 = %d", INT_MIN, INT_MAX);                                  // 打印int类型的最小值printf("\nfloat 最小 = %e,float 最大 = %e", __FLT_MIN__, __FLT_MAX__);                    // 打印float类型的最小值和最大值printf("\nchar 最小 = %d,char 最大 = %d", CHAR_MIN, CHAR_MAX);                            // 打印char类型的最小值和最大值printf("\nshort 最小 = %d,short 最大 = %d", SHRT_MIN, SHRT_MAX);                          // 打印short类型的最小值和最大值printf("\nlong 最小 = %ld,long 最大 = %ld", LONG_MIN, LONG_MAX);                          // 打印long类型的最小值和最大值printf("\ndouble 最小 = %e,double 最大 = %e", __DBL_MIN__, __DBL_MAX__);                  // 打印double类型的最小值和最大值printf("\nlong long 最小 = %lld,long long 最大 = %lld", LLONG_MIN, LLONG_MAX);            // 打印long long类型的最小值和最大值printf("\nunsigned int 最小 = %u,unsigned int 最大 = %u", 0, UINT_MAX);                   // 打印unsigned int类型的最小值和最大值printf("\nunsigned char 最小 = %u,unsigned char 最大 = %u", 0, UCHAR_MAX);                // 打印unsigned char类型的最小值和最大值printf("\nunsigned short 最小 = %u,unsigned short 最大 = %u", 0, USHRT_MAX);              // 打印unsigned short类型的最小值和最大值printf("\nunsigned long 最小 = %lu,unsigned long 最大 = %lu", 0, ULONG_MAX);              // 打印unsigned long类型的最小值和最大值printf("\nunsigned long long 最小 = %llu,unsigned long long 最大 = %llu", 0, ULLONG_MAX); // 打印unsigned long long类型的最小值和最大值return 0;
}

3. bool型

非真即假
#include <stdio.h>
int main(int argc, char const *argv[])
{/* bool */// 使用if判断为真,条件代码执行,非真,条件代码不执行if (0){printf("0为假\n");}else{printf("0为真\n");}if (1){printf("1为真\n");}else{printf("1为假\n");}return 0;
}

4. float浮点型

float           //单精度浮点数

#include <stdio.h>  // 引入stdio.h头文件以使用printf函数
#include <limits.h> // 引入limits.h头文件以获取取数据类型的范围
#include <float.h>  // 引入float.h头文件以获取浮点数类型的范围int main(int argc, char const *argv[])
{/* 默认实型(浮点型,小数)为浮点型,默认整数为int型*/// float类型// float类型的精度为6位,范围为-3.4E+38到3.4E+38float a = 3.14f;                                                     // 单精度浮点数类型,占位符%f,精确度为6位printf("a = %f\n", a);                                               // 注意:%f用于打印浮点数,默认打印小数点后6位printf("float 最小 = %f,float 最大 = %f", __FLT_MIN__, __FLT_MAX__); // 打印float类型的最小值和最大值printf("\nfloat 精度 = %d", FLT_DIG);                                // 打印float类型的精度,6位,科学计数法%fprintf("a=%.17f,float类型的字节数为=%lu\n", a, sizeof(float));       // 打印float类型的长度,小数点后六位不精确// double类型// double类型的精度为15位,范围为-1.7E+308到1.7E+308double b = 3.1455555555555555555;                                        // 双精度浮点数类型,占位符%lf,精确度为15位,默认打印小数点后6位printf("\nb = %lf\n", b);                                                // 注意:%lf用于打印双精度浮点数printf("double 最小 = %lf,double 最大 = %lf", __DBL_MIN__, __DBL_MAX__); // 打印double类型的最小值和最大值printf("\ndouble 精度 = %d", DBL_DIG);                                   // 打印double类型的精度,15位,科学计数法%lfprintf("b=%.16lf,double类型的字节数为=%lu\n", b, sizeof(double));        // 打印double类型的长度,小数点后15位不精确// long double类型// long double类型的精度为19位,范围为-1.1E+4932到1.1E+4932long double c = 3.1455555555555555555555;                                            // 长双精度浮点数类型,占位符%Lf,精确度为19位,默认打印小数点后6位printf("\nc = %Lf\n", c);                                                            // 注意:%Lf用于打印长双精度浮点数printf("long double 最小 = %Le,long double 最大 = %Le", __LDBL_MIN__, __LDBL_MAX__); // 打印long double类型的最小值和最大值printf("\nlong double 精度 = %d", LDBL_DIG);                                         // 打印long double类型的精度,19位,科学计数法%Lfprintf("c=%.20Lf,long double类型的字节数为=%lu\n", c, sizeof(long double));          // 打印long double类型的长度,小数点后19位不精确//printf("c=%20.10f\n", a); // 打印float类型的长度return 0;
}

5. char (string)型

char           //字符数据类型

#include <stdio.h>int main()
{/*// 字符charchar c = 'A';printf("%c\n", c); // 输出字符,终端输出为A// 字符输出为ascll码printf("%d\n", c);// 字符串char str[] = "Hello, World!";printf("%s\n", str);*/// 转移符//  \n 换行printf("Hello\nWorld\n");// \t 制表符printf("Hello\tWorld\n");printf("\173\n"); // 173是八进制表示的123printf("\x41\n"); // 41是十六进制表示的65// \\ 反斜杠printf("反斜杠:""a\\b\n");// \' 单引号printf("单引号:", "a\'b\n");// \" 双引号printf("双引号:,""a\"b\n");// \0 字符串结束符char str2[] = "a, b!\0";printf("%s\n", str2);// \b 退格符printf("Hello\bWorld\n");// \r 回车符printf("Hello\rWorld\n");return 0;
}

4 变量/常量

1 变量

1.1 定义变量

简而言之变量即使可以更改的量,其数值可以被更改。

1.2 变量的分类 

1.全局变量

  (1)即作用于代码运行全过程的变量

2.局部变量

  (2)即作用于部分代码块的变量

#include <stdio.h>
// 全局变量
int globalVar = 10; // 全局变量,作用域为整个文件
void function() {// 局部变量int localVar = 5; // 局部变量,作用域仅限于此函数内printf(" 函数内 局部变量 localVar 的值: %d\n", localVar);printf(" 函数内 全局变量 globalVar 的值: %d\n", globalVar);
}int main() {printf("全局变量 globalVar 的值: %d\n", globalVar); // 可以访问全局变量function();//调用上方的函数// printf("局部变量 localVar 的值: %d\n", localVar); // 这行代码会报错,因为 localVar 作用域仅限于 function 函数return 0;
}
1.3. 变量的使用

使变量等于输入两个值,使这两个变量进行加减乘除,结果取小数点后两位。

#include <stdio.h>
int main() {// 定义变量float num1, num2; // 用于存储输入的两个数float sum, difference, product, quotient; // 用于存储运算结果// 提示用户输入两个数,scanf的标准用法,于printf很相似printf("请输入第一个数: ");scanf("%f", &num1); // 读取第一个数printf("请输入第二个数: ");scanf("%f", &num2); // 读取第二个数// 进行运算sum = num1 + num2; // 加法difference = num1 - num2; // 减法product = num1 * num2; // 乘法quotient = num1 / num2; // 除法(注意:需要确保 num2 不为 0)// 输出结果,%.2f即为取余,小数点后两位,%.3f即为小数点后3位,以此类推。printf("加法结果: %.3f\n", sum);printf("减法结果: %.3f\n", difference);printf("乘法结果: %.3f\n", product);// 除法结果的输出需要检查除数是否为0if (num2 != 0) {printf("除法结果: %.2f\n", quotient);} else {printf("除法结果: 无法除以零\n");}return 0;
}
输出:

1.4. 变量的作用域与生命周期 
作用域:

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是可用的

而限定这个名字的可用性的代码范围就是这个名字的作用域。

1. 局部变量的作用域是变量所在的局部范围。

2. 全局变量的作用域是整个代码运行过程。

生命周期:

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

2. 全局变量的生命周期是:整个程序的生命周期,同理。

1.5. 定量 / 常量
1 常量定义

简而言之,定量即使不变的量。

2 常量类型

1. 字面常量

2. const 修饰的常变量(java中常用)

3. #define 定义的标识符常量

4. 枚举常量

#include <stdio.h>// 使用 #define 定义标识符常量
#define PI 3.14159 // 圆周率常量// 定义枚举常量
enum Color {RED,    // 默认第一个为0,以此类推。GREEN,  // GREEN = 1BLUE    // BLUE = 2
};int main() {// 字面常量int a = 10; // 整数字面常量float b = 5.5; // 浮点数字面常量// const 修饰的常量const int MAX_VALUE = 100; // 最大值常量,不能被修改// 输出各个常量的值printf("字面常量 a: %d\n", a);printf("字面常量 b: %.2f\n", b);printf("标识符常量 PI: %.5f\n", PI);printf("const 常量 MAX_VALUE: %d\n", MAX_VALUE);// 使用枚举常量enum Color myColor = GREEN; // 赋值为枚举常量printf("枚举常量 myColor: %d\n", myColor); // 输出枚举常量的整数值return 0;
}
输出:

 5. 字符串+转义字符+注释+格式修饰符

1. 字符串

1. 即Java中的String,用来表示多个字符在一起的样子。但是C中没有String的概念,所以字符串用char【】(字符型数组)来表示。

2. 下方的代码,用了四种方式来表示String,具体看代码注释,写的很清楚。

//可以简单认为include与java中的import是同一个意思。
#include <stdio.h>   // 引入标准输入输出库,提供输入输出函数,如printf和scanf
#include <stdlib.h>  // 引入标准库,包含内存分配(如malloc、free)、进程控制和转换等函数
#include <string.h>  // 引入字符串处理库,提供字符串操作函数,如strcpy、strlen等int main() {// 1. 使用字符数组定义字符串char str1[] = "hello world"; // 字符数组,自动添加'\0'char str11[] ={'0','1','2','3','4','\0'}; // 字符数组,自动添加'\0'<规范>// 2. 使用字符指针定义字符串const char *str2 = "hello world"; // 字符指针指向字符串常量// 3. 动态内存分配,malloc 返回的是 void* 类型的指针,表示它可以指向任何类型的内存。//指针相当于一种特殊类型的变量char *str3 = (char *)malloc(12 * sizeof(char)); // 开辟一个char类型,12长度的内存空间变量为str3这个指针变量if (str3 == NULL) { // 检查内存是否分配存在printf("内存分配失败\n");return 1; // 返回1表示异常,并输出内存分配失败}strcpy(str3, "hello world"); // // 输出所有字符串printf("%s\n", str1); // 输出字符数组printf("%s\n", str11); // 输出字符数组printf("%s\n", str2); // 输出字符指针printf("%s\n", str3); // 输出动态分配的字符串// 释放动态分配的内存free(str3);return 0; // 返回0表示程序正常结束
}
输出:

2. 转义字符

转义字符 释义(转义字符顾名思义就是转变意思。

\?      在书写连续多个问号时使用,防止他们被解析成三字母词

\'         用于表示字符常量'

\"        用于表示一个字符串内部的双引号

\\        用于表示一个反斜杠,防止它被解释为一个转义序列符。

\a       警告字符,蜂鸣

\b       退格符

\f        进纸符

\n       换行

\r        回车

\t        水平制表符

\v       垂直制表符

\ddd   ddd表示1~3个八进制的数字。 如: \130 X

\xdd   dd表示2个十六进制数字。 如: \x30 0

 举例:

仔细看注释。

#include<stdio.h>
#include<string.h>
// strlen - string length - 求字符串长度
int main()
{printf("%d\n", strlen("abcdef"));printf("%d\n", strlen("abcdefg")); // 输出字符串 "abcdef" 的长度// \62被解析成一个转义字符printf("%d\n", strlen("c:\test\628\test.c"));//会输出错误,因为系统编译会把\t认识为转义符printf("%d\n", strlen("c:\\test\\628\\test.c")); // 使用双反斜杠表示反斜杠,就没有问题了。return 0;
}
详细使用方法: 
#include <stdio.h>int main() {// 1. \? - 表示问号字符      原因: \? 不会被解析为转义字符,直接输出问号。 printf("这是一个问号: \?\n"); // 输出: 这是一个问号: ?// 2. \' - 表示单引号字符    原因: \' 被解析为单引号字符,用于在字符串中包含单引号。printf("这是一个单引号: \'\n"); // 输出: 这是一个单引号: '// 3. \" - 表示双引号字符    原因: \" 被解析为双引号字符,用于在字符串中包含双引号。printf("这是一个双引号: \"\n"); // 输出: 这是一个双引号: "// 4. \\ - 表示反斜杠字符    原因: \\ 被解析为一个反斜杠字符,用于在字符串中包含反斜杠。printf("这是一个反斜杠: \\\n"); // 输出: 这是一个反斜杠: \// 5. \a - 表示警告音(响铃)原因: \a 表示响铃字符,某些终端或系统可能会发出声音。printf("这将响铃: \a\n"); // 可能会发出警告音(依赖于终端设置)// 6. \b - 表示退格符        原因: \b 将光标移动到前一个字符位置,覆盖该字符。printf("这是一个退格符: Hello\bWorld\n"); // 输出: HelloWorld(“Hello”中的最后一个字母被删除)// // 7. \f - 表示换页符        原因: \f 在某些终端中可能会导致换页,但在其他终端中可能没有明显效果。printf("这是一个换页符: Hello\fWorld\n"); // 输出: Hello(在某些终端中可能表现为换页)// 8. \n - 表示换行符        原因: \n 将光标移动到下一行,输出内容在新行显示。printf("这是一个换行符: Hello\nWorld\n"); // 输出: Hello//                                        //         World// 9. \r - 表示回车符        原因: \r 将光标移动到行首,后续字符会覆盖当前行的内容。printf("这是一个回车符: Hello\rWorld\n"); // 输出: World(“Hello”被覆盖)// 10. \t - 表示水平制表符   原因: \t 插入一个水平制表符的空格,增加字符之间的间距。printf("这是一个制表符: Hello\tWorld\n"); // 输出: Hello    World(“Hello”和“World”之间有一个制表符的空格)// 11. \v - 表示垂直制表符   原因: \v 在某些终端中可能表现为换行,但在其他终端中可能没有明显效果printf("这是一个垂直制表符: Hello\vWorld\n"); // 输出: Hello(可能会在某些终端中表现为换行)// 12. \ddd - 表示八进制数对应的字符    原因: 八进制数表示的字符在ASCII表中对应的字符。printf("这是一个八进制字符: \101\n"); // 输出: A(八进制101对应的字符是'A')// 13. \xdd - 表示十六进制数对应的字符  原因: 十六进制数表示的字符在ASCII表中对应的字符。printf("这是一个十六进制字符: \x41\n"); // 输出: A(十六进制41对应的字符是'A')return 0;}}}

3. 注释

1. 代码中有不需要的代码可以直接删除,也可以注释掉

2. 代码中有些代码比较难懂,可以加一下注释文字

vs Code 分为单行注释与多行注释,自己搜索,默认的我也忘了。嘿嘿嘿。

4. 格式说明符

格式说明符:

%d 或 %i   解释:输出或输入有符号十进制整数。

%u             解释:输出或输入无符号十进制整数。

%f              解释:输出或输入十进制浮点数(float)。

%lf             解释:输出或输入双精度浮点数(double)。

%c             解释:输出或输入单个字符。

%s             解释:输出或输入字符串(字符数组)。

%p             解释:输出指针的地址(内存地址)。

%o             解释:输出无符号八进制整数。

%x 或 %X  解释:输出无符号十六进制整数。%x 使用小写字母,%X 使用大写字母。

%e 或 %E  解释:以科学计数法输出浮点数。%e 使用小写字母 e,%E 使用大写字母 E。

%g 或 %G  解释:根据数值的大小自动选择使用 %f 或 %e 的格式输出浮点数。%g 使用小写字母,

%G             解释:使用大写字母。

格式说明符代码解释 :
#include <stdio.h>
int main() {// 1. %d 或 %i - 输出或输入有符号十进制整数    // 原因: %d 用于打印有符号整数,负数会正常显示。int signedInt = -42;printf("有符号十进制整数: %d\n", signedInt); // 输出: 有符号十进制整数: -42// 2. %u - 输出或输入无符号十进制整数    // 原因: %u 用于打印无符号整数,确保不会显示负号。unsigned int unsignedInt = 42;printf("无符号十进制整数: %u\n", unsignedInt); // 输出: 无符号十进制整数: 42// 3. %f - 输出或输入十进制浮点数(float)    // 原因: %f 默认输出六位小数,适用于浮点数。float floatNum = 3.14f;printf("十进制浮点数: %f\n", floatNum); // 输出: 十进制浮点数: 3.140000// 4. %lf - 输出或输入双精度浮点数(double)    // 原因: %lf 用于打印双精度浮点数,默认输出六位小数。double doubleNum = 3.141592653589793;printf("双精度浮点数: %lf\n", doubleNum); // 输出: 双精度浮点数: 3.141593// 5. %c - 输出或输入单个字符    // 原因: %c 用于打印单个字符。char character = 'A';printf("单个字符: %c\n", character); // 输出: 单个字符: A// 6. %s - 输出或输入字符串(字符数组)    // 原因: %s 用于打印字符串,直到遇到空字符 '\0'。char str[] = "Hello, World!";printf("字符串: %s\n", str); // 输出: 字符串: Hello, World!// 7. %p - 输出指针的地址(内存地址)    // 原因: %p 用于打印指针的地址,通常以十六进制格式输出。int *ptr = &signedInt;printf("指针地址: %p\n", (void *)ptr); // 输出: 指针地址: 0x7ffeedc3a5b4(地址会因运行而异)// 8. %o - 输出无符号八进制整数    // 原因: %o 用于打印无符号整数的八进制表示。printf("无符号八进制整数: %o\n", unsignedInt); // 输出: 无符号八进制整数: 50// 9. %x 或 %X - 输出无符号十六进制整数    // 原因: %x 用于打印小写十六进制,%X 用于打印大写十六进制。printf("无符号十六进制整数 (小写): %x\n", unsignedInt); // 输出: 无符号十六进制整数 (小写): 2aprintf("无符号十六进制整数 (大写): %X\n", unsignedInt); // 输出: 无符号十六进制整数 (大写): 2A// 10. %e 或 %E - 以科学计数法输出浮点数    // 原因: %e 和 %E 用于以科学计数法格式打印浮点数。printf("科学计数法 (小写): %e\n", floatNum); // 输出: 科学计数法 (小写): 3.140000e+00printf("科学计数法 (大写): %E\n", floatNum); // 输出: 科学计数法 (大写): 3.140000E+00// 11. %g 或 %G - 根据数值的大小自动选择格式输出浮点数    // 原因: %g 和 %G 根据数值的大小选择使用 %f 或 %e 格式输出。printf("自动选择格式 (小写): %g\n", doubleNum); // 输出: 自动选择格式 (小写): 3.14159printf("自动选择格式 (大写): %G\n", doubleNum); // 输出: 自动选择格式 (大写): 3.14159return 0;
}

相关文章:

  • Python图形界面编程(一)
  • 常用第三方库精讲:cached_network_image图片加载优化
  • 每天五分钟深度学习PyTorch:图像的处理的上采样和下采样
  • 第四节:核心概念高频题-Vue生命周期钩子变化
  • 解锁webpack:对html、css、js及图片资源的抽离打包处理
  • 麒麟信安与中教汇控达成战略合作,共绘教育信息化新蓝图
  • 修电脑之电脑没有声音
  • HarmonyOS-ArkUI: 组件内转场(transition)
  • rpm包管理
  • C语言 ——— 分支循环语句
  • 第51讲:AI在农业政策支持系统中的应用——用人工智能点亮科学决策的新范式
  • 绿色森林人文生活纪实摄影Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别?
  • Android 回显
  • Ubuntu 20.04 安装Docker 全过程
  • (2025最新版)CUDA安装及环境配置
  • java记忆手册(2)
  • 深入理解XGBoost(何龙 著)学习笔记(一)
  • 基于RabbitMQ实现订单超时自动处理
  • LeetCode热题100--283.移动零--简单
  • 长三角与粤港澳大湾区融合发展,无锡何以成为窗口?
  • 过敏性鼻炎,不只是“打喷嚏”那么简单
  • 习近平向气候和公正转型领导人峰会发表致辞
  • 舞剧《百合花》7月绽放,王安忆:这是送给母亲的一份礼物
  • 上海市统计局:经济运行开局平稳,高质量发展扎实推进
  • 湃书单|澎湃新闻编辑们在读的19本书:在工作中迷失