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

Linux系统 环境变量

环境变量

  • 写在前面
  • 概念
  • 查看环境变量
    • main函数的参数
      • argc & argv
      • env
  • bash环境变量

写在前面

对于环境变量,本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”,我们会更详细讲解;理解环境变量的全局属性 —— 环境变量是可以被子进程继承(注意区分 C++ 里的继承);环境变量的组织方式。其次会介绍命令行参数 —— main 函数的参数。

概念

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数

我们在编写 C/C++ 代码的,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

LInux操作系统本身就是一个用C语言写的程序,操作系统可以在运行过程中开辟空间。环境变量的本质,就是在操作系统运行过程中,为自己开辟的空间,存储了一些重要的信息。

为了更好的理解环境变量的作用,现在我们先来思考一个问题,我们在执行指令的过程之中,可以直接输入指令的名字,但是我们自己写的可执行程序,一定要加上绝对路径或者相对路径才可以运行,这是为什么呢?

其实这个过程之中,环境变量的作用就显现出来了。

PATH:一个环境变量,存储着多个路径,在这些路径下面的可执行程序,可以直接执行。

PATH是我们讲解的第一个重要的环境变量,我们现在尝试观察这个环境变量。

echo $xxx:查看xxx环境变量的内容

在这里插入图片描述
可以看出这个环境变量是由多个路径组成的,每个路径由分开。
因此我们只需要把自己的可执行程序放在这里面某一个路径下面,我们自己写的可执行程序就也可以当作指令来执行了。而这个工作就是把自己写的软件安装到系统之中。

我们也可以想办法把自己的路径加到PATH环境变量中。

xxx=:修改环境变量的值

如果我们当前路径下有一个可执行程序test.exe并且我们将其路径加到了PATH中,那么我们就可以直接执行这个程序,但是原来PATH中的内容会被我们的修改直接覆盖。导致原有的ls,pwd,mkdir等等指令全部执行不了了。但是不用惊慌,我们只需要关闭xshell,然后重启,此时PATH就会恢复原先的值。

我们再来看看几个常用的的环境变量。

USER:记录当前的用户
PWD:记录当前路径
HOME:记录家目录

在这里插入图片描述

我们还可以自己定义一些环境变量:

export xxx=:定义xxx环境变量

在这里插入图片描述
不过我们自己定义的环境变量在重新启动的时候也会失效。

还有一个与环境变量相关的重要指令。

env:输出所有环境变量。

展示部分如下。
在这里插入图片描述

查看环境变量

通过之前的认识,我们知道可以通过env来查看所有的环境变量,也可以通过echo $xxx查看单个环境变量,但是这些都是在命令行中操作的,如果我们想在可执行程序中查看需要如何做呢?

  • getenv

getenv是一个函数,其定义在<stdlib.h>中。功能是:输入一个字符串作为参数,该函数输出该字符串对应的环境变量的内容。

当前test.exe程序内容如下:

#include <stdio.h>      
#include <stdlib.h>      int main()      
{      const char* path = getenv("PATH");      const char* home = getenv("HOME");      printf("PATH = %s\n", path);      printf("HOME = %s\n", home);    return 0;    
}      

在这里插入图片描述

main函数的参数

也许你或许听说过,main函数也是有参数的,但是在学习C/C++的过程中,这个参数好像可写可不写,学习环境后,我们就可以了解一下这些变量的意义是什么了。

argc & argv

main的前两参数分别是argc和argv,传参形式如下:

int main(int argc, char* argv[])  
{}

可见,argcint类型的变量,而argv是一个char*的数组。还记得我们刚刚的env指令内容吗?其实它们两个的结构是一样的。argv每个元素都是char*类型,分别指向一个字符串,argv的最后一个元素也是NULL,用于标识argv的数组结尾。而argc代表了argv中元素的个数,所以我们既可以通过NULL来判断argv结尾,也可以通过argc来判断结尾。在test中执行如下代码,来看看argv中存储了什么:

#include <stdio.h>      int main(int argc, char* argv[])      
{      for(int i = 0; i < argc; i++)      {      printf("argv[%d]: %s\n", i, argv[i]);      }    return 0;    
}        

在这里插入图片描述
现在argv中只有一个元素,即字符串"./test.exe"

给./test.exe加几个选项试试,./test.exe -a -b -c

在这里插入图片描述
可以得出argv参数内部,存储的是调用可执行程序时,输入的选项
通过argv存储的内容我们就可以根据不同选项执行不同的内容。

