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

别再瞎学!C 语言入门看这篇就够了

目录

1. 如何学好C语言

2. C语言是什么?

3. C语⾔的历史和辉煌

4. 编译器的选择

4.1 编译和链接

4.2 编译器大比拼,VS2022 脱颖而出

4.3 VS2022 优缺点大揭秘

5. VS项⽬ 和 源⽂件、头⽂件介绍

 6. 第一个C语言程序

7. main 函数:程序的 “大管家”

8. printf 和库函数 

8.1 printf

8.2 那什么是库函数呢?

9. 关键字的介绍

10.字符和 ASCII 编码 

11. 字符串和 \0

12. 转义字符

13.语句分类 

14. 注释 

    在编程的世界里,C 语言就像是一位低调却实力超强的武林高手,看似朴实无华,实则内功深厚。它不仅是很多其他编程语言的 “前辈”,还在操作系统、嵌入式开发等众多领域有着不可替代的地位。今天,咱们就一起揭开 C 语言的神秘面纱,看看它到底有啥魅力!

【声明】:第一章节只是简单介绍C语言的一些基本概念以及C语言的开发环境,在接下来的两个多月里,博主将持续更新C语言模块,由0基础到进阶层层递进。加油吧!各位铁汁们,上天一定会眷顾各位努力的铁汁们,相信在不久的未来,各位铁汁们都能够进入到心仪的公司去继续提升自己。

1. 如何学好C语言

    在编程领域,C 语言堪称万物之源,是长远 IT 职业发展的上佳之选。作为母体语言,它是人机交互接近底层的关键桥梁。回顾 IT 行业,大致每 10 年就会经历一次变革,然而在长达 40 年的时间里,C/C++ 在 TIOBE 排行榜中始终稳居前三,地位坚如磐石,可谓是经典永不过时。

    若想学好一门计算机语言,努力是必不可少的要素。倘若总是循规蹈矩,走和他人相同的学习路径,又怎能脱颖而出呢?所以,需要付出与众不同的努力。

    时间如同海绵里的水,只要你愿意去挤,总会有的。在学习 C 语言的过程中,遇到问题应先尝试自行解决,若实在无法攻克,再借助 AI 软件查询。

    学好编程,绝不仅仅是掌握一门语言这么简单,还需深入学习数据结构、计算机网络、操作系统等相关知识。在闲暇时光,阅读一些计算机领域的优质书籍,有助于修炼 “内功”,让自己对知识的掌握更加精湛。

    最主要的一点,多敲代码,多敲代码,多敲代码!!!重要的事情说三遍,想要算法写的好,唯手熟尔。

2. C语言是什么?

    咱们日常交流用的是汉语、英语这些自然语言,那人和计算机交流靠什么呢?答案就是计算机语言。C 语言就是众多计算机语言中的一员,像我们熟悉的 C++、Java、Python 等也都属于这个大家族。它就像是计算机能听懂的 “方言”,通过编写 C 语言程序,我们就能给计算机下达指令,让它乖乖干活。

3. C语⾔的历史和辉煌

C 语⾔最初是作为 Unix 系统的开发⼯具⽽发明的

4. 编译器的选择

4.1 编译和链接
    C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。
    C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个过程。
    简单来说,编译就是把我们写的代码翻译成计算机能懂的 “机器语言”,每个以.c 为后缀的源文件会单独被编译器处理,生成对应的目标文件(.obj 后缀)。然后,链接器会把这些目标文件和库文件 “组装” 起来,生成最终的可执行程序(.exe 文件),这就好比把各种零件组装成一台能正常运转的机器。

    ⼀个⼯程⼀般都会有多个源⽂件组成,如下图所⽰,演⽰了源程序经过编译器和链接器处理的过程。(图有点粗糙,凑合着看吧)

   这就是,在Windows电脑上C语⾔程序⽣成的exe可执⾏⽂件

4.2 编译器大比拼,VS2022 脱颖而出

    常见的 C 语言编译器有 msvc、clang、gcc 等,还有像 VS2022、XCode、CodeBlocks、DevC++、Clion 这些集成开发环境(IDE)。这些 IDE 把代码编辑器、编译器、调试器、链接器等工具集成在一起,方便我们开发。

    VS2022 集成了 MSVC,它安装起来很简单,不用额外配置环境,直接就能上手,对咱们初学者特别友好,而且它在企业里也用得很普遍。

    XCode 主要在苹果电脑上用,集成了 clang;

    CodeBlocks 和 DevC++ 都集成了 gcc,不过 CodeBlocks 需要配置环境,不太适合新手,DevC++ 虽然小巧,但功能相对简单,更适合竞赛使用。

    Clion 默认用 CMake,编译器能自己配置,但是要收费。综合考虑,VS2022 社区版是咱们学习 C 语言的绝佳选择。

