php用什么工具做网站/如何推广外贸型网站

php用什么工具做网站,如何推广外贸型网站,云南网站建设及优化,温州做网站建设初识Docker 什么是Docker Docker是一个快速交付应用、运行应用的技术: 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器,各个应用互不干扰启动、移除都可以通过一行命令完成&…

初识Docker

什么是Docker

Docker是一个快速交付应用、运行应用的技术:

  1. 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  3. 启动、移除都可以通过一行命令完成,方便快捷
应用部署的环境问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题

  • 依赖关系复杂,容易出现兼容性问题
  • 开发、测试、生产环境有差异

image-20230417003210805

例如一个项目中,部署时需要依赖于node.jsRedisRabbitMQMySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。

Docker解决依赖兼容问题

Docker为了解决依赖的兼容问题的,采用了两个手段:

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

  • 将每个应用放到一个隔离容器去运行,避免互相干扰

image-20230417003354608

这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需再在操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。

虽然解决了不同应用的兼容问题,但是开发、测试等环境会存在差异,操作系统版本也会有差异,怎么解决这些问题呢?

Docker解决操作系统环境差异

要解决不同操作系统环境差异问题,必须先了解操作系统结构。以一个Ubuntu操作系统为例,结构如下:

image-20230417003702318

结构包括:

  • 计算机硬件:例如CPU、内存、磁盘等
  • 系统内核:所有Linux发行版的内核都是Linux,例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。
  • 系统应用:将内核指令封装为函数,以便程序员调用,用户程序基于系统函数库实现功能。

应用于计算机交互的流程如下:

1)应用调用操作系统应用(函数库),实现各种功能

2)系统函数库是对内核指令集的封装,会调用内核指令

3)内核指令操作计算机硬件

UbuntuCentOS都是基于Linux内核,无非是系统应用不同,提供的函数库有差异,此时,如果将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不到或者不匹配,就会报错了:

image-20230417003922992

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境的差异问题

  • Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

image-20230417004605198

Docker与虚拟机的区别

Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,保护系统中的任何应用。两者有什么差异呢?

虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。而Docker仅仅是封装函数库,并没有模拟完整的操作系统。

image-20230417011701180

image-20230417011730625

Docker和虚拟机的差异总结:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统

  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般。

Docker架构

镜像和容器

Docker中有几个重要的概念:

**镜像(**Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

一切应用最终都是代码组成,都是硬盘中的一个个的字节形成的文件。只有运行时,才会加载到内存,形成进程。

镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包,这个文件包是只读的;

容器,就是将这些文件中编写的程序、函数加载到内存中运行,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程

image-20230417012159113

例如你下载了一个QQ,如果我们将QQ在磁盘上的运行文件及其运行的操作系统依赖打包,形成QQ镜像。然后你就可以启动多次,双开、甚至三开。

DockerHub

开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。

  • DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。
  • 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。

我们一方面可以将自己的镜像共享到DockerHub,另一方面也可以从DockerHub拉取镜像。

Docker架构

我们要使用Docker来操作镜像、容器,就必须要安装Docker。

Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等

  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

image-20230417012710083

使用Docker

镜像相关命令

首先来看下镜像的名称组成:

  • 镜像名称一般分两部分组成:[repository]:[tag]。
  • 在没有指定tag时,默认是latest,代表最新版本的镜像

image-20230417222011354

这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。

常见的镜像操作命令:

docker images	#查看镜像
docker rmi 		#删除镜像
docker pull		#拉取
docker push		#推送
docker save 	#保存到文件
docker load		#从文件加载

命令具体的参数可以使用--help查看。

image-20230417222046661

案例

从DockerHub中拉取一个nginx镜像并查看

1)首先去镜像仓库搜索nginx镜像,比如DockerHub:

image-20230418220950978

2)根据查看到的镜像名称,通过命令:docker pull nginx,拉取自己需要的镜像

3)通过命令:docker images 查看拉取到的镜像

image-20230418233303753

利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

1)利用docker xx --help命令查看docker savedocker load的语法

image-20230418233533311

可以看到命令的格式为:

#docker save格式
docker save -o [保存的目标文件名称] [镜像名称]#docker load格式
docker load -i [加载的目标文件名称]

2)使用docker save导出镜像到磁盘

运行命令:

docker save -o nginx.tar nginx:latest

image-20230418233809012

3)使用docker load加载镜像

先删除本地的nginx镜像:

docker rmi nginx:latest

image-20230418233938292

然后运行命令,加载本地文件:

docker load -i nginx.tar

image-20230418234126270

容器相关命令

image-20230418212831049

