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

Linux的基础开发工具

目录

前言:

1、包管理器yum

1.1 软件包的依赖

1.2 镜像源

1.3 查找/安装/卸载软件

2、编辑器vim

2.1 命令模式(默认)

2.1.1 撤销与反撤销

2.1.2 光标定位

2.1.3 复制&&剪切(删除)&&粘贴

2.1.4 替换

2.1.5 插入模式

2.1.6 V-Block模式

2.2 底行模式

2.3 命令行使用vim的技巧

2.4 vim的配置

3、编译器gcc/g++

3.1 预处理

3.2 编译

3.3 汇编

3.4 链接

3.4.1 动态库(动态链接)

3.4.2 静态库(静态链接)

3.4.4 库的本质

两个编译过程:

4、自动化构建工具make/Makefile

4.1 make

4.2 Makefile

1. 目标 (Target)

2. 依赖 (Prerequisites)

3. 命令 (Recipe)

4.3 Makefile的一些细节

5、版本控制器git

5.1 安装和clone

5.2 add&&commit&&push

6、调试器gdb/cgdb

6.1 预备知识

6.2 常用指令

1. r_q

2. 断点

3. 跳转

4. 查看


前言:

作者使用的是Centos7.9

现在开始使用普通用户(root用户权限太高,有点危险),需要更高的权限sudo即可

1、包管理器yum

LinuxCentos,一般使用yum下载软件。apt类似。

1.1 软件包的依赖

yum,会解决 包的依赖 问题(即一起帮你下载)。

1.2 镜像源

Linux通过内置链接下载软件,可是由于国家安全(不能访问外网),内地社区就拷贝资源使用自己社区的链接

镜像站官网支持发行版
清华大学https://mirrors.tuna.tsinghua.edu.cnCentOS, Ubuntu, Debian, Arch, EPEL
阿里云https://mirrors.aliyun.comCentOS, Ubuntu, Docker
华为云https://mirrors.huaweicloud.comCentOS, Ubuntu
网易http://mirrors.163.comUbuntu, Debian
中科大https://mirrors.ustc.edu.cnArch Linux, Docker

可以通过更改yum的配置文件更改下载链接(从哪里下载)。

1.3 查找/安装/卸载软件

yum list                     有哪些安装包
yum list | grep 安装包        查找指定的安装包
sudo yum install -y 安装包    下载指定的安装包 -y确认下载
sudo yum remove -y 软件       删除指定的软件 -y确认删除

注意:

安装删除需要root权限

安装到系统目录(不是其他用户的家目录),任何人都能使用

2、编辑器vim

注意:
Esc,可能有点慢。 

2.1 命令模式(默认)

2.1.1 撤销与反撤销

u撤销

Ctrl+r撤销u操作反撤销

注意:一旦退出就不能撤销了

2.1.2 光标定位

可以先通过底行模式,显示行号。

gg,光标定位到第一行 第一个非空字符n+gg,光标定位到n行 第一个非空字符

G(shift+g),光标定位到最后一行 第一个非空字符n+G,光标定位到n行 第一个非空字符

^(shift+6),光标定位到光标所在行第一个非空白字符

$(shift+4),光标定位到光标所在行最后一个字符

