Linux之基础开发工具(yum,vim,gcc,g++)
目录
一、软件包管理器
1.1、什么是软件包
1.2、yum具体操作
1.2.1、查看软件包
1.2.2、安装软件
1.2.3、卸载软件
1.2.4、安装源
二、编辑器vim
2.1、vim的基本概念
2.2、vim的基本操作
2.3、vim正常模式命令集
2.4、vim末行模式命令集
2.5、替换模式
2.6、视图模式
2.7、总结
2.8、简单vim配置
2.8.1、创建/删除用户
三、编译器gcc/g++
3.1、背景知识
3.2、gcc编译选项
3.2.1、预处理(进行宏替换)
3.2.2、编译(生成汇编)
3.2.3、汇编(生成机器可识别代码)
3.2.4、链接(生成可执行文件或库文件)
3.3、动态链接和静态链接
3.4、静态库和动态库
3.5、gcc其他常用选项(了解即可)
一、软件包管理器
1.1、什么是软件包
在Linux下安装软件,⼀个通常的办法是下载到程序的源代码,并进⾏编译,得到可执⾏程序。但是这样太麻烦了,于是有些⼈把⼀些常⽤的软件提前编译好,做成软件包(可以理解成windows上 的安装程序)放在⼀个服务器上,通过包管理器可以很⽅便的获取到这个编译好的软件包,直接进⾏安装。软件包和软件包管理器,就好⽐ "App" 和 "应⽤商店" 这样的关系。
yum(Yellow dog Updater,Modified)是Linux下⾮常常⽤的⼀种包管理器,主要应⽤在Fedora,RedHat,Centos等发⾏版上。
Ubuntu:主要使⽤apt(Advanced Package Tool)作为其包管理器。apt同样提供了⾃动解决依赖关系、下载和安装软件包的功能。
Linux下载软件的过程(Ubuntu、Centos、other)
国内:
国外:
1.2、yum具体操作
1.2.1、查看软件包
通过 yum list 命令可以罗列出当前⼀共有哪些软件包。由于包的数⽬可能⾮常之多,这⾥我们需要使⽤ grep 命令只筛选出我们关注的包。例如:(软件包太多,这里只截取了一部分)
注意事项:
- 软件包名称:主版本号.次版本号.源程序发⾏号-软件包的发⾏号.主机平台.cpu架构。
- "x86_64" 后缀表⽰64位系统的安装包,"i686" 后缀表⽰32位系统安装包。选择包时要和系统匹配。
- "el7" 表⽰操作系统发⾏版的版本,"el7" 表⽰的是 centos7/redhat7。"el6" :centos6/redhat6
- 最后⼀列,base 表⽰的是 "软件源" 的名称, 类似于 "⼩⽶应⽤商店","华为应⽤商店" 这样的概念。
1.2.2、安装软件
通过 yum 我们可以通过很简单的⼀条命令完成安装。例如:
Centos版本
sudo yum install -y 软件包名(只有root可以安转,所以普通用户需要用sudo提权)
Ubuntu版本
sudo apt install -y 软件包名(只有root可以安转,所以普通用户需要用sudo提权)
yum/apt:会⾃动找到都有哪些软件包需要下载,这时候敲 "y" 确认安装。
出现 "complete" 字样或者中间未出现报错,说明安装完成。
注意事项:
- 安装软件时由于需要向系统⽬录中写⼊内容,⼀般需要 sudo 或者切到 root 账户下才能完成。
- yum/apt安装软件只能⼀个装完了再装另⼀个,正在yum/apt安装⼀个软件的过程中,如果再尝试⽤ yum/apt 安装另外⼀个软件,yum/apt会报错。
例如安装g++:
我这里因为之前安装过了,所以这里什么都没有做,如果没有安装,输入命令后就会开始安装了。
1.2.3、卸载软件
仍然是一条命令:
Centos
sudo yum remove [-y] 软件名
Ubuntu
sudo apt remove [-y] 软件名
注意事项:关于 yum / apt 的所有操作必须保证主机(虚拟机)⽹络畅通!!!
1.2.4、安装源
我们安装时只给出了软件包名,那么安装命令如何知道上哪里安装的呢,其实yum命令是有配置文件的,配置文件中软件的下载路径。
上图为centOS 7版本中,yum的配置文件,这些文件所在路径为/etc/yum.repos.d/。这些文件中,我们一般查看时看CentOS-Base.repo。
Cetnos 安装源路径:
-rw-r--r-- 1 root root 676 Oct 8 20:47 CentOS-Base.repo # 标准源
-rw-r--r-- 1 root root 230 Aug 27 10:31 epel.repo # 扩展源
Ubuntu 安装源路径:
/etc/apt/sources.list # 标准源
/etc/apt/sources.list.d/ # 扩展源
二、编辑器vim
vi/vim的区别简单点来说,它们都是多模式的编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以运⾏于x window、mac os、windows。
2.1、vim的基本概念
这里我们学习vim的三种模式(其实有好多模式,⽬前掌握这3种即可),分别是命令模式,插⼊模式(Insert mode)和底⾏模式(last line mode),各模式的功能区分如下:
正常/普通/命令模式(Normal mode):
控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段以及进⼊Insert mode下,或者到 last line mode。
插⼊模式(Insert mode):
只有在Insert mode下,才可以做⽂字输⼊,按「ESC」键可回到命令⾏模式。该模式是我们后⾯⽤的最频繁的编辑模式。
末⾏模式(last line mode):
⽂件保存或退出,也可以进⾏⽂件替换,找字符串,列出⾏号等操作。
在命令模式下,shift + : 即可进⼊该模式。要查看你的所有模式:打开 vim,底⾏模式直接输⼊:help vim-modes。
2.2、vim的基本操作
进⼊vim语法:vim + 文件名
在系统提⽰符号后输⼊vim及⽂件名称后,就进⼊vim全屏幕编辑画⾯:
使用:
效果:
注意:进⼊vim之后,是处于[正常模式],我们要切换到[插⼊模式]才能够输⼊⽂字。
[正常模式]切换⾄[插⼊模式]:
在正常模式下,按下 i 键,即可进入插入模式。
[插⼊模式]切换⾄[正常模式]:
在插入模式下,按 Esc 键,即可进入正常模式。
[正常模式]切换⾄[底行模式]:
在正常模式下,按下 shift + ;(即 :),即可进入底行模式。
[底行模式]切换⾄[正常模式]:
在底行模式下,按 Esc 键,即可进入正常模式。
退出vim及保存⽂件,在正常模式下进⼊底行模式并输入下面字母后回车。作用:
- w:(保存当前⽂件)
- wq:(输⼊「wq」,存盘并退出vim)
- q!:(输⼊q!,不存盘强制退出vim)
2.3、vim正常模式命令集
如何进入插入模式:
- 按「i」切换进⼊插⼊模式「insert mode」,按“i”进⼊插⼊模式后是从光标当前位置开始输⼊ ⽂件;
- 按「a」进⼊插⼊模式后,是从⽬前光标所在位置的下⼀个位置开始输⼊⽂字;
- 按「o」进⼊插⼊模式后,是插⼊新的⼀⾏,从⾏⾸开始输⼊⽂字。
从插⼊模式切换为命令模式:
- 按「ESC」键。
移动光标:
vim可以直接⽤键盘上的上下左右移动光标,但正规的vim是⽤⼩写英⽂字⺟「h」、「j」、 「k」、「l」,分别控制光标左、下、上、右移⼀格。
- 按「G」:移动到⽂章的最后。
- 按「 $ 」:移动到光标所在⾏的“⾏尾”。
- 按「^」:移动到光标所在⾏的“⾏⾸”。
- 按「w」:按单词向后移动(Linux所认为的单词,不一定是英语单词)。
- 按「e」:光标跳到下个字的字尾。
- 按「b」:按单词向前移动(Linux所认为的单词,不一定是英语单词)。
- 按「#l」:光标移到该⾏的第#个位置,如:5l, 56l。
- 按[gg]:进⼊到⽂本开始。
- 按[shift+g]:进⼊⽂本末端。
- 按「ctrl」+「b」:屏幕往“后”移动⼀⻚。
- 按「ctrl」+「f」:屏幕往“前”移动⼀⻚。
- 按「ctrl」+「u」:屏幕往“后”移动半⻚。
- 按「ctrl」+「d」:屏幕往“前”移动半⻚。
删除文字:
- 「x」:每按⼀次,删除光标所在位置的⼀个字符。
- 「#x」:例如,「6x」表⽰删除光标所在位置的“后⾯(包含⾃⼰在内)”6个字符。
- 「X」:⼤写的X,每按⼀次,删除光标所在位置的“前⾯”⼀个字符。
- 「#X」:例如,「20X」表⽰删除光标所在位置的“前⾯”20个字符。
- 「dd」:删除光标所在⾏。
- 「#dd」:从光标所在⾏开始删除#⾏。
复制:
- 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
- 「#yw」:复制#个字到缓冲区。
- 「yy」:复制光标所在⾏到缓冲区。
- 「#yy」:例如,「6yy」表⽰拷⻉从光标所在的该⾏“往下数”6⾏⽂字。
- 「p」:将缓冲区内的字符粘贴到光标所在位置。
注意:所有与“y”有关的复制命令都必须 与“p”配合才能完成复制与粘贴功能。
替换:
- 「r」:替换光标所在处的字符。
- 「R」:替换光标所到之处的字符,直到按下「ESC」键为⽌。
撤销上一次操作:
- 「u」:如果误执⾏⼀个命令,可以⻢上按下「u」,回到上⼀个操作。按多次“u”可以执⾏ 多次回复。
- 「ctrl + r」:撤销刚才的撤销,即撤销的恢复。
更改:
- 「cw」:cw会删除从光标位置到当前单词结尾的内容,并直接进入插入模式,允许你输入新的文本替换被删除的单词。
- 「c#w」:例如,「c3w」表⽰更改3个字。
跳至指定的行:
- 「ctrl」+「g」:列出光标所在⾏的⾏号。
- 「#G」:例如,「15G」,表⽰移动光标⾄⽂章的第15⾏⾸。
大小写替换:
- 「shift + ~」:将大写替换成小写,小写替换为大写。如果一直按着,会直接替换到行尾。
切换光标所在的屏幕:
- 「Ctrl + ww」:当处于分屏模式时,可以通过该命令切换光标所在屏幕,进而操作不同的文件。
2.4、vim末行模式命令集
在使⽤末⾏模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进⼊末⾏模式。
列出行号:
- 「set nu」:输⼊「set nu」后,会在⽂件中的每⼀⾏前⾯列出⾏号。
跳到⽂件中的某⼀⾏:
- 「#」:「#」号表⽰⼀个数字,在冒号后输⼊⼀个数字,再按回⻋键就会跳到该⾏了,如输⼊数字15,再回⻋,就会跳到⽂章的第15⾏。
查找字符:
- 「/ + 关键字」:先按「/」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往后寻找到您要的关键字为⽌。
- 「? + 关键字」:先按「?」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可 以⼀直按「n」会往前寻找到您要的关键字为⽌。
保存文件:
- 「w」:在冒号(底行模式的冒号)输⼊字⺟「w」就可以将⽂件保存起来。
执行命令行命令:
- 「!+ 命令」:在 ! 后面加命令行的指令就会返回命令行并执行指令,按任意键返回正在操作的文件中,可以和 man 命令结合使用,忘记接口使用时退出文件查太麻烦,使用该命令自动返回命令行执行命令,查看完接口后退出 man 的页面再按任意键即可回到操作的文件中。
分屏操作:
- 「vs + 文件名」:在底行模式中输入该命令后即可实现分屏操作,将多个文件同时展示出来,便于代码编辑。
离开vim:
- 「q」:按「q」就是退出,如果⽆法离开vim,可以在「q」后跟⼀个「!」强制离开vim。
- 「wq」:⼀般建议离开时,搭配「w」⼀起使⽤,这样在退出的时候还可以保存⽂件。
2.5、替换模式
在正常模式(命令模式)下,我们可以通过 r 命令进行文本中某个字符的替换,但是这样效率较低,所以我们可以进入替换模式,在替换模式下我们所输入的字符会替换光标所在之处的字符,而且可以一直进行替换,直到我们主动退出替换模式。
- 正常模式(命令模式)进入替换模式:shift + r(即R)。
- 替换模式进入正常模式:ESC。
2.6、视图模式
- 多行注释:我们可以先Ctrl + v进入视图模式,在通过 h,j,k,l 键进行区域选择,然后再按shift+i(即大写字母 I)进入插入模式,输入//,最会在按两次Esc,即可将选中的区域全部注释。
- 取消多行注释:我们可以先Ctrl + v进入视图模式,在通过 h,j,k,l 键将想要去掉的注释进行选中,最后在按一下 d 键即可去除选中的注释。
2.7、总结
2.8、简单vim配置
配置文件的位置:
- 在⽬录 /etc/ 下⾯,有个名为.vimrc的⽂件,这是系统中公共的vim配置⽂件,对所有用户都有效。
- 在每个用户的主⽬录下,都可以⾃⼰建⽴私有的配置⽂件,命名为:“.vimrc”。例如,/root ⽬录下,通常已经存在⼀个.vimrc⽂件,如果不存在,则可以创建。
- 切换用户成为⾃⼰执⾏ su ,进⼊⾃⼰的主⼯作⽬录,执⾏cd ~
- 打开⾃⼰⽬录下的.vimrc⽂件,执⾏ vim .vimrc
2.8.1、创建/删除用户
- 创建普通用户:sudo useradd -m 用户名
- 设置密码:sudo passwd 用户名(创建用户成功后通过该命令为用户设置密码)
- 删除普通用户:sudo userdel -r 用户名(删除用户可能还需要手动删除它的家目录)
三、编译器gcc/g++
注意:gcc和g++用到的选项相同。
3.1、背景知识
1.预处理 -> 进⾏宏替换/去注释/条件编译/头⽂件展开等。
2.编译 -> ⽣成汇编。
3.汇编 -> ⽣成机器可识别代码。
4.连接 -> ⽣成可执⾏⽂件或库⽂件。
3.2、gcc编译选项
格式:gcc [选项] 要编译的⽂件 [选项] [⽬标⽂件]
示例:
3.2.1、预处理(进行宏替换)
- 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。
- 预处理指令是以#号开头的代码⾏。
- 示例:gcc –E hello.c –o hello.i 。
- 选项“-E”,该选项的作⽤是让 gcc 在预处理结束后停⽌编译过程。
- 选项“-o”是指定⽬标⽂件名称,“.i”⽂件为已经过预处理的C原始程序。
示例:
3.2.2、编译(生成汇编)
- 在这个阶段中,gcc ⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的⼯作, 在检查⽆误后,gcc把代码翻译成汇编语⾔。
- 用户可以使⽤“-S”选项来进⾏查看,该选项只进⾏编译⽽不进⾏汇编,⽣成汇编代码。
- 示例:gcc –S hello.i –o hello.s 。
示例:
3.2.3、汇编(生成机器可识别代码)
- 汇编阶段是把编译阶段⽣成的“.s”⽂件转成⽬标⽂件。
- 读者在此可使⽤选项“-c”就可看到汇编代码已转化为“.o”的⼆进制⽬标代码了。
- 示例:gcc –c hello.s –o hello.o 。
示例:
3.2.4、链接(生成可执行文件或库文件)
- 在成功编译之后,就进⼊了链接阶段,⽣成可执⾏⽂件或库⽂件。
- 示例:gcc hello.o –o hello。
示例:
3.3、动态链接和静态链接
在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数, 但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。这个链接的过程就是静态链接。静态链接的缺点很明显:
- 浪费空间:因为每个可执⾏程序中对所有需要的⽬标⽂件都要有⼀份副本,所以如果多个程序对同⼀个⽬标⽂件都有依赖,如多个程序中都调⽤了printf()函数,则这多个程序中都含有 printf.o,所以同⼀个⽬标⽂件都在内存存在多个副本;
- 更新⽐较困难:因为每当库函数的代码修改了,这个时候就需要重新进⾏编译链接形成可执⾏程序。但是静态链接的优点就是,在可执⾏程序中已经具备了所有执⾏程序所需要的任何东西,在执⾏的时候运⾏速度快。
动态链接的出现解决了静态链接中提到问题。动态链接的基本思想是把程序按照模块拆分成各个相对独⽴部分,在程序运⾏时才将它们链接在⼀起形成⼀个完整的程序,⽽不是像静态链接⼀样把所有程序模块都链接成⼀个单独的可执⾏⽂件。 动态链接其实远⽐静态链接要常⽤得多。⽐如我们查看下 code 这个可执⾏程序依赖的动态库,会发现它就⽤到了⼀个 c 动态链接库:
在这⾥涉及到⼀个重要的概念:库
- 我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,⽽没有定义函数的实现,那么,是在哪⾥实现“printf”函数的呢?
- 最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库⽂件中去了,在没有特别指定 时,gcc 会到系统默认的搜索路径“/usr/lib”下进⾏查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,⽽这也就是链接的作⽤。
3.4、静态库和动态库
- 静态库是指编译链接时,把库⽂件的代码全部加⼊到可执⾏⽂件中,因此⽣成的⽂件⽐较⼤,但在运⾏时也就不再需要库⽂件了。其后缀名⼀般为“.a”
- 动态库与之相反,在编译链接时并没有把库⽂件的代码加⼊到可执⾏⽂件中,⽽是在程序执⾏时由运⾏时链接⽂件加载库,这样可以节省系统的开销。动态库⼀般后缀名为“.so”,如前⾯的libc.so.6就是动态库。gcc 在编译时默认使⽤动态库。完成了链接之后,gcc 就可以⽣成可执⾏⽂件。
gcc默认⽣成的⼆进制程序,是动态链接的,这点可以通过 file 命令验证。
注意:Linux下,动态库XXX.so,静态库XXX.a;Windows下,动态库XXX.dll,静态库XXX.lib。
⼀般我们的云服务器,C/C++的静态库并没有安装,可以采⽤如下⽅法安装:
# Centos
yum install glibc-static libstdc++-static -y
3.5、gcc其他常用选项(了解即可)
- -E:只激活预处理,这个不⽣成⽂件,你需要把它重定向到⼀个输出⽂件⾥⾯。
- -S:编译到汇编语⾔不进⾏汇编和链接。
- -c:编译到⽬标代码。
- -o:⽂件输出到⽂件。
- -static:此选项对⽣成的⽂件采⽤静态链接。
- -g:⽣成调试信息。GNU调试器可利⽤该信息。
- -shared:此选项将尽量使⽤动态库,所以⽣成⽂件⽐较⼩,但是需要系统由动态库。
- -O0 / -O1 / -O2 / -O3编译器的优化选项的4个级别,-O0表⽰没有优化,-O1为缺省值,-O3优化级别最⾼。
- -w:不⽣成任何警告信息。
- -Wall:⽣成所有警告信息。
相关文章:
Linux之基础开发工具(yum,vim,gcc,g++)
目录 一、软件包管理器 1.1、什么是软件包 1.2、yum具体操作 1.2.1、查看软件包 1.2.2、安装软件 1.2.3、卸载软件 1.2.4、安装源 二、编辑器vim 2.1、vim的基本概念 2.2、vim的基本操作 2.3、vim正常模式命令集 2.4、vim末行模式命令集 2.5、替换模式 2.6、视图…...
【计算机视觉】三维重建: OpenMVS:工业级多视图立体视觉重建框架
深度解析OpenMVS:工业级多视图立体视觉重建框架 技术架构与核心算法1. 系统架构设计2. 核心算法解析稠密点云重建表面重建网格优化 实战全流程指南环境配置硬件要求编译安装(Ubuntu) 数据处理流程输入准备(OpenMVG输出)…...
C++负载均衡远程调用学习之异步消息任务功能与连接属性
目录 1.LarV0.11-异步消息机制的event_loop增添属性分析 2.LARS 3.LarV0.11异步消息发送机制的实现及测试 4.LarV0.11异步消息任务机制bug修复和效果演示 5.LarV0.12链接参数属性的绑定 1.LarV0.11-异步消息机制的event_loop增添属性分析 ## 4) 事件触发event_loop …...
内存性能测试方法
写于 2022 年 6 月 24 日 内存性能测试方法 - Wesley’s Blog dd方法测试 cat proc/meminfo console:/ # cat proc/meminfo MemTotal: 3858576 kB MemFree: 675328 kB MemAvailable: 1142452 kB Buffers: 65280 kB Cached: 992252 …...
游戏引擎学习第256天:XBox 控制器卡顿和修复 GL Blit 伽玛问题
回顾并为今天定下基调 今天的主要任务是让我们的性能分析工具正常工作,因为昨天已经完成了结构性工作。现在,剩下的工作大部分应该是调试和美化。性能分析工具现在应该已经基本可用了。昨天我们在这个方面取得了很大的进展。 接下来,我们将…...
4.29-4.30 Maven+单元测试
单元测试: BeforeAll在所有的单元测试方法运行之前,运行一次。 AfterAll在所有单元测试方法运行之后,运行一次。 BeforeEach在每个单元测试方法运行之前,都会运行一次 AfterEach在每个单元测试方法运行之后,都会运行…...
Android 端如何监控 ANR、Crash、OOM 等严重问题
在移动互联网时代,Android 应用已经成为我们生活中不可或缺的一部分。从社交聊天到在线购物,从娱乐消遣到办公学习,几乎每个人的手机里都装满了各式各样的应用。然而,作为开发者,咱们得面对一个残酷的现实:…...
Spring Boot 微服务打包为 Docker 镜像并部署到镜像仓库实战案例
案例项目素材可以拉取我github上的: https://github.com/AcademicTECHNERD/SpringCoudEurekaDemo 下面的案例将把我的product-service(也就是提供者)打包为镜像 执行maven命令: mvn clean package -DskipTests在根目录加一个dock…...
springAop代理责任链模式源码解析
目录 两次匹配 Bean 后置处理器中的匹配 方法调用时的匹配 Bean后置处理器中Advisor匹配流程 方法调用时的匹配 Jdk cglib 小小总结 Advisor 收集与排序 责任链执行过程 两次匹配 Bean 后置处理器中的匹配 在 Bean 初始化过程中,Spring 会通过 Bean 后置…...
ElasticSearch深入解析(九):Object、Nested、Flattened类型
文章目录 一、Object 类型:默认的嵌套对象处理方式核心原理典型场景关键限制 二、Nested 类型:解决嵌套数组的关联查询核心原理典型场景使用示例注意事项 三、Join 类型:跨文档的父子关联核心原理典型场景使用示例注意事项 四、Flattened 类型…...
list的迭代器详讲
1.list的迭代器就是封装了节点指针的类 2.迭代器失效 迭代器失效即迭代器封装的节点指针无效 。因为 list 的底层结构为带头结点的双向循环链表 ,因此 在 list 中进行插入时是不会导致 list 的迭代 器失效的,只有在删除时才会失效,并且失效的…...
动态规划之多状态问题1
题目解析: 也就是给一个预约数组,选择一些数字,让其总和最大,但不能选择相邻的两个数字 算法原理: 依旧可以根据经验题目 以dp[i]位置结尾时,巴拉巴拉 根据题目要求补充完整,dp[i]ÿ…...
音视频开源项目列表
音视频开源项目列表 一、多媒体处理框架 通用音视频处理 FFmpeg - https://github.com/FFmpeg/FFmpeg 最强大的音视频处理工具库支持几乎所有格式的编解码提供命令行工具和开发库 GStreamer - https://gitlab.freedesktop.org/gstreamer/gstreamer 跨平台多媒体框架基于管道…...
论微服务架构及其应用
试题四 论微服务架构及其应用 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通。在微服务架构中,每个服务…...
Spring Cloud与Service Mesh集成:Istio服务网格实践
文章目录 引言一、Spring Cloud与Service Mesh概述二、Istio服务网格架构三、Spring Cloud与Istio集成的基础设施准备四、服务发现与负载均衡五、流量管理与弹性模式六、安全通信与认证授权七、可观测性集成八、配置管理集成总结 引言 微服务架构已成为现代分布式系统的主流设…...
Day109 | 灵神 | 148.排序链表 | 归并排序
Day109 | 灵神 | 148.排序链表 | 归并排序 148. 排序链表 - 力扣(LeetCode) 以下是灵神的题解,笔者认为这题只要可以看懂就好了 两种方法:分治和迭代 文章目录 Day109 | 灵神 | 148.排序链表 | 归并排序前置题目方法一&#x…...
[更新完毕]2025东三省C题深圳杯C题数学建模挑战赛数模思路代码文章教学: 分布式能源接入配电网的风险分析
完整内容请看文章最下面的推广群 分布式能源接入配电网的风险分析 摘要 随着可再生能源渗透率的不断提升,分布式光伏发电在配电网中的大规模接入给传统电力系统运行带来了新的挑战。光伏发电固有的间歇性和波动性特征,加之配电网拓扑结构的复杂性&…...
ActiveMQ 集群搭建与高可用方案设计(二)
五、高可用方案设计与优化 (一)Zookeeper 在 ActiveMQ 集群中的应用 作用:在 ActiveMQ 集群中,Zookeeper 扮演着至关重要的角色。它主要用于选举 Master 节点,通过其内部的选举机制,从众多的 ActiveMQ Br…...
多协议 Tracker 系统架构与传感融合实战 第六章 多传感器时钟同步与数据对齐
第六章 多传感器时钟同步与数据对齐 摘要 本章围绕多源传感融合系统中——尤其是 IMU 与 UWB——的时钟同步与数据对齐问题展开,系统介绍: 硬件时钟源类型及漂移特性 软件校准策略:NTP/PTP 与自定义心跳同步 多源时钟同步算法:两阶段对齐与漂移补偿 数据缓冲与双队列对齐架…...
【算法基础】插入排序算法 - JAVA
一、算法基础 1.1 什么是插入排序 插入排序是一种简单直观的排序算法,它的工作原理类似于我们打牌时整理手牌的过程。插入排序的核心思想是将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的适当位置。 1.…...
#Paper Reading# DeepSeek-R1
论文题目: DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 论文地址: https://arxiv.org/pdf/2501.12948 论文发表于: arXiv 2025年1月 论文所属单位: DeepSeek 论文大体内容 本文提出DeepSeek-R1模型,主要是以DeepSeek-V3[…...
HTML与CSS实现风车旋转图形的代码技术详解
在前端开发中,HTML和CSS是构建网页的基础技术。通过巧妙运用HTML的结构搭建和CSS的样式控制,我们能够实现各种精美的视觉效果。本文将对一段实现旋转图形效果的HTML和CSS代码进行详细解读,剖析其中的技术要点。 一、运行效果 HTML与CSS实现风…...
AWS在跨境电商中的全场景实践与未来生态构建
AWS在跨境电商中的全场景实践与未来生态构建 一、核心应用场景与技术赋能 1. AI驱动运营效率革命 • 智能选品与市场分析:通过Amazon SageMaker机器学习平台,跨境电商企业可构建精准选品模型。陕西自贸试验区案例显示,AI对亚马逊等平台销…...
AWS云服务深度技术解析:架构设计与最佳实践
作为全球市场份额占比32%的云服务提供商(Synergy Research 2023数据),AWS的技术体系已成为企业级应用架构的标杆。本文将深入剖析AWS核心技术组件的实现原理,并附可落地的架构设计范式。 AWS云服务器:中国企业出海的“…...
130. 被围绕的区域
题目链接:130. 被围绕的区域 思路:使用两遍dfs,第一遍找到可以被替换区域的可进入点并记录,第二遍就从所有的可进入点入手遍历区域内所有点并替换。 这是我的思路,感觉还是挺新颖的(应该很少有人这样想我…...
【Linux】进程优先级与进程切换理解
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、进程优先级 1. 什么是进程优先级 2. 为什么有进程优先级 3. 进程优先级的作用 4. Linux进程优先级的本质 5. 修改进程优先级 二、进…...
数据分析与可视化实战:从鸢尾花到乳腺癌数据集
数据分析是现代数据科学中不可或缺的一部分,它帮助我们理解数据、发现模式并做出明智的决策。本文将分享两个实战案例:鸢尾花数据集分析和乳腺癌数据集预处理,展示如何使用Python进行数据探索和可视化。 鸢尾花数据集分析 数据加载与基本统…...
怎样提升社交机器人闲聊能力
怎样提升社交机器人闲聊能力 本文聚焦社交机器人闲聊能力,指出闲聊在社交中意义重大,当前大语言模型(LLMs)驱动社交机器人闲聊存在不足。通过实验评估ChatGPT-3.5、Gemini Pro和LLaMA-2等LLMs闲聊表现,发现其与人类闲聊存在差异。 为此提出基于观察者模型的反馈重定向方…...
图论之幻想迷宫
题目描述: 幻象迷宫可以认为是无限大的,不过它由若干个 NM 的矩阵重复组成。矩阵中有的地方是道路,用 . 表示;有的地方是墙,用 # 表示。LHX 和 WD 所在的位置用 S 表示。也就是对于迷宫中的一个点(x,y),如…...
数学实验Matlab
一、Matlab语言环境和线性代数实验 1.Matlab语言环境 Matlab简介 Matlab:Matrix Laboratry 矩阵实验室 Matlab 提供了强大的科学计算、灵活的程序设计流程、高质量的图形可视化与界面设计等功能,被广泛应用于科学计算、控制系统、信息处理等领域的分…...
AI日报 · 2025年5月03日|Perplexity 集成 WhatsApp,苹果传与 Anthropic 合作开发 Xcode
1、Perplexity AI 功能更新:新增 WhatsApp 集成与多项优化 Perplexity 于 5 月 2 日发布其每周更新摘要,重点包括新增 WhatsApp 集成,用户现可直接在 WhatsApp 内与 Perplexity AI 交互,显著提升了信息获取的便捷性 [1]。此次更新…...
Maven 实现多模块项目依赖管理
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【JavaScript-Day 2】开启 JS 之旅:从浏览器控制台到 `<script>` 标签的 Hello World 实践
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
Windows 中使用dockers创建指定java web 为镜像和运行容器
以下是在 Windows 中使用 Docker 创建 Java Web 应用镜像并运行容器的分步指南: 步骤 1:安装 Docker 下载并安装 Docker Desktop for Windows启动 Docker Desktop,确保使用 WSL 2 后端(推荐)或 Hyper-V。 步骤 2&…...
机器人--MCU
MCU MCU(Microcontroller Unit,微控制器) 是机器人的“神经末梢”,负责 实时控制、传感器接口、低层通信 等关键任务。 作用 MCU的核心作用 功能具体任务示例实时控制电机PWM生成、PID调节、紧急制动机械臂关节控制、无人机电调…...
从融智学视域快速回顾世界历史和主要语言文字最初历史证据(列表对照分析比较)
融智学视域下世界历史与语言文字起源对照分析表 以下从融智学五个基本范畴(物、意、文、道、理义法),梳理主要古代文明的文字起源,及其历史证据,并进行跨文明比较: 文明/文字 物(载体…...
JavaScript性能优化实战(8):缓存策略与离线优化
前言 在Web应用中,性能优化不仅仅是关于代码执行速度,还与资源获取和数据持久化密切相关。合理的缓存策略可以显著减少网络请求,提升应用响应速度,同时有效降低服务器负载和用户流量消耗。离线优化则进一步解决了网络不稳定或断网场景下的用户体验问题,为Web应用提供类似…...
quantization-大模型权重量化简介
原文地址 https://towardsdatascience.com/introduction-to-weight-quantization-2494701b9c0c/ https://towardsdatascience.com/4-bit-quantization-with-gptq-36b0f4f02c34/ 权重量化简介 大型语言模型(LLM) 以其庞大的计算需求而闻名。通常,模型的大小是通过将参…...
unity ScriptObject的使用
1.先定义一个类数据类型 [Serializable] public class FoodItemData { public int foodID; // 食物唯一ID public string foodName; // 食物名称 [TextArea(3, 10)] // 多行文本输入 public string description; // 食物描述 pu…...
广义线性模型三剑客:线性回归、逻辑回归与Softmax分类的统一视角
文章目录 广义线性模型三剑客:线性回归、逻辑回归与Softmax分类的统一视角引言:机器学习中的"家族相似性"广义线性模型(GLMs)基础三位家族成员的统一视角1. 线性回归(Linear Regression)2. 逻辑回归(Logistic Regression)3. Softmax分类(Softm…...
Linux时钟与时间API
深入理解 Linux 时钟与时间 API 时间是计算领域的基础概念之一。在 Linux 系统中,精确可靠的时间管理对于系统日志记录、任务调度、网络通信、性能分析、文件系统操作乃至应用程序的正确运行都至关重要。本文将深入探讨 Linux 中的时钟类型、相关的 C API、使用示例…...
闭包(Closure)及其作用和影响
一、闭包是什么 闭包(Closure)指的是一个函数能够记住并访问其词法作用域(lexical scope),即使该函数在其词法作用域之外执行。换句话说,闭包让函数可以“记住”它被创建时的环境。 闭包的核心特…...
toLua笔记
基本 LuaState luaStatenew LuaState(); luaState.Start(); luaState.DoString("xxx"); luaState.DoFile("yyy.lua"); luaState.Require("zzz");//不要加.lua后缀 luaState.CheckTop();//检查解析器栈顶为空 luaState.Dispose(); luaStatenull;…...
20:深度学习-多层感知器原理
深度学习-多层感知器的原理 ------------------常州龙熙机器视觉培训班-课程资料 1.单层感知机 多层感知机是由感知机推广而来,感知机学习算法(PLA: Perceptron Learning Algorithm)用神经元的结构进行描述的话就是一个单独的。 首先了解下单层感知机: b--常量 …...
高频数据冲击数据库的技术解析与应对方案
目录 前言一、问题现象与影响分析1.1 典型场景表现1.2 核心问题分类 二、失效根源深度剖析2.1 架构设计缺陷2.2 缓存策略缺陷 三、解决方案与最佳实践3.1 缓存架构设计3.1.1 分层缓存架构3.1.2 热点数据识别 3.2 缓存策略优化3.2.1 动态过期时间算法3.2.2 缓存更新策略对比 3.3…...
(37)VTK C++开发示例 ---纹理地球
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 将图片纹理贴到球体上,实现3D地球的效果。 该代码使用了 VTK (Visualization Toolkit) 库来创建一个纹理…...
LeetCode - 1137.第N个泰波那契数
目录 题目 解法 动态规划解法 核心思想 执行流程 具体例子 时间复杂度和空间复杂度 代码 题目 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 解法 动态规划解法 核心思想 动态规划是一种通过将复杂问题分解为更小子问题来解决的算法方法。我将…...
智能决策支持系统的系统结构:四库架构与融合范式
前文我们已经了解了智能决策支持系统的基本概念以及基本构件,接下来我们了解一下系统结构。 有关“智能决策支持系统的基本概念”的内容,可看我文章:智能决策支持系统的基本概念与理论体系-CSDN博客 有关“智能决策支持系统的基本构建”的…...
单片机裸机环境下临界区保护
目录 1、直接中断屏蔽法 2、嵌套计数优化法 3、BASEPRI寄存器应用 4、动态优先级调整策略 5、LDREX/STREX指令应用 6、位带别名区原子访问 7、上下文感知保护 8、中断延迟优化技术 在嵌入式系统开发中,临界区保护是确保系统可靠性的关键技术。本文以ARM Cor…...
【数字电路】第六章 时序逻辑电路
一、时序逻辑电路概述 1.逻辑电路的分类 2.时序逻辑电路的一般结构形式 3.时序逻辑电路的描述方法 4.时序逻辑电路按触发器动作特点分类 5.时序逻辑电路按输出信号特点分类 6.常用时序逻辑电路 二、同步时序逻辑电路的分析 1.同步时序逻辑电路的分析方法 TTL触发器允许输入端…...