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

Linux《基础开发工具(上)》

在之前的篇章当中我们已经了解了Linux当中基本的指令以及相关的知识,那么接下来在本篇当中就开始学基本的开发工具,在此我们一共要了解6大开发工具,在此将这些工具的学习分为上中下篇,在本篇当中我们首先要来学习的是yun以及vim,一起加油吧!!!


1.软件包管理器 

1.1 安装软件方式

在windows当中我们都知道要下载一个软件可以在对应的应用商店下载也可以在浏览器直接下载,那么在Linux当中要下载相应的软件又该进行什么样的操作呢?

其实在Linux当中要下载软件可以使用以下的三种方式
1.源代码安装
2.rmp包安装
3.软件包管理器安装

以上的方式当中最原始的方式就是直接使用下载到程序的源代码,再进行编译得到可执行程序。但是我们一般是不使用这种方式来进行软件的安装的,这是因为这样实在是太麻烦了,并且在安装的过程当中如果出现源代码的丢失就会使得软件的安装过程出现错误,这时我们目前的能力还无法发现错误就会使得对应的软件无法安装。

因此为了解决使用源代码在进行软件的安装时会出现一系列的问题,在此就引入了rmp包安装的方式,rmp将要安装的源代码打包成为一个为一个完整的包,要安装软件就只需要安装rmp包即可。但是在软件进行安装时其实除了要安装对应的rmp包之外还要解决依赖的问题,也就是在使用rmp包安装的时候还要将安装的包与对应的库进行链接。

以上的方式相比直接使用源代码进行安装的方式简单了许多,但是要自行解决依赖的问题对与我们来说还是较为繁琐,于是有些⼈把⼀些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在⼀个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。

注:在此使用包管理器进行安装的方式可以理解为在安卓的应用商店或者是在苹果当中的app store当中进行软件的安装

1.2 认识软件包管理器

在Linux当中不同的OS当中不同的包管理器是不同的,在我们使用的Centos和Ubnutu当中的软件包管理器分别是yum和apt,当前我们使用的OS是Centos,因此接下来介绍的就是如何使用yum进行软件的安装,但是在了解yum的使用之前我们先要来了解一些关于操作系统生态的相关问题和概念,这对我们认识Linux当中为什么有不同的OS有很大的助力。

其实在我们使用yum等包管理器进行安装的时候,在我们的云服务器上其实是会通过相关的配置文件查找到远程的包管理服务器,之后找出你所需要的软件包,再下载返回。

在此就有问题了,那就是我们使用yum过程当中远程的软件包服务器当中的软件包是谁写的呢?写这些软件包的工程师为什么要免费的将这些软件包进行免费开发给用户呢?

要解答以上的问题就需要了解操作系统的生态问题了,我们知道Linux是一款开源的操作系统,并且我们还知道在不同商业版本的Linux操作系统当中其实这些系统对应的系统内核其实是相同的,这时不同的人群会选择不同的操作系统就由于不同商业版本的OS当中就会有者以下不同的生态位

当对应的开发人员将一款新的软件开发出来之后将源代码开源之后就需要Linux当中系统的的工程师将对应的软件的源代码进行编译到其对应的系统当中,之后再将其对应的软件包其他环境包上线到该系统的软件包服务器当中,之后该系统下用户要下载该软件就可以使用yum安装了。

那么此时问题又来,那就是这些系统的工程师为什么要主动的将开发者的源代码编译上线到系统的软件包服务器上,他们这样做是为了什么呢,感觉在这个过程当中相应的工程师好像也无法得到相关的利益啊。其实形成这些现象的根本原因是由于Linux是一款开源的操作系统,这就使得Centos、Ubuntu这些系统在系统内核上都是相同的,那么为了吸引更多的用户就需要跟进市场上新出现的软件,否则用户之前在使用的系统上无法及时的使用到新的软件,这就会使得这鞋用户转向到其他的OS,这不就造成用户的流失了吗。

