Linux基础环境开发工具的使用(yum,vim,gcc,g++)

news2024/9/24 21:28:42

Linux基础环境开发工具的使用[yum,vim,gcc,g++]

  • 一.yum
    • 1.yum的快速入门
      • 1.yum安装软件
      • 2.yum卸载软件
    • 2.yum的生态环境
      • 1.操作系统的分化
      • 2.四个问题
        • 1.服务器是谁提供的呢?
        • 2.服务器上的软件是谁提供的呢?
        • 3.为什么要提供呢?
        • 4.yum是如何得知目标服务器的地址和下载链接呢?
        • 5.软件源
  • 二.vim
    • 1.vim的快速入门
      • vim的模式
    • 2.vim中的快捷键
      • 1.命令模式下的快捷键
        • 1.光标定位指令
        • 2.方向键
        • 3.复制,粘贴,撤销,剪切,删除快捷键
      • 2.底行模式下的快捷键
        • 1.快捷键
        • 2.其他操作
          • 1.显示行号
          • 2.进入文件时指定光标位置
          • 3.在底行模式中不退出vim文件的情况下进行其他操作
      • 3.vim的其他模式
        • 1.替换模式
        • 2.查找"模式"
        • 3.批量化注释/去注释操作
          • 1.批量化注释
          • 2.批量化去注释
    • 3.使用vim来修改sudoers file文件
    • 4.vim非正常退出的解决方法
  • 三.gcc/g++
    • 1.预处理
    • 2.条件编译的补充内容
    • 3.编译
    • 4.汇编
    • 5.链接
    • 6.gcc的总结
    • 6.gcc和g++的区别与联系

首先先说明一点:
Centos系统适用于yum
而Ubanto适用于apt-get

一.yum

在Linux中我们也要进行工具/程序/指令的安装,检查和卸载,

而我们安装软件的方式:
1.源代码安装-需要进行交叉编译的工作
一般那些很强的程序员中的大佬才能拿捏
2.rpm包直接安装,也很麻烦
3.yum直接安装

这就需要用到yum了
那么yum是什么呢?

1.yum的快速入门

yum:是我们Linux系统中预装的一个指令,负责搜索,下载,安装对应的软件

就像是手机上的应用商店等等,也是一个软件,
只不过是厂商内置的

而yum就相当于Linux中的应用商店
就像是是我们平常在手机上下载软件都是在应用商店中下载
在Linux中平常下载软件就是在yum中下载

而yum的基本指令是:

sudo yum install 软件/指令/工具的名字
sudo yum install -y 软件/指令/工具的名字:这个-y代表同意安装
否则会询问你是否确定要安装对应的软件/指令/工具

如果我们想要移除一个命令
yum remove command

执行sudo命令需要在sudoers file配置文件中
我们这篇博客中也会介绍使用vim来修改sudoers file文件

大家也可以切换为root用户
这样的话使用yum就不需要用sudo命令了

我这里切换为root来使用yum命令

1.yum安装软件

大家可以先安装一下这个sl指令

yum install -y sl

在这里插入图片描述
我这里之前就安装过sl了,所以显示Nothing to do

如果安装成功了,那么执行sl就会显示
一辆火车经过

这里说一下如何安装g++
我们后续会介绍g++编译器的
在这里插入图片描述
我这里之前就安装过g++了,所以显示Nothing to do

2.yum卸载软件

下面我们看一下如何使用yum进行卸载呢?

yum remove sl
移除sl命令

在这里插入图片描述
移除之后我们执行sl命令,发现无法执行,也就说明我们移除成功了

然后这个时候我就能演示一下安装sl成功的情形了
在这里插入图片描述

2.yum的生态环境

几个问题
首先我们先明确一点:
在这里插入图片描述
在这里补充一下:

1.操作系统的分化

一款操作系统的好坏不仅仅要看这个操作系统本身,大家在效率上是差不多的,
因此在选择一款操作系统时还要看:

