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

【Linux】Linux工具(1)

3.Linux工具(1)

文章目录

  • 3.Linux工具(1)
      • Linux 软件包管理器 yum
        • 什么是软件包
        • 关于 rzsz
        • 查看软件包——yum list命令
        • 如何安装软件
        • 如何卸载软件
        • 补充——yum如何找到要安装软件的下载地址
      • Linux开发工具
        • Linux编辑器-vim使用
          • 1.vim的基本概念
          • 2.vim的基本操作
          • 3.简单vim配置
      • Linux编译器-gcc/g++使用
        • 1.背景知识
        • 2.gcc如何完成
          • 预处理(进行宏替换)
          • 编译(生成汇编)
          • 汇编(生成机器可识别代码)
          • 连接(生成可执行文件或库文件)
          • 动态库
          • 动态库、动态链接、静态库与静态链接的对比总结
          • gcc选项

Linux 软件包管理器 yum

什么是软件包
  • 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
  • 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
  • 软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.
  • yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,Centos等发行版上.
关于 rzsz

这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件,安装完毕之后可以通过拖拽的方式将文件上传过去.

  • 注意事项
    关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
    可以通过 ping 指令验证
查看软件包——yum list命令

通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. 例如:

[root@hcss-ecs-b735 dir2]# yum list | grep gcc-c++
gcc-c++.x86_64                           4.8.5-44.el7                  @base    
avr-gcc-c++.x86_64                       4.9.2-1.el7                   epel     
gcc-c++-aarch64-linux-gnu.x86_64         4.8.5-16.el7.1                epel     
gcc-c++-alpha-linux-gnu.x86_64           4.8.5-16.el7.1                epel     
gcc-c++-arm-linux-gnu.x86_64             4.8.5-16.el7.1                epel     
gcc-c++-avr32-linux-gnu.x86_64           4.8.5-16.el7.1                epel     
gcc-c++-bfin-linux-gnu.x86_64            4.8.5-16.el7.1                epel     
gcc-c++-c6x-linux-gnu.x86_64             4.8.5-16.el7.1                epel     
gcc-c++-cris-linux-gnu.x86_64            4.8.5-16.el7.1                epel     
gcc-c++-frv-linux-gnu.x86_64             4.8.5-16.el7.1                epel     
gcc-c++-h8300-linux-gnu.x86_64           4.8.5-16.el7.1                epel     
gcc-c++-hppa-linux-gnu.x86_64            4.8.5-16.el7.1                epel     
gcc-c++-hppa64-linux-gnu.x86_64          4.8.5-16.el7.1                epel     
gcc-c++-ia64-linux-gnu.x86_64            4.8.5-16.el7.1                epel     

注意:

  1. 软件包名称: 主版本号、次版本号、源程序发行号、软件包的发行号、主机平台、cpu架构
  2. x86_64 后缀表示64位系统的安装包, i686 后缀表示32位系统安装包. 选择包时要和系统匹配.
  3. el7 表示操作系统发行版的版本,el7 表示的是 centos7/redhat7. el6 表示 centos6/redhat6.
  4. 最后一列, base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
如何安装软件

通过 yum, 我们可以通过很简单的一条命令完成 gcc-c++ 的安装.

[root@hcss-ecs-b735 dir2]# yum install -y gcc-c++				#主要看这里
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package gcc-c++.x86_64 0:4.8.5-44.el7 will be installed
--> Processing Dependency: libstdc++-devel = 4.8.5-44.el7 for package: gcc-c++-4.8.5-44.el7.x86_64
--> Running transaction check
---> Package libstdc++-devel.x86_64 0:4.8.5-44.el7 will be installed
--> Finished Dependency ResolutionDependencies Resolved=============================================================================================Package                    Arch              Version                  Repository       Size
=============================================================================================
Installing:gcc-c++                    x86_64            4.8.5-44.el7             base            7.2 M
Installing for dependencies:libstdc++-devel            x86_64            4.8.5-44.el7             base            1.5 MTransaction Summary
=============================================================================================
Install  1 Package (+1 Dependent package)Total download size: 8.7 M
Installed size: 25 M
Downloading packages:
(1/2): libstdc++-devel-4.8.5-44.el7.x86_64.rpm                        | 1.5 MB  00:00:00     
(2/2): gcc-c++-4.8.5-44.el7.x86_64.rpm                                | 7.2 MB  00:00:00     
---------------------------------------------------------------------------------------------
Total                                                         33 MB/s | 8.7 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionInstalling : libstdc++-devel-4.8.5-44.el7.x86_64                                       1/2 Installing : gcc-c++-4.8.5-44.el7.x86_64                                               2/2 Verifying  : gcc-c++-4.8.5-44.el7.x86_64                                               1/2 Verifying  : libstdc++-devel-4.8.5-44.el7.x86_64                                       2/2 Installed:gcc-c++.x86_64 0:4.8.5-44.el7                                                              Dependency Installed:libstdc++-devel.x86_64 0:4.8.5-44.el7                                                      Complete!			#主要看这里