4.3 VS2022 优缺点大揭秘

    VS2022 的优点可不少,它功能强大,编辑器、编译器、调试器、链接器一应俱全,就像一个编程 “大礼包”。安装好就能用,基本不用操心环境配置的问题,而且默认界面是中文的,对咱们来说很友好。

    不过,它也有个小缺点,就是功能太丰富,导致安装包比较大,占用的空间多。但总体来说,瑕不掩瑜,还是很值得安装的。

整体考虑,推荐⼤家安装 VS2022 的社区版本学习,免费,使⽤⽅便,⼯作中常⻅。
VS2022 的安装教程: https://www.bilibili.com/video/BV11R4y1s7jz/
     (鹏哥同时也是我的C语言导师,记得我最初学C语言找了很多资料和课程,但是都学不进去,有一次打开鹏哥的课程后,我好想有了启发似得,对学C语言的热情一发不可收拾,在这里感谢比特鹏哥,同时大家想学习C语言的铁汁们也可以选择去看鹏哥哔站上的C语言课程,包能学会的)

5. VS项⽬ 和 源⽂件、头⽂件介绍

    在 VS2022 里写代码,得先创建项目,这就好比盖了一栋房子。项目建好后,就能在里面添加源文件(.c 后缀)和头文件(.h 后缀)了。源文件是存放 C 语言代码的地方,是程序的 “核心战场”;头文件则像是一个 “工具库”,里面放着函数声明、宏定义等内容,方便在不同的源文件里使用。

 6. 第一个C语言程序

#include<stdio.h>
int main()
{printf("Hello World\n");return 0;
}

    这就是我们的第一个 C 语言程序啦!代码里,#include <stdio.h>是把标准输入输出头文件 “请” 进来,这样我们就能使用里面的函数了。printf函数的作用是在屏幕上打印信息,这里它会输出 “Hello World”。main函数是程序的入口,程序从这里开始执行,最后return 0表示程序正常结束。在 VS2022 里,按下 Ctrl + F5 快捷键,就能看到程序运行的结果啦,是不是很有成就感?

7. main 函数:程序的 “大管家”

    每个 C 语言程序都有且只有一个main函数,我们称他为主函数,它是程序的入口,就像房子的大门,程序从这里开始 “起航”。main前面的int表示这个函数执行结束后会返回一个整型值,所以在函数最后写return 0,这是一种规范的写法。

    初学者常见的错误总结:

    1.把main写mian

    2.main后面的括号丢掉

    3.代码中的符号都是英文符号

    4.每条语句后面都会有一个 ;

8. printf 和库函数 

8.1 printf

    在前面的代码里,printf函数帮我们实现了信息打印。它是一个库函数,功能是在标准输出设备(一般就是屏幕上)打印信息。除了打印字符串,它还能打印各种类型的数据。

int n = 100;
printf("%d\n", n); // 打印整型
printf("%c\n", 'q'); // 打印字符
printf("%lf\n", 3.14); // 打印双精度浮点型

    这些不同的数据类型我们第一节先不具体讲解。

    这里的%d%c%lf等是占位符,会被后面相应的值替换。使用库函数的时候,别忘了包含对应的头文件,比如用printf函数就得加上#include <stdio.h>。库函数是 C 语言标准规定的一组函数,由不同的编译器厂商按照标准实现,提供给程序员使用,就像是一套现成的工具,能帮我们提高开发效率。

8.2 那什么是库函数呢?
   为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不 同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准 库,这些函数也被称为库函数。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函 数其他编译器不⼀定⽀持)。 ⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。 库函数⽐较多,后期慢慢来介绍,提前了解可参考链接:   
https://cplusplus.com/reference/cstring      

9. 关键字的介绍

    C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键

字。

    C语言常见的关键字有32个,在后续的学习中,我们会慢慢熟悉它们的用法。