我们知道不同的系统在一开始的时候针对的用户群体是不同的,就例如Centos注重企业的使用、Ubuntu注重学生群体,当时如果OS无法及时的将目标用户所需的软件及时的上线,而其他的OS上线了这些群体所需的软件,这就会使得这些用户流失到其他的OS当中。

因此通过以上的描述可以看出这些系统的工程师是为什么要主动的将开发者新开发出的软件快速的编译上线到软件的包服务器上,这就是为了避免OS用户的流失,当然有一些的工程师确实没有功利心就是为了能让更多的人使用到最新的软件,这当然也是有的。

那么此时你可能就会有疑惑了,那就是这些Linux的OS免费的将软件编译上线到软件包服务器上这个过程当中也是要损耗人力、物力的。那么在将软件上线的过程当中是无法盈利的,那么这些OS是如何保持运转的呢?毕竟软件包服务器也是需要购买的,这些都是要花费资金的。 

确实这是因为Linux开源的特性,Linux相比其他的系统就会更加的安全,就会使得更多的大公司使用。当它们使用的操作系统出现资金不足时,这些大公司就会对它们使用的操作系统进行“援助”,此时对应的操作系统就有了资金来保持正常的运转。

 1.3 镜像

在了解了操作系统的生态问题之后接下来就来了解镜像的相关知识

其实我们使用的Centos等操作系统都是国外的公司创建的,那么这就使得原来的yum当中的配置文件保存的软件源保存的是国外的软件包管理器,由于“墙”的原因这就使得我们无法正常到的查找到软件的包管理器,为了解决这一问题,国内的一些公司或者高校就在他们自己的云服务器上将国外的软件管理器的内容拷贝到他们的的云服务器上再将来用户的包管理器的配置文件当中的软件源.conf进行替换。以上的过程就是包管理器的“镜像”

以下是使用DeepSeek生成的一些国内常用的Linux软件安装源的官方链接

1. **阿里云官方镜像站**  
   - 官方链接:
阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
   - 提供CentOS、Ubuntu、Debian等多种Linux发行版的镜像,支持快速下载和更新软件包。

2. **清华大学开源软件镜像站**  
   - 官方链接:
清华大学开源软件镜像站 | Tsinghua Open Source Mirror
   - 提供多种Linux发行版镜像,以及Python、Perl、Ruby等编程语言的扩展包。

3. **中国科学技术大学开源镜像站**  
   - 官方链接:
USTC Open Source Software Mirror
   - 提供多种Linux发行版镜像及常用开发工具,支持快速获取软件包。

4. **北京交通大学自由与开源软件镜像站**  
   - 官方链接:
首页 - 北京交通大学自由与开源软件镜像站
   - 提供多种Linux发行版镜像及相关软件仓库。

5. **中国科学院软件研究所镜像站(ISCAS)**  
   - 官方链接:
欢迎访问 ISCAS 开源镜像站
   - 提供多种Linux发行版、编程语言和开发工具的镜像。

6. **上海交通大学开源镜像站**  
   - 官方链接:
Index of /
   - 提供丰富的Linux软件资源,包括多种发行版镜像和软件仓库。

7. **网易开源镜像站**  
   - 官方链接:
欢迎访问网易开源镜像站
   - 提供多种Linux发行版镜像及相关软件仓库,支持便捷的搜索功能。

8. **搜狐开源镜像站**  
   - 官方链接:
Index of /
   - 提供CentOS、Ubuntu等发行版的镜像下载。

9. **华为云镜像站**  
   - 官方链接:
https://mirrors.huaweicloud.com/ 
   - 提供多种Linux发行版镜像及开发工具支持。

10. **腾讯云镜像站**  
    - 官方链接:
腾讯软件源
    - 提供多种Linux发行版镜像及常用软件仓库。

这些镜像站可以帮助您快速下载和更新Linux软件包,提升安装效率。

1.5 yum

在以上我们认识了包管理器的相关的知识之后接下来就来了解yum是如何使用的。但在此之前先要来了解yum要如何进行安装,正常情况之下我们的云服务器当中系统是不会自带yum的,这需要我们自行安装。