yum 会自动找到都有哪些软件包需要下载, 这时候敲 “y” 确认安装.(我这里由于使用了-y选项所以不需要再次确认来继续安装
出现 “complete” 字样, 说明安装完成.

注意事项:

  • 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
  • yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.
    如果 yum 报错, 请自行百度.
如何卸载软件

仍然是一条命令:

yum remove [软件名]
补充——yum如何找到要安装软件的下载地址

当我们在使用yum下载软件的时候我们会发现,我们并不需要向yum提供详细的软件下载地址就可以直接通过软件名下载这个软件。这是因为yum有相应的配置文件,这个配置文件里面会记录yum其他软件有关的下载路径

[root@hcss-ecs-b735 dir2]# ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo          epel.repo.rpmnew
CentOS-CR.repo         CentOS-Media.repo      CentOS-x86_64-kernel.repo  epel-testing.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    epel.repo

对于如何切换yum源以及如何对虚拟机上的Linux系统配置yum源,可以在网上进行搜索。在网上找到yum源、直接下载在Linux服务器中的yum源配置文件位置

#!/bin/bash
##  备份 /etc/yum.repos.d/CentOS-Base.repo
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
##  更换为阿里源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
##  安装epel
sudo yum install -y epel-release
##  使用阿里提供的epel源
sudo curl -o /etc/yum.repos.d/epel-7.repo  http://mirrors.aliyun.com/repo/epel-7.repo
##  清空yum缓存
sudo yum clean all
##  重建yum缓存
sudo yum makecache

Linux开发工具

Linux编辑器-vim使用

vim是一个多模式的编辑器,不是编译器(不能编译代码)

1.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,底行模式直接输入

2.vim的基本操作

vim的操作指令有点多,其实不需要刻意去记忆,用的多了自然就记住了,这里简单列举几个


1. 模式切换

Esc 退出其他模式。(进入正常模式)

[正常模式]切换至[插入模式]

  • i:光标前插入 这个用的最多

  • I:行首插入

  • a:光标后插入

  • A:行尾插入

  • o:下方新建行插入

  • O:上方新建行插入

  • v:字符选择

  • V:行选择

  • Ctrl+v:块选择

  • [正常模式]切换至[末行模式]
    「shift + ;」, 其实就是输入「:」


2. 光标移动

  • h ← / j ↓ / k ↑ / l → 这个基本不用,用键盘上的上下左右键就可以

  • 0:行首 / ^:第一个非空字符

  • $:行尾

  • gg:文件开头

  • G:文件末尾

  • 5G:5:跳转到第5行

  • Ctrl+f:向下翻页 / Ctrl+b:向上翻页

  • %:跳转到匹配的括号(如 {}, ()

  • w光标移动到下一个单词(连续英文字符串)

  • b光标移动到上一个单词(连续英文字符串)


3. 文本编辑

  • shift + r:进入替换模式,需要用EXC退回正常模式

  • x:删除光标指向的字符

  • shift + ~:大小写切换

  • shift + x:删除光标之前的字符

  • dw:删除到单词结尾

  • dd:删除整行(应该算是一种剪切

  • 3dd:删除3行

  • d$:删除到行尾

  • yy:复制当前行

  • 3yy:复制3行

  • p:粘贴到光标后 / P:粘贴到光标前

  • u:撤销

  • Ctrl+r:重做


4. 搜索与替换

  • /keyword:向下搜索(注意这个ketword是你要找的字符)

  • ?keyword:向上搜索

  • n:下一个匹配 / N:上一个匹配

  • :s/old/new:替换当前行第一个匹配

  • :s/old/new/g:替换当前行所有匹配

  • :%s/old/new/g:替换全文所有匹配

  • :%s/old/new/gc:替换时逐个确认


5. 保存与退出

  • :w:保存
  • :q:退出
  • :wq:x:保存并退出
  • :q!:强制退出(不保存)
  • :w!:强制写入
  • wq!:强制保存并退出
  • ZZ(Shift+z+z):快速保存退出

6. 分屏与标签页

  • :sp [file]:水平分屏

  • :vsp [file]:垂直分屏

  • Ctrl+w + 方向键:切换分屏

  • :tabnew:新建标签页

  • gt:下一个标签 / gT:上一个标签


7. 其他实用命令

  • >>:当前行右缩进 / <<:左缩进

  • gg=G:自动缩进全文(适合代码)

  • :set number:set nu):显示行号

  • :set nowrap:禁止自动换行

  • :help [command]:查看帮助(如 :help :w

8. 可视模式操作

  • 选中文本后:
    • y:复制选中内容
    • d:删除选中内容
    • >:向右缩进 / <:向左缩进
    • 块模式下按 I 插入内容,按 Esc 应用到所有

9.在vim中编译、执行代码

  • :!gcc :与之前的gcc 用法是一样的

  • :./[可执行文件名]:执行当前文件夹中的可执行文件

  • :!可以执行命令行命令,路径为当前vim打开的文件路径

  • vs + 其他文件名:打开其他文件支持分屏操作

3.简单vim配置

在网上有许多教我们如何配置vim的教程,我这里就用一个比较简单的方式来进行配置。

  • 安装方法

在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 “不推荐” 直接在 root 下执行):

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

需要按照提示输入 root 密码. 您的 root 密码不会被上传, 请放心输入.

  • 卸载方法

在安装了 VimForCpp 的用户下执行:

bash ~/.VimForCpp/uninstall.sh

Linux编译器-gcc/g++使用

1.背景知识

预处理(进行宏替换)
编译(生成汇编)
汇编(生成机器可识别代码)
连接(生成可执行文件或库文件)

这个内容在C语言学习的时候就已经了解过了,可以去搜索一下

2.gcc如何完成

格式:gcc [选项] 要编译的文件 [选项] [目标文件]

预处理(进行宏替换)

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。预处理指令是以#号开头的代码行。

实例:gcc –E hello.c –o hello.i

选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

实例:gcc –S hello.i –o hello.s

汇编(生成机器可识别代码)

汇编阶段是把编译阶段生成的“.s”文件转成目标文件

可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

实例:gcc -c code.s -o code.o

连接(生成可执行文件或库文件)

在成功编译之后,就进入了链接阶段。

实例:gcc hello.o -o hello

动态库

在这里涉及到一个重要的概念:函数库。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?

最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用

函数库一般分为静态库和动态库两种

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”。在Windows版本中的动态库是.lib结尾的文件

  • 把码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如gcc hello.o -o hello。还有一个可以提一点的是,在Windows版本中的动态库是.dll结尾的文件

  • gcc默认生成的二进制程序,是动态链接的,这点可以通过 命令验证。

动态库、动态链接、静态库与静态链接的对比总结

1. 定义

概念说明
动态库运行时加载的共享库(如 .dll.so),不嵌入程序,可被多个进程共享。
动态链接在程序运行时将动态库绑定到进程的过程(自动加载或手动 dlopen)。
静态库编译时嵌入程序的库(如 .lib.a),代码直接合并到可执行文件中。
静态链接在程序编译时将静态库代码复制到可执行文件中,生成独立文件。

2. 特点

特性动态库/动态链接静态库/静态链接
文件大小程序体积小(仅自身代码)程序体积大(包含所有依赖库代码)
内存占用低(多个程序共享同一库)高(每个程序独立加载库代码)
更新维护替换库文件即可生效需重新编译程序
依赖管理需处理库版本冲突(依赖地狱)无外部依赖,独立运行
加载时机运行时加载(延迟绑定)编译时嵌入
适用场景通用软件、系统级程序(如 glibc嵌入式系统、独立工具(如 busybox

3. 优缺点对比

动态库与动态链接

  • 优点
    • 节省内存和磁盘空间(共享性)。
    • 支持热更新(无需重新编译程序)。
    • 灵活加载(如插件系统)。
  • 缺点
    • 依赖外部环境(库缺失或版本冲突会导致程序崩溃)。
    • 首次调用函数时可能有解析延迟(PLT/GOT 机制)。

静态库与静态链接

  • 优点
    • 程序独立,无需外部依赖。
    • 启动速度快(无运行时加载开销)。
    • 避免依赖地狱。
  • 缺点
    • 文件体积大(代码冗余)。
    • 更新需重新编译分发。
    • 内存占用高(多进程无法共享库代码)。

6. 总结

  • 动态库与动态链接
    通过共享代码按需加载优化资源利用,适合通用软件和灵活扩展,但需管理依赖和版本。
  • 静态库与静态链接
    空间换独立性,适合对部署环境要求严格的场景(如嵌入式系统),但牺牲了更新便利性。

注意:

  • 在操作系统中一般默认使用的是动态链接,但我们在编译的时候可以指定用静态链接,也就是下面gcc的-static选项
  • 我们可以用file命令查看一个程序的详细信息,包括它是静态链接和动态链接
  • 云服务器可能没有安装静态库,去搜索安装
gcc选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高-w 不生成任何警告信息。
-Wall 生成所有警告信息。

gcc选项记忆

esc,iso例子。我们一般用的时候都是直接将C语言文件通过gcc hello.c -o hello 直接编译成可执行文件。不需要逐步生成各种中间文件。

相关文章:

【Linux】Linux工具(1)

3.Linux工具&#xff08;1&#xff09; 文章目录 3.Linux工具&#xff08;1&#xff09;Linux 软件包管理器 yum什么是软件包关于 rzsz查看软件包——yum list命令如何安装软件如何卸载软件补充——yum如何找到要安装软件的下载地址 Linux开发工具Linux编辑器-vim使用1.vim的基…...

探索大语言模型(LLM):词袋法(Bag of Words)原理与实现

文章目录 引言一、词袋法原理1.1 核心思想1.2 实现步骤 二、数学公式2.1 词频表示2.2 TF-IDF加权&#xff08;可选&#xff09; 三、示例表格3.1 构建词汇表3.2 文本向量化&#xff08;词频&#xff09; 四、Python代码实现4.1 基础实现&#xff08;手动计算&#xff09;4.2 输…...

vue引入物理引擎matter.js

vue引入物理引擎matter.js 在 Vue 项目中集成 Matter.js 物理引擎的步骤如下: 1. 安装 Matter.js npm install matter-js # 或 yarn add matter-js2. 创建 Vue 组件 <template><div ref="physicsContainer" class="physics-container"><…...

基于 Spring Boot 瑞吉外卖系统开发(十一)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十一&#xff09; 菜品启售和停售 “批量启售”、“批量停售”、操作列的售卖状态绑定单击事件&#xff0c;触发单击事件时&#xff0c;最终携带需要修改售卖状态的菜品id以post请求方式向“/dish/status/{params.status}”发送…...

支持鸿蒙next的uts插件

*本文共四个功能函数&#xff0c;相当于四个插件。作者为了偷懒写成了一个插件&#xff0c;调对应的函数即可。 1、chooseImageHarmony函数&#xff1a;拉起相册选择图片并转为Base64 2、takePhotoAndConvertToBase64函数&#xff1a;拉起相机拍照并转为Base64 3、openBrows…...

深入理解负载均衡:传输层与应用层的原理与实战

目录 前言1. 传输层&#xff08;Layer 4&#xff09;负载均衡1.1 工作层级与核心机制1.2 实现方式详解1.3 优缺点分析1.4 典型实现工具 2. 应用层&#xff08;Layer 7&#xff09;负载均衡2.1 工作层级与核心机制2.2 实现方式解析2.3 优缺点分析2.4 常用实现工具 3. Layer 4 与…...

WPF之Slider控件详解

文章目录 1. 概述2. 基本属性2.1 值范围属性2.2 滑动步长属性2.3 刻度显示属性2.4 方向属性2.5 选择范围属性 3. 事件处理3.1 值变化事件3.2 滑块拖动事件 4. 样式和模板自定义4.1 基本样式设置4.2 控件模板自定义 5. 数据绑定5.1 绑定到ViewModel5.2 同步多个控件 6. 实际应用…...

极狐GitLab 如何将项目共享给群组?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 共享项目和群组 (BASIC ALL) 在极狐GitLab 16.10 中&#xff0c;更改为在成员页面的成员选项卡上显示被邀请群组成员&#xf…...

企业微信自建消息推送应用

企业微信自建应用来推送消息 前言 最近有个给特定部门推送消息的需求&#xff0c;所以配置一个应用专门用来推送消息。实现过程大致为&#xff1a;服务器生成每天的报告&#xff0c;通过调用API来发送消息。以前一直都是发邮件&#xff0c;整个邮箱里全是报告文件&#xff0c…...

【React】Hooks useReducer 详解,让状态管理更可预测、更高效

1.背景 useReducer是React提供的一个高级Hook,没有它我们也可以正常开发&#xff0c;但是useReducer可以使我们的代码具有更好的可读性&#xff0c;可维护性。 useReducer 跟 useState 一样的都是帮我们管理组件的状态的&#xff0c;但是呢与useState不同的是 useReducer 是集…...

日志之ClickHouse部署及替换ELK中的Elasticsearch

文章目录 1 ELK替换1.1 Elasticsearch vs ClickHouse1.2 环境部署1.2.1 zookeeper 集群部署1.2.2 Kafka 集群部署1.2.3 FileBeat 部署1.2.4 clickhouse 部署1.2.4.1 准备步骤1.2.4.2 添加官方存储库1.2.4.3 部署&启动&连接1.2.4.5 基本配置服务1.2.4.6 测试创建数据库和…...

亚远景-ASPICE vs ISO 21434:汽车软件开发标准的深度对比

ASPICE&#xff08;Automotive SPICE&#xff09;和ISO 21434是汽车软件开发领域的两大核心标准&#xff0c;分别聚焦于过程质量与网络安全。以下从核心目标、覆盖范围、实施重点、协同关系及行业价值五个维度进行深度对比分析&#xff1a; 一、核心目标对比 ASPICE&#xff1…...

51单片机快速成长路径

作为在嵌入式领域深耕18年的工程师&#xff0c;分享一条经过工业验证的51单片机快速成长路径&#xff0c;全程干货无注水&#xff1a; 一、突破认知误区&#xff08;新手必看&#xff09; 不要纠结于「汇编还是C」&#xff1a;现代开发90%场景用C&#xff0c;掌握指针和内存管…...

使用 NGINX 实现 HTTP Basic 认证ngx_http_auth_basic_module 模块

一、前言 在 Web 应用中&#xff0c;对部分资源进行访问控制是十分常见的需求。除了基于 IP 限制、JWT 验证、子请求校验等方式外&#xff0c;最经典也最简单的一种方式便是 HTTP Basic Authentication。NGINX 提供的 ngx_http_auth_basic_module 模块支持基于用户名和密码的基…...

解构与重构:自动化测试框架的进阶认知之旅

目录 一、自动化测试的介绍 &#xff08;一&#xff09;自动化测试的起源与发展 &#xff08;二&#xff09;自动化测试的定义与目标 &#xff08;三&#xff09;自动化测试的适用场景 二、什么是自动化测试框架 &#xff08;一&#xff09;自动化测试框架的定义 &#x…...

DockerDesktop替换方案

背景 由于DockerDesktop并非开源软件&#xff0c;如果在公司使用&#xff0c;可能就有一些限制&#xff0c;那是不是除了使用DockerDesktop外&#xff0c;就没其它办法了呢&#xff0c;现在咱们来说说替换方案。 WSL WSL是什么&#xff0c;可自行百度&#xff0c;这里引用WS…...

力扣热题100之搜索二维矩阵 II

题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 代码 方法一&#xff1a;直接全体遍历 这个方法很直接&#xff0c;但是居然没有超时&#xff0c…...

docker操作镜像-以mysql为例

Docker安装使用-CSDN博客 docker操作镜像-以mysql为例 当安装一个新的镜像时可以登录https://hub.docker.com/直接搜索想要安装的镜像&#xff0c;查看文档 1&#xff09;拉取镜像 docker pull mysql 或者 docker pull mysql:版本号 然后直接跳到第4&#xff09;步即可 2…...

使用OpenCV 和 Dlib 进行卷积神经网络人脸检测

文章目录 引言1.准备工作2.代码解析2.1 导入必要的库2.2 加载CNN人脸检测模型2.3 加载并预处理图像2.4 进行人脸检测2.5 绘制检测结果2.6 显示结果 3.完整代码4.性能考虑5.总结 引言 人脸检测是计算机视觉中最基础也最重要的任务之一。今天我将分享如何使用dlib库中的CNN人脸检…...

React 实现 JWT 登录验证的最小可运行示例

下面是一个用 React 实现 JWT 登录验证的最小可运行示例&#xff0c;包含&#xff1a; React 前端&#xff1a;登录、保存 Token、获取用户数据。模拟后端&#xff1a;用 mock API&#xff08;你也可以接真后端&#xff09;。 &#x1f9f1; 技术栈 React&#xff08;使用 Vi…...

Power Query精通指南1:查询结构设计、数据类型、数据导入与迁移(平面文件、Excel、Web)

文章目录 零、Power Query简介0.1 Power Query 主要功能0.2 Power Query 的优势0.3 Power Query 组件 一、Power Query数据处理基本流程1.1 前期准备1.2 提取1.3 转换1.3.1 Power Query 编辑器界面1.3.2 默认转换1.3.3 自定义转换 1.4 加载1.4.1 自动检测数据类型1.4.2 重命名查…...

vue2开发者sass预处理注意

vue2开发者sass预处理注意 sass的预处理器&#xff0c;早年使用node-sass&#xff0c;也就是vue2最初默认的编译器。 sass官方推出了dart-sass来替代。 node-sass已经停维很久了。 vue3默认使用的是dart-sass。 Uniapp的官方文档截图 从 HBuilderX 4.56 &#xff0c;vue2 …...

淘宝按图搜索商品(拍立淘)Java 爬虫实战指南

在电商领域&#xff0c;按图搜索商品功能为用户提供了更直观、便捷的购物体验。淘宝的拍立淘功能更是凭借其强大的图像识别技术&#xff0c;成为许多开发者和商家关注的焦点。本文将详细介绍如何利用 Java 爬虫技术实现淘宝按图搜索商品功能&#xff0c;包括注册账号、上传图片…...

安卓基础(封装引用)

​​情况 1&#xff1a;普通 Java 项目&#xff08;非 Android&#xff09;​​ src/ ├── com/ │ ├── example/ │ │ ├── utils/ │ │ │ └── A.java // 工具类 A │ │ └── main/ │ │ └── B.java // 主类 B ​​A…...

深入理解 Docker 网络原理:构建高效、灵活的容器网络

在现代软件开发中&#xff0c;Docker 已经成为了容器化技术的代名词&#xff0c;广泛应用于开发、测试和生产环境。Docker 使得开发者能够将应用及其依赖打包成一个轻量级的容器&#xff0c;并通过 Docker 容器化技术来实现高效的部署与管理。 然而&#xff0c;在日常使用 Dock…...

使用 Selenium 爬取动态网页数据 —— 实战与坑点详解

本文记录了笔者在爬取网页数据过程中遇到的各种技术挑战&#xff0c;包括页面动态渲染、JavaScript 注入等问题&#xff0c;并最终给出一个可运行的完整方案。 文章目录 网页获取不到数据&#x1f680; 尝试用 Selenium 渲染页面 网页获取不到数据 某网页数据依赖大量 JavaSc…...

React 笔记[1] hello world

React 笔记[1] hello world 明白了&#xff01;既然你已经安装了 Node.js&#xff0c;我们可以 从零开始搭建一个 React Tailwind CSS 的 Hello World 项目。我将一步步列出操作指令&#xff0c;你只需要在终端里依次执行。 ✅ 第一步&#xff1a;初始化项目 mkdir my-hello…...

Verilog Test Fixture 时钟激励

1、占空比50%时钟产生 always begin<clock> 1b0 ;#<PERIOD/2> ;<clock> 1b1 ;#<PERIOD/2> ; end reg <clock> 1b0 ;alwaysbegin#<PERIOD/2> ;<clock> ~<clock> ;end 2…...

守护数字家园:个人博客安全防护指南

前言 在之前的文章《WordPress个人博客搭建&#xff08;一&#xff09;》《WordPress个人博客搭建&#xff08;二&#xff09;》《WordPress个人博客搭建&#xff08;三&#xff09;》中&#xff0c;我们已经在非凡云云服务器上&#xff0c;借助1Panel搭建起属于自己的数字庭院…...

【网络编程】三、TCP网络套接字编程

文章目录 TCP通信流程Ⅰ. 服务器日志类实现Ⅱ. TCP服务端1、服务器创建流程2、创建套接字 -- socket3、绑定服务器 -- bind&#x1f38f;4、服务器监听 -- listen&#x1f38f;5、获取客户端连接请求 -- acceptaccept函数返回的套接字描述符是什么&#xff0c;不是已经有一个了…...