auto break case char const continue default do double else enum 
extern float for goto if int long register return short signed sizeof
static struct switch typedef union unsigned void volatile while
    关键字都有特殊的意义,是保留给C语⾔使⽤的
    程序员⾃⼰在创建标识符的时候是不能和关键字重复的
    关键字也是不能⾃⼰创建的
    注:在C99标准中加⼊了 inline   restrict _Bool _Complex _Imaginary 等关键字。
    ⼀些关键字⼤家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。
    注: https://zh.cppreference.com/w/c/keyword (C语⾔关键字的全部介绍)

   

    在后续的学习中,我们会慢慢熟悉它们的用法。

10.字符和 ASCII 编码 

    在键盘上敲出的各种符号,像a@等,在 C 语言里都是字符,用单引号括起来表示,比如'a''@'。计算机里所有的数据都是以二进制形式存储的,字符也不例外。为了统一标准,方便大家交流,美国国家标准学会(ANSI)制定了 ASCII 编码,C语言中的字符就遵循ASCII编码的方式。

参考:https://zh.cppreference.com/w/cpp/language/ascii
我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据:
字符A~Z的ASCII码值从65~90
 
字符a~z的ASCII码值从97~122
 
对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
 
数字字符0~9的ASCII码值从48~57
 
换⾏ \n 的ASCII值是:10
 
在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
 

神奇吧,哈哈哈哈,a对应的码值刚好是97,打印出来一模一样

11. 字符串和 \0

    在 C 语言里,用双引号括起来的一串字符就是字符串,比如"abcdef"。打印字符串可以用%s指定格式,也能直接打印。这里有个重要的知识点,字符串末尾会隐藏一个\0字符,它是字符串的结束标志。

字符串的两种打印方式

    下面是 VS2022 的监视窗口,它需要在调试状态下才能打开,主要用于观察代码执行过程中变量等状态的变化。在调试时,我们通过监视窗口观察到,创建了两个数组,第一个数组存储的是'a' 'b' 'c' ,第二个数组存储的是'a' 'b' 'c' '\0'。由此,我们可以验证字符串末尾隐藏着\0 这一特性。在监视窗口中,数组会以特定的形式展示元素,方便我们直观地对比这两个数组的差异。

下面我们执行一下这段代码 

    运行上述代码后,我们会发现一个有趣的现象。在输出结果中,第一行出现了 “烫烫烫” 这样奇怪的内容,而第二行则正常输出了 “abc”。为什么会这样呢?

    这就要提到%s的打印规则了。%s在打印字符串时,遇到\0就会停止打印。对于arr数组,我们是以字符形式初始化{'a','b','c'},并没有自动添加字符串结束符\0。所以当使用%s打印arr时,它会一直往后寻找\0,直到在后续内存空间中碰到一个\0才停止。而后续未初始化的内存空间中的值是随机的,在 Visual Studio 环境下,这些随机值打印出来就呈现为 “烫烫烫”。

    反观arr1数组,我们使用字符串常量"abc"进行初始化,在 C 语言中,字符串常量末尾会自动添加\0。因此,%s在打印arr1时,能够正常识别到末尾的\0,从而正确输出 “abc”。

    在实际的 C 语言编程中,正确处理字符串结束符\0至关重要。如果忽略了它,可能会导致字符串操作出现错误,比如越界访问内存,进而引发程序崩溃等严重问题。

12. 转义字符

    在 C 语言里,有一些特殊的字符,它们叫转义字符,能改变原来字符的意思。比如说\n,它表示换行。

#include <stdio.h>
int main()
{printf("abc\ndef");return 0;
}

     运行这段代码,输出的结果是 “abc” 和 “def” 分在两行,这就是\n的作用。除了\n,还有很多转义字符 。

C语⾔中像这样的转义字符还有⼀些,具体如下:
•
\? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。
•
\' :⽤于表⽰字符常量'
•
\" :⽤于表⽰⼀个字符串内部的双引号
•
\\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
•
\a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
•
\b :退格键,光标回退⼀个字符,但不删除字符。
•
\f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。
•
\n :换⾏符。
•
\r :回⻋符,光标移到同⼀⾏的开头。
•
\t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
•
\v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
•
\ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
•
\xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0
\0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其
ASCII码值是0.

这些ASCII码值是可以⾃⼰写代码验证的,⼤家也可以⾃⼰验证。

转义字符参考:https://zh.cppreference.com/w/c/language/escape 