安装需要使用以下的指令:

# Centos
$ sudo yum install -y lrzsz

若你使用的是Ubuntu那么就需要安装的是apt,对应的安装指令如下所示:

# Ubuntu
$ sudo apt install -y lrzsz

当我们使用以上的指令进行yum的安装就会发现会出现以下的问题,这其实是由于在Linux当中安装yum这些包管理器是需要使用root或者进行指令提权的,因此在普通用户下要进行yum的安装就需要在以上指令之前加上sudo 

 

 

注:在Linux当中的软件,root安装了,普通用户也是能使用的,因此软件只要安装一次即可

在此要卸载yum/apt需要使用到以下的指令

# Centos
sudo yum remove [-y] lrzsz
# Ubuntu
sudo apt remove [-y] lrzsz

安装了yum之后接下来我们就可以来了解如何使用yum来安装、卸载软件了

在此使用以下的指令就可以将罗列出当前⼀共有哪些软件包

yum list 

但由于包的数目可能非常之多, 这里我们需要使用以下的指令,grep 命令只筛选出我们关注的包

yun list | grep XXX

之后要安装对应的软件就使用以下的指令

yum install [-y] XXX

要卸载相应的软件就使用以下的指令 

yum remove [-y] XXX

其实在Linux当中是有很多好玩的指令的,通过yum/apt等安装之后就可以使用了,例如在Centos当中只要使用yum安装sl之后再使用sl就会出现一个火车的动图

yum intall [-y] sl

 

 

注:如果你还想了解更多好玩的指令可以自己查阅 

 

2. 编辑器Vim

在了解了yum之后接下来我们就月嫂了解在Linux当中的编辑器,其实在Linux当中的编辑器其实是有很多的,不过最经典的是接下来我们要学习的vim。在此了解了vim的基本使用之后我们就可以在Linux当中编写代码了,并且使用熟悉之后会比之前的效率要高许多

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以运⾏于x window、 mac os、 windows。

2.1 见一见vim

在此当我们要使用vim来编辑指定文件的内容时之需要使用以下的指令即可

vim [文件名]

在此如果vim之后的文件是不存在的,那么就会自动的在当前的路径之下创建对应的文件

 

注:在此你的vim打开和我的vim可能是不同的,这时因为vim没有进行配置时默认就是和记事本一样的,只要进行配置之后就可以显示行号;高亮等。

以上我们就写了一个简单的C语言的代码,那么要将test1.c内的代码能运行起来,那么就需要使用到gcc,在此gcc的详细知识在下一篇当中会进行讲解,在此你只需要先知道我们写的代码要通过gcc编译之后才能形成可执行程序

使用了gcc之后默认就会形成a.out

 

之后运行a.out就可以得到原来test.c输出的结果

 

2.2 vim的多模式

在以上我们已经见到了vim的使用,那么接下来就来了解如何使用vim

2.1 命令模式

光标移动

当我们使用vin打开了我们创建了一个文件指之后,接下来使用vim打开之后这时你会发现你点键盘上的大多数按键都没有反应,其实这是当打开vim时默认所处的是命令模式此时只能进行相关的命令操作

在此vim的命令模式当中一般进行的是光标的移动,以及代码片段的删除、复制、粘贴 。

 那么接下来就来了解命令模式当中的各个命令

将文件当中的光标运移动到文本的开头就使用以下的命令

gg

如果是要移动到指定的行就使用 n+gg 在此n表示的是要光标移动的目标行数

 

要将文件当中的光标移动到文本的末尾就使用以下的命令

shift+gg

 以上命令其实就是GG,按住键盘的shift键之后再点击gg

和使用gg类似使用GG是也可以将光标移动到文本当中的指定行,只需要在使用GG之前输入指定的行号即可

除了以上将文本的光标移动到文本的开头、末尾、指定行之外,有时当一行的代码很长时使用方向键移动就很慢,那么此时就可以使用以下的命令