其中:

  • docker run:创建并运行一个容器,处于运行状态

    • 常见参数:
      • --name:指定容器名称
      • -p:指定端口映射
      • -d:让容器后台运行
  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

    • 不能删除运行中的容器,除非添加 -f 参数强制删除

    • 容器状态:

      • 运行:进程正常运行
      • 暂停:进程暂停,CPU不再运行,并不释放内存
      • 停止:进程终止,回收进程占用的内存、CPU等资源
  • docker logs:查看容器日志

    • 添加 -f 参数可以持续查看日志
  • docker ps:查看容器状态

    • 添加-a参数查看所有状态的容器
  • docker exec -it [容器名] [要执行的命令]

    • exec命令可以进入容器修改文件,PS:但是在容器内修改文件是不推荐
案例

创建并运行nginx容器的命令:

docker run --name [容器名称] -p 80:80 -d [镜像名称]

image-20230419230008978

这里的-p参数,是将容器端口映射到宿主机端口。

默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:

image-20230419230108126

案例

进入Nginx容器,修改HTML文件内容,添加“Hello World!”

1)进入我们刚刚创建的nginx容器的命令为:

docker exec -it myniginx bash

命令解读:

  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  • myniginx:要进入的容器的名称

  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

2)进入nginx的HTML所在目录 /usr/share/nginx/html

cd /usr/share/nginx/html

容器内部会模拟一个独立的Linux文件系统,看起来如同一个linux服务器一样,nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件:

image-20230419231540211

3)修改index.html的内容

容器内没有vi命令,无法直接修改,我们用下面的命令来修改:

sed -i -e 's#Welcome to nginx#Hello Wolrd!#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

image-20230419231651835

数据卷(volume)

容器与数据耦合的问题

在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。这就是因为容器与数据(容器内文件)耦合带来的后果。

image-20230419231924499

要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。

什么是数据卷?

数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录。其作用是将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

image-20230419232058611

一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了

数据卷操作命令

数据卷操作的基本语法如下:

docker volume [COMMAND]

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

  • create 创建一个volume
  • inspect 显示一个或多个volume的信息
  • ls 列出所有的volume
  • prune 删除未使用的volume
  • rm 删除一个或多个指定的volume
案例

创建一个数据卷,并查看数据卷在宿主机的目录位置

① 创建数据卷

docker volume create html

② 查看所有数据

docker volume ls

image-20230419233237068

③ 查看数据卷详细信息卷

docker volume inspect html

可以看到,我们创建的html这个数据卷关联的宿主机目录为/var/lib/docker/volumes/html/_data目录。

image-20230419233331232

④删除数据卷

docker volume prune		#删除未使用的数据卷
docker volume rm 数据卷名称		#删除指定数据卷
挂载数据卷

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

docker run --name [容器名称] -v [数据卷名称]:[目录] -p 8080:80 [镜像名称]
例:
docker run --name mynginx -v html:/root/html -p 8080:80 [镜像名称]

这里的-v就是挂载数据卷的命令:

  • -v html:/root/html :把html数据卷挂载到容器内的/root/html这个目录中,如果容器运行时volume不存在,会自动被创建出来
案例

创建一个nginx容器,修改容器内的html目录内的index.html内容

分析:上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

提示:运行容器时使用 -v 参数挂载数据卷

步骤:

① 创建容器并挂载数据卷到容器内的HTML目录

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx# 查看html数据卷的位置
docker volume inspect html

image-20240109210828430

② 进入html数据卷所在位置,并修改HTML内容

# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

**注意:**我在Windows下的Ubuntu中不能直接进入到/var/lib/docker/volumes/html/_data这个目录

image-20240109210134122

根据网上的办法执行以下指令进入到vm内部:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
  • –privileged : 表示允许该容器访问宿主机中的各种设备
  • –pid=host : 表示允许容器共享宿主机的进程命名空间(namespace),许容器看到宿主机中的各种进程
  • nsenter : 是一个小工具 ns=namespace、enter=进入
  • nsenter -t 1 -m -u -n -i sh
    • -t 1: 表示要进入哪个pid,1表示整个操作系统的主进程id
    • -m: 进入mount namespace,挂载点
    • -u: 进入UTS namespace
    • -n: 进入network namespace,网络
    • -i: 进入IPC namespace,进程间通信
    • sh: 表示运行/bin/sh

image-20240109210557980

image-20240109211435230

image-20240109213412925

image-20240109211517150

挂载目录

【案例】创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

  • -v[宿主机目录]:[容器内目录]
  • -v[宿主机文件]:[容器内文件]
  1. 导入mysql镜像

  2. 创建目录/tmp/mysql/data

  3. 创建目录/tmp/mysql/confhmy.cnf文件上传到/tmp/mysql/conf

  4. 去DockerHub查阅资料,创建并运行MySQL容器,要求:

​ ①挂载/tmp/mysql/data到mysql容器内数据存储目录

​ ②挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

​ ③设置MySQL密码

docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3307:3306 \
-d \
-v /tmp/mysql/conf:/etc/mysql/conf.d \
-v /tmp/mysql/data:/var/lib/mysql \
mysql:latest

image-20240110111810047

数据卷挂载与目录直接挂载的区别
  • 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找

  • 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

Dockerfile自定义镜像

镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

镜像是分层结构,每一层称为一个Layer

  • BaseImage层:包含基本的系统函数库、环境变量、文件系统;
  • Entrypoint:入口,是镜像中应用启动的命令;
  • 其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置。

image-20240110120144256

Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作以此来构建镜像。每一个指令都会形成一层Layer。常用指令:

指令说明示例
FROM指定基础镜像FROM centos:6
ENV设置环境变量ENV key value
COPY拷贝本地文件到镜像的指定目录COPY ./mysql-5.7.rpm /tmp
RUN执行Linux的shell命令,一般是安装过程的命令RUN yum install gcc
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

注意:

  • Dockerfile的本质是一个文件,通过指令描述镜像的构建过程;

  • Dockerfile第一行必须是FROM,从一个基础镜像来构建;

  • 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine。

构建Java项目

基本步骤
  1. 新建一个空文件夹docker-demo,并将docker-demo.jarjdk8.tar.gzDockerfile拷贝到该目录下。Dockerfile文件内容:

    # 指定基础镜像
    FROM ubuntu:16.04
    # 配置环境变量,JDK的安装目录
    ENV JAVA_DIR=/usr/local# 拷贝jdk
    COPY ./jdk8.tar.gz $JAVA_DIR/# 安装JDK
    RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置环境变量
    ENV JAVA_HOME=$JAVA_DIR/java8
    ENV PATH=$PATH:$JAVA_HOME/bin#########################以上步骤都是在安装jdk#############################Java项目包
    COPY ./docker-demo.jar /tmp/app.jar
    # 暴露端口
    EXPOSE 8090
    # 入口,java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
    
  2. 运行命令:

docker build -t javaweb:1.0 .
基于openjdk:8-alpine

基于openjdk:8-alpine镜像,将一个Java项目构建为镜像

实现思路如下:

  1. 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

  2. 拷贝docker-demo.jar到这个目录中

  3. 编写Dockerfile文件:

    # 指定基础镜像
    FROM openjdk:8-alpine# 将docker-demo.jar拷贝到镜像中
    COPY ./docker-demo.jar /tmp/app.jar# 暴露端口
    EXPOSS 8090
    # 入口,Java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
    
  4. 使用docker build命令构建镜像

    image-20240111204536437

  5. 使用docker run创建容器并运行

    image-20240111204742870

  6. 访问成功

    image-20240111204801886

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器编排革命:从 Docker Run 到 Docker Compose 的进化之路20250309

容器编排革命&#xff1a;从 Docker Run 到 Docker Compose 的进化之路 一、容器化部署的范式转变 在 Docker 生态系统的演进中&#xff0c;容器编排正从“手动操作”走向“自动化管理”。根据 Docker 官方 2023 年开发者调查报告&#xff0c;78% 的开发者已采用 Docker Compo…

【蓝桥杯python研究生组备赛】003 贪心

题目1 股票买卖 给定一个长度为 N 的数组&#xff0c;数组中的第 i 个数字表示一个给定股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。 注意&#xff1a;你不能同时参与多笔交易&…

LabVIEW VI Scripting实现连接器窗格自动化

通过VI Scripting自动化配置连接器窗格&#xff0c;可大幅提升开发效率、统一接口规范&#xff0c;并适配动态需求。以下为真实场景中的典型应用案例&#xff0c;涵盖工业、汽车电子及教育领域&#xff0c;展示其实际价值与实施效果。 特点&#xff1a; 程序化配置&#xff1a;…