13.语句分类 

    C 语言的代码是由一条条语句组成的,主要分为五类:空语句、表达式语句、函数调用语句、复合语句和控制语句。

  • 空语句:最简单的空语句就是一个分号,虽然它啥也不做,但在某些特定的地方很有用,比如当程序需要一条语句占位,但又不需要执行具体操作时,就可以用空语句。
  • #include <stdio.h>
    int main()
    {;//空语句return 0;
    }
  • 表达式语句:在表达式后面加上分号就构成了表达式语句,比如int a = 20; b = a + 5;等都是表达式语句。
  • #include <stdio.h>
    int main()
    {int a = 20;int b = 0;b = a + 5; //表达式语句return 0;
    }
  • 函数调用语句:函数调用加上分号就是函数调用语句,像printf("hehe\n"); int ret = Add(2, 3);(ADD一般是加法函数的命名)都是函数调用语句,它们负责调用函数执行特定的功能。
  • #include <stdio.h>
    int Add(int x, int y)
    {return x+y;
    }
    int main()
    {printf("hehe\n");//函数调⽤语句int ret = Add(2, 3);//函数调⽤语句 return 0;
    }
  • 复合语句:用成对括号括起来的代码块就是复合语句,也叫代码块。函数里的代码块和循环体里的代码块都属于复合语句,它能把多条语句组合成一个逻辑单元。
  • void print(int arr[], int sz) //函数的⼤括号中的代码也构成复合语句
    {int i = 0;for(i=0; i<sz; i++){printf("%d ", arr[i]);}
    }
    int main()
    {int i = 0;int arr[10] = {0};for(i=0; i<10; i++) //for循环的循环体的⼤括号中的就是复合语句{arr[i] = 10-i;printf("%d\n", arr[i]);}return 0;
    }
  • 控制语句:控制语句用于控制程序的执行流程,实现顺序结构、选择结构和循环结构。C 语言有九种控制语句,分为条件判断语句(if语句、switch语句)、循环执行语句(do while语句、while语句、for语句)和转向语句(break语句、goto语句、continue语句、return语句),后续学习中我们会深入了解它们的用法。
  • 14. 注释 

  • 注释是对代码的解释说明,编译器会忽略注释,它主要是写给程序员自己或其他阅读代码的人看的。好的注释能帮助我们更好地理解代码,就像在陌生的地方有了路牌。不过,也别过度注释,写那些没必要的注释反而会让代码看起来乱糟糟的。

    C 语言的注释有两种形式:

  • /**/形式:把注释内容放在/*...*/之间,可以分行写,也能插在行内。但要注意,一定要写结束符号*/,不然会导致错误,而且这种注释不支持嵌套。
  • //形式:这是 C99 标准新增的语法,把注释放在双斜杠//后面,从双斜杠到行尾都是注释内容,它只能是单行注释,可以放在行首或语句结尾。另外,注释可不能放在双引号里面,不然就会变成字符串的一部分,失去注释的作用啦。编译的时候,注释会被替换成一个空格。
  •  附加两道练习题

  •  发布信息_牛客题霸_牛客网你的手机丢了,在屏幕上输出信息告诉大家。。题目来自【牛客题霸】https://www.nowcoder.com/practice/20e59d0f388448c68f581b9d3ca66049?tpId=107&&tqId=33312&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking

     BC6-小飞机https://www.nowcoder.com/practice/5cd9598f28f74521805d2069ce4a108a?tpId=107&&tqId=33287&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking

相关文章:

别再瞎学!C 语言入门看这篇就够了

目录 1. 如何学好C语言 2. C语言是什么&#xff1f; 3. C语⾔的历史和辉煌 4. 编译器的选择 4.1 编译和链接 4.2 编译器大比拼&#xff0c;VS2022 脱颖而出 4.3 VS2022 优缺点大揭秘 5. VS项⽬ 和 源⽂件、头⽂件介绍 6. 第一个C语言程序 7. main 函数&#xff1a;程序…...

Linux操作系统5-进程信号2(信号的4种产生方式,signal系统调用)

上篇文章&#xff1a;Linux操作系统5-进程信号1&#xff08;信号基础&#xff09;-CSDN博客 本篇Gitee仓库&#xff1a;myLerningCode/l25 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点&#xff1a;信号的4种产生 目录 一. signal系统调用 …...

【Groovy】Array、List、Set、Map简介