1,操作系统的版本,因为版本问题能够决定操作系统中历史含留的bug问题
2.这款操作系统使用的人数
因为人数多不多就能决定这款操作系统所能暴露出来的问题充不充分
比方说:
人数多了的话,这款操作系统的社区的活跃度就高,问题暴露的就越充分,问题暴露的多,自然而然就会有更多的人去解决问题
而且用的人多,这款操作系统的配套资源就会更加充分,
社区的维护者也会更加专业等等等等

因此Linux商业化操作系统分为了Centos,Ubanto,Kali等等
Centos主要与企业级开发相关
Kali主要与网络安全相关
等等等等

2.四个问题

1.服务器是谁提供的呢?
2.服务器上的软件是谁提供的呢?
3.为什么要提供呢?

这三个问题可以一起解释

不同操作系统/社区所定义的基调不同,生态不同,这也就吸引了不同领域的人们去维护,去使用

使用的人多了,暴露出来的问题就多了,解决的人也多了,并且发布配套资源的人也就多了,这个社区就会变得更加偏向于那个基调/生态
就会吸引更多人去使用,维护,从而形成了一个良性循环

这样不同社区就会有更多的人去使用,去维护
就会有更多人从中受益,既然从中受益,那么自然就更加不希望这个社区出现问题,因此:

那些依赖于这些社区的人:
比如:创业公司,大/中/小型公司就会更加想要这个社区变好
因此他们可以投入金钱,提供对应的服务器

再比如:那些高水平的开发者,开源组织等等就可以提供对应的技术去提供服务器上的软件

他们为什么要去提供呢?
就是为了让自己所在的社区变得更好
从而让自己能够更好的去使用对应的操作系统,并从中受益

这也就形成了一个正向反馈
甚至不同的社区之间会形成"卷"

4.yum是如何得知目标服务器的地址和下载链接呢?

我们使用root,找到/etc/yum.repos.d路径下的Centos-Base.repo文件
在这里插入图片描述
然后vim进入(强烈建议大家再看完下面的vim之后在使用vim进入这个文件,否则你不知道该怎么退出来!!!)
在这里插入图片描述
然后我们找到这一行
在这里插入图片描述
找到对应的yum的目标服务器的地址和下载链接
在这里插入图片描述
然后我们打开这个链接
发现我们这个yum的目标服务器的下载链接是有阿里云提供的
这些就是阿里云从国外的镜像源镜像过来了,是为了更好的维护国内的社区
在这里插入图片描述
下载链接
其中,这个Centos-Base.repo文件就是我们所说的yum源

5.软件源

大家可以先执行一下这个指令

sudo yum install -y epel-release

在这里插入图片描述
我这里之前已经安装过这个软件了,所以显示nothing to do
然后我们

ls /etc/yum.repos.d

发现有这个epel.repo文件,就说明安装成功
这个epel.repo就是扩展软件源
在这里插入图片描述
Linux中的软件源可以分为
1.基础软件源:十分稳定,经过了长期的"考验",已经广泛为人们所接受的软件,比方说我们的Centos-Base.repo
2.扩展软件源:这里面放的是一些新兴的软件,
当这些软件经过了长期的"考验"后,会选出一些很好的软件放入基础软件源中

并且也可以在基础软件源中淘汰一些不太好了的软件
这也就很好地进行了Linux中软件的更新换代
既可以保证基础软件中的软件足够稳定可靠,又可以保证软件的更新换代

也就是说我们平常在下载软件时,基础软件源和扩展软件源都需要去使用

二.vim

1.vim的快速入门

vim是一款多模式的编辑器,vim里面还有很多的子命令.来进行代码的编写操作

vim的模式

vim有三种常见模式:

命令模式,插入模式,底行模式

它们之间切换的按键如下:
在这里插入图片描述
在这里插入图片描述
使用vim也可以直接创建文件进行编写
在这里插入图片描述

刚进入的样子是这样的
此时就是命令模式
然后我们先使用i命令进入编辑模式
在这里插入图片描述

此时我们就可以在test.c中写代码了
在这里插入图片描述