shift+4=$ 将光标移动到行尾
shift+6=^ 将光标移动到行首

 

如果要将光标进行上下左右的移动,就需要使用到h、j、k、i,在此h表示左;i表示右;j表示下;k表示上

在此你可能就会又疑惑了,在键盘当中不是有对应的方向键吗,那为什么还要使用这些字符键来表示方向?

这其实是因为vim是很早就出现了,而在那时键盘还是像如下所示的,可以看到是没有方向键的,就是使用hjkl这四个键来表示方向键,虽然现在的键盘都是有方向键的,但是在一些情况下方向键可能会出现无法使用的情况,因此在此我们还是要学习hjkl表示方向。

在行内光标的移动过程当中为了提高效率,以下的命令可以实现行内光标以单词为单位的前后移动

n+w/b 

以上的单词不是我之前认识的英语单词而是由vim内部判断的有效单词

其他命令

以上我们了解了关于文本当中光标移动的相关命令,那么接下来来了解其他的命令

当我们要将文本当中的一段文本进行复制时就可以使用到以下的指令

n+yy

在此n表示的是从当前行开始要复制文本行的行数

例如以下示例:

如果要将第7行复制就需要将光标移动到第7行之后再使用yy

要将复制之后的文本进行粘贴就需要使用以下的命令

n+p

在此n表示的是要将之前复制的内容粘贴的份数,并且张贴过程是将粘贴到当前行的下一行

例如以下示例:

点击10p之后就将之前复制的第7行粘贴10遍

如果是要将一部分的文本进行裁剪或者是删除就可以使用以下的命令

n+dd

 以上n表示的是要裁剪的从当前行开始的行数

例如以下示例

要将从13行开始的文本删除5行就可以使用5dd

当要将文本当中的快速的进行大小写的切换就需要使用以下的指令

shift+`=~

 例如以下示例

要将文本当中的第7行字母全部切换为大写就只需要一直按住shift之后再点击`即可

 

要进行命令模式当中行内的删除就需要使用以下的指令

n+x/X

在此使用x是可以将当前光标之后的一个字符进行删除,X是可以将当前光标之前的一个字符进行删除。n表示的是要进行删除字符的个数

在一些情况下可能只是要将文本进行替换,那么此时就可以使用以下的命令

n+r

不过一般以上都是在进行小范围的文本替换,如果要进行较大文本的替换就可以使用shift+r进入到替换模式

如果要对之前进行的命令进行撤销那么该如何做呢,在此只需要使用以下的指令

u

只要在命令模式当中输入u即可,但是如果要对u进行撤销呢?

此时就需要使用ctrl+r

因此在vim当中u和ctrl+r可以相互进行撤销

注:只要不退出vim就可以进行撤销,但是只要退出了vim就无法将上一次的操作进行撤销 

2.2 底行模式

在vim当中底行模式可以进行文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。

当我们进入vim时默认进入的示命令模式,如果要进入底行模式就需要使用以下指令

shift+;

以上其实就是在命令模式当中输入 : 即可进入底行模式,接下来就可以进行一系列的操作 

要从底行模式退回只需要点击键盘的ESC键即可

如果要使得文本显示含行号只需要在底行模式当中输入set nu即可,要去掉行号输入 set nonu

在此要搜索文本当中的字符只需要输入 /XXX ,XXX表示的就是要进行查询的字符,之后光标就会移动到该字符的位置

 

在此要退出vim只需要在底行模式当中输入q,如果要保存修改的文本并退出输入的是wq,但是在一些情况下即使是root也无法退出此时就需要输入wq!,在此!表示的就是强制退出。

在一些情况下我们可能需要退出vim再进行一些操作,但是退出vim之后再进入这一操作就显的较为繁琐,因此为了解决这一问题其实在vim的底行模式当中其实可以可以直接在要输入的命令之前加上!,这样就可以在不退出vim的情况下执行对应的命令

例如以下示例:
当前在vim下要使用ls指令,只需要打开底行模式之后输入!ls即可