1 Array 1.1 创建数组 1.1.1 创建一维数组 int[] arr1 new int[2] arr1[0] 1 arr1[1] 2float[] arr2 new float[] { 1f, 2f, 3f } String[] arr3 ["abc", "xyz"] as String[] 1.1.2 创建二维数组 int[][] arr1 new int[2][2] arr1[0][0] 1 arr…...

DeepSeek与数据分析:现状、挑战与未来展望

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;的浪潮正以前所未有的速度席卷各个领域&#xff0c;数据分析作为众多行业决策的关键支撑&#xff0c;也不可避免地受到AI技术发展的深刻影响。近期&#xff0c;AI话题持续火热&#xff0c;不少企业老板要求员工…...

【通俗讲解电子电路】——从零开始理解生活中的电路(三)

实际应用案例&#xff1a;生活中的电子电路 ——拆解你身边的“隐形工程师” 1. 手电筒电路&#xff1a;最简单的直流系统 电路组成 电源&#xff1a;2节1.5V电池&#xff08;串联3V&#xff09;。 开关&#xff1a;按钮控制回路通断。 LED&#xff1a;发光二极管&#xff…...

JVM基本概念及内存管理模型

一、JVM基本概念 JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令&#xff0c;并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下&#xff1a; 加载和执行…...

【CPP面经】科大讯飞 腾讯后端开发面经分享

文章目录 C 面试问题整理基础问题简答1. 内存对齐2. this 指针3. 在成员函数中删除 this4. 引用占用内存吗&#xff1f;5. C 越界访问场景6. 进程通信方式7. 无锁队列实现8. ping 在哪一层&#xff1f;实现原理&#xff1f;9. HTTPS 流程10. GDB 使用及 CPU 高使用定位11. 智能…...

2.反向传播机制简述——大模型开发深度学习理论基础

在深度学习开发中&#xff0c;反向传播机制是训练神经网络不可或缺的一部分。它让模型能够通过不断调整权重&#xff0c;从而将预测误差最小化。本文将从实际开发角度出发&#xff0c;简要介绍反向传播机制的核心概念、基本流程、在现代网络中的扩展&#xff0c;以及如何利用自…...

使用Word时无法粘贴,弹出错误提示:运行时错误‘53‘:文件未找到:MathPage.WLL

报错说明 使用Word时无法粘贴&#xff0c;粘贴时弹出提示如下&#xff1a; 一般出现这种情况时&#xff0c;我想你是刚装完MathType不久&#xff0c;博主装的是MathType7版本&#xff0c;出现了这个问题。 出现这个问题的原因是"mathpage.wll"这个文件在Office的插…...

详解matplotlib隐式pyplot法和显式axes法

Python的matplotlib提供了pyplot隐式方法和显式Axes方法&#xff0c;这让很多人在选择时感到困惑。本文用9000字彻底解析两种方法的区别与适用场景&#xff0c;节选自&#x1f449;Python matplotlib保姆级教程 matplotlib隐式绘图方法&#xff08;pyplot&#xff09; matplot…...

100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全

文章目录 1. urllib概述2. urllib.request模块 1. urllib.request.urlopen()2. urllib.request.urlretrieve()3. urllib.request.Request()4. urllib.request.install_opener()5. urllib.request.build_opener()6. urllib.request.AbstractBasicAuthHandler7. urllib.request.…...

FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…...

Leetcode LRU缓存

LRU 缓存算法思想及代码解析 算法思想 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存 需要满足以下要求&#xff1a; 在 O(1) 时间复杂度内完成 get 和 put 操作。当缓存满时&#xff0c;删除最近最少使用的元素&#xff08;即最久没有被访问…...

结合PyMuPDF+pdfplumber,删除PDF指定文本后面的内容

🚀 一、需求场景解析 在日常办公中,我们经常会遇到这样的痛点: 合同处理:收到上百份PDF合同,需要找到"签署页"之后的内容并删除报表加工:批量移除财务报表中的敏感数据区域文档归档:快速提取技术文档的关键章节传统的手动操作方式存在三大致命缺陷: ❗ 耗时…...

【NLP 30、文本匹配任务 —— 传统机器学习算法】

目录 一、文本匹配任务的定义 1.狭义解释 2.广义解释 二、文本匹配的应用 1.问答对话 2.信息检索 3.文本匹配任务应用 三、智能问答 1.智能问答的基本思路 依照基础资源划分&#xff1a; 依照答案产出方式划分 依照NLP相关技术划分 四、智能问答的价值 1.智能客服 2.Faq知识库问…...