接着我们使用Esc键回到命令模式
首先我们使用i来进入插入模式
在这里插入图片描述

然后我们就能发现:使用i进入插入模式时,光标位置没有任何变化
接着我们使用Esc键回到命令模式
然后使用a进入插入模式
在这里插入图片描述

然后我们就能发现:使用a进入插入模式时光标会向右移动一位
接着我们使用Esc键回到命令模式,并将光标复位
然后使用o进入插入模式
在这里插入图片描述

然后我们就能发现:使用o进入插入模式时会新起一行,并将光标移动到新起的那一行

一般情况下我们都是使用i进入插入模式

那么当前我的代码写完了,该如何退出呢?
首先:我们先调到命令模式
然后按shift+; 进入底行模式
在这里插入图片描述
我们会发现左下角出现了一个冒号
也就是说现在已经进入了底行模式

然后我们输入:wq
然后按下回车键就能保存文件并退出该文件的编辑模式(vim)
在这里插入图片描述
在这里插入图片描述

2.vim中的快捷键

首先我们先明确两点:
1.插入模式下我们从键盘输入的字符信息都会被当作文本输入到该文件中
就像是Windows中的记事本一样
2.在我们没有对vim进行配置鼠标操作的状态下,在vim中我们是无法使用鼠标的

因为vim中在不进行鼠标操作的配置的状态下,是不好进行操作的
因此vim中拥有很多快捷键可以帮助我们定位光标等等
甚至可以说:当我们很好地熟悉了vim中这些快捷键后,书写代码等等是会比使用鼠标更快的

就像是ctrl+c ctrl+v 碾压了使用鼠标选中后右键进行复制粘贴的操作
ctrl+a 碾压了鼠标去进行全选的操作等等

3.关于vim的手动配置,大家可以看一下这位大佬的博客中的vim基础配置:
【从入门到进阶】vim基础配置+ 常用插件(NERDTree, cscope, rainbow等)
4.关于vim的自动配置,大家可以看一下这位大佬的博客中的那个在gitee中开源的vim自动配置的README.md
那位大佬的博客:vim的自动化配置(一条指令就够了)

该博客中提到的那个gitee的链接:
自动化配置vim的gitee链接

1.命令模式下的快捷键

1.光标定位指令

在这里插入图片描述
其实这里的shift+$就是$,也就是shift+4,
只不过如果说shift+4的话:
4在键盘的数字区有,在键盘的F1,F2…键的下方也有,而这里是要按键盘的F1,F2…这些键的下方的数字键

所以这里干脆就说成shift+$符号了
同理这个shift+^也是如此

从#位置按shift+$
在这里插入图片描述
然后再按shift+^
在这里插入图片描述
shift+g
在这里插入图片描述
5 + shift + g
在这里插入图片描述
gg:快速按两次g
在这里插入图片描述

2.方向键

这是一个很早很早的老式键盘
在这里插入图片描述
注意看:这个键盘上面并没有我们独立的↑↓←→方向键
因此把←给到了h键,
↓给到了j键
↑给到了k键
→给到了l键

因此在vim中,我们也可以使用h,j,k,l键来移动光标
那你会说:vim中这么定义有什么用呢?

一方面是历史原因,当时键盘上面还没有独立的↑↓←→方向键
另一方面:就像是打游戏的时候控制角色移动,释放技能等等,当我们完全熟悉了之后
是比居于键盘右侧那狭小的空间当中才能控制方向要高效,舒服很多的

如果我们想要快速在这一行中移动光标呢?
w:按照"单词"在行内进行向右移动
b:按照"单词"在行内进行向前移动

注意:这里的"单词"的识别标准是由vim来定的,而不是指英语中的单词
在这里插入图片描述
一次w:
在这里插入图片描述
两次w:
在这里插入图片描述
三次w:
在这里插入图片描述四次w:
在这里插入图片描述
五次w:
在这里插入图片描述
六次w:
在这里插入图片描述
七次w:
在这里插入图片描述
b:也是同样的距离,只不过方向不同

3.复制,粘贴,撤销,剪切,删除快捷键