在一些情况写我们写的程序可能是包含多文件的,那么进行该程序代码的编写就要在几个文件之间的切换效率就很低下,因此在vim提供以下的命令来进行多文件的编写效率的提升

vs [文件名]

在此vs是可以在打开了两个文件之后再打开文件的,只需要进行使用vs [文件名]  

例如以下示例:

如果当前我们处在test1.c下还要再打开test.h那么就可以使用vs test.h ,这样就可以将两个文件都显示出来

如果要将光标切换到另一个文件时只需要使用以下的命令,此时当前文件的光标就会移动到另一个文件当中

CTRL+ww

2.3 插入模式 

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

要进入插入模式需要在键盘当中点击i,按“i”进入插入模式后是从光标当前位置开始输入文件。如果要从当前光标的下以行进行输入需要点击键盘当中的a。若要插入新的一行,从行首开始输入文字需要在键盘当中输入o

在此插入模式就不进行讲解,,之后我们进行代码的编写都是要在该模式当中进行

在插入模式其实也是可以不用退回命令模式再保存退出的,有一种快速保存退出的方式就是直接使用SHIFT+zz

2.4 补充实用操作

在以上我们已经了解了基本的vim的使用方式,接下来了解了解几个vim当中的实用命令操作,了解之后在使用时能大大提到我们的效率

1.批量化注释

在我们使用vim进行代码的编写时可以会出现要将一大段的代码进行注释,当然我们是可以进入插入模式之后再一行一行的注释,但是这样的效率太低下了,接下来就来了解更高效的方式

在此只要先使用CTRL+v进入视图模式之后再使用 hjkl选定要进行注释的行 再使用shift+i进入到插入模式,再点击ESC就可以实现批量化的注释

例如以下示例: 

2.批量化去注释

如果要批量化的去除注释,只需要先使用CTRL+v进入视图模式之后接下来再使用hjkl选定要删除注释的行,再点击键盘当中的d就可以实现批量化注释的删除

例如以下示例:

 

3.进行文本内的替换

如果要将文本内的字符替换为指定的字符,那么就可以在底行模式当中使用到以下的指令

%s/[要被替换的字符]/[要替换的字符]/g

例如以下示例,要将文本当中的world 替换为linux就可以使用以上的命令

4.使光标跳转指定行

其实在打开使用vim打开指定的文件时光标默认是停在之前退出的位置,那么如果要使得光标跳转到指定的文本的行就需要在使用vim打开文件时加上要跳转的行号

vim [文件名] +[行号]

例如以下示例:

5.快速调用历史命令 

在之前我们就了解过可以使用上下键和ctrl+r来调用历史的命令,但是确实还有更快速的方式就是直接使用!外加原来命令的首个字母

 2.5 vim模式关系图

以上我们了解的命令模式、底行模式、插入模式、视图模式、替换模式之间的关系图如下所示

因此当我们不知道所处的是什么模式下就只需要无脑的ESC这样肯定能退回命令模式

注:其实除了以上地5大模式之外,vim内还有其他的模式,只不过这5大模式已经完全能满足我们的日常使用了

2.6 vim配置

之前你打开vim时会发现vim就和普通的记事本一样,这是因为没有进行文件的配置,那么接下来就来了解该如何进行配置

配置文件的位置
• 在目录 /etc/ 下⾯,有个名为vimrc的⽂件,这是系统中公共的vim配置文件,对所有用用户都有
效。
• 而在每个用户的主目录下,都可以自己建⽴私有的配置⽂件,命名为:“.vimrc”。例如,/root
⽬录下,通常已经存在⼀个.vimrc⽂件,如果不存在,则创建之。
• 切换用户成为⾃⼰执⾏ su ,进⼊自己的主工作目录,执⾏ cd ~
• 打开自己⽬录下的.vimrc⽂件,执⾏ vim .vimrc
常⽤配置选项,用来测试
• 设置语法⾼亮: syntax on
• 显示行号: set nu
• 设置缩进的空格数为4: set shiftwidth=4