[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…

微服务架构下的 Node.js

Node.js 在微服务架构中的特点 轻量级和高效性 Node.js 以其轻量级和高效的特点&#xff0c;非常适合构建微服务架构。它具有事件驱动和非阻塞 I/O 模型&#xff0c;能够在处理高并发请求时表现出色。这意味着 Node.js 可以同时处理大量的并发连接&#xff0c;而不会因为阻塞…

Linux 配置静态 IP

一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址&#xff0c;每次启动虚拟机服务都是不一样的 IP&#xff0c;因此要配置静态 IP 地址避免每次都发生变化&#xff0c;下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念&#xff1a; 动态 IP…

为什么 HTTP GET 方法不使用请求体?

本指南将揭示为什么 HTTP GET 方法不像其他 HTTP 方法那样使用请求体&#xff0c;以及如何在 API 开发中有效地使用 GET 请求。 当谈到 HTTP&#xff08;超文本传输协议&#xff09;时&#xff0c;您可能会好奇为什么 GET 方法通常不涉及请求体。在 Web 请求中&#xff0c;发送…

JVM垃圾回收面试题及原理

1. 对象什么时候可以被垃圾器回收 如果一个或多个对象没有任何的引用指向它了&#xff0c;那么这个对象现在就是垃圾&#xff0c;如果定位了垃圾&#xff0c;则有可能会被垃圾回收器回收 如果要定位什么是垃圾&#xff0c;有两种方式来确定 引用计数法可达性分析算法 1.1 …

《Mycat核心技术》第19章:基于MySQL实现读写分离

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

【安卓逆向】安卓病毒介绍及其简单案例分析

目录 引言 一、Android 病毒介绍及分析方法 1.1 Android 病毒预览 1.2 Android 病毒分析必备知识 1.3 Android 病毒的常见类型及恶意行为 1.3.1 常见病毒类型 1.3.2 常见病毒行为 1.4 病毒激活条件 1.5 Android 病毒的传播方式 1.6 Android 病毒分析的一般方法 二…

基于LabVIEW的脚本化子VI动态生成

该示例展示了一种利用LabVIEW VI脚本&#xff08;VI Scripting&#xff09;技术&#xff0c;通过程序化方式动态生成并替换子VI的解决方案。核心逻辑为&#xff1a;基于预定义的模板VI&#xff0c;根据用户选择的数学操作&#xff08;加法或乘法&#xff09;&#xff0c;自动生…

es-索引详解

在 Elasticsearch 中&#xff0c;**索引&#xff08;Index&#xff09;**是核心概念之一&#xff0c;类似于关系型数据库中的“表”。索引用于存储、组织和检索文档&#xff08;Document&#xff09;。以下是关于 Elasticsearch 索引的详细解析&#xff1a; 1. 索引的基本概念 …

基于策略模式的智能提示语生成器设计与实现——以Tkinter GUI开发为例

基于策略模式的智能提示语生成器设计与实现——以Tkinter GUI开发为例 一、引言&#xff1a;智能化时代的提示工程工具 在人工智能技术广泛应用的时代背景下&#xff0c;如何与AI模型进行有效交互已成为关键技能。本文介绍的"AI任务需求与提示语策略生成器"正是基于…

01 | Go 项目开发极速入门课介绍

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课。 你好&#xff0c;欢迎学习本课程。本课程是一个 Go 项目开发极速入门课程。旨在帮助刚学习完 Go 基础语法的 Go 开发者&#xff0c;快速掌握如何开发一个功能相对全面的 Go 项目。 根据课程设计目标…

密闭空间可燃气体监测终端:守护城市命脉,智驭燃气安全!

近年来&#xff0c;陕西省高度重视燃气安全&#xff0c;出台了一系列政策文件&#xff0c;旨在全面加强城镇燃气安全监管&#xff0c;防范化解重大安全风险。2023年&#xff0c;陕西省安委会印发《全省城镇燃气安全专项整治工作方案》&#xff0c;明确要求聚焦燃气经营、输送配…

有关Java中的多线程

学习目标 ● 掌握线程相关概念 ● 掌握线程的基本使用 ● 掌握线程池的使用 ● 了解解决线程安全方式 1.为什么要学习线程? ● 从1946年2月14日世界上第一台计算机在美国宾夕法尼亚大学诞生到今天&#xff0c;计算和处理的模式早已从单用户单任务的串行模式发展到了多用户多…

(2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应

Dynamic Low-Rank Sparse Adaptation for Large Language Models 目录 1. 引言 1.1 关键词 2. 方法 2.1 预备知识 2.2 层级稀疏率确定 2.3 稀疏感知的秩分配 2.4 动态稀疏与适配 3. 实验 3.1 实验设置 3.2 语言建模 3.3 零样本任务 3.4 N:M 稀疏性 3.5 消融实验 …

p5.js:sound(音乐)可视化,动画显示音频高低变化

本文通过4个案例介绍了使用 p5.js 进行音乐可视化的实践&#xff0c;包括将音频振幅转化为图形、生成波形图。 承上一篇&#xff1a;vite&#xff1a;初学 p5.js demo 画圆圈 cd p5-demo copy .\node_modules\p5\lib\p5.min.js . copy .\node_modules\p5\lib\addons\p5.soun…

Qt开源控件库(qt-material-widgets)的编译及使用

项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址&#xff1a;qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图&#xff1a; 直接使用Qt Crea…

Flutter 按钮组件 TextButton 详解

目录 1. 引言 2. TextButton 的基本用法 3. 主要属性 4. 自定义按钮样式 4.1 修改文本颜色 4.2 添加背景色 4.3 修改按钮形状和边距 4.4 样式定制 5. 高级应用技巧 5.1 图标文本组合 5.2 主题统一配置 5.3 动态交互 6. 性能优化与注意事项 6.1 点击区域优化 6.…