在这里插入图片描述
我们在第一行执行了yy+p命令
把第一行成功拷贝到了第二行
在这里插入图片描述
然后我们执行4+yy+p
拷贝了第2,3,4,5行并粘贴
在这里插入图片描述
然后我们执行yy+4+p
拷贝当前行,进行4次粘贴
在这里插入图片描述
然后我们执行u
撤销刚才的编辑操作
在这里插入图片描述
然后我们执行ctrl+r
撤销刚才的撤销操作
在这里插入图片描述
然后我们执行5+dd
删除第3,4,5,6,7行
在这里插入图片描述
然后我们执行2+p
可见dd所谓的删除其实就是剪切操作
在这里插入图片描述
最后经过一顿操作回到最初状态
在这里插入图片描述

2.底行模式下的快捷键

1.快捷键

在这里插入图片描述
wq我们之前演示过了,这里就不演示了,后面那个wq!我们放到下面修改sudoers file的时候去演示
下面我们演示一下那个vs 文件名
在这里插入图片描述
我们在底行模式中输入:

vs vs_test.c

按回车键
在这里插入图片描述
然后我们就可以在这个新创建的vs_test.c文件中书写代码
在这里插入图片描述
然后我ctrl+ww:切换到test.c文件中
在这里插入图片描述

2.其他操作
1.显示行号

在这里插入图片描述
在这里插入图片描述
取消行号:
set nonu
在这里插入图片描述

2.进入文件时指定光标位置

vim test.c +n
默认情况下:使用vim进入文件后,光标默认处于上一次退出时所处的位置

而vim test.c +n
这样打开test.c时光标就会处于第n行

比方说我们vim test.c +8
这样我们就处于了第8行
在这里插入图片描述

3.在底行模式中不退出vim文件的情况下进行其他操作

比方说我正在vim中写着代码
突然我忘了一个库函数具体怎么用了
然后我想查阅一下man手册

以scanf函数为例
我们在底行模式中输入 !man 3 scanf
在这里插入图片描述
然后我们就可以在不退出vim的情况下进行操作,
例如这里的man 3 scanf
在这里插入图片描述
然后我们q退出man手册
在这里插入图片描述
按任意键继续,然后我们回车,就又回到了我们的文件当中
在这里插入图片描述
同理,我们也可以直接在底行模式中编译文件,执行可执行程序等等
我们先把那个没写的两个;加上,然后wq
然后再vim test.c 然后底行模式输入gcc test.c
(关于gcc的操作我们下面会介绍的)
在这里插入图片描述
在这里插入图片描述
然后我们回车键回去
然后!ls
在这里插入图片描述
然后我们!./a.out
在这里插入图片描述
然后成功执行
在这里插入图片描述

3.vim的其他模式

1.替换模式

在这里插入图片描述
我按了一个shift+` :成功将第4行的printf的p改为了大写,同时光标自动右移
这样方便我们对一行字符快速更改大小写

我直接一直按shift+`:成功将这一行内容都进行了大小写替换

