Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

文章目录

  • 1. Linux软件包管理器——yum
    • yum 语法
    • yum 常用命令
    • 安装 yum 仓库源
  • 2. Linux编辑器——vim
    • vim 的五种常用模式
    • 模式切换
    • vim 基本操作
    • 命令模式命令集
      • (1)光标命令
      • (2)复制粘贴命令
      • (3)撤销与重做
      • (4)删除
      • (5)替换
      • (6)其他命令
    • 底行模式命令集
      • (1)设置与取消行号
      • (2)保存并退出
      • (3)查找字符
      • (4)其他
    • 替换模式
    • 视图模式
      • 注释
      • 取消注释
    • vim 下的多线程操作
      • 切换文件
    • vim 配置
      • 安装方法
  • 3. Linux编译器——gcc/g++
    • 一个C/C++程序形成可执行文件的过程
    • gcc/g++ 的使用
    • 函数库
      • 动静态库的优缺点
    • gcc/g++ 选项
  • Linux调试器——gdb
    • 1. 安装gdb
    • 2. gdb的使用
  • Linux项目自动化构建工具——make/Makefile
    • 用法
    • 理解
    • 伪目标的概念及性质
    • 文件的时间属性
    • Makefile 推导能力
    • Makefile 定义变量
  • git
    • 安装git
    • git 四板斧
    • git 其他命令

1. Linux软件包管理器——yum

yum(Yellow dog Updater,Modified)是Linux下非常常用的一种包管理器。主要应用在Fedora,RedHat,Centos等发行版上。

和手机上的软件商店类似,我们可以使用 yum 来下载各种我们想要的软件包。使用 yum 时必须联网。

yum 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum 语法

yum [options] [command] [package ...]
  • **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 “yes”),-q(不显示安装的过程)等等。
  • **command:**要进行的操作。
  • **package:**安装的包名。

yum 常用命令

  • 列出所有可更新的软件清单命令:yum check-update
  • 更新所有软件命令:yum update
  • 仅安装指定的软件命令:yum install <package_name>
  • 仅更新指定的软件命令:yum update <package_name>
  • 列出所有可安裝的软件清单命令:yum list
  • 删除软件包命令:yum remove <package_name>
  • 查找软件包命令:yum search
  • 清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包
    • yum clean headers: 清除缓存目录下的 headers
    • yum clean oldheaders: 清除缓存目录下旧的 headers
    • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers

安装 yum 仓库源

  • epel【扩展软件源】
  • ls /etc/yum.repos.d/【查看是否有epel-repo】
  • 系统内如果没有 epel-repo,则需安装yum仓库源 yum install -y epel-release

2. Linux编辑器——vim

vi/vim 都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于 x window、 mac os、windows。

vim 有十二种模式,但是常用的有五种。
本篇文章只讲解这五种模式。

vim 的五种常用模式

  • 正常/普通/命令模式(Normal mode)
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode 下,或者到 last line mode
  • 插入模式(Insert mode)
    只有在 Insert mode 下,才可以做文字输入,按「ESC」键可回到命令行模式
  • 底行模式(last line mode)
    文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,「shift + :」即可进入该模式
  • 替换模式【shift + r = R】
  • 视图模式【ctrl + v】

要查看你的所有模式:打开vim,底行模式直接输入help vim-modes

模式切换

在这里插入图片描述

vim 基本操作