#include <stdio.h>
#include <string.h>
#include <stdbool.h>int main(int argc, char* argv[])    
{              bool flagA = false, flagB = false, flagC = false;    for(int i = 0 ; i < argc; i++)    {          if (strcmp(argv[i], "-a") == 0)    flagA = true;//说明输入了-a选项    else if (strcmp(argv[i], "-b") == 0)    flagB = true;//说明输入了-b选项    else if (strcmp(argv[i], "-c") == 0)    flagC = true;//说明输入了-c选项    }          printf("正在执行 test.exe\n");    if(flagA)    printf("功能a执行中...\n");    if(flagB)    printf("功能b执行中...\n");    if(flagC)    printf("功能c执行中...\n");    return 0;                                                                                               
}   

我们使用的绝大多数指令都是有很多选项的,我们通过输入不同的选项,让程序执行不同的功能,而程序就是通过识别argv,来判断用户输入了哪些选项,进而执行特定的功能的。

在我们向bash输入一大段指令的时候,指令本质就是一个字符串,bash会把字符串拆解为一个个小小的字符串,然后把他们整合到一个叫做命令行参数表的东西中,命令行参数表其实就是一个指针数组,而argv参数可以接收bash维护的数组,在程序内部使用。


env

main函数的第三个参数叫做env,其实它也是一个char*类型的指针数组,类型为char**

int main(int argc, char* argv[], char* env[])   
{}

这个参数和指令env的内容完全一致的。存储了所有环境变量,并且以NULL结尾。

#include <stdio.h>    int main(int argc, char* argv[], char* env[])
{for(int i = 0; env[i] != NULL; i++){printf("env[%d]: %s\n", i, env[i]);}return 0;
}

bash环境变量

其实环境变量是可以继承的,可以通过下面的代码证明。

#include <stdio.h>                                                                                        
#include <unistd.h>
#include <sys/types.h>int main(int argc, char* argv[], char* env[])    
{    pid_t id = fork();    if(id == 0)//子进程    {    for(int i = 0; i < 3; i++)    {    printf("child:  env[%d]: %s\n", i, env[i]);                                                           }    }    else//父进程    {    for(int i = 0; i < 3; i++)    {    printf("father: env[%d]: %s\n", i, env[i]);    }    }    return 0;    
}  

通过fork创建了一个子进程,然后父子进程分别输出env这个数组中的前三个字符串。

输出结果:
在这里插入图片描述

可以看到父子进程都可以正常使用env,说明子进程是可以继承父进程的环境变量表的。而在所有命令行调用的进程中,都是bash的子进程,因此我们的在命令行调用的进程可以继承bash的环境变量表。只有我们登录了系统的时候,bash才会被创建,之前我们就知道,bash要维护一张环境变量表,那么bash的环境变量是怎么来的?其实这些环境变量是存储的在磁盘上的,而我们启动bash的时候,会把这些环境变量从磁盘上拷贝到内存中,组成一张环境变量表,我们访问环境变量实际上是在访问内存中的环境变量,我们修改环境变量实际上也是在修改内存中的环境变量,不会影响磁盘中的环境变量。

因此当我们重新启动Xhell时,bash都会重新从磁盘中拷贝一次环境变量,这样我们之前所做的修改或者自己添加的环境变量都会被覆盖重置

另:在家目录中,有一个叫做.bash_profile的隐藏文件 ,其内部存储的就是环境变量。这个就是我们每次重新启动从磁盘拷贝环境变量的文件内容。

相关文章:

Linux系统 环境变量

环境变量 写在前面概念查看环境变量main函数的参数argc & argvenv bash环境变量 写在前面 对于环境变量&#xff0c;本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”&#xff0c;我们会更详细讲解&#xff1b;理解环境变量的全局…...

TAPEX:通过神经SQL执行器学习的表格预训练

摘要 近年来&#xff0c;语言模型预训练的进展通过利用大规模非结构化文本数据取得了巨大成功。然而&#xff0c;由于缺乏大规模高质量的表格数据&#xff0c;在结构化表格数据上应用预训练仍然是一个挑战。本文提出了TAPEX&#xff0c;通过在一个合成语料库上学习神经SQL执行…...

Ruby:从宝石到编程语言的奇妙联系(中英双语)

Ruby&#xff1a;从宝石到编程语言的奇妙联系 在珠宝世界中&#xff0c;红宝石&#xff08;Ruby&#xff09;是一种象征热情、力量和高贵的珍贵宝石&#xff1b;而在编程世界中&#xff0c;Ruby则是一门灵活、优雅且富有创造力的编程语言。那么&#xff0c;这两者究竟有何联系…...

RLHF中的on-policy和off-policy的区别

在LLM&#xff08;大语言模型&#xff09;和RLHF&#xff08;基于人类反馈的强化学习&#xff09;中&#xff0c;on-policy和off-policy的主要区别在于数据的来源和策略更新的方式。以下是两者的详细对比以及各自的典型算法&#xff1a; On-policy 和 Off-policy 的区别 特性…...

计算机考研复试上机02

目录 3、排序 1)排序(华中科技大学复试上机题) 2)成绩排序(清华大学复试上机题) 3)特殊排序(华中科技大学复试上机题) 4)整数奇偶排序(北京大学复试上机题) 5)小白鼠排队(北京大学复试上机题) 4、查找 1)找 x(哈尔滨工业大学复试上机题) 2)查找(北…...

利用ETL工具进行数据挖掘

ETL的基本概念 数据抽取&#xff08;Extraction&#xff09;&#xff1a;从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作&#xff0c;从API接口拿取数据也是。 数据转换&#xff08;Transformation&#xff09;&#xff1a;清洗、整合和转…...

02DevOps基础环境准备

准备两台Linux的操作系统&#xff0c;最简单的方式就是在本机上使用虚拟机搭建两个操作系统&#xff08;实际生产环境是两台服务器&#xff0c;虚拟机的方式用于学习使用&#xff09; 我搭建的两台服务器的ip分别是192.168.1.10、192.168.1.11 192.168.1.10服务器用于安装doc…...

Kafka 入门与实战

一、Kafka 基础 1.1 创建topic kafka-topics.bat --bootstrap-server localhost:9092 --topic test --create 1.2 查看消费者偏移量位置 kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group test 1.3 消息的生产与发送 #生产者 kafka-cons…...

VM虚拟机安装群晖系统

下载群晖系统 https://download.csdn.net/download/hmxm6/90351935 安装群晖连接软件 synology-assistant-6.2-24922(在上面的压缩包里面) 准备好VM虚拟机 创建群晖虚拟机 打开下载下来的虚拟机 添加硬盘 选择类型 创建新的磁盘 指定容量 指定存储文件 完成硬盘添加…...

关于ESP-IDF 5.4 中添加第三方组件esp32-camera找不到文件,编译错误解决办法(花了一天时间解决)

最近需要使用ESP32-S3-CAM 的OV2640摄像头采集图像&#xff0c;为了加速开发进度&#xff0c;于是选择了esp32-camera组件&#xff0c;该组件不是官方组件&#xff0c;需要自己git clone。但在为项目添加esp32-camera组件时&#xff0c;一直编译错误&#xff0c;找不到头文件&a…...

【C++】C++11

目录 C11简介 统一的列表初始化 {}初始化 std::initializer_list 声明 auto decltype nullptr 范围for循环 智能指针 STL中的一些变化 右值引用和移动语义 左值引用和右值引用 右值引用的意义 完美转发 lambda表达式 新的类功能 可变参数模版 包装器 func…...

Intellij IDEA如何查看当前文件的类

快捷键&#xff1a;CtrlF12&#xff0c;我个人感觉记快捷键很麻烦&#xff0c;知道具体的位置更简单&#xff0c;如果忘了快捷键&#xff08;KeyMap&#xff09;看一下就记起来了&#xff0c;不需要再Google or Baidu or GPT啥的&#xff0c;位置&#xff1a;Navigate > Fi…...

CF 278A.Circle Line

题目分析 输入n个数据作为路径&#xff0c;求从a到b的最短距离&#xff0c;需要将其相成一个圆圈&#xff0c;既可以从小往大走又可以从大往小走 思路分析 依然将数据存为数组&#xff0c;通过下标进行操作&#xff0c;既然说了有两种方式那就计算两种方式哪个更快就输出谁 代…...

Naive UI去掉n-select下拉框边框,去掉n-input输入框边框

1、第一种通过js去掉 <template><div><div style"margin-top:10px;width: 100%;"><dade-descriptions><tr><dade-descriptions-item label"代理名称"><dade-input placeholder"代理名称"></dade-…...

(文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练

文章目录 (文末提供数据集下载)ML.NET库学习001&#xff1a;基于PCA的信用卡异常检查之样本处理与训练目标项目概述代码结构概述1. **主要类和文件**2. **命名空间和使用指令**3. **数据类 (TransactionObservation)**4. **主程序入口 (Main 方法)**5. **数据预处理 (DataPrepr…...

疯狂SQL转换系列- SQL for Milvs2.4

鉴于Milvus仍在不停的迭代新版本&#xff0c;推出新功能&#xff0c;其SDK目前并不稳定。目前其2.4版本的SDK接口已与之前的2.2版本有了较大的差别&#xff0c;功能上也有了一定的调整。为此&#xff0c;我们重新提供了针对[Milvus2.4](https://github.com/colorknight/moql-tr…...

C++的 I/O 流

本文把复杂的基类和派生类的作用和关系捋出来&#xff0c;具体的接口请参考相关文档 C的 I/O 流相关的类&#xff0c;继承关系如下图所示 https://zh.cppreference.com/w/cpp/io I / O 的概念&#xff1a;内存和外设进行数据交互称为 I / O &#xff0c;例如&#xff1a;把数…...

基于ansible部署elk集群

ansible部署 ELK部署 ELK常见架构 &#xff08;1&#xff09;ElasticsearchLogstashKibana&#xff1a;这种架构是最常见的一种&#xff0c;也是最简单的一种架构&#xff0c;这种架构通过Logstash收集日志&#xff0c;运用Elasticsearch分析日志&#xff0c;最后通过Kibana中…...

4.Python字符串和列表:字符串输入、字符串输出、下标和切片、字符串常见函数、列表(list)、列表的循环遍历、列表的增删改查、列表的嵌套、列表的切片

1. Python 字符串 1.1 字符串输入 input() 函数用于从用户获取字符串输入。它总是返回一个字符串类型的值。 # 从用户输入字符串 name input("请输入你的名字&#xff1a;") print(f"你好, {name}")1.2 字符串输出 字符串的输出通常使用 print() 函数…...

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…...

Redis - 全局ID生成器 RedisIdWorker

文章目录 Redis - 全局ID生成器 RedisIdWorker一、引言二、实现原理三、代码实现代码说明 四、使用示例示例说明 五、总结 Redis - 全局ID生成器 RedisIdWorker 一、引言 在分布式系统中&#xff0c;生成全局唯一ID是一个常见的需求。传统的自增ID生成方式在分布式环境下容易出…...

Linux ftrace 内核跟踪入门

文章目录 ftrace介绍开启ftraceftrace使用ftrace跟踪指定内核函数ftrace跟踪指定pid ftrace原理ftrace与stracetrace-cmd 工具KernelShark参考 ftrace介绍 Ftrace is an internal tracer designed to help out developers and designers of systems to find what is going on i…...

Visual Studio(VS)没有显示垂直滚轮or垂直滚轮异常显示

前言&#xff1a; 前段时间&#xff0c;我换上了新电脑。满心欢喜地安装好 VS&#xff0c;准备大干一场时&#xff0c;却发现了一个小麻烦 —— 垂直滚轮显示异常&#xff08;如图 1&#xff09;。这种显示方式实在让我难以适应&#xff0c;每一次操作都觉得别扭。 于是&#…...

大数据数仓实战项目(离线数仓+实时数仓)3

1.课程内容和课程目标 2.订单时间维度指标需求分析 根据时间数据&#xff0c;生成一个时间维度表&#xff0c;我们后面还可以去复用这个时间维度表 3.使用kettle生成日期维度数据 Hive创建日期维度表 使用Kettle构建以下组件结构图 使用kettle生成日期维度数据插入到我们的hi…...

通过acme生成与续签ssl证书,并部署到nginx

通过acme生成与续签ssl证书&#xff0c;并部署到nginx 介绍 官方介绍&#xff1a; acme.sh 实现了 acme 协议&#xff0c;可以从 ZeroSSL&#xff0c;Lets Encrypt 等 CA 生成免费的证书。 安装 acme.sh 1. curl方式 curl https://get.acme.sh | sh -s emailmyexample.com…...

c语言对应汇编写法(以中微单片机举例)

芯片手册资料 1. 赋值语句 C语言&#xff1a; a 5; b a; 汇编&#xff1a; ; 立即数赋值 LDIA 05H ; ACC 5 LD R01,A ; R01 ACC&#xff08;a5&#xff09;; 寄存器间赋值 LD A,R01 ; ACC R01&#xff08;读取a的值&#xff09; LD R02,A ; R02 ACC&…...

React基础内容(面试一)

React大厂常见的面试题目涉及多个方面&#xff0c;包括React的基本概念、组件、状态管理、生命周期、性能优化等。以下是对这些面试题目的详细解析&#xff1a; 一、React基本概念 解释React是什么以及它的主要特点 React是一个用于构建用户界面的JavaScript库&#xff0c;由F…...

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步&#xff0c;测试方法也在演变。企业需要紧跟新兴趋势&#xff0c;以提升软件质量、提高测试效率&#xff0c;并确保安全性&#xff0c;在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…...

常用工具类——Collections集合框架

常用工具类——Collections集合框架 Collections 是 JDK 提供的一个工具类&#xff0c;提供了一系列静态方法&#xff0c;分类来复习&#xff01; 1.排序操作 reverse(List list) :反转顺序shuffle(List list) &#xff1a; 洗牌&#xff0c;将顺序打乱sort(List list) &…...

【大数据技术】搭建完全分布式高可用大数据集群(ZooKeeper)

搭建完全分布式高可用大数据集群(ZooKeeper) apache-zookeeper-3.8.4-bin.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 ZooKeeper 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件…...

Docker Desktop安装kubernetes时一直在Starting:Kubernetes failed to start

原因&#xff1a;由于墙的问题&#xff0c;导致拉取国外的K8s镜像失败 解决&#xff1a; 下载 k8s-for-docker-desktop 选中自己的kubernetes 版本 下载zip包 PowerShell运行load_images.ps1文件 重启docker kubernetes运行成功...

物流中的物联网:其含义、应用和优势

随着世界联系日益紧密&#xff0c;物流格局正经历重大变革。科技已成为供应链管理的支柱&#xff0c;推动物流公司迈入效率与连通性兼具的新时代。 物联网&#xff08;IoT&#xff09;是一股变革性力量&#xff0c;重塑着物流与运输行业的架构。物联网在物流领域并非昙花一现的…...

Axure设计教程:动态排名图(中继器实现)

一、开篇 在Axure原型设计中&#xff0c;动态图表是展示数据和交互效果的重要元素。今天&#xff0c;我们将学习如何使用中继器来创建一个动态的排名图&#xff0c;该图表不仅支持自动轮播&#xff0c;还可以手动切换&#xff0c;极大地增强了用户交互体验。此教程旨在提供一个…...

【人工智能】掌握图像风格迁移:使用Python实现艺术风格的自动化迁移

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 图像风格迁移(Image Style Transfer)是一种基于深度学习的计算机视觉技术,通过将一张图像的内容与另一张图像的艺术风格结合,生成一幅具…...

# C指针地址CUP寄存器访问IO内存映射

C指针地址&CUP寄存器访问&IO内存映射 在裸机编程中&#xff0c;C语言可以像汇编语言一样直接操作芯片寄存器地址进行读取和写入&#xff0c;主要是由于以下几个原因&#xff1a; 1. 裸机环境下没有操作系统的干预 裸机编程是指直接在硬件上运行程序&#xff0c;没有…...

UE5 蓝图学习计划 - Day 14:搭建基础游戏场景

在上一节中&#xff0c;我们 确定了游戏类型&#xff0c;并完成了 项目搭建、角色蓝图的基础设置&#xff08;移动&#xff09;。今天&#xff0c;我们将进一步完善 游戏场景&#xff0c;搭建 地形、墙壁、机关、触发器 等基础元素&#xff0c;并添加角色跳跃功能&#xff0c;为…...

浅尝yolo11全程记录1-准备环境+官网模型推理(个人备份)

准备工作&#xff08;虚拟环境、导入项目&#xff09; 安装Anaconda 主要是为了创建和管理虚拟环境&#xff0c;在pycharm里按照项目里的requirments.txt安装依赖的时候&#xff0c;使用虚拟环境会好很多&#xff08;我记得不用Anaconda也可以直接在pycharm的terminal里头创建…...

用 Python 给 Excel 表格截图(20250207)

我搜索了网络上的方案&#xff0c;感觉把 Excel 表格转换为 HTML 再用 platwright 截图是比较顺畅的路径&#xff0c;因为有顺畅的工具链。如果使用的是 Windows 系统则不需要阅读此文&#xff0c;因为 win32com 库更方便。这篇文章中 Excel 转 HTML 的方案&#xff0c;主要弥补…...

Office/WPS接入DS等多个AI工具,开启办公新模式!

在现代职场中&#xff0c;Office办公套件已成为工作和学习的必备工具&#xff0c;其功能强大但复杂&#xff0c;熟练掌握需要系统的学习。为了简化操作&#xff0c;使每个人都能轻松使用各种功能&#xff0c;市场上涌现出各类办公插件。这些插件不仅提升了用户体验&#xff0c;…...

智能化转型2.0:从“工具应用”到“价值重构”

过去几年&#xff0c;“智能化”从一个模糊的概念逐渐成为企业发展的核心议题。2024年&#xff0c;随着生成式AI、大模型、智能体等技术的爆发式落地&#xff0c;中国企业正式迈入智能化转型的2.0时代。这一阶段的核心特征是从单一场景的“工具应用”转向全链条的“价值重构”&…...

深度整理总结MySQL——索引工作原理

B树索引数据结构 前言什么样的索引数据结构是好的搜索速度要求支持范围查找寻求适合查找的算法寻求合适的数据结构二叉查找树自平衡二叉树B树B树数据结构B与B树比较 总结 前言 相信你在面试时&#xff0c;通常会被问到“什么是索引&#xff1f;”而你一定要能脱口而出&#xf…...

基于asr的所见即可说方案

年前写的文章对所见即可说方案进一步调研-CSDN博客&#xff0c;针对rk3568定制版&#xff0c;进行了Accessibility实现所见即可说功能的验证与调研&#xff0c;结论是不可行。 最终解决方案是&#xff1a;结合科大讯飞的AI大模型智能助手&#xff0c;使用rk3588板&#xff08;…...

【截图】selenium自动通过浏览器截取指定元素div的图片

【截图】selenium自动通过浏览器截取指定元素div的图片 思路 截取完整网页截图 通过元素的坐标 截图到指定位置的图片 前提是已经获取到 driver 了 # 定位目标divtarget_div driver.find_element(By.CLASS_NAME, headlines-right)# 获取div的位置和大小location target_div…...

CSS入门学习笔记(一)

学习视频&#xff1a;https://www.bilibili.com/video/BV1zN2UYoEEo/ 目录 基本介绍语法引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式 选择器四种选择器全局选择器元素选择器类选择器id选择器 合并选择器选择器的优先级 字体属性colorfont-sizefont-weig…...

docker安装es及分词器ik

系统是macos&#xff0c;docker是docker-desktop 拉取镜像 docker pull bitnami/elasticsearch 启动docker镜像 docker create -e "discovery.typesingle-node" \ --name elasticsearch1 -p 9200:9200 -p 9300:9300 \ bitnami/elasticsearch:8.17.1 测试是否好…...

11. 9 构建生产级聊天对话记忆系统:从架构设计到性能优化的全链路指南

构建生产级聊天对话记忆系统:从架构设计到性能优化的全链路指南 关键词: 聊天对话记忆系统、多用户会话管理、LangChain生产部署、Redis记忆存储、高并发对话系统 一、服务级聊天记忆系统核心需求 多用户隔离:支持同时处理数千个独立对话持久化存储:对话历史不因服务重启丢…...

SpringBoot启动源码剖析:从入口到容器的诞生

文章目录 SpringBoot启动的核心入口SpringApplication的初始化SpringBoot的启动流程1. 准备环境&#xff08;Environment&#xff09;2. 创建应用上下文&#xff08;ApplicationContext&#xff09;3. 刷新应用上下文&#xff08;Refresh Context&#xff09;4. 调用Runner接口…...

Day38【AI思考】-彻底打通线性数据结构间的血脉联系

文章目录 **彻底打通线性数据结构间的血脉联系****数据结构家族谱系图****一、线性表&#xff08;老祖宗的规矩&#xff09;****核心特征** **二、嫡系血脉解析**1. **数组&#xff08;规矩森严的长子&#xff09;**2. **链表&#xff08;灵活变通的次子&#xff09;** **三、庶…...

虚拟鼠标MATVT:遥控器操控的安卓电视增强工具

虚拟鼠标MATVT&#xff1a;遥控器操控的安卓电视增强工具 matvt Virtual Mouse for Android TV that can be controlled via remote itself. 项目地址: https://gitcode.com/gh_mirrors/ma/matvt 项目基础介绍与编程语言 虚拟鼠标MATVT&#xff08;matvt&#xff09;是…...

优惠券平台(一):基于责任链模式创建优惠券模板

前景概要 系统的主要实现是优惠券的相关业务&#xff0c;所以对于用户管理的实现我们简单用拦截器在触发接口前创建一个单一用户。 // 用户属于非核心功能&#xff0c;这里先通过模拟的形式代替。后续如果需要后管展示&#xff0c;会重构该代码 UserInfoDTO userInfoDTO new…...