同理,我们回到开始处在重新按一次shift+`.就成功地替换了回来
在这里插入图片描述
下面我们回到这一行,开始后续操作
在这里插入图片描述
我们按了3+r+w
成功将printf的前三个字母替换为了w
在这里插入图片描述
然后我们输入shift+r 进入替换模式
在这里插入图片描述
然后我们随便输入一些代码
int a = 1;double d=1.0;
成功进行了替换
在这里插入图片描述
然后我们无脑Esc返回命令模式
按下18+x,成功删除了18个字符:

tf("hello vim\n");

在这里插入图片描述
然后我们按下16+shift+x,成功向左删除了16个字符:

1;double d = 1.0

请注意:
向左删除时:光标所在字符不会被删除,而是直接删除光标左侧的那一个字符
向右删除时:光标所在字符会被删除,并且将右边的字符向左挪动一位
(我们可以简单的认为仅仅只是光标右移了一位)
在这里插入图片描述

2.查找"模式"

在这里插入图片描述
我们在刚才那个位置按下shift+#
高亮了printf,然后我们输入n这个字符,就可以快速跳转到高亮的位置
在这里插入图片描述
为了证明当前在命令模式下,我们直接输入i,成功进入了插入模式
在这里插入图片描述

3.批量化注释/去注释操作

在这里插入图片描述

1.批量化注释

我们先移动到这里,进行后续操作
在这里插入图片描述
我们先ctrl+v
在这里插入图片描述
然后按下j,选好要注释的区域
在这里插入图片描述
然后shift+i
在这里插入图片描述
然后//
在这里插入图片描述
最后Esc
在这里插入图片描述

2.批量化去注释

先ctrl+v ,然后j选好区域
在这里插入图片描述
然后d,成功删除注释
在这里插入图片描述

3.使用vim来修改sudoers file文件

前面写的这篇博客:Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉)中提到过:
在这里插入图片描述
下面我们开始介绍如何把某个用户的用户名添加进sudoers这个配置文件中

首先先切换到root用户,然后进入/etc目录下
找到sudoers文件
在这里插入图片描述
然后我们ll sudoers文件,发现root用户对于这个文件只有r权限

但是我们之前不是提到过root不受权限约束吗?
但是有些情况下,root也是会受到权限约束的

比如对于sudoers文件的修改

我们vim sudoers
找到这里
这里的

Allow root to run any commands anywhere
就是指root可以在任何地方中执行任何命令
这个就是sudoers配置文件中我们需要添加用户的地方

我们系统中有一个zs用户,我现在想要将zs添加到这个sudoers文件中
我们在命令模式下对root那一行执行yy复制命令

然后到下面那几行中进行p粘贴命令
在这里插入图片描述
在这里插入图片描述
然后我们进入插入模式将这一行的root用户名改为zs
在这里插入图片描述
然后切换为底行模式,输入wq
在这里插入图片描述
然后我们发现root用户无法进行保存并退出,也就是说在这个sudoers 文件中root的权限是会受到限制的
在这里插入图片描述
那怎么办呢?
再次从命令模式回到底行模式
在这里插入图片描述
直接wq!
回车退出
在这里插入图片描述
成功退出
下面我们切换到zs用户来演示一下
在这里插入图片描述
我们先让root回到root的家目录下
然后切换为zs
使用zs执行sudo ls命令
输入zs的密码之后,发现成功执行

然后因为我后续不想让zs处于sudoers文件中
所以我去切换回root用户,
继续修改sudoer文件,删除zs的权限
在这里插入图片描述
在这里插入图片描述
然后继续切换到zs,让zs执行sudo ls命令
此时zs无法执行sudo命令,因为zs不在sudoers file这个配置文件中

4.vim非正常退出的解决方法

当我们误操作退出了vim之后
比方说这个样子
在这里插入图片描述
在右边的那个窗口当中我刚刚写完了printf(“hello”)还没来得及写;就因为某种意外直接退出了
比方说我在还没有保存的情况下直接关掉右边这个窗口
在这里插入图片描述
我输入:确定
然后就只剩下我左边这个窗口了
在这里插入图片描述
然后我vim test.c
出现了这个样子
在这里插入图片描述
这是为什么呢?
是因为当我们在vim中异常退出时,vim会自动给我们上一次的编辑结果进行保存
保存到这个.test.c.swp文件中

然后我们只需要这样做就行:
1.先按R/shift+r
进入到上次异常关闭后的文件
然后wq退出这个文件
在这里插入图片描述
2.然后再vim test.c进入
会发现还是这个样子,然后输入D/shift+d
在这里插入图片描述
进入到这个文件中,然后继续wq退出
在这里插入图片描述
然后再vim test.c,
发现这个文件就恢复正常了
在这里插入图片描述
其中,这个R:就是让我们能够恢复上次异常退出时所编辑出的结果(通过第一次wq来恢复)
D:就是删除这个vim因为我们异常退出所形成的临时文件(.test.c.swp)

三.gcc/g++

在这里插入图片描述
在VS中,程序的这4步翻译过程我们一个ctrl+F5就可以完成
体会不到具体的过程
而在Linux中我们是可以体会到具体的程序翻译的过程的

下面我们来在Linux下面看一下具体的程序翻译的过程

我们先新建一个目录gccdir,在这个目录下创建一个code.c文件
在这里插入图片描述
然后写入这样的内容
在这里插入图片描述

1.预处理

gcc -E code.c -o code.i

-E:告诉gcc,编译过程中预处理做完之后就停下来

code.c 要编译的C语言代码

-o code.i:将code.c预处理后的文件名重命名为 code.i

在这里插入图片描述
然后我们用vim 查看code.c和code.i
看一下它们之间的差异

我们在code.i中shift+g 定位到最后一行
发现code.i中上方那一大堆代码其实就是头文件stdio.h中的代码
(也就是说:所谓头文件展开,本质就是在预处理的时候,将头文件的内容拷贝至源文件中)
而且宏定义的M也已经被替换为10了
并且注释也已经删除了
在这里插入图片描述
还有条件编译呢,
下面我们再来介绍一下条件编译
我之前在一篇博客中C语言预处理及宏和函数的区别与各自优劣点的详解写到过条件编译

这是条件编译的一大用途:防止头文件被重复引用

在这里插入图片描述
在这里插入图片描述

2.条件编译的补充内容

我们再创建一个ifdef_test.c文件
在这里插入图片描述
这个代码的含义是

如果定义了VERSION1
那么就执行第一个printf语句

如果在没有定义VERSION1的情况下定义了VERSION2
那么就执行第二个printf语句

如果VERSION1和VERSION2都没有定义
那么就执行第三个printf语句

然后我们正常gcc 编译ifdef_test.c文件
在这里插入图片描述
这里的./a.out就是执行a.out这个可执行程序,我们下面会介绍的
这种正常编译的情况我们很容易理解
在这里插入图片描述
也就是说:
我们可以通过给编译器传递不同的宏值,来进行对代码的动态裁剪

gcc ifdef_test.c -o mycmd -D VERSION1=1

这里的-o mycmd 就是把生成的可执行文件重命名为mycmd
这个-D 就是我们要介绍的补充内容
这个-D经常跟条件编译结合使用

通常
我们会在这个-D 后面定义宏,
让我们能够做到在编译时选择性地去编译不同的代码

下面我们来看一下这个代码的运行结果
在这里插入图片描述
可见这个VERSION宏被成功定义了
同理,我们也可以宏定义VERSION2
在这里插入图片描述
那么这个究竟有什么用呢?
在这里插入图片描述

3.编译

命令:

gcc -S code.i -o code.s  :这是将上面形成的code.i文件编译为code.s文件

gcc -S code.c -o code.s  :这是直接将code.c文件编译为code.s文件

也就是说gcc跟上-S等等选项是可以跳步的

下面我们来演示一下
在这里插入图片描述
然后我们vim code.s,查看一下这个文件
这个就是code.s,也就是code.c/code.i的汇编代码
其中mov push call pop ret都是汇编指令
在这里插入图片描述
注意:汇编代码在不同的编译器下的样子是不同的
下面给大家看一下同样的代码在VS2013中的样子
在这里插入图片描述

4.汇编

gcc -c code.s -o code.o
或者
gcc -c code.i -o code.o
或者
gcc -c code.c -o code.o

下面我们来演示一下
在这里插入图片描述
然后我们vim code.o进入code.o
在这里插入图片描述
然后我们发现出现了一堆乱码,这是为什么呢?
你不是说汇编阶段是将汇编代码翻译成二进制指令吗?
那为什么给我出现一堆乱码呢?

首先:
code.o文件的确是二进制文件
其次:
vim是一款文本编辑器,只能识别文本文件,无法识别二进制文件
就像是Windows中的记事本,Windows中的记事本是无法识别二进制文件的

给大家演示一下:
就拿我们刚才在VS2013中运行的那个代码的.obj目标文件为例:
我们用记事本打开这个.obj目标文件
在这里插入图片描述
也是一堆乱码

5.链接

首先我先把已经存在的那个mycmd删除,以防大家误会
其实我也可以不删除,直接让我新生成的这个mycmd去替代曾经的那个mycmd

命令:

gcc code.o -o mycmd
可执行文件名称(这个名称自己可以随便取,这里我取名为mycmd(my command:我的命令))

在这里插入图片描述

6.gcc的总结

在这里插入图片描述
那以后都要这么麻烦吗?
其实以后我们直接这样就行,也就是直接把预处理,编译,汇编和链接放到一起执行

gcc code.c -o 可执行文件名称

我先把code.i,code.s,code.o,mycmd,mycmd1都删除
在这里插入图片描述

6.gcc和g++的区别与联系

在这里插入图片描述
下面我们来演示一下
在这里插入图片描述
在这里插入图片描述
左边是test.c
右边是test.cpp

然后我们先用gcc来分别编译这两个文件
test.c 编译为 mycmd_c
test.cpp 编译为 mycmd_cpp
在这里插入图片描述
用gcc编译test.c成功,用gcc编译test.cpp失败

下面先把mycmd_c删除
然后我们用g++来编译test.c和test.cpp
在这里插入图片描述
用g++编译test.c和test.cpp均成功

以上就是Linux基础环境开发工具的使用(yum,vim,gcc,g++)的全部内容,希望对大家有所帮助!!

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

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

相关文章

XML教学视频(黑马程序员精讲 XML 知识!)笔记

第一章XML概述 1.1认识XML XML数据格式: 不是html但又和html有点相似 XML数据格式最主要的功能就是数据传输(一个服务器到另一个服务器,一个网站到另一个网站)配置文件、储存数据当做小型数据可使用、规范数据格式让数据具有结…

TypeScript深度剖析:TypeScript 中接口的应用场景?

一、是什么 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法 简单来讲,一个接口所描述…

PHP自定义文件缓存实现

文件缓存:可以将PHP脚本的执行结果缓存到文件中。当一个PHP脚本被请求时,先查看是否存在缓存文件,如果存在且未过期,则直接读取缓存文件内容返回给客户端,而无需执行脚本 1、文件缓存写法一,每个文件缓存一…

优化改进YOLOv5算法:加入SPD-Conv模块,让小目标无处遁形——(超详细)

1 SPD-Conv模块 论文:https://arxiv.org/pdf/2208.03641v1.pdf 摘要:卷积神经网络(CNNs)在计算即使觉任务中如图像分类和目标检测等取得了显著的成功。然而,当图像分辨率较低或物体较小时,它们的性能会灾难性下降。这是由于现有CNN常见的设计体系结构中有缺陷,即使用卷积…

对PySide6 say Hello(包含环境配置) ——PyQt

前言 一直想学一下python,特别是十一前抢票时达到顶峰。我正好是Qter,所以在网上找了一个教程直接学PyQt。 配置PyQt环境 当前环境 Win10Qt5.15.2 python3.11 之前安装python时好像自动安装了python的包管理工具pip,配置pyqt环境所需要安装…

css:transform实现平移、旋转、缩放、倾斜元素

目录 文档语法示例旋转元素 transform-rotate旋转过渡旋转动画 参考文章 文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform 语法 /* Keyword values */ transform: none;/* Function values */ transform: matrix(1, 2, 3, 4, 5, 6); transform: translate…

c/c++程序的内存开辟时 的内存情况

我们写的代码都是要存放在内存空间中的,我们经常说堆区,静态区,还有栈区,相信很多人不是很明白,在今天这篇博客中让大家对它们有一个粗略的认识 1.栈区(static) 在执行函数时,函数内…

H5web微信刮一刮效果

H5web微信刮一刮效果 <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>千万别来南宁</title> <meta name"apple-touch-fullscreen" content"yes" /> <meta name"format-detec…

初识Java 16-2 字符串

目录 正则表达式 简单的介绍 正则表达式的创建 量词 Pattern和Matcher 1. find() 2. 分组 3. start()和end() 4. compile()中的标记 5. split() 6. 替换操作 reset() 正则表达式和Java的I/O 本笔记参考自&#xff1a; 《On Java 中文版》 正则表达式 正则表达式是…

【深入浅出汇编语言】寄存器精讲第二期

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、算法模板、汇编语言 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️物理地址二. ⛳️16位结构的CPU三. ⛳️8086CPU给出物理地址的方…

你被骗了吗?别拿低价诱骗机器视觉小白,4000元机器视觉系统怎么来的?机器视觉工程师自己组装一个2000元不到,还带深度学习

淘宝闲鱼&#xff0c;大家搜搜铺价格&#xff0c;特别是机器视觉小白。 机架&#xff1a;&#xff08;新的&#xff09;200元以下。(看需求&#xff0c;自己简单打光&#xff0c;买个50元的。如果复杂&#xff0c;就拿给供应商免费打光) 相机&#xff0c;镜头&#xff1a;&am…

有效的数独

题目链接 有效的数独 题目描述 注意点 board.length 9board[i].length 9board[i][j] 是一位数字&#xff08;1-9&#xff09;或者 ‘.’ 解答思路 首先判断行是否满足数独条件&#xff0c;再判断列是否满足数独条件&#xff0c;最后再判断划分的3x3方格是否满足数独条件…

2.数据结构-链表

概述 目标 链表的存储结构和特点链表的几种分类及各自的存储结构链表和数组的差异刷题(反转链表) 概念及存储结构 先来看一下动态数组 ArrayList 存在哪些弊端 插入&#xff0c;删除时间复杂度高需要一块连续的存储空间&#xff0c;对内存要求比较高&#xff0c;比如要申请…

SSM培训报名管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 培训报名管理系统是一套完善的信息系统&#xff0c;结合SSM框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开…

vim

简介 vim是一款多模式的文本编辑器&#xff0c;vim里面还有很多子命令&#xff0c;来进行代码的编写操作 常用模式图 命令模式 光标移动 shif $ 光标定义到当前行的最右侧结尾 shift ^ 光标定义到当前行的最左侧开头 shift g 光标定位到文本最末尾…

激光雷达点云基础-点云滤波算法与NDT匹配算法

激光雷达点云处理在五年前就做了较多的工作&#xff0c;最近有一些新的接触发现激光雷达代码原理五年前未见重大更新&#xff0c;或许C与激光雷达结合本身就是比较高的技术门槛。深度学习调包侠在硬核激光雷达技术面前可以说是完全的自愧不如啊。 1、点云滤波 在获取点云数据…

利用远程IO模块,轻松驾驭食品包装生产的自动化

常见的自动化包装系统&#xff0c;它的核心部分通常由一系列高端设备组成&#xff0c;包括自动开箱机、自动封箱机、自动捆扎机、装箱机器人、码垛机器人等。这些设备协同工作&#xff0c;形成一条高效运转的生产线&#xff0c;从开箱到装箱&#xff0c;再到码垛&#xff0c;每…

SpringCloud(二) Eureka注册中心的使用

在SpringCloud(一)中,我们学会了使用RestTemplate进行远程调用,但是在调用user-service时候需要在order-service中发送http请求,请求中需要书写对应微服务的ip和端口号,十分不方便,如果此时有多个user-service实例的话,就不知道调用哪个了(除非每次调用的时候都对ip和端口号进行…

SpringCloud 微服务全栈体系(九)

第九章 Docker 三、Dockerfile 自定义镜像 常见的镜像在 DockerHub 就能找到&#xff0c;但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像&#xff0c;就必须先了解镜像的结构才行。 1. 镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而…

uniapp保存网络图片

先执行下载uni.downloadFile接口&#xff0c;再执行保存图片uni.saveImageToPhotosAlbum接口。 // 保存二维码 saveQrcode() {var _this this;uni.downloadFile({url: _this.qrcodeUrl, //二维码网络图片的地址success(res) {console.log(res);uni.saveImageToPhotosAlbum({fi…