【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用
Welcome to 9ilk's Code World
(๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏: Linux网络编程
本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g++。
🏠 yum
🎸 什么是yum
当用户想下载软件或工具时,都需要到特定位置进行下载,比如你在手机上下载app,需要到对应的应用商城下载。类似的,在Linux系统下也有下载的需求,通常来说下载方式主要有以下几种:
1. 源代码安装:下载程序的源码,进行编译得到可执行程序之后使用,非常不方便。
2. rpm包安装:将源码提前在各种不同环境下编译好,形成一种压缩包叫rpm包,直接下载可执行程序就能安装好,实际上就是把可执行程序拷贝到指定路径下。但是主要可能会存在软件之间依赖问题,比如还需要你安装其他软件,额外的库之类的。
3. yum/apt安装:一站式安装。
Q:如何理解yum?
- 为了方便有的人就把常用的软件提前在各种环境下编译后形成软件包,之后上传到服务端上,通过包管理器可以很方便的获取到这个提前编译好的软件包进行安装。软件包和软件管理器,就好比“App"和”应用商店“的关系!
- yum是Linux下非常常用的一种软件包管理器,它相当于一个软件管家帮我们管理软件。yum主要用在Fedora,RedHat,Centos等发行版上,而Ubuntu下使用的是apt,apt同样提供了⾃动解决依赖关系、下载和安装软件包的功能。
注:其中服务器端充当一个审核员的作用,保证用户下载到的都是绿色健康的软件。
🎸 Linux软件生态
- Linux下载软件的过程
- 操作系统的好坏评估 --- ⽣态问题
对于一款操作系统,我们不仅要看到操作系统本身,还要看到特定OS背后的生态。
- 为什么会有⼈免费特定社区提供软件,还发布?还提供云服务器让你下载?
注:随着软件越做越大,这样做就有越多开发者,越能暴露更多问题,越能修正问题,有更多开发者维护文档,这对提升项目质量是有益的。
- 软件包依赖的问题
- 国内镜像源
🎸 yum/apt 操作
1. 查看软件包
通过该命令可以罗列出当前⼀共有哪些软件包,由于包的数目可能非常之多,这里我们需要使用grep命令进行筛选 :
---Centos
yum list | grep lrzsz--Ubuntu
apt search lrzsz
apt show lrzsz
2. 安装软件
# Centos
$ sudo yum install -y lrzsz# Ubuntu
$ sudo apt install -y lrzsz
注:使用yum/apt安装软件需要root权限。
- 安装软件时由于需要向系统⽬录中写⼊内容,⼀般需要sudo或者切到root账⼾下才能完成
- yum/apt安装软件只能⼀个装完了再装另⼀个.正在yum/apt安装⼀个软件的过程中,如果再尝试⽤yum/apt安装另外⼀个软件,yum/apt会报错。
3. 卸载软件
# Centos
sudo yum remove [-y] lrzsz# Ubuntu
sudo apt remove [-y] lrzsz
- 带上-y选项是不提示直接卸载
4. 注意事项
- 关于yum/apt的所有操作必须保证主机(虚拟机)网络畅通!!!可以通过ping指令验证
5. rzsz工具
(1)安装
//Centos
sudo yum install [-y] lrzsz//Ubuntu
sudo apt install lrzsz
(2)使用命令介绍
sz 文件名:将Linux中文件下载到Windows中。
rz : 将本地文件上传到Linux中。
🎸 yum/apt源配置
Q : yum/apt既然相当于是一个软件管家,那它是怎么知道到哪台服务器上下载数据的呢?
答:其实yum/apt配置文件中说明了其他软件的下载安装路径!
- Centos : yum
yum会根据/etc/yum.repos.d/该路径下面的配置文件,来构成自己的下载链接,(根据OS版本,根据你要下载的软件),yum会帮住我们下载;国外链接一般比较卡,我们可以使用国内各大高校提供的镜像yum源,所以需要配置。那么如何配置?本质就是更改文件,或者更改文件内容,把软件源里的地址链接,从国外的地址链接更新成国内的。
//1.备份
cp -r xxxx
//2.获取yum源 把远端的链接上的配置文件下载下来改名为CentOS-Base.repo
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo xxxx
//3.清理缓存,生成缓存,升级更新
sudo yum clear all
sudo yum makecache
sudo yum -y update
- Ubuntu : apt
1.打开配置文件
sudo vim /etc/apt/sources.list
2.配置文件替换为下载的apt源
...
3.保存并更新
sudo apt update
🎸 yum/apt其他操作
makecache将软件包信息缓存到本地 (这样每次安装不用去搜索)
clean all 清理老旧的缓存信息
update : 升级所有包同时也升级软件和系统内核
upgrade:只升级所有包
🏠 Vim/Vi
vi/vim的区别简单来说,他们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.例如语法加亮,可视化操作不仅可以在终端运行,也可以运行与x window、mac os、windows。
vim使用方法:
vim 文件名
🎸 vim的基本概念
我们讲解vim的三种模式(其实vim有多种模式,目前掌握三种即可),分别是命令行模式(command mode)、插入模式(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
模式之间的切换关系如下:
- 命令模式相当于"游戏中的起始界面", 任何模式都可以从命令模式进入,而且退出都是用的Esc键。
- 命令行模式 -> 插入模式:
1. i : 按「i」切换进⼊插⼊模式「insertmode」,按“i”进⼊插⼊模式后是从光标当前位置开始输⼊⽂件;
2. a :按「a」进⼊插⼊模式后,是从⽬前光标所在位置的下⼀个位置开始输⼊⽂字。
3. o : 按「o」进⼊插⼊模式后,是插⼊新的⼀⾏,从⾏⾸开始输⼊⽂字。
- 命令行模式 -> 底行模式 : 按下shift+;就进入底行模式,输入对应操作即可。
- 底行模式 -> 退出vim : 此时输入不同选项即可退出vim。
1. w : 保存当前文件。
2. wq : 保存并退出vim。
3. q! : 强制退出。
4. w! : 强制写入。
- 如果我想执行shell命令但不退出vim,可以切换为底行模式再使用!+ 指令。
- 命令行模式退出vim : shift zz
🎸 命令模式常见命令集
(1)对光标(动图中绿色方块即是光标)所在行的操作
- yy : 对当前光标所在行进行复制
- n + yy: 从光标当前行开始往下的n行复制。
- p: 粘贴。
- u : 撤销上一次操作。
- ctrl + r : 撤销的恢复。
- d: 删除光标所在行。可以搭配p完成剪贴操作。
- n + dd :对光标所在行开始往下n行进行删除操作。搭配n+p完成n次剪贴。
(2)光标快速定位/光标为锚点的操作:
- shift + g(G) : 定位到文本的最结尾。
- gg : 定位到文本的最开始。
- n + shift g : 定位到文本的第n行。
- h j k l : 其实就是光标上下左右的移动。h为左侧,j为下侧,k为上侧,l为右侧。
- shift + 4($) : 移动到光标所在行的行尾。
- shift + 6(^) : 移动到光标所在行的行首。
- w : 以单词(不存在空的连续字符串)为单位向后跳转。(一直按住w会不断往后跳)
- b :以单词为单位向前跳转。
- n + x : 从光标当前位置开始进行删除n个字符。(一直按住会不断删)
- n + shift + x : 删除光标所在位置的前n个字符。
- shift + ~ : 大小写快速切换。(一直按住会自动往后对字符进行切换大小写)
- n + r + 替换字符:从光标当前位置开始替换n个字符。(前提是有n个字符否则不会进行替换)
🎸 底行模式命令集
- set nu: 显示文本行号。
- set nonu : 取消行号。
- n + 回车 :跳转到第n行。
- / +关键字:先按/键,再输入想查找的字符,如果第一次找的关键字不是想要你的,可以一直按住n会往后寻找。(从前往后)
- / +关键字:先按/键,再输入想查找的字符,如果第一次找的关键字不是想要你的,可以一直按住n会往前寻找。(从后往前)
如果你想同时用vim编辑多个文件,那可以在底行模式输入vs + 文件名进行分屏操作:
注 : 光标在哪个文件,就说明正在编辑哪个文件,如果想将光标切换到另一个窗口,使用ctrl + ww。
🎸 替换模式
底行模式时使用shift+ r则可进入替换模式,能对文本进行自由替换编辑,输入啥就会将光标所在处替换为啥。
示范:
🎸 视图模式
当我们对文本部分内容想批量化进行注释时,在命令模式操作有点麻烦,此时我们可以切换到视图模式。
切换方法:先切换到insert模式,按住ctrl + v进入视图模式。
注释操作方法:可以使用h j k l移动光标进行批量化选取代码区域(可利用n+shift g进行快速跳转),选取之后按住shift + I进入插入模式,按/两次再Esc即可进行注释。
取消注释:进入视图模式,同样利用h j k l进行批量化选取区域,再按住d。
示范:
🎸 简单vim配置
配置文件位置:
- 在目录/etc/下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
- 在每个用户的主目录下,都可以建立私有配置文件,命名为".vimrc“。在该配置文件下进行的操作只对当前用户生效!
常用配置选项测试:
- 设置语法高亮度:syntax on
- 显示行号:set nu
- 设置缩进空格数为4:set shiftwidth=4
🎸 普通用户使用sudo提权
提权问题:如何把用户从普通用户提权提到
root
权限?
默认情况下普通用户使用root权限时,即使sudo也会受阻,这是因为普通用户并没有成为root用户的受信任列表里,此时需要把普通用户加入到该列表这样就可以使用root用户权限!
- 打开/etc/sudoers
- 添加普通用户进受信任名单
🏠 gcc/g++
🎸 前置知识
- 预处理:进行宏替换/去注释/条件编译/头文件展开等。
- 编译:生成汇编。
- 汇编:生成机器可识别代码。
- 链接:生成可执行文件或库文件。
🎸 gcc/g++介绍及安装
1. 什么是gcc/g++
gcc/g++都是编译器,其中gcc是GCC中的GUN C编译器,g++是GCC中GUN C++编译器。
- gcc : gcc对于.c和.cpp文件分别当作c和cpp文件编译(c和cpp语法强度不同)
- g++: g++统一当作cpp文件内编译
- g++编译文件时,会自动链接标准库STL,而gcc不会。
2. 安装
//1.先查看版本
gcc --version
g++ --version//2.没有则进行安装
yum/apt install -y gcc
yum/apt install -y g++
🎸 gcc/g++编译选项
我们以gcc为例
(1)不带选项
gcc是一个编译器,如果不带任何选项,默认直接将程序编译为可执行文件,也就是一步到位,默认形成的可执行程序叫a.out:
如果想执行可执行权限,直接./+可执行程序名。但是注意该可执行权限本身有可执行的权限!
如果想删除可执行程序,则使用rm即可,因为可执行程序也是文件:
(2)预处理
- 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等
- 预处理指令是以#号开头的代码行
- 选项“-E”,该选项的作⽤是让gcc在预处理结束后停⽌编译过程
- 选项“-o”是指⽬标⽂件,“.i”⽂件为已经过预处理的C原始程序
test.i文件是源码经过预处理之后的内容:
( 3 ) 编译
- 在这个阶段中,gcc⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的⼯作,在检查⽆误后,gcc把代码翻译成汇编语⾔。
- ⽤⼾可以使⽤“-S”选项来进⾏查看,该选项只进⾏编译⽽不进⾏汇编,⽣成汇编代码.s文件
编译文件内容如下:
(4)汇编
- 汇编阶段是把编译阶段⽣成的“.s”⽂件转成⽬标⽂件
- 可使⽤选项“-c”就可看到汇编代码已转化为“.o”的⼆进制⽬标代码了
注意:当然也可以对.c文件直接使用-c选项生成.o文件,帮我们把预处理,编译都做了
(5)链接
在成功编译之后,就进⼊了链接阶段,链接的时候需要把⼀堆文件链接在⼀起才生成可执行程序。
gcc test.o -o test
注:我们可以使用-o来自命名可执行文件的名字。
🎸 函数库
1. 什么是库?
- 我们的C程序中,并没有定义"printf"的函数实现,而且在预编译中包含的"stdio.h"中也只有该函数 的声明,而没有定义函数的实现,那么是在哪里定义函数的实现呢?
- 答案是:系统把这些函数的实现都放到名为libc.so.6的库文件中,在没有指定时,gcc会到系统默认路径的搜索路径"/usr/lib"下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数了,这也就是链接的作用!
- ldd + 可执行程序:查看可执行程序链接时依赖的库
2. 库分类
函数库一般分为静态库和动态库两种。动态库在linux下后缀一般为.so,在windows下后缀为.dll;静态库在linux下后缀为.a,在windows下后缀为.lib。
- 静态库:编译链接时,把库⽂件的代码全部加入到可执⾏⽂件中,因此⽣成的⽂件⽐较⼤,但在运⾏时也就不再需要库⽂件了。
- 动态库与之相反,在编译链接时并没有把库⽂件的代码加⼊到可执⾏⽂件中,⽽是在程序执⾏时由运⾏时链接⽂件加载库,这样可以节省系统的开销。动态库⼀般后缀名为“.so”,如前⾯所述的libc.so.6就是动态库。gcc在编译时默认使⽤动态库。
- gcc默认生成的二进制程序是动态链接的,可以使用file命令验证
- 如果想静态链接则需要带上-static选项
注:无论是动态链接还是静态链接,都一定要提供对应的动静态库!
🎸 理解动静态库以及安装动静态库
(1)例子1
🌰: 假设你是个刚中考完的准高中生,你咨询你录取学校的张三学长你录取的学校怎么上网,学长就提前告诉你了网吧的相关信息,当你上高中时,你每天按时完成学习完成任务4-6点的时候就去学长说的西门上网,日复一日都是这样,你每天来回翻墙一趟去网吧上网
准高中生时的你相当于还没加载进操作系统的可执行程序,学校相当于是操作系统,学校的附近网吧就相当于是动态库,你要上网的时候需要跑到他那去上网,而你这个张三学长相当于是个编译器,他告诉你网吧信息就相当于是连接的过程!
(2) 例子2
🌰 : 没过多久网吧遭到举报倒闭了,但是你没有因为网吧而成绩下降只是当作一种闲暇娱乐,知道什么时间做什么事,因此你要求老爸跟校长申请在宿舍申请安装一台电脑保证适当的闲暇,校长鉴于你的优秀成绩同意了
由于网吧倒闭,原本也在网吧上网的同学也不能上网,这体现了动态库一旦丢失所有程序都无法运行;而你在宿舍安装一台电脑,此时相当于静态链接,此时不依赖网吧也能上网了。因此,静态链接就是把我们要访问的方法实现,拷贝到我们自己的可执行程序中!
(3)⼀般我们的云服务器,C/C++的静态库并没有安装,可以采⽤如下⽅法安装::
sudo yum install -y glibc-static # C语言静态库
sudo yum install -y libstdc++-static # C++静态库
(4)动静态库/链接比较:
1. 动态库:一旦动态库缺失,所有经过动态链接的程序都无法运行。同时动态库比较节省资源,可执行程序体积比较小。
2. 静态库:比较浪费资源,可执行程序体积比较大。不依赖其他库,库丢失也无所谓,程序照样能运行。
3. 静态链接虽然因为可执行程序中已经具备所需任何东西而运行速度快,但是它浪费空间,因为每个可执行程序中对所有需要的目标文件都要有一份副本,而且更新比较困难,因为因为每当库函数的代码修改了,这个时候就需要重新进行编译链接形成可执行程序;而动态库因为可以做到被大家所共享方法,所以真正的实现永远都是在库中。程序内部只有地址,比较节省空间。动态链接其实远⽐静态链接要常⽤得多,Linux中默认使用动态链接和动态库。
🎸 gcc其他常用选项
• -E只激活预处理,这个不⽣成⽂件,你需要把它重定向到⼀个输出⽂件⾥⾯
• -S编译到汇编语⾔不进⾏汇编和链接
• -c编译到⽬标代码
• -o⽂件输出到⽂件
• -static此选项对⽣成的⽂件采⽤静态链接
• -g⽣成调试信息。GNU调试器可利⽤该信息。
• -shared此选项将尽量使⽤动态库,所以⽣成⽂件⽐较⼩,但是需要系统由动态库.
• -O0
• -O1
• -O2
• -O3编译器的优化选项的4个级别,-O0表⽰没有优化,-O1为缺省值,-O3优化级别最⾼
• -w不⽣成任何警告信息。
• -Wall⽣成所有警告信息。
下篇博客我们将讲解Linux其他常用工具Makefile,git , gdb。
相关文章:
【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 🏠 yum 🎸 什么是yum 当用户想下载软…...
leetcode 297. 二叉树的序列化与反序列化
题目如下 我们常常说单独先序遍历不能完整的表示一棵树是有前提条件的。 为什么?先序遍历是按 根节点 左子树 右子树的方向遍历树且遇到空子树直接返回,这样会造成我们并不知道某个节点的左右子树存在与否,故我们无法确定树的形状。但是如果…...
OpenAI 放王炸,将发布整合多项技术的 GPT-5,并免费无限使用,该模型有哪些技术亮点
对于 ChatGPT 的免费用户,将可以无限制地访问 GPT-5,但仅限于标准的智能级别。该级别会设定滥用限制,以防止不当使用(意思就是你得付费嘛)。 OpenAI CEO Sam Altman 今天在 X 上透露了 GPT-4.5 和 GPT-5 的最新发展计划。 OpenAI 将发布代…...
Ubuntu22.04 使用useradd 创建用户时,没有创建家目录时,如何手动创建家目录
测试案例: 使用useradd不加参数创建test目录 如下可以看出使用 useradd 创建用户的时候默认不会创建家目录 rootlocal:~# useradd test rootlocal:~# id test uid1001(test) gid1001(test) groups1001(test) rootlocal:~# cat /etc/passwd | grep test test:x:1001:…...
浅聊Docker使用、部署
在Java面试中,当被问到关于Docker中间件的使用、部署及在实际项目中的考虑时,可以按照以下结构和内容来详细回答: 一、Docker中间件的使用 1. Docker是什么? Docker是一个开源平台,允许开发者将应用程序及其依赖项打…...
Java面试第一山!《集合》!
一、引言 在 Java 编程的世界里,数据的存储和处理是非常重要的环节。Java 集合框架就像是一个功能强大的工具箱,为我们提供了各种各样的数据结构来高效地存储和操作数据。今天,跟随小编一起来深入了解 Java 集合框架,这不仅有助于…...
力扣-二叉树-257 二叉树的所有路径
思路 除去根节点,每一层添加->val,然后使用前序遍历的顺序 代码 class Solution { public:vector<string> res;void getTreePaths(string s, TreeNode* root){s "->";s to_string(root->val);if(root->left nullptr &…...
异构计算架构助力智能座舱实现高效低耗体验
摘要: 随着智能汽车的飞速发展,智能座舱作为人车交互的核心区域,对算力、功耗及延迟等性能指标提出了严苛要求。异构计算架构凭借在硬件、软件与系统层面的深度优化,能显著提升智能座舱的算力利用率,降低功耗与延迟,为用户打造高效、低能耗的智能座舱体验。本文深入剖析…...
【vscode】VScode Remote SSH配置
VScode使用remote ssh 到服务器上的Docker容器中 1. 配置远程服务器docker容器的端口映射,例如将服务器的2222端口映射到container的22端口(默认) 1.1 在容器系统的sshd_config文件中配置参数 #配置文件 vim /etc/ssh/sshd_config #打开端口号 Port 221.2 建立容…...
急停信号的含义
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是确认设备按钮的急停…...
【Azure 架构师学习笔记】- Azure Databricks (11) -- UC搭建
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (10) – UC 使用 前言 由于ADB 的更新速度很快,在几个月之后重新搭建ADB 时发现UC 已经更新了很多,为了后续做ADB 的功…...
MYSQL批量UPDATE的两种方式
工作中遇到批量更新的场景其实是比较常见的。 但是该如何正确的进行批量UPDATE,很多时候往往有点头大。 这里列2种可用的方式,供选择(请选择方式一,手动狗头。)。 如果使用了MyBatis增强组件MyBatisPlus 如果使用了MyBatisPlus,…...
百度宣布:免费!
2月13日,百度大模型文心一言在官网宣布,随着文心大模型的迭代升级和成本不断下降,文心一言将于4月1日起全面免费,所有PC端和APP端用户均可体验文心系列最新模型。 同时,文心一言将上线深度搜索功能,具备更…...
计算机毕业设计SpringBoot+Vue.js医院住院管理系统(源码+lw文档+PPT+讲解视频)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Anaconda +Jupyter Notebook安装(2025最新版)
Anaconda安装(2025最新版) Anaconda简介安装1:下载anaconda安装包2: 安装anaconda3:配置环境变量4:检查是否安装成功5:更改镜像源6:更新包7:检查 Jupyter Notebook一.Jup…...
人工智能任务21-飞蛾火焰优化算法(MFO)在深度学习中的应用
大家好,我是微学AI,今天给大家介绍一下人工智能任务21-飞蛾火焰优化算法(MFO)在深度学习中的应用。飞蛾火焰优化算法(Moth-Flame Optimization, MFO)是一种受自然界中飞蛾向光源趋近行为启发的新型群体智能优化算法。在自然界中&a…...
渗透测试工具:SQLmap安装教程及使用
在渗透测试的世界里,SQL注入攻击无疑是最常见且最具威胁的安全漏洞之一。幸运的是,SQLmap 这个强大的自动化工具,能够帮助我们快速识别和利用这些漏洞。如果你也想了解如何用 SQLmap 进行渗透测试,那么这篇文章就是为你准备的&…...
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十四节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(CommunicationControl_0x28服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x28服务、通信控制、ISO 14229-1:2023、ECU测试 一、服务功能概述…...
WEB安全--SQL注入--INTO OUTFILE
一、INTO OUTFILE 函数语法: SELECT column1, column2, INTO OUTFILE file_path FROM your_table WHERE your_conditions; 使用此方式在SQL注入的过程中可以: 1、上传shell得到数据库的后端的操作权限 2、爆出数据库的信息 二、使用该函数的条件&#…...
【C语言 】C语言 桌游开发数字竞拍(源码)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C语言 】C语言 桌游开发数字竞拍(源码…...
开源赋能,智造未来:Odoo+工业物联网,解锁智能工厂新范式——以真实案例解读制造业数字化转型的降本增效密码
工业物联网的机遇与挑战:为什么企业需要Odoo? 《中国智能制造发展研究报告2023》指出,85%的制造企业已启动数字化转型,但超60%面临“数据孤岛、系统割裂、成本高企”的痛点[1]。传统ERP系统难以实时对接产线设备,而定…...
在分布式场景下可以使用synchronized加锁么?
首先说结论,在分布式系统中,单纯使用 Java 中的 synchronized 关键字是无法满足需求的,下面从 synchronized 的作用原理、在分布式场景下的局限性以及替代方案等方面详细分析。 一、synchronized 的作用原理 在 Java 中,synchron…...
DeepSeek从入门到精通:提示词设计的系统化指南
目录 引言:AIGC时代的核心竞争力 第一部分 基础篇:提示词的本质与核心结构 1.1 什么是提示词? 1.2 提示词的黄金三角结构 第二部分 类型篇:提示词的六大范式 2.1 提示语的本质特征 2.2 提示语的类型 2.2.1 指令型提示词 …...
C# 运算符
总目录 前言 在C#中,运算符是用于执行特定操作的符号。它们可以用于处理变量、常量或其他表达式。C# 提供了丰富的运算符集合,用于执行各种操作,如算术运算、逻辑判断、位操作等。了解这些运算符及其使用方式对于编写高效且功能强大的C#程序…...
duckdb导出Excel和导出CSV速度测试
运行duckdb数据库 D:>duckdb v1.2.0 5f5512b827 Enter “.help” for usage hints. Connected to a transient in-memory database. Use “.open FILENAME” to reopen on a persistent database. 生成模拟数据,10个列,100万行数据; --…...
pt->onnx->rknn(量化) step by step FAQ
文档修订中... 1.pt->onnx 这个转换是在yolov11的docker环境做的转换。非常简单。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 获取当前脚本文件所在目录的父目录,并构建相对路径 import os import sys current_dir os.path.dirname(os.path.abspath…...
Apollo 9.0 速度动态规划决策算法 – path time heuristic optimizer
文章目录 1. 动态规划2. 采样3. 代价函数3.1 障碍物代价3.2 距离终点代价3.3 速度代价3.4 加速度代价3.5 jerk代价 4. 回溯 这一章将来讲解速度决策算法,也就是SPEED_HEURISTIC_OPTIMIZER task里面的内容。Apollo 9.0使用动态规划算法进行速度决策,从类名…...
利用AI智能体创建云端文档知识库并集成第三方数据源(上)
许多开发者在管理和集成多种云端的数据源时经常面对各种各样的困难,所以希望能够构建一个聊天机器人来协调这些数据源,针对业务问题并提供全面的答案。本文介绍了一种解决方案,帮助大家开发一个能够从文档和数据库中回答查询的聊天机器人&…...
Cursor AI开发微信小程序教程
1. 准备工作 在开始开发之前,需要完成以下准备工作: 1.1 安装微信开发者工具 前往微信开发者工具官网下载并安装适合操作系统的开发者工具。注册微信小程序账号,登录微信公众平台(https://mp.weixin.qq.com)&#…...
2025常用的SEO工具有哪些?
在互联网时代,如何让自己的网站或内容脱颖而出,成为许多企业和个人站长们最关注的问题。而在这个过程中,SEO(搜索引擎优化)作为一种有效的提升网站曝光度和吸引流量的手段,已经成为了网站运营的核心之一。对…...
支持直接升级到21c的 Oracle 数据库版本
一、支持直接升级的版本 可以从以下版本直接升级到新版本: • 19c (所有版本) • 18c (所有版本) • 12c Release 2 (12.2) 升级到最新Oracle数据库版本必须采用的路径取决于当前数据库的版本号。 如果当前的Oracle数据库版本早于12.2 版,则无法直接将…...
线程池-抢票系统性能优化
文章目录 引言-购票系统线程池购票系统-线程池优化 池化 vs 未池化 引言-购票系统 public class App implements Runnable {private static int tickets 100;private static int users 10000;private final ReentrantLock lock new ReentrantLock(true);public void run() …...
回顾Golang的Channel与Select第一篇
深入解析Golang Channel与Select:并发编程的艺术与哲学 一、通信顺序进程(CSP)的Go实现 Go语言创始人Rob Pike将CSP理论具象化为channel原语,实现了"不要通过共享内存来通信,而要通过通信来共享内存"的哲学…...
乐理笔记(持续更新)
单音与音程 单音:由一个音组成。 音程:由两个音组成,表示两个音之间的音高距离。 如何数音程: 单音程:9 - X,性质相反。例如,9度音程减去某个数,性质会相反。 复音程:…...
FastExcel + Java:打造高效灵活的Excel数据导入导出解决方案
作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 基于AOP的数据字典实现…...
【数据结构入门】一、数组
一、数组的概念 数组:一种由相同类型的数据元素组成的基本数据类型,为引用类型 二、数据的顺序 这里很奇怪,讲了一个寻址函数,就是怎样用坐标求该元素的内存地址。说实话我不知道求这个能干什么,但是感觉还挺好玩的…...
编码格式大全解释以及相关编码特性
目录 说明: 1. Base64 Base64编码的字符集通常包括: Base64的工作原理: Base64编码在安全渗透中的应用场景 常见的Base64编码绕过场景 如何防范Base64绕过攻击 2. URL编码(Percent Encoding) URL编码与安全渗透的关系 示…...
正则表达式(Regular expresssion)
正则表达式 匹配单次 . :匹配任意一个字符 [ ] :匹配[ ]里举例的任意一个字符 /d :匹配数字0-9 /D :匹配非数字 /s :匹配空白或tab建 /S :匹配非空白 /w :…...
JavaScript 发起网络请求 axios、fetch、async / await
目录 fetch 发送 GET 请求(fetch) 发送 POST 请求(fetch) 处理后台异常响应 async / await async await 发送 GET 请求(async / await fetch) 发送 POST 请求(async / await fetch&…...
安装OpenJDK21(linux、macos)
文章目录 安装OpenJDK21java21linux下安装配置mac下安装 安装OpenJDK21 java21 封神!Java 21正式发布了,迎来了史诗级新特性,堪称版本最强!!! 视频链接:https://www.bilibili.com/video/BV1E8…...
Java面试宝典:说下Spring Bean的生命周期?
Java面试宝典专栏范围:JAVA基础,面向对象编程(OOP),异常处理,集合框架,Java I/O,多线程编程,设计模式,网络编程,框架和工具等全方位面试题详解 每…...
k8s向容器内传文件与下载文件
1、下载: kubectl cp <namespace>/<pod-name>:<container-path> <local-path>示例: kubectl cp mynamespace/mypod:/tmp/testfile.txt ./testfile.txt如果 Pod 中有多个容器,可以通过 -c 标志指定容器: kubectl c…...
A4988一款带转换器和过流保护的 DMOS 微步驱动器的使用方式
A4988是一款带转换器和过流保护的 DMOS 微步驱动器,用于驱动双极步进电动机。它支持全、半、1/4、1/8 及 1/16 步进模式,输出驱动性能可达 35 V 及 2 A。其特点包括简单的步进和方向控制接口、可调电位器调节最大电流输出、自动电流衰减模式检测/选择以及…...
Elasticsearch+Logstash+Kibana可视化集群部署
文章目录 1.组件介绍简述2.集群规划3.Es组件部署4.Logstash组件部署5.Kibana组件部署6.Kibana的基础使用 1.组件介绍简述 Elasticsearch:开源实时分布式搜索和分析引擎,支持大规模数据存储和高吞吐量,提供丰富的搜索功能和可扩展性。 Logsta…...
数据结构之二叉树
数据结构之二叉树 数据结构之二叉树1. 什么是二叉树?2. 基本概念3. 二叉树的基本形态4. 二叉树的性质5. 特殊二叉树6. 二叉树的存储7. 二叉树的遍历7.1 前序遍历7.2 中序遍历7.3 后序遍历7.4 层次遍历 8. 应用场景9. 实例代码9.1 示例树结构9.2 输出结果 数据结构之…...
华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B
华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载: AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…...
《图解设计模式》笔记(十)用类来表现
二十二、Command模式:命令也是类 一个类调用某方法,虽然调用结果会反映在对象的状态中,但不会留下工作的历史记录。 若有一个类表示“请进行这项工作”的“命令”,每一项想做的工作就不再是“方法的调用”这种动态处理了,而是一个表示命令的类的实例,即可以用“物”来表…...
Scrapy:任务队列底层设计详解
Scrapy 中队列设计详解 1. 概述 Scrapy 的队列系统是其调度器(Scheduler)的核心组件之一,负责存储和管理待抓取的请求。Scrapy 实现了两种类型的队列: 内存队列:请求存储在内存中,重启后数据丢失磁盘队列…...
zola + github page,用 workflows 部署
之前的Zola都是本地build之后,再push到github上,这种方式很明显的弊端就是只能在本地编辑,而不能通过github编辑,再pull到本地,缺乏了灵活性。因此将zola用workflows来部署。 repo地址:https://github.com/…...
pytest测试专题 - 1.2 如何获得美观的测试报告
<< 返回目录 1 pytest测试专题 - 1.2 如何获得美观的测试报告 1.1 背景 虽然pytest命令的报文很详细,用例在执行调试时还算比较方便阅读和提取失败信息, 但对于大量测试用例运行时,可能会存在以下不足 报文被冲掉测试日志没法归档 …...