修改hosts文件,修改安全属性,建立自己的DNS

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

springboot + mybatis-plus + druid

目录架构 config MyMetaObjectHandler.java package com.example.config;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util.Date;Com…...

【零基础到精通Java合集】第十一集:List集合框架与泛型

课程标题:List集合框架与泛型(15分钟) 目标:掌握泛型在List中的应用,理解类型安全的重要性,熟练操作泛型集合 0-1分钟:泛型List的意义引入 以“分类储物箱”类比泛型List:明确容器内元素类型(如只能放书籍)。说明泛型的核心作用——编译时类型检查,避免运行时类型…...

计算机网络——子网掩码

一、子网掩码是什么&#xff1f;它长什么样&#xff1f; 子网掩码的定义 子网掩码是一个32位的二进制数字&#xff0c;与IP地址“配对使用”&#xff0c;用于标识IP地址中哪部分属于网络地址&#xff0c;哪部分属于主机地址。 示例&#xff1a;IP地址 192.168.1.10&#xff0c;…...

[自然语言处理]pytorch概述--什么是张量(Tensor)和基本操作

pytorch概述 PyTorch 是⼀个开源的深度学习框架&#xff0c;由 Facebook 的⼈⼯智能研究团队开发和维护&#xff0c;于2017年在GitHub上开源&#xff0c;在学术界和⼯业界都得到了⼴泛应⽤ pytorch能做什么 GPU加速自动求导常用网络层 pytorch基础 量的概念 标量&#xf…...

18.5 ChatGLM2-6B 开源协议深度解读:自由与约束的平衡之道

ChatGLM2-6B 开源协议深度解读:自由与约束的平衡之道 关键词:ChatGLM2 开源协议, 模型授权合规, 商业使用限制, 技术伦理条款, 国产大模型治理 1. 协议核心条款全景解析 ChatGLM2-6B 采用 分层授权模式,其核心条款可归纳为三大维度: #mermaid-svg-xgEnsN0y2TMOR0Hf {font…...

javaweb自用笔记:Vue

Vue 什么是vue vue案例 1、引入vue.js文件 2、定义vue对象 3、定义vue接管的区域el 4、定义数据模型data 5、定义视图div 6、通过标签v-model来绑定数据模型 7、{{message}}直接将数据模型message展示出来 8、由于vue的双向数据绑定&#xff0c;当视图层标签input里的…...

FreeRTOS 源码结构解析与 STM32 HAL 库移植实践(任务创建、删除篇)

1. FreeRTOS源码结构介绍 1.1 下载源码 ​ 点击官网地址&#xff0c;选择 FreeRTOS 202212.01非 LTS 版本&#xff08;非长期支持版&#xff09;&#xff0c;因为这个版本有着最全的历程和更多型号处理器支持。 1.2 文件夹结构介绍 ​ 下载后主文件 FreeRTOSv202212.01 下包…...

第五节:基于Winform框架的串口助手小项目---串口收发《C#编程》

“路漫漫其修远兮&#xff0c;吾将上下而求索” &#xff0c; -----------------------WHAPPY 目标任务&#xff1a; 1 从本地设备列表获取串口。 RegistryKey keyCom Registry.LocalMachine.OpenSubKey("Hardware\DeviceMap\SerialComm"); RegistryKey 是.NET 框…...

CSS2.1基础学习