但是这时你玩可以会觉得自己配置太麻烦了,那么有什么办法能一键完成配置的方法呢?

在此你可以将以下的脚本链接粘贴到命令行当中,注意在使用该脚本时最好在普通用户下,不要在root当中使用

注:以下只能在Centos当中使用

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

输入之后接下来只需要输入root密码即可自动完成vim的配置 ,接下来就是耐心的等待

 

以上配置默认的缩进是两个字符的,之前我们使用的vs当中默认缩进是4个字符,因此你如果要把缩进修改为4个字符就需要进行以下的操作

使用链接安装了之后就会发现出现了许多的插件 

 

接下来就是使用vim打开.vimrc ,再在底行当中输入/2点击回车,将以下的2都替换为4即可

 

如果你想了解更多的关于vim的配置可以看以下的文章

Vim 从入门到精通

3.解决sudo无法使用问题

在了解了vim的使用之后接下来我们就可以来解决之前在使用sudo时无法使用的问题,其实之前就说过是由于没有将普通用户写道相关的配置文件当中,那么接下来就来讲解如何将配置修改指定的配置文件

在此通过ls就可以看到以下的文件只有root有读权限,因此要修改该文件只有使用超级用户才能执行

 因此接下来就需要切换到超级用户在使用vim打开指定的文件

之后在100行左右就可以看到相关的配置信息,此时就将要写入的用户的用户名和root类似之后也带上ALL=(ALL)       ALL写入到该文件另起一行当中即可 

 

此时使用wq保存退出是会出现以下的警告的,这是因为该配置文件即使是root正常情况下也是不能修改的

 

此时就需要使用wq!来强制保存退出

完成以上的操作之后接下来就可以正常地使用sudo了

 

 

以上就是本篇的全部内容了,接下来还会继续带来Linux当中其他基础的开发工具,未完待续……

相关文章:

Linux《基础开发工具(上)》

在之前的篇章当中我们已经了解了Linux当中基本的指令以及相关的知识,那么接下来在本篇当中就开始学基本的开发工具,在此我们一共要了解6大开发工具,在此将这些工具的学习分为上中下篇,在本篇当中我们首先要来学习的是yun以及vim,一…...

【考试大纲】初级信息系统运行管理员考试大纲

目录 引言一、考试要求1、 考试说明2、 考试要求3、 本考试设置的科目包括:二、考试范围考试科目1:信息系统基础知识(初级)考试科目2:信息系统运行管理(应用技术)引言 最新的信息系统运行管理员考试大纲出版于 2018 年 9 月,本考试大纲基于此版本整理。 一、考试要求…...

《每天搞懂一道Hard》之数独终结者(LeetCode 37)

📌《每天搞懂一道Hard》之数独终结者(LeetCode 37) 🔗原题链接:https://leetcode.com/problems/sudoku-solver/ 今天我们来解剖一个经典回溯算法问题——数独求解器!这道题在算法面试中出现频率高达35%&a…...

LangChain原理解析及开发实战指南(2025年最新版)

一、LangChain核心架构解析 1.1 框架设计理念 LangChain是基于提示工程(Prompt Engineering)构建的LLM应用开发框架,其核心思想是通过模块化组件实现大语言模型与业务系统的无缝对接。该框架采用分层设计: 接口层:统一对接OpenAI、DeepSee…...

YoloV8改进策略:Block改进|CBlock,Transformer式的卷积结构|即插即用

摘要 论文标题: SparseViT: Nonsemantics-Centered, Parameter-Efficient Image Manipulation Localization through Spare-Coding Transformer 论文链接: https://arxiv.org/pdf/2412.14598 官方GitHub: https://github.com/scu-zjz/SparseViT 这段代码出自SparseViT ,代码如…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file

ngx_open_file 定义在src/os/unix/ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access)#define NGX_FILE_RDONLY O_RDONLY #define NGX_FILE_WRONLY O_WRONLY #de…...

测试金蝶云的OpenAPI