((((),键盘的上下左右键在一些场景下不可用。n+hjkl,移动n个字符

b,移动到上一个单词的首字母n+b,移动到n个单词的首字母

w,移动到下一个单词的首字母n+w,移动到n个单词的首字母

搜索:

#(shift+3),搜索 当前光标下的单词n上一个(正向搜索),N下一个(反向搜索)。

*(shift+8),搜索 当前光标下的单词n下一个(正向搜索),N上一个(反向搜索)。

可以通过底行模式,删除高亮。

2.1.3 复制&&剪切(删除)&&粘贴

yy复制 当前行n+yy复制 从当前行开始的n。p,在下一行新建一行,粘贴。

dd剪切(删除) 当前行n+dd剪切(删除) 从当前行开始的n

x剪切(删除) 光标位置的字符n+x剪切(删除) 从光标开始n个字符

X(shift+x),剪切(删除) 光标前面的字符n+X剪切(删除) 光标前面n个字符

对于yydd

p粘贴光标下面的新建行  P(shift+p),粘贴光标上面的新建行

当然,也可以n+pn+P粘贴n

对于xX

p粘贴光标前面   P(shift+p),粘贴光标后面。

当然,也可以n+pn+P粘贴n

2.1.4 替换

r替换 光标所在的字符n+r替换 光标及后面n个字符

R(shift+r),命令模式进入替换模式直接替换

~(shift+`),大小写切换n+~,将光标及后面n个字符 切换大小写

2.1.5 插入模式

插入模式可以插入字符

i,命令模式进入插入模式,光标不动

a,命令模式进入插入模式,光标后移一位

o,命令模式进入插入模式,向下新建一行光标在新建行的行首

2.1.6 V-Block模式

Ctrl+v,进入V-Block模式

常用于:

批量注释

Ctrl+v(进入V-Block模式),

hjkl(选择区域,也可以n+hjkl),

shift+i,进入插入模式,输入//,

Esc,进入命令模式,就一起注释了。

批量删除注释

Ctrl+v(进入V-Block模式),

hjkl(选择区域,也可以n+hjkl),

直接x(删除光标位置的字符),自动切换到命令模式。

2.2 底行模式

:(shift+;),英文的冒号,命令模式进入底行模式

set nu显示行号set nonu取消行号

%s/src/dst/,批量替换把所有的src换成dst

vs new_src再打开一个new_src源文件Ctrl+ww光标切屏

w(保存vim),q(退出vim),q!(强制退出vim),wq(保存并退出vim),wq!(强制保存并退出vim)。

2.3 命令行使用vim的技巧

vim 不存在的文件,只要w(保存),文件会自动生成

vim 文件 +n,+号要写,打开文件光标直接跳到第n,方便快速定位编译报错的位置

!v执行 最近v开头的命令

2.4 vim的配置

vim,没有自动缩进,没有自动补齐等等,用起来不太方便,需要一些配置。

这里推荐一个自动化配置(自己配置比较麻烦):

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

注意:

普通用户下一键式安装(root用户容易出问题)。就改变了普通用户的vim配置。

只支持Centos7

失败就多试几次安装成功后,可能需要重启一下

默认是两个空格的缩进。

如果要改成四个空格的缩进,vim 家目录下的vimrc,

都改成4。

3、编译器gcc/g++

gcc/g++ 默认情况下会执行完整的编译流程,包括 预处理、编译、汇编、链接 这四个步骤,并最终生成可执行文件(或库)。

gcc只能编译.c文件,g++既能编译.c文件也能编译.cpp文件,其他基本相同,以下以gcc为例。

// 将code.c编译为code的两种格式
gcc code.c -o code    // 常用
gcc -o code code.c

3.1 预处理

  • 修改代码,通过头文件展开宏替换条件编译(进行功能裁剪),去注释等。
  • -E 选项进行预处理
  • 生成 .i 文件。
gcc -E code.c -o code.i

3.2 编译

  • 预处理后的代码转换为汇编代码
  • -S 选项生成汇编代码
  • 生成 .s 文件。
gcc -S code.i -o code.s

3.3 汇编

  • 汇编代码转换为机器码(CPU能直接执行的二进制指令)
  • -c 选项生成汇编代码
  • 生成 .o 目标文件。
gcc -c code.s -o code.o
gcc -c code.c // 默认生成,同名的.o文件

3.4 链接

  • 多个 .o 目标文件库文件(.so/.a)合并,生成最终的可执行文件或动态库。

  • 直接运行 gcc 或 g++ 默认会执行链接

gcc code.o -o code

Linux中,是lib+库名+后缀。 

注意:

自己写可执行程序,需要指定目录,才能执行./(当前目录)

3.4.1 动态库(动态链接)
  • Linux,.so后缀,Windows,.dll后缀。
  • 动态库,又称共享库,被多程序共享。可执行程序的动态库不能缺失。
  • 执行目标方法需跳转到库中。文件体积小。

ldd 可执行文件动态库,可以查看 需要的动态库

3.4.2 静态库(静态链接)
  • Linux,.a后缀,Windows,.lib后缀。
  • 执行目标方法,会将方法拷贝过来再执行。文件体积大。可执行程序的对静态库的依赖度小。
3.4.4 库的本质

库可以理解为,.o文件.h文件集合

一般把文件编译.o文件,再与库文件 链接,形成可执行程序。

两个编译过程:

1. 文件包含1.h(有方法的声明),可以过编译这关,然后给1.o(有方法实现),链接,没问题。

2. C++模板不支持声明和定义分离到.h.c,因为文件虽然包含了.h,预处理展开头文件,编译时实例化了声明,可以过编译这关,但是.o的方法没有实例化,所以链接时找不到方法的实现,所以有问题。

4、自动化构建工具make/Makefile

4.1 make

make,是命令,可以指定目标,默认执行当前目录下Makefile中的第一个目标

4.2 Makefile

Makefile或makefile,是文件(包含编译的指令 或 各种自动化任务)。

Makefile 主要由以下三部分组成:

目标(target): 依赖(prerequisites)
[TAB]命令(recipe)
1. 目标 (Target)
  • 通常是最终要生成的文件名(如 main.o

  • 也可以是一个操作名称(如 clean

  • 一个 Makefile 可以有多个目标

2. 依赖 (Prerequisites)
  • 构建目标所需的文件或其他目标

  • 可以是多个文件,用空格分隔

  • 如果依赖文件比目标文件新(目标文件应该是更新的,因为最后生成的是目标文件,当依赖文件被修改了,此时依赖文件更新,会重新编译),make 会重新构建目标。(即当改了依赖文件make 会重新构建目标)

注意:

通过文件Modify(最近文件内容修改时间)判断是否更新

默认没改依赖文件,就不会重新构建目标。这里会引出一个问题。如果

clean:rm -f *.o main

当执行 make clean 时,rm -f *.o main 会正常执行。

但是如果当前目录下恰好存在一个名为 clean 的文件或目录,make 会认为 clean 目标已经是最新的(因为 clean 没有依赖项),从而拒绝执行 rm 命令。

加上 .PHONY 的作用

.PHONY: clean
clean:rm -f *.o main
  • 明确声明 clean 是伪目标(不是实际文件),强制 make 执行其命令,无论是否存在同名文件。
  • 避免意外行为:即使有人创建了 clean 文件,make clean 也能正确执行清理操作
  • 提高可读性:明确告知开发者这是一个用于执行操作(而非生成文件)的目标。
3. 命令 (Recipe)
  • 必须以 Tab 开头(不能用空格代替)

  • 是要执行的 shell 命令

  • 可以有多条命令,每条占一行

4.3 Makefile的一些细节

1. 直接make默认执行第一个目标test(因为依赖,所以不断执行),test依赖test.o,test.o依赖test.c,所以先生成test.o,再生成test。

2. 执行的命令会回显,前面加@不会回显了。如:

3. Makefile 中确实使用了类似宏定义(变量)和类似解引用(变量展开)的机制。这种设计使得 Makefile 更加灵活和可维护。如:

# 变量定义    需要$(),类似于解引用,才能使用
CC := gcc
TARGET := myprogram
SRCS := main.c test.c    #  空格隔开
# SRC := $(wildcard *.c)   #  当前目录下所有的.c文件
OBJS := $(SRCS:.c=.o)    #  将 .c 替换为 .o# 默认目标
$(TARGET): $(OBJS)$(CC) -o $@ $^    # $@,是目标,@^,是所有的依赖# 模式规则:编译 .c 到 .o,只编译需要的.o
%.o: %.c$(CC) -c $<    #  默认生成同名的.o文件
#  $<,是单个依赖,将.c分别编译为.o# 伪目标
.PHONY: clean
clean:rm -f $(OBJS) $(TARGET)

5、版本控制器git

5.1 安装和clone

安装git 

sudo yum install -y git

在gitee创建远端仓库,

复制https的地址,

将远端仓库克隆到本地。

git clone https地址

5.2 add&&commit&&push

可以多次add,然后一次commit,push。 

第一次需:

填写gitee的名字和邮箱,


git add .git commit(需要gitee的名字和邮箱),git push(需要gitee的名字和登入密码)。

git log,查看提交记录。

git status

  • 检查哪些文件被修改(但未暂存)。

  • 查看哪些文件已暂存(准备提交)。

  • 显示未跟踪的文件(新文件,Git 尚未管理)。

  • 提示当前分支状态(是否与远程分支同步)。

git pull,将远程仓库同步到本地。(远程仓库认为是最新的,当本地仓库和远端仓库不同时,需要同步)

注意:

一个文件/目录,每次提交修改都需要add,commit,push

Windows的小乌龟第一次add,commit,push,后面只需commit,push,简化了而已。

6、调试器gdb/cgdb

6.1 预备知识

1. 程序发布模式

Debug模式:包含调试信息,便于调试程序

Release模式默认模式,不包含调试信息,程序更高效

gcc code.c -o code    //  gcc/g++默认release模式
gcc code.c -o code -g    //  -g添加调试信息 

2.  gdb不太好用,再下载个cgdb,封装一层,便于调试

sudo yum install -y gdb
sudo yum install -y cgdb

3. cgdb 携带调试信息可执行程序

6.2 常用指令

1. r_q
  • r/run启动调试并开始执行程序。或重新调试并执行程序
  • q/quit,退出cgdb。
2. 断点

注意:

一般是在run之前打断点

  • b 行号。在该行断点b 函数名。在函数的入口断点
  • b 行号 if 条件。在该行打条件断点
  • info b查看断点。cgdb不退出,断点的编号一直增加。
  • d 断点编号删除断点
  • disable 断点编号禁用断点
  • enable 断点编号启用断点
3. 跳转
  • n/next。逐过程,类似于vs2022的f10。
  • s/step。逐语句,类似于vs2022的f11。
  • c跳到逻辑上的下一个断点
  • until 行号。执行到指定行号。 默认只在 当前函数内 生效,方便局部跳转
  • finish。直接执行完当前函数

tip:回车——执行最近的gdb命令

4. 查看
  • p 变量/表达式。显示变量/表达式的值
  • info locals。显示当前栈帧局部变量的值
  • display 变量/表达式一直显示变量的值undisplay 编号不再显示
  • watch 变量/表达式。只有值变化才显示。是一种断点,通过d 断点编号,删除。
  • bt。显示当前函数的调用栈
  • set var 变量名=值手动修改变量的值

相关文章:

Linux的基础开发工具

目录 前言&#xff1a; 1、包管理器yum 1.1 软件包的依赖 1.2 镜像源 1.3 查找/安装/卸载软件 2、编辑器vim 2.1 命令模式(默认) 2.1.1 撤销与反撤销 2.1.2 光标定位 2.1.3 复制&&剪切(删除)&&粘贴 2.1.4 替换 2.1.5 插入模式 2.1.6 V-Block模式 …...

解锁跨平台开发的新时代——Compose Multiplatform

解锁跨平台开发的新时代——Compose Multiplatform 在当今移动和桌面应用程序开发领域,跨平台解决方案是开发者们梦寐以求的工具。而由JetBrains打造的Compose Multiplatform正是这样一款现代UI框架,它基于Kotlin技术,为开发者构建高性能且美观的用户界面提供了极大的便利和…...

键盘固件刷写详解:Bootloader

键盘固件刷写详解&#xff1a;从入门到精通 引言 作为一名机械键盘爱好者&#xff0c;相信大家都曾经面临过刷写固件的问题。无论是想要自定义按键功能&#xff0c;还是升级键盘的固件&#xff0c;掌握刷写技巧都是非常必要的。本文将全面介绍不同类型的引导加载程序&#xf…...

网络原理初识

本来想从网络的发展史开始写,之后再写网络的定义啥的,但快写完了才发现,这不课本教材吗,没劲,遂弃之,重撰,删芜就简.写点我认为,对程序员来说真正有用的东西 目录 IP地址 概念 格式 特殊地址 端口号 概念 格式 协议 概念 知名协议的默认端口 五元组 协议分层 OS…...

PVP鼠标推荐(deepseek)

下面有不懂的自行百度查找&#x1f44d; ❤️ 以下是几款在 双击性能&#xff08;DBC&#xff09; 和 拖拽点击&#xff08;DC&#xff09; 方面表现优秀的游戏鼠标推荐&#xff0c;结合了硬件性能、微动寿命以及玩家口碑&#xff1a; 1. 罗技 G102/G203 Lightsync 特点&#…...

Navee滑板车强势登陆中国,以智能科技重塑城市出行新风尚

当科技与潮流邂逅&#xff0c;城市出行迎来了一场前所未有的变革。全球智能出行领域的先锋品牌Navee&#xff0c;携其多款旗舰滑板车产品——ST3、GT3、V系列等&#xff0c;正式进军中国市场。凭借“颜值、性能、安全、智能”四大核心优势&#xff0c;Navee正以破竹之势重新定义…...

【Linux网络】网络命令

Ping Ping命令是一种用于测试网络连接状况的工具&#xff0c;在Windows、Linux、macOS等操作系统中都可以使用。以下是其详细介绍&#xff1a; 它主要通过向目标主机发送Internet控制报文协议&#xff08;ICMP&#xff09;的回声请求&#xff08;Echo Request&#xff09;数据…...

【JS逆向基础】面向对象

1&#xff0c;OOP编程思想 面向对象编程是在面向过程编程的基础上发展来的&#xff0c;它比面向过程编程具有更强的灵活性和扩展性。面向对象编程是程序员发展的分水岭&#xff0c;很多初学者会因无法理解面向对象而放弃学习编程。 面向对象编程(Obiect:oriented Programming…...

# 如何使用OpenCV进行发票的透视变换和二值化处理

如何使用OpenCV进行发票的透视变换和二值化处理 引言 在自动化处理发票和其他文档时&#xff0c;图像预处理是一个关键步骤&#xff0c;它可以帮助提高OCR&#xff08;光学字符识别&#xff09;的准确性。透视变换用于校正图像中的透视失真&#xff0c;而二值化处理则可以简化…...

NetSuite 如何得到所有Item最近一次采购订单的货品单价?

我们知道&#xff0c;如果取Item主数据的数据&#xff0c;得到的是很多相关transaction的Item 货品平均价值&#xff1b;如果只想得到最近一次采购订单上的采购单价&#xff0c;主数据上应该无法直接得到&#xff0c;那该如何处理&#xff1f;我们可以利用Saved Search来拉取相…...

[5-2] 对射式红外传感器计次旋转编码器计次 江协科技学习笔记(38个知识点)

1、 2、 3、这些缩写通常出现在嵌入式系统或微控制器的上下文中&#xff0c;它们各自有不同的功能&#xff1a; • RCC&#xff1a;Reset and Clock Control&#xff08;复位和时钟控制&#xff09;。它负责管理微控制器的时钟系统&#xff0c;包括时钟源的选择、时钟频率的设置…...

阿里云 golang 一面

消息队列 分布式文件系统 Linux的虚拟网络设备 TCP SSL/TLS 场景&#xff1a;对于打车场景&#xff0c;如何设计一个系统来处理并发打车请求&#xff1f; 设计一个处理并发打车请求的系统需要考虑多个方面&#xff0c;包括系统架构、数据存储、负载均衡和实时性。以下是一个基…...

【C++ Qt】多元素控件(ListWidget、TableWidget、TreeWidget)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章将通过代码示例详细介绍了Qt中QListWidget、QTableWidget和QTreeWidget三种多元素控件的使用方法与核心功能&#xff0c;涵盖列表的增删操作、表格…...

排序算法-冒泡排序

冒泡排序一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。 这个算法的名字由来是因为元素会经由交换慢…...

C++ 工具链与开发实践:构建安全、高效与创新的开发生态

引言 在 C 的技术演进中&#xff0c;工具链的革新与开发实践的迭代始终是推动语言生命力的核心动力。从内存安全的攻防体系到嵌入式设备的能效优化&#xff0c;从跨平台开发的降本增效到开发者社区的生态构建&#xff0c;C 正通过工具链与方法论的双重升级&#xff0c;应对复杂…...

uni-pages-hot-modules插件:uni-app的pages.json的模块化及模块热重载

uni-pages-hot-modules uni-app的pages.json的模块化及模块热重载 uni-app的pages.json的模块化及模块热重载 解决uni-app的pages.json无法模块化的问题,并且解决模块热重载和缓存的问题 安装 npm i uni-pages-hot-modules -Suni-app vite版本(vue3)示例项目 uni-app webpa…...

【WEB3】区块链、隐私计算、AI和Web3.0——数据民主化(1)

区块链、隐私计算、AI&#xff0c;是未来Web3.0至关重要的三项技术。 1.数据民主化问题 数据在整个生命周期&#xff08;生产、传输、处理、存储&#xff09;内的隐私安全&#xff0c;则是Web3.0在初始阶段首要解决的问题。 数据民主化旨在打破数据垄断&#xff0c;让个体能…...

从0到1:用Lask/Django框架搭建个人博客系统(4/10)

摘要&#xff1a;本文深入解析了使用Lask和Django构建个人博客系统的全过程。从技术选型的考量&#xff0c;突出Lask的轻量灵活与Django的强大功能&#xff0c;到开发环境搭建、项目初始化&#xff0c;再到核心功能实现如文章管理、用户认证与权限控制&#xff0c;详细阐述了开…...

探索 C++23 的 views::cartesian_product

文章目录 一、背景与动机二、基本概念与语法三、使用示例四、特点与优势五、性能与优化六、与 P2374R4 的关系七、编译器支持八、总结 C23 为我们带来了一系列令人兴奋的新特性&#xff0c;其中 views::cartesian_product 是一个非常实用且强大的功能&#xff0c;它允许我们轻…...

微软拼音自定义词库方法

1.准备文件input.txt 令狐冲 郭靖2.使用python转成微软拼音需要的格式 from xpinyin import Pinyin # pip install xpinyin -i https://pypi.tuna.tsinghua.edu.cn/simplep Pinyin()with open(input.txt, r, encodingutf-8) as infile:with open(output.txt, w, encodingutf…...

SQLite3常用语句汇总

SQLite 命令行工具&#xff08;sqlite3 shell&#xff09; 中的内置命令 命令作用说明.open filename.db打开或创建一个 SQLite 数据库文件.tables列出当前数据库中的所有表.schema [table]查看某个表或所有表的建表语句&#xff08;DDL&#xff09;.headers ON/OFF开启或关闭…...

数据库设计三范式

第一范式 (1NF) 每个表中的每一列都是原子值 每个表中的每一行都是唯一的 下面这个表格就是不符合第一范式的例子&#xff1a;因为学时数能够拆分为讲课和实验。所以他并不是每一列都是原子值。 不仅要考虑列是否是原子值&#xff0c;还需要考虑每列的值是否可拆分。 第二范…...

GoWeb开发

学习目标&#xff1a; 本篇要达到的目的&#xff0c;能为后续复习提供极大便利。 &#xff08;当我写下本篇博客时&#xff0c;已复习3遍&#xff09; 一、网络通信概述 &#xff08;为本篇基础核心内容&#xff09; 1、什么是网络通信&#xff1f; 网络通信是指不同设备&…...

(7)Nokov 室内光学跟踪系统

文章目录 前言 7.1 所需硬件 7.2 Nokov 系统设置 7.3 配置旋翼机 7.4 启动 Nokov 模块 7.5 MAVProxy 准备 7.6 测试飞行 7.7 参数说明 前言 本文将介绍如何通过 Nokov 运动捕捉系统向旋翼机传输姿势信息。联系方式&#xff1a;NOKOV | Optical Motion Capture System。…...

Linux Shell编程和循环语句

一.for循环语句 1.for语句的结构2.for循环语句实例①根据姓名列表来批量创建多个用户②根据IP地址列表检查主机状态 二.使用while循环语句1.while语句结构2.while循环语句应用①批量添加规律编号用户②猜价格游戏 三 until循环语句1.until语句结构① 计算1-50的和 1.for语句的结…...

Java后端程序员学习前端之JavaScript

1.什么是JavaScript 1.1.概述 JavaScript是一门世界上最流行的脚本语言javaScript 一个合格的后端人员&#xff0c;必须要精通JavaScript 1.2.历史 JavaScript的起源故事-CSDN博客 2.快速入门 2.1.引入JavaScript 1.内部标签 <script>//.......</script> --…...

redis多路复用IO模型 以及 6.0引入的多线程模型

redis为什么选择单线程 采用多线程的话&#xff0c;会出现上下文切换的开销采用多线程&#xff0c;会带来共享资源的竞争控制&#xff0c;比如多个线程同时访问同一个资源&#xff08;键值&#xff09;时&#xff0c;需要额外的手段来保障共享资源的正确性&#xff0c;会带来额…...

101alpha_第6个

第6个alpha (-1 * correlation(open, volume, 10)) 这个就是看这两个相似性。10天之内的 如果结果为正且数值较大&#xff0c;投资者可能会认为在开盘价上涨时成交量萎缩&#xff0c;市场上涨动力不足&#xff0c;可能是卖出信号&#xff1b;反之&#xff0c;开盘价下跌时成交…...

crawl4ai能替代scrapy等传统爬虫框架吗?

传统爬虫框架就像拿着渔网在数字海洋中捕鱼——虽然能捞到东西&#xff0c;但面对现代网站的复杂性时常常"漏网之鱼"满天飞。以Scrapy为代表的工具存在三大致命短板&#xff1a;首先是JavaScript盲区&#xff0c;对动态渲染内容束手无策&#xff0c;就像试图用收音机…...

Sui Basecamp 2025 全栈出击

“我们不仅仅是在构建一个 L1&#xff0c;我们是在重建互联网。” — — Mysten Labs 首席产品官 Adeniyi Abiodun 本届 Sui Basecamp 汇聚了 Web3 领域的建设者、合作伙伴和思想领袖&#xff0c;为期两天&#xff0c;不仅展示了 Sui 的未来&#xff0c;也展现了去中心化互联网…...

计算机体系架构-----设计模式:状态模式(从程序员加班问题切入)

文章目录 1.梦开始的地方2.代码1.0版本3.代码2.0版本4.代码3.0版本5.梦结束的地方 最近在学习这个专业课里面的体系结构这门课程&#xff0c;作为专业里面的一门基础课&#xff0c;这个课程里面主要讲解的就是软件的设计思想&#xff0c;一些历程之类的&#xff0c;包括了面向对…...

【C/C++】RPC与线程间通信:高效设计的关键选择

文章目录 RPC与线程间通信&#xff1a;高效设计的关键选择1 RPC 的核心用途2 线程间通信的常规方法3 RPC 用于线程间通信的潜在意义4 主要缺点与限制4.1 缺点列表4.2 展开 5 替代方案6 结论 RPC与线程间通信&#xff1a;高效设计的关键选择 在C或分布式系统设计中&#xff0c;…...

数据结构之串

一、串的定义与基本概念 1. 串的定义 定义&#xff1a;串是由零个或多个字符组成的有限序列&#xff0c;记作 s"a1​a2​…an​"&#xff0c;例如 "data structure"、"123" 等。 空串&#xff1a;无任何字符&#xff0c;长度为 0&#xff0c;…...

基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题

基于腾讯云MCP广场的AI自动化实践&#xff1a;爬取小红书热门话题 我正在参加Trae「超级体验官」创意实践征文&#xff0c;本文所使用的 Trae 免费下载链接&#xff1a;www.trae.com.cn/?utm_source… &#x1f50e; 背景 在人工智能快速发展的时代&#xff0c;AI技术不仅重…...

AI领域的MCP(Model-Centric Paradigm)

1. 什么是MCP&#xff08;Model-Centric Paradigm&#xff09;&#xff1f; MCP&#xff08;Model-Centric Paradigm&#xff09;是人工智能开发中的一种核心理念&#xff0c;强调以模型的优化与改进作为主要驱动因素来提升AI系统的表现。在MCP模式下&#xff0c;开发者专注于…...

裸辞8年前端的面试笔记——JavaScript篇(一)

裸辞后的第二个月开始准备找工作&#xff0c;今天是第三天目前还没有面试&#xff0c;现在的行情是一言难尽&#xff0c;都在疯狂的压价。 下边是今天复习的个人笔记 一、事件循环 JavaScript 的事件循环&#xff08;Event Loop&#xff09;是其实现异步编程的关键机制。 从…...

力扣刷题Day 41:除自身以外数组的乘积(238)

1.题目描述 2.思路 方法1&#xff1a;搞一个数组存放各元素之前所有数的乘积&#xff08;头为1&#xff09;&#xff0c;再搞一个数组存放各元素之后所有数的乘积&#xff08;尾为1&#xff09;。 方法2&#xff1a;上面的方法是很好理解的&#xff0c;在此基础上应该如何优化…...

金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步

目录 一.同步场景与方案选型 二.同步环境配置 1.前置条件验证 2.逻辑解码配置 三.同步实施与问题排查 1.结构映射规则 2.增量数据捕获 3.数据一致性校验 四.性能调优实践 1.同步线程优化 2.批量提交优化 3.资源监控指标 五.典型场景解决方案 1.双向同步冲突处理 …...

【前端基础】9、CSS的动态伪类(hover、visited、hover、active、focus)【注:本文只有几个粗略说明】

一、什么是伪类 选择器的一种&#xff0c;用于选择处于特定状态的元素。 最常见的现象&#xff1a;鼠标放在某些文字上面&#xff0c;文字就会加上颜色。 鼠标没放上去之前&#xff1a; 鼠标放上去之后&#xff1a; 二、动态伪类 图片来源&#xff08;链接文章也有其他伪…...

企业开发平台大变革:AI 代理 + 平台工程重构数字化转型路径

在企业数字化转型的浪潮中&#xff0c;开发平台正经历着前所未有的技术革命。从 AST&#xff08;抽象语法树&#xff09;到 AI 驱动的智能开发&#xff0c;从微服务架构到信创适配&#xff0c;这场变革不仅重塑了软件开发的底层逻辑&#xff0c;更催生了全新的生产力范式。本文…...

ZooKeeper工作机制与应用场景

目录 1.1、概述1.2、选举机制1.2.1、选举触发条件1.2.2、选举规则1.2.3、选举过程详解 1.3、数据同步机制1.3.1、正常同步1.3.2、宕机同步 1.4、客户端常用命令1.5、应用场景1.5.1、配置管理1.5.2、命令服务1.5.3、分布式锁服务1.5.4、集群管理1.5.5、分布式ID1.5.6、分布式协调…...

VR制作软件用途(VR制作软件概述)

虚拟现实&#xff08;VR&#xff09;制作软件作为现代科技的瑰宝&#xff0c;正以独特的魅力重塑各行各业。 通过构建三维虚拟环境&#xff0c;这些软件提供了前所未有的沉浸式体验&#xff0c;还推动了技术革新与产业升级。本文将探讨VR制作软件的主要用途&#xff0c;并重点…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.1 业务场景与数据准备

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 9.1 业务场景与数据准备9.1.1 业务场景描述核心业务目标业务挑战 9.1.2 数据来源与获取数据源构成数据获取方案 9.1.3 数据结构与字段说明核心数据表设计1. 订单事实表&…...

PyTorch 入门与核心概念详解:从基础到实战问题解决

PyTorch 入门与核心概念详解&#xff1a;从基础到实战问题解决 前言 用PyTorch 编写 Transformer 模型时遇到了多个错误&#xff0c;包括维度不匹配、NaN 损失、注意力权重未记录以及 OpenMP 库初始化等问题。 本文基于以上&#xff0c;对 PyTorch 的基本解释&#xff0c;并对…...

【办公类-99-05】20250508 D刊物JPG合并PDF便于打印

背景需求 委员让我打印2024年2025年4月的D刊杂志&#xff0c;A4彩打&#xff0c;单面。 有很多JPG&#xff0c;一个个JPG图片打开&#xff0c;实在太麻烦了。 我需要把多个jpg图片合并成成为一个PDF&#xff0c;按顺序排列打印。 deepseek写Python代码 代码展示 D刊jpg图片合…...

【C++】手搓一个STL风格的string容器

C string类的解析式高效实现 GitHub地址 有梦想的电信狗 1. 引言&#xff1a;字符串处理的复杂性 ​ 在C标准库中&#xff0c;string类作为最常用的容器之一&#xff0c;其内部实现复杂度远超表面认知。本文将通过一个简易仿照STL的string类的完整实现&#xff0c;揭示其设…...

无实体对话式社交机器人 拟人化印象形成机制:基于多模态交互与文化适配的拓展研究

《如何感知AI对话者:无实体对话式社交机器人拟人化对其印象形成效果影响机制的实验研究》解析 一、研究背景与核心问题 (一)技术背景与研究动机 随着生成式AI技术发展,以ChatGPT、文心一言为代表的无实体对话式社交机器人兴起,用户对其高度拟人化特征有显著需求,如扮演…...

存储器:DDR和独立显卡的GDDR有什么区别?

本文来简要对比DDR&#xff08;Double Data Rate SDRAM&#xff09;和GDDR&#xff08;Graphics Double Data Rate SDRAM&#xff09;的区别&#xff0c;重点说明它们在设计、性能和应用上的差异&#xff1a; 1. 设计目标与架构 DDR&#xff1a;通用型DRAM&#xff0c;设计为…...

viewDesign里的table内嵌套select动态添加表格行绑定内容丢失

问题 描述 viewDesign里的table内嵌套select&#xff0c;表格的行数是手动点击按钮添加的&#xff0c;添加第一行选择select的内容能正常展示&#xff0c;添加第二行第一行的select的内容消失 代码 <FormItem label"内饰颜色"><Tableclass"mt_10&q…...

vue v-html无法解析<

vue v-html无法解析字符串的小于号 方法一&#xff1a;可以替换成转义符 (实际还是会报错) let str 12345<445667 str.replaceAll(<, <)方法二&#xff1a;可以替换成中文小于号 let str 12345<445667 str.replaceAll(<, &#xff1c;)...