1.定位盒模型相关 2.浮动 3.使用定位实现三列布局(不可取&#xff0c;定位父级为初始包含块) 4.使用浮动实现三列布局(不可取的原因是中间主列无法优先加载) 5.圣杯布局 6.等高布局 7.双飞翼布局 8.解决IE6下fixed失效问题 9.短暂总结 10.粘连布局 11.BFC是什么 12.BFC实现两列…...

alpine linux 系统最新版安装及使用教程

1.下载镜像包 官网地址 官网下载阿里云镜像站下载华为云镜像站下载清华大学镜像站下载中科大镜像站下载 官方安装文档 2.新建虚拟机 3.编辑虚拟机并开机 4.虚拟机安装 开启虚拟机 首次启动使用root登录&#xff0c;没有密码 登录成功&#xff0c;执行 setup-alpine 命令进…...

【Hudi-SQL DDL创建表语法】

CREATE TABLE 命令功能 CREATE TABLE命令通过指定带有表属性的字段列表来创建Hudi Table。 命令格式 CREATE TABLE [ IF NOT EXISTS] [database_name.]table_name[ (columnTypeList)]USING hudi[ COMMENT table_comment ][ LOCATION location_path ][ OPTIONS (options_lis…...

[Web 安全] PHP 反序列化漏洞 —— POP 链构造思路

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 0x01&#xff1a;什么是 POP 链&#xff1f; POP 链&#xff08;Payload On Purpose Chain&#xff09;是一种利用 PHP 中的魔法方法进行多次跳转以获取敏感数据的技术。它通常出现在 CTF…...

GPU/CUDA 发展编年史:从 3D 渲染到 AI 大模型时代

目录 文章目录 目录1960s~1999&#xff1a;GPU 的诞生&#xff1a;光栅化&#xff08;Rasterization&#xff09;3D 渲染算法的硬件化实现之路学术界算法研究历程工业界产品研发历程光栅化技术原理光栅化技术的软件实现&#xff1a;OpenGL 3D 渲染管线设计1. 顶点处理&#xff…...

除了DeepSpeed,在训练和推理的时候,显存不足还有什么优化方法吗?FlashAttention 具体是怎么做的

除了DeepSpeed&#xff0c;训练和推理时显存不足的优化方法及FlashAttention原理详解 DeepSpeed的基础内容&#xff1a;ZeRO分布式训练策略 一、显存不足的优化方法 1. 混合精度训练&#xff08;Mixed Precision Training&#xff09; 原理 使用FP16和FP32混合精度&#xff…...

GCC RISCV 后端 -- GCC 后端框架的一些理解

GCC 已经提供了一整套的编译框架&#xff0c;从前端&#xff08;Frontend / GENERIC-Tree&#xff09;对编程语言的语法语义处理&#xff0c;到中端&#xff08;Middle-End / GIMPLE-Tree&#xff09;的目标机器无关&#xff08;Target Indepndent&#xff09;的优化处理&#…...

庖丁解java(一篇文章学java)

(大家不用收藏这篇文章,因为这篇文章会经常更新,也就是删除后重发) 一篇文章学java,这是我滴一个执念... 当然,真一篇文章就写完java基础,java架构,java业务实现,java业务扩展,根本不可能.所以,这篇文章,就是一个索引,索什么呢? 请看下文... 关于决定开始写博文的介绍 …...

Spring框架自带的定时任务:Spring Task详解

文章目录 一、基本使用1、配置&#xff1a;EnableScheduling2、触发器&#xff1a;Scheduled 二、拓展1、修改默认的线程池2、springboot配置 三、源码分析参考资料 一、基本使用 1、配置&#xff1a;EnableScheduling import org.springframework.context.annotation.Config…...

DeepSeek 助力 Vue3 开发:打造丝滑的弹性布局(Flexbox)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

jwt 存在的无状态的安全问题与解决方案

背景我的需求 解决方法方案1:黑名单存在的问题解决方案问题成本估算: 方案2: 双token刷新核心解决的问题存在的问题 方案3: token与session结合成本估算 方案4: 长连接(websocket) 背景 jwt是无状态的,除了自动失效之外无法手动过期 举个例子: 当我们的token泄露或者密码泄露…...

【Python爬虫】爬取公共交通路网数据

程序来自于Github&#xff0c;以下这篇博客作为完整的学习记录&#xff0c;也callback上一篇爬取公共交通站点的博文。 Bardbo/get_bus_lines_and_stations_data_from_gaode: 这个项目是基于高德开放平台和公交网获取公交线路及站点数据&#xff0c;并生成shp文件&#xff0c;…...

Deepseek API+Python测试用例一键生成与导出-V1

在实际使用场景中&#xff0c;可能只需要获取需求文档中的部分内容&#xff0c;例如特定标题的正文部分、特定段落的表格内容&#xff0c;或者指定图片中的内容。为了满足这一需求&#xff0c;可以对文档清理工具进行优化&#xff0c;支持按标题提取内容、按章节提取表格和图片…...

如何为JAR设置定时重启?

AI越来越火了&#xff0c;我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站 前面我们说过了如何将jar交由Systemctl管理&#xff0c;下面我们…...

麒麟V10-SP2-x86_64架构系统下通过KVM创建虚拟机及配置虚机的NAT、Bridge两种网络模式全过程

文章目录 一、什么是虚拟化&#xff1f;虚拟化具有哪些优势 二、常见的虚拟化技术1、kvm介绍2、kvm工作原理3、kvm功能 三、安装kvm并启动第一个kvm机器1、环境准备2、安装kvm工具3、启动并设置开机自启 libvirtd 服务4、验证 KVM 模块是否加载5、上传系统镜像到指定目录6、网络…...

三方库总结

一、Glide 目标&#xff1a;熟练掌握各种使用方法&#xff0c;了解其设计&#xff0c;背后原理 如果我设计一个图片显示框架&#xff0c;我会怎么做&#xff1f; 1.加载图片资源-从网络上下载图片资源、从本地加载图片资源 如果是从网络上加载图片&#xff0c;需要用到相关的网…...

用DeepSeek-R1-Distill-data-110k蒸馏中文数据集 微调Qwen2.5-7B-Instruct!

下载模型与数据 模型下载&#xff1a; huggingface&#xff1a; Qwen/Qwen2.5-7B-Instruct HF MirrorWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct 魔搭&a…...

知识图谱的推荐实现方案(Vue)

使用 Vue 实现知识图谱思维导图展示的完整方案&#xff0c;结合主流库和最佳实践&#xff1a; 一、技术选型 组件库特点适用场景MindElixir国产开源、中文文档完善、支持关系线教育类知识图谱GoJS功能强大、商业许可、适合复杂交互企业级应用&#xff08;需付费&#xff09;D3…...

Nessus安装

Nessus&#xff1a;https://pan.quark.cn/s/f5fb09b6d4fb 1.软件安装 点击安装&#xff0c;剩下的下一步即可。 直接下一步安装即可 2.Web端安装 会弹出一个web窗口 开始初始化 创建用户 开始初始化 3.Cracker 会弹一个黑窗口 运行完&#xff0c;回车即可。访问https://loc…...

【大模型基础_毛玉仁】0.概述

更多内容&#xff1a;XiaoJ的知识星球 【大模型基础_毛玉仁】 系列文章参考 系列文章 【大模型基础_毛玉仁】0.概述 【大模型基础_毛玉仁】1.1 基于统计方法的语言模型 更新中。。。。。。 参考 书籍&#xff1a;大模型基础_完整版.pdf Github&#xff1a;https://github.co…...

quillEditor 禁用复制粘贴图片,以及class转style等问题

<template><div><div class"search-term"><el-form :inline"true" :model"searchInfo" class"demo-form-inline"><el-form-item label"案例标题"><el-input v-model"searchInfo.titl…...

C语⾔数据类型和变量

C 语言的数据类型 类型分类&#xff1a; C 语言提供丰富的数据类型&#xff0c;包括字符型&#xff08;char、signed char、unsigned char&#xff09;、整型&#xff08;short、int、long 等多种&#xff0c;且各有 signed 和 unsigned 修饰形式&#xff09; 、浮点型&#x…...

centOS 环境 安装redis方法

一、准备centOS环境 参考文章&#xff1a;Hyper-V 安装CentOS7_代码草率了的博客-CSDN博客 二、redis官网 地址&#xff1a;Download | Redis 演示版本为?redis-5.0.14.tar.gz 三、redis源码编译 登录后创建soft目录 进入目录使用wget下载所需资源包 命令&#xff1a;w…...

【Mac】2025-MacOS系统下常用的开发环境配置

早期版本的一个环境搭建参考 1、brew Mac自带终端运行&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Installation successful!成功后运行三行命令后更新环境&#xff08;xxx是mac的username&a…...

深入理解动态绑定与多态

动态绑定介绍 Java中的动态绑定&#xff0c;是一种在程序运行时确定方法执行版本的过程。它与多态紧密联系。 在Java中&#xff0c;动态绑定通常发生在以下情况&#xff1a; 方法覆盖&#xff1a;当子类重写父类的一个方法时&#xff0c;调用该方法的行为会根据对象的实际类…...

【数据结构】二叉树总结篇

遍历 递归 递归三部曲&#xff1a; 1.参数和返回值 2.终止条件 3.单层逻辑&#xff08;遍历顺序&#xff09; var preorderTraversal function(root) { // 第一种let res[];const dfsfunction(root){if(rootnull)return ;//先序遍历所以从父节点开始res.push(root.val);//递归…...