一些概念
pip 安装的包默认是全局的。这意味着,使用 pip install 命令安装的 Python 包在系统的 Python 环境中对所有项目都是可用的。这种全局安装的方式可能会导致一个问题,即如果不同的项目需要使用相同包的不同版本,就可能发生版本冲突。为了避免这种情况,可以使用 Python 的虚拟环境功能来为不同的项目创建隔离的环境,确保每个项目都有其独立的依赖包版本12。
虚拟环境允许开发者为每个项目创建一个独立的 Python 环境,并在其中安装项目所需的包和依赖。这样,即使多个项目需要使用同一个包,也可以确保每个项目使用该包的特定版本,从而避免版本冲突。通过创建和使用虚拟环境,开发者可以更好地管理项目的依赖关系,提高项目的可移植性和可维护性
问题1:pip 安装的包默认是全局的?还要新建一个虚拟环境出来?为什么设计的时候不直接放在该项目下,比如前端的包管理器一样有个node_modules? 或 maven 一样 直接引入仓库的依赖?
Python 包管理器 pip 默认会将安装的包放在全局环境中,这是为了确保所有用户和所有项目都可以使用这些包。 ...
安装Ubuntu22.04系统
修改ip
1vi /etc/netplan/00-installer-config.yaml
重启生效
1netplan apply
克隆虚拟机
无vCenter克隆备注好需要克隆的我一般以ip备注好
查看虚拟机路径
复制文件复制前关闭虚拟机,创建一个新的目录,选择.vmx文件和.vmdk文件,然后复制到刚才创建的文件夹中
列出的每个文件的解释:虚拟机磁盘文件
new_base-flat.vmdk
作用: 这是虚拟磁盘数据文件,包含虚拟机的实际数据。此文件存储虚拟机磁盘的全部内容,比如操作系统、应用程序和文件。由于它代表了虚拟机的完整磁盘空间,通常会很大。
new_base.vmdk
作用: 这是 new_base-flat.vmdk 的描述文件,包含关于虚拟磁盘的元数据,如大小、格式和数据布局。它是一个文本文件,为 ESXi 提供访问 flat 文件所需的信息。
虚拟机配置文件
new_base.vmx
作用: 这是虚拟机的主要配置文件,包含所有的设置和参数,如内存大小、CPU 配置、网络设置和设备信息。该文件对于启动和管理虚拟机至关重要。
new_base.nvram
作用: 这个文件存储了虚拟机 BIOS 的状态,包含启动顺序、硬件配置和其他类似物理计算机非易失性内存的设置。
new_base ...
docker-FAQ
写 /bin/bash 还是/bin/sh ?在 Docker 命令中,我进入容器,如何确定是写 /bin/bash 还是/bin/sh ?
常见的 Shell 路径
/bin/bash: 大多数基于 Debian 和 CentOS 的镜像,如 Ubuntu 和 CentOS,默认安装了 Bash shell,其路径通常为 /bin/bash。
/bin/sh: 这是一个更基本的 shell,通常存在于所有的 Unix-like 系统中,包括大多数 Docker 容器。/bin/sh 通常是 dash 或 bash 的符号链接,取决于具体的系统。
/bash: 这个路径通常不存在,Bash 通常安装在 /bin 目录下,所以需要用 /bin/bash。
确定容器内可用的 Shell要确定容器内可用的 shell 及其路径,您可以检查容器的文件系统。以下是一些方法来确定容器内的 shell:
方法 1:在 Dockerfile 中查看镜像的基础操作系统通常, ...
Java 之泛型通配符 extends T 与 super T 解惑
简述大家在平时的工作学习中, 肯定会见过不少如下的语句:
12List<? super T>List<? extends T>
我们都知道, 上面的代码时关于 Java 泛型的, 那么这两个不同的写法都有什么区别呢?
首先, 说到 Java 的泛型, 我们必须要提到的是Java 泛型的类型擦除机制: Java中的泛型基本上都是在编译器这个层次来实现的. 在生成的 Java 字节代码中是不包含泛型中的类型信息的. 使用泛型的时候加上的类型参数, 会被编译器在编译的时候去掉. 这个过程就称为类型擦除. 如在代码中定义的List和List等类型, 在编译之后都会变成List, JVM看到的只是List, 而由泛型附加的类型信息对JVM来说是不可见的.
在使用泛型类时, 我们可以使用一个具体的类型, 例如可以定义一个 List 的对象, 我们的泛型参数就是 Integer; 我们也可以使用通配符 ? 来表示一个未知类型, 例如 List 就表示了泛型参数是某个类型, 只不过我们并不知道它的具体类型时什么.
List所声明的就是所有类型都是可以的, 但需要注意的是, L ...
dockerfile修改
编译1docker build -t app .
运行测试1docker run --rm --privileged app -p 8080:8080
打包和导入save 和load
12docker save -o app.tar app:1.0docker load -i /app.tar
export 和import 这里不能使用,因为环境变量会丢失
主要区别在于:
docker export 和 docker import 只操作容器的文件系统,不处理镜像的元数据。
docker save 和 docker load 保存和恢复镜像的全部历史记录和元数据。
centos7 镜像
123456789101112131415161718FROM centos:centos7# 设置维护者信息MAINTAINER shuzhuo <shuzhuo233@163.com># 为镜像添加元数据LABEL version="1.0" \ description="centos7 更改中文" \ mai ...
docker配置容器内访问主机ip
官方文档:https://docs.docker.com/reference/cli/docker/container/run/
运行加参数运行Docker容器时,使用 --add-host 参数将宿主机的IP地址映射到 host.docker.internal 主机名
1docker run --add-host=host.docker.internal:host-gateway <image>
–add-host 参数,意思是向xyz的/etc/hosts文件文件中增加一条解析.
1172.17.0.1 host.docker.internal #增加了这行解析,其它都相对固定的原生解析
在容器内部,您可以使用 host.docker.internal 主机名来访问宿主机的IP地址
可以改为
1docker run -d --add-host=test001.com:host-gateway <image>
或
1docker run -d --add-host=waiwang.com:192.168.1.100 <image> ...
打包
假设你有一个名为myapp.jar的Spring Boot可执行JAR文件,你可以通过以下方式运行它,并包含新的JAR文件mylib.jar:
1java -jar myapp.jar -cp mylib.jar
泛型
说明? extends T:这种形式的通配符表示的是一个上界限定,表示泛型类型必须是 T 类型或其子类型。换句话说,你可以将此通配符用于读取数据,但无法向其中写入数据。
因为放入的数据都是 extends T,
? super T:这种形式的通配符表示的是一个下界限定,表示泛型类型必须是 T 类型或其父类型。换句话说,你可以将此通配符用于写入数据,但无法从中读取数据。
例子1? extends T:12345678910111213import java.util.ArrayList;import java.util.List;public class Example { public static void main(String[] args) { List<? extends Number> numbers = new ArrayList<>(); // 编译器允许向上转型为 Number 类型 Number number = numbers.get(0); // 但不允许向 ...
lambda方法引用
方法引用:方法引用是Lambda表达式的一种简化写法,它使得我们可以直接引用已有方法或构造函数,而不用重新编写Lambda表达式。
方法引用的基本语法为:Class::methodName 或 object::methodName
其中:
Class可以是类名,也可以是接口名;
methodName是方法的名称。
方法引用的类型包括:
静态方法引用:Class::staticMethodName
实例方法引用:object::instanceMethodName
构造函数引用:Class::new
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package com.example.springbootdemo.jdk8.test1;import java.util.function.Supplier;/** * 方法引用 * @author shuzhuoi */class Main { interface Converter { ...