进入vim,在系统提示符号输入vim 及文件名称后,就进入vim 全屏幕编辑画面。
【注】进入vim之后,是处于 [正常模式],你要切换到 [插入模式] 才能够输入文字。

  • [正常模式] 切换至 [插入模式]
    输入a(默认定位到光标的下一个位置)
    输入i(默认定位到光标处)
    输入o(默认定位到光标的下一列开头)

  • [插入模式] 切换至 [正常模式]
    目前处于 [插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下Esc键转到 [正常模式] 再删除文字。当然,也可以直接删除。

  • [正常模式] 切换至 [末行模式]
    : (即 shift + ;)

  • 退出 vim 及保存文件,在 [命令模式] 下,按一下 : 冒号键进入 [底行模式]
    :w(保存当前文件)
    :wq(保存并退出 vim)
    :w! (强制保存)
    :q!(不保存强制退出 vim)
    :wq!(强制保存并退出 vim)

命令模式命令集

(1)光标命令

  • vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格

  • 按「 $ 」:移动到光标所在行的“行尾”

  • 按「^」:移动到光标所在行的“行首”

  • 按「w」:光标跳到下个字的开头

  • 按「e」:光标跳到下个字的字尾

  • 按「b」:光标回到上个字的开头

  • 按「#l」:光标移到该行的第#个位置,如:5l,56l

  • 按[gg]:进入到文本开始处

  • 按[shift+g]:进入文本末端

  • 按「ctrl」+「g」:列出光标所在行的行号。

  • 按「#G」:表示移动光标至文章的第#行行首。

  • 按「ctrl」+「b」:屏幕往“后”移动一页

  • 按「ctrl」+「f」:屏幕往“前”移动一页

  • 按「ctrl」+「u」:屏幕往“后”移动半页

  • 按「ctrl」+「d」:屏幕往“前”移动半页

(2)复制粘贴命令

  • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中,即复制单词【「nyw」复制 n 个单词到缓冲区】
  • 「yy」:复制光标所在行到缓冲区。【可以 nyy 复制 n 行】
  • 「p」:将缓冲区内的字符贴到光标所在位置【注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能】【可以「np」粘贴 n 次】

(3)撤销与重做

  • 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
  • 「ctrl + r」:撤销的恢复【对 ctrl + r 后悔,还按 u】

(4)删除

  • 「x」:每按一次,删除光标所在位置的一个字符【可以 nx 删除后面 n 个字母】
  • 「X」:大写的X,每按一次,删除光标所在位置的 “前面” 一个字符【可以 nx 删除前面 n 个字母】
  • 「dd」:删除光标所在行【和 p 配合,实现剪切】【可以 ndd 剪切 n 行】

(5)替换

  • 「r」:替换光标所在处的字符【支持 nr 用一个字符替换多个字符】
  • 「R」:进入替换模式,替换光标所到之处的字符,直到按下「ESC」键为止

(6)其他命令

  • 「shift + ~ 」:自动切换字母大小写
  • 「shift + # 」:自动查询选出和光标所在单词相同的所有单词,按 n 倒着查看下一个

底行模式命令集

(1)设置与取消行号

设置行号在底行模式输入:set nu

取消行号在底行模式输入:set nonu

(2)保存并退出

:w(保存当前文件)
:wq(保存并退出 vim)
:w! (强制保存)
:q!(不保存强制退出 vim)
:wq!(强制保存并退出 vim)

(3)查找字符

在底行模式输入:/关键字

此关键字会语法高亮出来,若这个关键字不是你想找的那个,可以按n键跳到下一个关键字位置。

(4)其他

可以在底行模式下执行 Linux 命令语句。

如:

  • !gcc test.c(加了!,不退出 vim 直接编译)
  • !./a.out(加了!,不退出 vim 直接运行)

替换模式

命令模式下输入:shift + r

在此模式下,所有的输入都会被当作替换,替换完成后按 Esc即可。

视图模式

命令模式下输入:ctrl + v

在左下角显示visual就代表进入了视图模式

注释

在视图模式下用h j k l选中要注释的行,选好后用shift +i进入插入模式,再输入//Esc退出,注释完成。

取消注释

进入视图模式,用h j k l选中要取消注释区域的前两列,按d,即可删除注释。

vim 下的多线程操作

vim 文本编辑器可以同时打开多个文件,在vim的底行模式下输入:vs 想要打开的文件名

虽然说有多个文件,但是光标只有一个,光标在哪个文件,现在就在编辑哪个文件。

切换文件

使用指令:ctrl + ww

vim 配置

在普通的 vim 编辑器下,我们写代码会非常别扭,没有换行,没有高亮,没有缩进······

在此,给大家推荐一个基于 C/C++ 非常好用的 vim 编辑器配置。

链接:vimforcpp

安装方法

在这里插入图片描述

3. Linux编译器——gcc/g++

  • gcc:C语言编译器,只能编译C语言。
  • g++:C++编译器,C/C++都能编译。

除此之外,gcc/g++还有链接的功能,可以直接生成可执行程序。

一个C/C++程序形成可执行文件的过程

分为四步:

(1)预处理:进行宏的替换、头文件展开、注释的删除(空格替换)。

(2)编译:将代码转化为汇编代码(这个阶段主要负责语法分析、符号汇总、 词法分析、 语义分析)。

(3)汇编:将汇编代码转化为二进制机器指令,生成符号表。

(4)链接:汇编完成后会把对应源文件生成目标文件,链接阶段就是把这些目标文件进行链接。

gcc/g++ 的使用

  • 格式

gcc [选项] 要编译的文件 [选项] [目标文件]

  • 直接形成可执行程序

gcc/g++ test.c -o test.exe

注意:-o选项用于指定生成的可执行文件的名称。这个选项后面需要跟上一个文件名作为参数,不加-o选项的话自动生成,默认生成的可执行程序的名称是a.out。

  • 使用C99标准编译

gcc test.c -std=99

  • 预处理(进行宏替换,条件编译)

gcc -E test.c -o test.i
注意:经过预处理的文件以.i为后缀。

  • 编译(生成汇编代码)

gcc –S test.i –o test.s

  • 汇编(生成二进制机器码)

gcc –c test.s –o test.o

  • 链接(生成可执行程序)

gcc test.o –o test.exe

  • gcc其它选项

    1. -g 生成调试信息。GNU 调试器可利用该信息。

    2. -w 不生成任何警告信息。

  • 运行可执行程序

    ./test.exe

    注:.表示在当前目录下寻找可执行程序。

函数库

我们的C程序中,并没有定义printf的函数实现,且在预编译中包含的stdio.h中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现printf函数的呢?
于是就引出了函数库的概念,系统把这些函数实现都放在了为libc.so.6的库文件中去了,在没有特别指定时,gcc 会到
系统默认的搜索路径/usr/lib下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现printf函数了,而这也就是链接的作用。

函数库一般分为静态库和动态库两种。

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为.a
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为.so,如前面所述的libc.so.6就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件。

对于库名字的解释:(以libc.so.6为例)lib为前缀,c为库名字也就是C语言标准库,.so.6后缀与版本号。

  • Linux下: .so 是动态库 .a 是静态库
  • Windows下: .ddl 是动态库 .lib 是静态库

查看一个可执行程序依赖的第三方库:ldd 可执行程序名

动静态库的优缺点

动静态库的区别是:

  • 动态库是共享库,通过函数地址来关联程序
  • 静态库是通过代码拷贝,从而形成私有库,可以独立运行

优缺点:

动态库:

  • 优点:形成的可执行程序体积较小,节省资源
  • 缺点:要找函数地址,会稍慢一点,并且有强依赖性

静态库:

  • 优点:无视库,可以独立运行
  • 缺点: 体积太大,浪费资源

我们编译代码时不指定说明默认使用动态库。

如果你想使用静态库编译代码:gcc test.c -static

gcc/g++ 选项

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  • -S 编译到汇编语言不进行汇编和链接
  • -c 编译到目标代码
  • -o 文件输出到 文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统有动态库
  • -O0 / -O1 / -O2 / -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息。

Linux调试器——gdb

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++ 编译产生的二进制程序,默认是release模式
  • 要使用gdb调试,必须使用debug模式编译,即在源代码生成二进制程序的时候,加上 -g 选项

1. 安装gdb

  • sudo yum -y install gdb

2. gdb的使用

进入调试:gdb 可执行程序

退出调试:ctrl + dquit

调试命令:

  • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行。
  • s或step:进入函数调用
  • break(b) 行号:在某一行设置断点
  • break 函数名:在某个函数开头设置断点
  • info break :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值。
  • set var:修改变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序
  • run(或r):从开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • info(或i) breakpoints:参看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值

Linux项目自动化构建工具——make/Makefile

  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
  • makefile带来的好处就是——”自动化编译“,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

用法

makefile是一个具有特定格式的文本文件。

首先在当前目录下创建一个Makefile,再用 vim 编辑。

假设我们已经写好了C程序test.c,我们想通过Makefile文件来调用编译、删除等指令,我们可以写以下代码:

mybin:test.c
	gcc test.c -o mybin
.PHONY:clean
clean:
	rm -rf mybin

格式注意:第二行是以tab键开头,不能以空格开头。

保存退出 vim,接下来,我们只需要输入make就会执行gcc test.c -o mybin指令编译形成可执行程序mybin,使用make clean就会执行rm -rf mybin指令删除mybin

理解

在上面用法中输入make指令,其实等同于输入了make mybin。这是因为单独输入make,会从上到下扫描Makefile文件,执行其第一个指令。要想执行后面的指令,则需要像上面的make clean一样,输入make 操作名

伪目标的概念及性质

在上面Makefile文件中,我们写了这样的代码:.PHONY:clean

.PHONY是将clean指令修饰成了伪目标。

clean被修饰后,只要我们输入一次make clean,就会执行一次rm -rf mybin。而没有被修饰成伪目标的mybin,执行完第一次,执行第二次时由于已经是最新编译结果了,则不会再执行。

在这里插入图片描述

我们得出结论:被修饰成伪目标后,此文件总是被执行

文件的时间属性

操作系统是如何知道我们的 test.c 是否被修改,从而驳回我们的make请求的呢?答案一定是文件的时间属性!!!

我们知道,先有源文件后才有可执行程序,所以源文件的修改时间一定小于可执行文件的修改时间。在第二次make时,操作系统发现源文件的修改时间小于可执行程序的修改时间,所以驳回了make请求。同理,修改源文件后,源文件的修改时间大于可执行文件的修改时间,所以操作系统会重新执行make

查看文件属性

使用指令: stat 文件名

在这里插入图片描述

注意:

文件 = 内容 + 属性

修改文件的内容可能会影响文件的属性,修改文件的属性不会影响文件的内容。

Makefile 推导能力

举例

mybin:test.o
    gcc csdn.o -o mybin 
test.o:test.s
    gcc -c csdn.s -o test.o
test.s:test.i
    gcc -S code.i -o test.s
test.i:test.c
    gcc -E csdn.c -o test.i 

首先,mybin依赖的是test.o文件但是系统中此时没有test.o文件,就会执行下一条指令,但是test.o文件依赖的是test.s文件,系统中此时没有test.s文件又会跳到下一条指令,以此往复直到找到系统中存在的test.c文件,再倒推回去。

Makefile 定义变量

操作方法

target=mybin
cc=gcc
src=test.c
$(target):$(src)
	$(cc) $(src) -o $(target)
.PHONY:clean
clean:
	rm -rf $(target)
  • 可以用$^代表依赖关系的左边
  • 可以用$@代表依赖关系的右边

如:

mybin:test.c
     gcc $@ -o $^
.PHONY:clean
clean:
     rm -rf mybin

如果你不想一条指令被打印在显示器,可以在指令前加上@符号。

git

安装git

yum install git

git 四板斧

  • git clone + 仓库链接【克隆远端仓库到本地】
  • git add .【增加当前目录下所有新文件至本地仓库】
  • git commit -m "日志"【注:提交时必须 -m 带日志】
  • git push【推送到远端仓库】

git 其他命令

  • git log【查看提交日志、提交记录】
  • git pull【同步远端和本地仓库】
  • git status【查看本地仓库状态】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

app分发的一些流程2

应用分发的流程通常包括以下步骤&#xff1a; 开发应用程序&#xff1a;首先&#xff0c;您需要开发您的应用程序。这包括编写代码、设计用户界面、测试应用程序等等。确保您的应用程序符合各个应用商店的规范和要求&#xff0c;以确保顺利通过审核。 准备应用材料&#xff1…

Json数据上传—>对象转换—>存入MongoDB(SpringData提供的规范)

上传json 代码实现 RestController RequestMapping("/api/hosp") public class ApiController{Autowiredprivate HospitalService hospitalService;PostMapping("saveHospital")public Result saveHosp(HttpServletRequest request){Map<String,String…

基于html5+javascript技术开发的房贷利率计算器

房贷计算器是一款专为购房者设计的实用工具应用&#xff0c;其主要功能是帮助用户详细计算房贷的还款金额、利息以及还款计划等。通过这款软件&#xff0c;用户可以更加便捷地了解到自己的还款情况和计划&#xff0c;从而更好地规划自己的财务。下面将对房贷计算器进行详细的介…

k8s-----25、资源调度-ResourceQuota资源配额、资源限制limitrange、服务质量QoS

1、ResourceQuota资源配额 1.0 作用 命名空间资源配额。防止公司内部人员对资源的不合理利用。 1.1、为什么需要资源配额 1、作为k8s集群的管理员&#xff0c;知道集群的规模&#xff0c;会合理规划资源&#xff0c;但是使用侧不知道&#xff0c;会导致很多不合理的使用场景…

一、W5100S/W5500+RP2040树莓派Pico<静态配置网络信息>

文章目录 1. 前言2. 相关网络信息2.1 简介2.2 优点2.3 应用 3. WIZnet以太网芯片4. 静态IP网络设置示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 编译烧录 5. 注意事项6. 相关链接 1. 前言 从本章开始我们将用WIZnet的W5100S/W5500以太网芯片结合RP…

回归预测 | MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入单输出回归预测

回归预测 | MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-LSTM贝叶斯优化长短期神经网络多输入…

科大讯飞发布讯飞星火 3.0;开源AI的现状

&#x1f680; 科大讯飞发布讯飞星火 3.0&#xff0c;综合能力超越ChatGPT&#xff08;非GPT-4版&#xff09; 摘要&#xff1a;科大讯飞在2023全球1024开发者节上宣布讯飞星火 3.0正式发布&#xff0c;号称综合能力已超越ChatGPT。据介绍&#xff0c;星火认知大模型 V3.0在文…

Redis桌面管理工具:Redis Desktop Manager for Mac

Redis Desktop Manager是一款非常实用的Redis管理工具&#xff0c;它不仅提供了方便易用的图形用户界面&#xff0c;还支持多种Redis数据结构&#xff0c;可以帮助用户轻松地完成Redis数据库的管理工作。 以下是一些推荐Redis Desktop Manager的理由&#xff1a; 多平台支持&a…

实现地址转换的硬件机构

一、基本地址变换机构 1.硬件&#xff1a; 设置一个页表寄存器&#xff0c;存放页表在内存中的起始地址与页表长度。 2.执行过程&#xff1a; 进程未执行时&#xff0c;页表起始地址和长度存放在进程控制块(PCB)中;进程被调度时&#xff0c;OS内核会将其放入页表寄存器中。 3.具…

vue3+vite在线预览pdf

效果图 代码 <template><div class"pdf-preview"><div class"pdf-wrap"><vue-pdf-embed :source"state.source" :style"scale" class"vue-pdf-embed" :page"state.pageNum" /></div…

c#使用ExifLib库提取图像的相机型号、光圈、快门、iso、曝光时间、焦距信息等EXIF信息

近期公司组织了书画摄影比赛&#xff0c;本人作为摄影爱好者&#xff0c;平时也会拍些照片&#xff0c;这次比赛当然不能错过。为了提高获奖概率&#xff0c;选了19张图像作为参赛作品。但是&#xff0c;摄影作品要提交图像的光圈、曝光时间等参数。一两张还可以通过电脑自带软…

中国大模型开源创新与合作的新篇章 | 2023 CCF中国开源大会

2023年10月21日至22日&#xff0c;由中国计算机学会&#xff08;CCF&#xff09;和开放原子开源基金会联合主办的CCF中国开源大会&#xff08;CCF ChinaOSC&#xff09;在湖南省长沙市北辰国际会议中心成功召开。此次大会以“开源联合&#xff0c;聚力共赢”为主题&#xff0c;…

身份证号码,格式校验:@IdCard(Validation + Hutool)

目标 自定义一个用于校验 身份证号码 格式的注解IdCard&#xff0c;能够和现有的 Validation 兼容&#xff0c;使用方式和其他校验注解保持一致&#xff08;使用 Valid 注解接口参数&#xff09;。 校验逻辑 有效格式 符合国家标准。 公民身份号码按照GB11643&#xff0d;…

Gdb调试

1 概述 当程序运行时出现问题时&#xff0c;通过GDB调试可以快速找到问题点&#xff0c;当然不是所有问题都能通过调试找到问题点。 在GCC编译程序时&#xff0c;需要加 -g参数&#xff0c;可以通过在-g选项后附加数字1、2或3来指定在代码中加入调试信息的多少。默认的级别是2…

人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040

线性和回归,就是自然规律,比如人类是身高趋于某个值的概率最大,回归就是通过数学方法找到事物的规律. 机器学习作用: 该专业实际应用于机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜索、定理证明、博弈、自动程序设计、智能控制…

Decomposed Meta-Learning for Few-Shot Named Entity Recognition

原文链接&#xff1a; https://aclanthology.org/2022.findings-acl.124.pdf ACL 2022 介绍 问题 目前基于span的跨度量学习&#xff08;metric learning&#xff09;的方法存在一些问题&#xff1a; 1&#xff09;由于是通过枚举来生成span&#xff0c;因此在解码的时候需要额…

GPT的前世今生:从gpt1到chatgpt的能力提升

从2017年google brain提出transformer模型&#xff0c;到2018年基于transformer模型open ai推出了gpt1模型以及google推出了bert模型&#xff0c;到2019-2021年open ai陆续推出gpt2和gpt3&#xff0c;再到2022-2023年推出chat-gpt和gpt4&#xff0c;大语言模型已经发展成了一个…

Hadoop+Hive+Spark+Hbase开发环境练习

1.练习一 1.数据准备 在hdfs上创建文件夹&#xff0c;上传csv文件 [rootkb129 ~]# hdfs dfs -mkdir -p /app/data/exam 查看csv文件行数 [rootkb129 ~]# hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l 2.分别使用 RDD和 Spark SQL 完成以下分析&#xf…

Auth.js:多合一身份验证解决方案 | 开源日报 No.60

nodejs/node Stars: 96.2k License: NOASSERTION Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。它具有以下关键特性和核心优势&#xff1a; 强大&#xff1a;Node.js 提供了强大且高效的服务器端运行能力&#xff0c;可以处理并发请求&#xff0c;并支持异步编程…

【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题)— 上

深入探索Java特性中并发编程体系的原理和实战开发指南&#xff08; 实现可伸缩IO专题&#xff09; 总体内容概览可扩展的网络服务分布式对象传统的阻塞式网络服务每个请求或连接可以在独立的线程中进行处理Server服务处理请求类Handler处理逻辑类优点缺点 可扩展性目标平稳降级…