如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中,我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧! 2. 下载所需的SDK文件 2.1 获取SDK 首先&…...

C语言408考研先行课第一课:数据类型

由于408要考数据结构……会有算法题…… 所以,需要C语言来进行一个预备…… 因为大一贪玩,C语言根本没学进去……谁能想到考研还用得到呢?【手动doge(bushi) 软件用的是Clion,可以自行搜索教程下载使用。…...

11天 -- Redis 中跳表的实现原理是什么?Redis 的 hash 是什么?Redis Zset 的实现原理是什么?

Redis 中跳表的实现原理是什么? Redis 中的跳表(Skip List)是一种基于有序链表的高效数据结构,通过在链表上增加多级索引来提高数据的查找效率。以下是 Redis 中跳表的实现原理: 1. 基本概念 节点结构:跳…...

单细胞分析(19)—— 单细胞转录组基因集评分方法

下面是每种基因集评分方法的原理介绍代码示例,适用于R语言和Python两种主流生信分析环境。可以直接应用于单细胞转录组(scRNA-seq)数据分析中。 🔬 单细胞转录组基因集评分方法(附代码示例) 在单细胞RNA测…...

010 rocketmq批量消息

文章目录 批量消息BatchProducer.javaBatchConsumer.java 批量消息 批量发送可以提⾼发送性能,但有⼀定的限制: topic 相同 waitStoreMsgOK 相同 (⾸先我们建设消息的iswaitstoremsgoktrue(默认为true), 如果没有异常,我们将始终收到"O…...

JavaWeb后端基础(3)

原打算把Mysql操作数据库的一些知识写进去,但是感觉没必要,要是现在会的都是简单的增删改查,所以,这一篇,我直接从java操作数据库开始写,所以这一篇大致就是记一下JDBC、MyBatis、以及SpringBoot的配置文件…...

Oracle数据库基础入门(三): DQL 深入解析与实践

在 Oracle 数据库的知识体系中,数据查询语言(DQL)无疑是最为常用且关键的部分之一。对于 Java 全栈开发者而言,熟练掌握 DQL 不仅能高效地从数据库中获取所需数据,更是构建强大后端应用的基石。通过 DQL,我…...

P9231 [蓝桥杯 2023 省 A] 平方差

P9231 [蓝桥杯 2023 省 A] 平方差 - 洛谷 题目描述 给定 L,R,问 L≤x≤R 中有多少个数 x 满足存在整数 y,z 使得 xy2−z2。 输入格式 输入一行包含两个整数 L,R,用一个空格分隔。 输出格式 输出一行包含一个整数满足题目给定条件的 x 的数量。 输…...

贪心算法 求解思路

贪心算法简介 贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点,做一个当时(看起来是)最佳的选择。这种启发式策略并不是总能产生出最优解,但它常常能给出最优解。 在实际设计贪心算法时&#xff0…...

2025/2/25,字节跳动后端开发一面面经

一、双方简单自我介绍 面试官先自我介绍,之后属于面试官看简历过程,基本不听。 二、实习中遇到最难的事情,怎么解决的 主要问的还是实习中做过的项目,项目难点在哪里(自己参与的地方),面对困难是怎么思考,怎么实际操作解决的。 三、项目实现细节 掌握自己项目的实…...

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统,适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…...

SpringBoot新闻推荐系统设计与实现

随着信息时代的快速发展,新闻推荐系统成为用户获取个性化内容的重要工具。本文将介绍一个幽络源的基于SpringBoot开发的新闻推荐系统,该系统功能全面,操作简便,能够满足管理员和用户的多种需求。 管理员模块 管理员模块为系统管…...

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…...

基于Java+Spring+Mybsita+mysql的汽租车辆共享平台的设计源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏,有毕设问题,项目以及论文撰写等问题都可以和博主沟通,尽最大努力帮助更多的人! 目录 1软件需求 1.1引言 1.1.1编写目的 1.1.2背景 1.2 绪论 1.2.1-Internet与…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...