Python泛型使用typing模块TypeVar和Generic实现

在Python中,泛型是一种编程概念,它允许在编写函数、类或数据结构时使用参数化类型,以提高代码的灵活性和复用性。通过泛型,我们可以编写更通用的代码,使其能够适用于多种不同类型的数据。 Python 中的泛型是使用 typing 模块中的 TypeVar 和 Generic 进行实现的。TypeVar 用于定义泛型类型变量,而 Generic 用于定义泛型类或函数。 typing 模块中的泛型支持包括一系列的泛型类型和类型变量,例如 List、Dict、Tuple 等。开发者可以使用这些泛型类型来声明具有泛型参数的数据结构或函数签名。此外,Python 3.9 引入了更多强大的泛型支持,包括 Literal、TypedDict 等新的泛型类型。 需要注意的是,Python 中的泛型类型提示仅用于静态类型检查和文档说明,并不影响运行时的行为。Python 解释器不会强制执行类型提示,因此在运行时仍然可以传入任何类型的参数。 下面是一些关于Python泛型的详细解释: 1. 泛型类型变量(Generic Type Variables): 在使用泛型时,我们通常会定义一个泛型类型变量,用于表示某种不确定的类型。泛型类型变量通常使用大写字母命名,比如 T、U、V 等。 T = TypeVar('T') 2. 泛型函数(Generic Functions): 泛型函数是可以接受一个或多个泛型类型参数的函数。这些参数可以用来指定函数参数的类型、返回值的类型或函数内部使用的其他类型。 from typing import TypeVar, List T = TypeVar('T') def first_element(items: List[T]) -> T: return items[0] int_list = [1, 2, 3, 4, 5] print(first_element(int_list)) # 输出: 1 str_list = ["Hello", "World", "Python"] print(first_element(str_list)) # 输出: Hello 在这个例子中,我们创建了一个整数列表 int_list 和一个字符串列表 str_list。我们使用 first_element 函数获取了这两个列表的第一个元素,分别是整数 1 和字符串 "

Android中FragmentContainerView的详细介绍

在Android中,FragmentContainerView是用于容纳和管理Fragment的容器视图。它是一个FrameLayout的子类,提供了一些额外的功能,如支持Navigation库中的NavHostController和NavController,以及管理Fragment的生命周期和交互。 FragmentContainerView通常用于以下场景: 作为NavHost的一部分:NavHost是一个FrameLayout,它管理着NavController,而NavController又管理着一系列的Fragment。 在Activity中包含Fragment:在Activity的布局中,你可以使用FragmentContainerView来包含和显示Fragment。 在Fragment中包含另一个Fragment:你可以在一个Fragment中使用FragmentContainerView来包含另一个Fragment。 下面是一个简单的例子,展示如何在Activity中使用FragmentContainerView来显示一个Fragment: 创建一个Fragment(例如MyFragment)。 MyFragment.kt: import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.navigation.fragment.findNavController class MyFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // 返回布局视图 return inflater.inflate(R.layout.fragment_my, container, false) } } fragment_my.xml: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, Fragment!" /> </FrameLayout> 在Activity的布局文件中,使用FragmentContainerView来包含MyFragment。 activity_main.xml: <androidx.fragment.app.FragmentContainerView android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:defaultNavGraph="@navigation/nav_graph" /> 创建一个导航图nav_graph.xml来定义Fragment之间的导航关系。 nav_graph.xml:

MacOS(安装旧版本)

将 USB 闪存驱动器接入 Mac。打开“应用程序”文件夹内“实用工具”文件夹中的“终端”。在“终端”中键入或粘贴以下命令下述每个命令都假设安装器位于你的“应用程序”文件夹中,并且“MyVolume”是你所使用的 USB 闪存驱动器或其他宗卷的名称。如果宗卷不是这个名称,请将命令中的 MyVolume 替换为相应名称。当系统提示你键入管理员密码时,请照做。在你键入密码时,“终端”不会显示任何字符。然后按下 Return 键。当系统提示键入 Y 来确认你要抹掉宗卷时,请照做,然后按下 Return 键。在抹掉宗卷的过程中,“终端”会显示进度。宗卷被抹掉后,你可能会看到一条提醒,提示“终端”要访问可移除宗卷上的文件。点按“好”以允许继续拷贝。当“终端”显示操作已完成时,相应宗卷将拥有与你下载的安装器相同的名称,例如“安装 macOS Sonoma”。你现在可以退出“终端”并弹出宗卷。 sudo /Applications/Install\ macOS\ Sonoma.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume sudo /Applications/Install\ macOS\ Ventura.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume sudo /Applications/Install\ macOS\ Monterey.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume 请记得将命令中的 MyVolume 替换为你的宗卷名称。如果你的 Mac 使用的是 macOS Sierra 或更低版本,请在命令后附加 --applicationpath,后跟相应的安装器路径,与下方适用于 El Capitan 的命令中显示的内容类似。 使用可引导安装器 将可引导安装器插入已连接到互联网且与你要安装的 macOS 版本兼容的 Mac。可引导安装器不会从互联网下载 macOS,但却需要互联网连接才能获取特定于 Mac 机型的固件和其他信息。将 Mac 开机并继续按住电源按钮,直到你看到启动选项窗口,其中会显示可引导宗卷。选择包含可引导安装器的宗卷,然后点按“继续”。macOS 安装器打开后,请按照屏幕上的安装说明操作。

java多数据源几种实现方式以及demo

提示:多数据源实现方式、多数据源的使用场景。AbstractRoutingDataSource、DynamicDataSource框架、mybatisplus的Intercepter插件、java中多数据源的几种实现方式、mybatisPlus的插件实现多数据源 文章目录 前言一、多数据源的几种实现方式二、使用场景三、核心原理1、原理2、实现步骤 四、代码实现1.基础实现1.1、pom依赖1.2、配置文件1.3、配置类1: DataSourceConfig1.4、配置类2: DynamicDataSource1.5、controller1.6、mapper 2.代码优化2.1、注解wr2.2、 @WR("W")2.3、aop 3、mybatisPlus的插件实现多数据源3.1、MyMybatisInterceptor3.2、DataSourceConfig3.3、DynamicDataSource 总结 前言 最近工作中有一张表,实际数据量超过1亿了,导致一条普通的insert语句也耗时15秒,因此需要分表。在使用shardingSphere分表时,需要切换多数据源,因此特意调研了一下多数据源的几种实现方式。再次记录一下,感兴趣的同学可以下载代码,这样看起来更加清晰。gitee代码 一、多数据源的几种实现方式 java中实现多数据源,比较常见的方式有3种: abstractRootingDataSourcemybatisplus的Intercepter插件DynamicDataSource 框架 其实最底层的核心原理,就是abstractRootingDataSource,剩下的两种,肯定也是以第一种为基础的,只不过封装了一层而已。 二、使用场景 一般来说,多数据源有以下两种使用场景: 业务复杂(数据量大)。数据分布在不同的数据库中,数据库拆了, 应用没拆。 一个公司多个子项目,各用各的数据库,涉及数据共享…读写分离。为了解决数据库的读性能瓶颈(读比写性能更高, 写锁会影响读阻塞,从而影响读的性能)。 三、核心原理 1、原理 最核心的类就是AbstractRootingDataSource,因此我们着重介绍一下。 这个抽象类中,有3个比较重要的成员变量: 1、此时,我们仍然返回的是dynamicDatasource,只是,我们继承了AbstruceRootingDataSource,然后getConnection方法变成了由AbstruceRootingDataSource提供的connection了这个getConnection方法内部,是: determineTargetDataSource().getConnection();而2中底层是调用的模版方法,去获取最终的connection。因为是map中的get方法获取的,所以get的这个key是关键, lookupKey = determineCurrentLookupKey();resolvedDataSource.get(lookupKey);而这个key呢,就需要程序员自己在这个接口中去实现 determineCurrentLookupKey 方法了。(返回的是一个key值,我们自定义的key) 2、实现步骤 实现多数据源大概需要3部,(AbstractRoutingDataSource) 1.继承 abstractRootingDataSource 2.返回当前数据源标识 重写 determineCurrentLookupKey 方法 3.获取全部的数据源map super.setTargetDataSources(targetDataSources); 四、代码实现 1.基础实现 1.1、pom依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.2</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.

C++心决之命名空间、重载函数和引用

目录 1. C++关键字(C++98) 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 3. C++输入&输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C++支持函数重载的原理--名字修饰(name Mangling) 6. 引用 6.1 引用概念 6.2 引用特性 6.3 常引用 6.4 使用场景 6.5 传值、传引用效率比较 6.6 引用和指针的区别 1. C++关键字(C++98) C++ 总计 63 个关键字, C 语言 32 个关键字 2. 命名空间 在 C/C++ 中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是 对标识符的名称进行本地化 , 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的 2.1 命名空间定义 定义命名空间,需要使用到 namespace 关键字 ,后面跟 命名空间的名字 ,然 后接一对 {} 即可, {} 中即为命名空间的成员 一个命名空间就定义了一个新的作用域 ,命名空间中的所有内容都局限于该命名空间中 2.

Springboot项目-基于Java+MySQL的网上商城购物系统(附源码+论文+数据库)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 安卓app毕业设计 🌎微信小程序毕业设计 开发环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat12 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器:谷歌浏览器 源码下载地址: https://download.csdn.net/download/2301_76953549/87943477 论文目录 【如需全文请按文末获取联系】 目录 开发环境源码下载地址:论文目录**【如需全文请按文末获取联系】** 一、项目简介二、系统设计2.1软件功能模块设计2.2数据库设计 三、系统项目部分截图3.1管理员功能模块3.2用户功能模块3.3前台首页功能模块 四、部分核心代码4.1 用户部分 获取源码或论文 一、项目简介 本网上商城购物系统采用的数据库是Mysql,使用springboot框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 二、系统设计 2.1软件功能模块设计 网上商城购物系统结构图,如图4-3所示。 2.2数据库设计 通过网上商城购物系统的功能进行规划分成几个实体信息,实体信息将通过ER图进行说明,本系统的主要实体图如下: 管理员信息属性图如图4-5所示。 用户管理实体属性图如图4-6所示。 商品信息管理实体属性图如图4-7所示。 订单管理实体属性图如图4-8所示。 三、系统项目部分截图 3.1管理员功能模块 管理员登录,通过填写用户名、密码、角色进行登录,如图5-1所示。 管理员登录进入网上商城购物系统可以查看首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理等信息。 个人中心,在个人中心页面中可以通过填写原密码、新密码、确认密码等信息进行添加、修改,如图5-2所示。还可以根据需要对个人信息进行添加,修改或删除等详细操作,如图5-3所示。 用户管理,在用户管理页面中可以查看用户名、姓名、性别、头像、联系电话等信息,并可根据需要对用户管理进行详情、修改或删除等操作,如图5-4所示。 订单评价管理,在订单评价管理页面中可以查看订单编号、商品名称、商品分类、品牌、规格、评分、添加图片、评价内容、评价日期、用户名、审核回复、审核状态、审核等内容,并且根据需要对订单评价管理进行详情、修改或删除等详细操作,如图5-9所示。 3.2用户功能模块 用户登录进入网上商城购物系统可以查看首页、个人中心、订单评价管理、我的收藏管理、订单管理等内容。 订单评价管理,在订单评价管理页面中通过查看订单编号、商品名称、商品分类、品牌、规格、评分、添加图片、评价内容、评价日期、用户名、审核回复、审核状态等信息还可以根据需要对订单评价管理进行修改,如图5-10所示。 我的收藏管理,在我的收藏管理页面中可以查看收藏名称、收藏图片等信息内容,并且根据需要对我的收藏管理进行详情或删除等其他详细操作,如图5-11所示。 订单管理,在订单管理页面中通过查看订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等内容进行详情,如图5-12所示。 3.3前台首页功能模块 网上商城购物系统,在网上商城购物系统可以查看首页、商品信息、商品资讯、个人中心、后台管理、购物车、在线客服等内容,如图5-13所示。 用户登录、用户注册,通过注册获取用户名、密码、姓名、联系电话等信息进行注册、登录,如图5-14所示。 商品信息,在商品信息页面可以查看商品名称、商品分类、图片、品牌、规格、价格等信息进行添加到购物车、立即购买,如图5-15所示。 个人中心,在个人中心页面可以查看用户名、姓名、性别、头像、联系电话等进行更新信息、退出登录如图5-16所示。 四、部分核心代码 4.1 用户部分 package com.controller; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; import java.

Redis(一) redis配置 | 如何连接redis服务器 | 基本数据类型 | 基本全局命令 | 数据结构和内部编码方式

文章目录 前言Redis 配置文件连接 redis 服务器Redis 常见数据类型Redis 基本全局命令set 和 get 命令KEYS 命令EXISTS 命令DEL 命令EXPIRE 和 TTL 命令Redis 过期策略定时器和时间轮的方式实现过期key的及时删除 TYPE 命令 数据结构和编码方式 前言 本篇文章将介绍我们在 Linux 环境下安装了 Redis 之后的一些 redis 配置、如何启动 redis、redis 有哪些基本数据类型以及一些基础的全局命令。 Redis 配置文件 当我们在 Linux 环境下安装完成 redis 之后,需要修改 redis 的配置文件对齐进行配置,redis 的配置文章一般位于 /etc/redis/redis.conf 路径下,进入 redis 的配置文件之后我们找到 bind 配置,然后将 127.0.0.1 更改为 0.0.0.0: 做这个更改是因为 127.0.0.1 表示只有我们本机才可以访问 redis,而修改为 0.0.0.0 我们其他的计算机则可以通过网络来访问该 redis。 第二个 protected-mode 大家可以根据情况更改,这个表示进入 redis 的时候是否需要密码,我们这里自己使用就将其更改为 no: 当修改完成之后,如果 redis 服务已经开启,我们需要使用 service redis-servcer restart 来重启 redis 服务。启动之后,我们可以使用 service redis-server status 来查看 redis 服务状态:

关于rabbitmq的prefetch机制

消息预取机制(Prefetch Mechanism)是RabbitMQ中用于控制消息传递给消费者的一种机制。它定义了在一个信道上,消费者允许的最大未确认的消息数量。一旦未确认的消息数量达到了设置的预取值,RabbitMQ就会停止向该消费者发送更多消息,直到至少有一条未完成的消息得到了确认。 预取值(Prefetch Count)是一个关键的参数,它可以在消费者或信道级别设置。这个值指定了该信道上未确认传递的消息的最大数量。例如,如果预取值设置为5,那么消费者在没有确认当前消息之前,不会收到超过5条消息。 预取机制有三种类型: 信道预取机制:它限制了在信道上可以传递给消费者的未确认消息的总数。消费者预取机制:它限制了单个消费者可以接收的未确认消息的数量。全局预取机制:它在信道级别应用,但是会影响信道上所有消费者的预取值。 使用预取机制的好处包括: 避免消息积压:通过限制未确认消息的数量,可以防止消费者端出现缓存爆炸的问题。提高效率:能者多劳,消费速率高的消费者可以处理更多的消息。负载均衡:在多个消费者共享队列的情况下,预取机制可以作为简单的负载均衡技术。 要启用消息预取机制,需要关闭自动确认(autoAck=false),并使用basicAck来手动确认消息。这样,RabbitMQ才能跟踪哪些消息已经被处理,并根据预取值来调整消息的传递¹。🔄🐇 .

动态规划-----背包类问题(0-1背包与完全背包)详解

目录 什么是背包问题? 动态规划问题的一般解决办法: 0-1背包问题: 0 - 1背包类问题 分割等和子集: 完全背包问题: 完全背包类问题 零钱兑换II: 什么是背包问题? 背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?它是在1978年由Merkle和Hellman提出的。 动态规划问题的一般解决办法: 动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤: 🧐 步骤一:定义dp数组元素的含义🧐步骤二:找出数组元素之间的关系式(也就是我们所熟知的状态转移方程)🧐第三步骤:找出初始值(base case) 接下来的题目我们会按照这三个步骤来解释说明 前言:本文包含动态规划中的经典背包问题,有关背包问题的描述如下: 在动态规划中,背包问题是一个经典的优化问题,它可以分为0-1背包问题和完全背包问题两种类型。下面我们就来看看这两个问题: 0-1背包问题: 问题描述: 给你一个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两个属性。其中第 i 个物品的重量为 wt[i],价值为 val[i]。现在让你用这个背包装物品,每个物品只能用一次,在不超过被包容量的前提下,最多能装的价值是多少? 🧐 步骤一:定义dp数组元素的含义: 由于状态有两个,就是「背包的容量」和「可选择的物品」,这里我们就需要用到一个二维的dp 数组,如下为dp数组的定义: 🦉🦉🦉dp[i][w] 的定义如下:对于前 i 个物品,当前背包的容量为 w,这种情况下可以装的最大价值是 dp[i][w] 🧐步骤二:找出数组元素之间的关系式(也就是我们所熟知的状态转移方程) 1.如果你没有把这第 i 个物品装入背包,那么很显然,最大价值 dp[i][w] 应该等于 dp[i-1][w],继承之前的结果(翻译一下就是不装入第i个物品,相当于对前 i - 1 个物品进行选择,对应此时的背包容量w)。即此时的状态转移方程是:dp[ i ][ w ] = dp[ i - 1 ][ w ] 2.如果你把这第 i 个物品装入了背包,此时背包剩余容量为 w - wt[ i - 1 ](wt数组下标是从0开始的, wt[ i - 1 ] 相当于第 i 个物品的重量,val 也一样)

dm8修改sysdba用户的密码

1 查看达梦数据库版本 SQL> select * from v$version; LINEID BANNER ---------- --------------------------------- 1 DM Database Server 64 V8 2 DB Version: 0x7000c 3 03134283904-20220630-163817-20005 2 查看参数设置 SQL> select name,value,sys_value,file_value from v$parameter where name like '%OSAUTH%'; LINEID NAME VALUE SYS_VALUE FILE_VALUE ---------- -------------------- ----- --------- ---------- 1 ENABLE_REMOTE_OSAUTH 0 0 0 2 ENABLE_LOCAL_OSAUTH 0 0 0 3 修改参数,并重启数据库实例 修改: SQL> alter system set 'ENABLE_LOCAL_OSAUTH'=1 spfile; DMSQL executed successfully used time: 1.151(ms). Execute id is 1203.

Tiktok Android 免拔卡,安装即用教程

所有工具均来源网络,仅作个人测试 tiktok 会自动识别手机卡、手机网络,识别到不可用地区将会拒绝服务。利用目前网络上的工具即可自己制作一个安装即用的软件 需要准备两个工具: 1: Github Tiktok 解锁工具 2: Github 免 root 补丁工具 另外需要自备上网工具 Tiktok 需要自行下载 Apk 准备,Apkpure app应用商店下载 Tiktok 工具来源网络,均为免费工具,仅作个人测试 tiktok 解锁原理 tiktok 自动识别 sim 卡区域,只要使用 xposed 修改其识别地区即可解锁。Tiktok解锁工具 核心代码: 制作安装包 有了工具需要 root 手机,之后才能安装 Magisk 在 lsposed 、或者其他框架中生效使用。 目前手机 root 越来越难。可自己手动制作补丁包,下载 免root补丁工具 后。根据命令生成新 apk 即可 java -jar lspatch.jar -k keystore.jks <密码> <密钥库> <密钥库密码> -m tool.apk tiktok.apk 演示文件: 链接:https://pan.baidu.com/s/1CbHPRxTAAW-BHkbMdYmZ1Q?pwd=1234 提取码:1234 --来自百度网盘超级会员V5的分享

Mac上设置环境变量PATH

一、配置文件有哪些 在Mac系统中,环境变量的配置文件主要包括以下几个: 文件名称描述/etc/paths系统级别的配置文件,系统启动时会加载它。/etc/profile系统级别的配置文件,所有用户登录时都会读取该文件。~/.bash_profile用户级别的配置文件,只有当前用户会读取它。如果该文件存在,那么~/.bash_login、~/.profile和~/.bashrc这几个文件会被忽略。~/.bash_login用户级别的配置文件,只在用户登录时读取。~/.profile用户级别的配置文件,如果~/.bash_profile文件不存在,则会读取它。~/.bashrc用户级别的配置文件,它在bash shell打开时才会加载,而不是在系统启动时就加载。~/.zshrczsh shell 的用户级别配置文件,用于设置环境变量和shell选项。 注意:这些文件的加载顺序可能会因具体情况而有所不同。 二、如何设置环境变量 1、 打开终端Terminal。 2、 输入以下命令打开你的shell配置文件,比如bash或zsh。如果你使用的是bash,那么你需要编辑~/.bash_profile或者~/.bashrc文件;如果你使用的是zsh,那么你需要编辑~/.zshrc文件。 open -e ~/.bash_profile 或者 open -e ~/.zshrc 3、 在打开的配置文件中,你可以添加你的环境变量设置。例如,如果你想要添加一个名为MY_PATH的环境变量,并且它的值为/my/custom/path,你可以添加如下行: export MY_PATH=/my/custom/path 4、 保存并关闭配置文件后,你需要让更改生效。这可以通过在终端中运行以下命令来实现: source ~/.bash_profile 或者 source ~/.zshrc 5、 现在,你可以通过在终端中输入echo $MY_PATH来检查环境变量的值是否已经正确设置。 6、 如果你是在系统级别设置环境变量,那么需要管理员权限,可以使用sudo命令。 sudo source ~/.bash_profile 或者 sudo source ~/.zshrc

Linux安装JDK详细教程(附图)

Linux安装JDK详细教程(图文教程) 这里介绍两种方式:yum安装方式和手动安装 1、yum安装 1.1 查看JDK版本,找到你想要安装的JDK版本,这里以 JDK1.8 为例 输入命令:yum -y list java* 1.2 安装JDK1.8 输入命令:yum install -y java-1.8.0-openjdk.x86_64 出现Complete!安装完成。 1.3 查看JDK版本 输入命令:java -version 默认安装到usr/lib/jvm目录下 2、手动安装 2.1 卸载OpenJDK以及相关的Java文件 查看Java信息及相关的Java文件 查看JDK信息,输入命令:java -version 检测JDK安装包,输入命令:rpm -qa | grep java 删除Java相关文件(/usr/lib/jvm是默认openjdk安装路径) 进入安装目录。输入命令:cd /usr/lib/jvm 删除Java相关文件(注意:会删除所有文件,如有其他文件,请不要使用此命令删除),输入命令:rm -rf /usr/lib/jvm 2.2 安装JDK 官网下载最新稳定JDK: https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html 1. 新建一个存放安装包的文件夹 创建文件夹,输入命令:mkdir /usr/local/java 2. 将下载的安装包传到该文件夹 3. 解压安装包 输入命令:tar -zxvf jdk-8u351-linux-x64.tar.gz 4. 修改配置文件/etc/profile,配置环境变量 输入命令:vim /etc/profile 在配置文件最下方添加下面三种任意一种: 注意:JAVA_HOME=/devFile/jdk/jdk1.8.0_261 就是你自己的目录 #java environment export JAVA_HOME=/usr/local/java/jdk1.8.0_261 export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=$PATH:${JAVA_HOME}/bin #java environment export JAVA_HOME=/home/jdk/jdk1.

[Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包

一、设置应用包名 在Flutter开发中,修改应用程序的包名(也称作Application ID)涉及几个步骤,因为包名是在项目的Android和iOS平台代码中分别配置的。请按照以下步骤操作: 1.Android Flutter工程中全局搜索替换包名 首先,打开您的 android/app/build.gradle 文件,搜索"applicationId",查看当前android工程使用的包名。 然后,快捷键Command + Shift + F全局搜索使用的包名,全部替换成新包名。 2.iOS 方式1:Flutter工程中全局搜索替换包名 首先,打开您的 ios/Runner.xcodeproj/project.pbxproj 文件,搜索PRODUCT_BUNDLE_IDENTIFIER,查看当前iOS使用的包名。 然后,快捷键Command + Shift + F全局搜索使用的包名,全部替换成新包名。 方式2:用Xcode打开iOS工程在Signing & Capabilities标签页修改 Bundle Identifier 打开您的Flutter项目的 ios/Runner.xcodeproj 文件,或者如果您使用的是xcworkspace,打开 ios/Runner.xcworkspace。 在Xcode中,选择项目的根目录然后选择 Runner 项目。 在 Signing&Capabilities 标签页,修改 Bundle Identifier 至您的新包名。 如果有必要的话,修改 Info.plist 文件中的引用。 二、设置应用名称 在Flutter开发中,设置应用程序的名称,需要去更新Android/iOS 特定的配置文件。 1.Android 编辑 android/app/src/main/AndroidManifest.xml 文件,并设置`android:label` 属性: <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:label="Your App Name" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> ... </application> </manifest> 2.iOS 打开您的 ios/Runner/Info.plist 文件,并设置CFBundleDisplayName和CFBundleName: <key>CFBundleDisplayName</key> <string>Your App Display Name</string> <key>CFBundleName</key> <string>BundleName</string> 在 Xcode 中,CFBundleName 和 CFBundleDisplayName 是应用程序的两个属性,用于指定应用程序的名称。它们有以下区别:

数据库课程设计-工资管理系统-MySQL

目录 第一节 需求分析 1.1 需求分析概述 1.2 功能需求分析 1.2.1 人事数据管理模块 1.2.2 考勤数据管理模块 1.2.3 工资数据管理模块 1.2.4 工资计算公式设置模块 1.3 数据需求分析 1.3.1 数据项定义 1.3.2 数据结构定义 第二节 概念结构设计 2.1 分E-R图 2.2 基本E-R图 第三节 逻辑结构设计 3.1关系模式设计(下划线“ ”表示主码) 3.2存储过程和触发器的设计 第四节 物理结构设计 第五节 数据库实施 5.1 创建基本表 5.2 插入测试数据 5.3 创建业务处理的存储过程并测试 5.4 创建业务处理的视图并测试 5.5 创建业务处理的触发器并测试 第一节 需求分析 1.1 需求分析概述 随着当今企业人员数量的不断增加,企业的工资管理工作也就变得越来越复杂。对于一个现代化的企业来说,信息化管理是必须的,而财务管理部门作为事业单位的重点部门,同样需要加强信息化管理。设计工资管理系统的目的就是为了帮助财务部门能更好地管理本单位的职工工资,提高工作效率,实现职工工资信息管理的规范化和自动化。明确查询公司职工某年某月的工资情况,通过职工工资管理系统,也能查询到职工本身的一些基本信息。如何对职工工资进行信息化的管理,减轻财务部门的劳动强度,并且确保相关数据的安全,信息处理的高效,正是本数据库设计目的所在。 1.2 功能需求分析 以我国某国有企业为例设计数据库,通过网上查询资料和询问相关经验人士,了解此国企的职位等级制度和工资分配制度。为此一共总结归纳出使用的四大模块,分别为人事数据管理模块、考勤数据管理模块、工资数据管理模块以及工资计算公式设置模块。 1.2.1 人事数据管理模块 人事数据管理模块是企业基础性资料信息的体现,它主要功能是统计、管理员工个人和相关部门的信息。员工种类分为在职人员和退休人员。企业内部的人事档案等相关材料都是依靠人事数据管理模块来进行的,每当公司有新招聘的员工入职,都需要对该名新员工进行人事数据的登记与记录,并记录入职日期,每年应自动更新员工工龄。每个员工都应具有唯一员工编号,员工编号由两部分组成,第一部分为入职年份,第二部分为首次入职部门代号,第三部分为顺序号,例如2000010001表示为该员工为2000年入职,首次入职的部门编号为01,是第一位员工。员工的编号保持不变,直到退休。当员工处于离职、退休等工作状态,需要对人事数据做到及时更新、修改、删除等操作,并加以记录。员工的个人信息应真实可靠,只有人事部管理员有修改信息权限。但修改权限不可随意使用,需经过层层审批批准才可使用。当员工从在职状态处于退休状态时,应记录下退休日期,以便工资数据管理使用。该模块功能如图所示: 图 1 人事数据管理模块结构图 1.2.2 考勤数据管理模块 考勤数据管理模块是记录员工每日出勤状态,根据签到与签退时间来判断是否为早退、迟到或缺勤等违规状态[5]。与此同时,也将记录员工的加班时间、请假时间,以此为依据,对员工进行奖罚。本数据库设计只针对月考勤数据做相关分析,以月考勤数据来继续展开设计。其中加班时间以小时为计数单位,请假时间以天为计数单位,其中规定每月可有两天带薪休班机会[6]。 1.2.3 工资数据管理模块 工资数据管理模块是主要包括在职员工与退休员工的工资的数据录入、查询显示和工资打印。由财务部管理员统一统计与录入。在职员工每月工资主要由基本工资、工龄补贴、绩效工资、考勤奖罚、五险一金和个人所得税构成[2]。工龄补贴主要规则为: 1.在本公司连续工作满一年的员工每月工龄工资为¥50元整。 2.在本公司连续工作满两年的员工每月工龄工资为¥100元整。 3.在本公司连续工作满三年的员工每月工龄工资为¥150元整。

Qt中QIcon图标设置(标题、菜单栏、工具栏、状态栏图标)

1 exe程序图标概述 在 Windows 操作系统中,程序图标一般会涉及三个地方; (1) 可执行程序(以及对应的快捷方式)的图标 (2) 程序界面标题栏图标 (3)程序在任务栏中的图标 2 icon图标文件制作方法 参考:ICO图标在线转换_ICO图标制作工具_PNG在线转ICO - ICO吧 3 QT QIcon图标设置方法 (1)方法一 【1】在.pro中添加: RC_ICONS = favicon.ico #facicon.ico为图标文件名 【2】代码中设置 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setWindowTitle("ICON SET"); QWidget* w=new QWidget; setCentralWidget(w); setWindowIcon(QIcon("favicon.ico"));//或者 setWindowIcon(QIcon(":/favicon.ico")); } 【3】图标文件放置.pro同级目录 ;也可以根据需要放置其它地方,调整调用路径 【4】显示xxx.exe文件的图标 在项目目录下新建一个txt,并改名为 xxx.rc,我这里是main.rc; 添加如下内容 IDI_ICON1 ICON DISCARDABLE “xxx.ico” 引号里是你的图标名字,我这里是favicon.ico。 IDI_ICON1 ICON DISCARDABLE "favicon.ico" 添加刚才创建的main.rc ,或者直接在pro文件里添加:RC_FILE += main.rc 【5】qmake->构建->运行结果 (2)方法二 【1】通过 Qt Creator 为项目创建一个新的资源文件,如下图所示: 【2】 右键点击创建好的资源文件,选择“Open in Editor”; 选择添加前缀

Python绘制线图之plt.plot()的介绍以及使用

在Python中plt.plot是matplotlib库中的一个函数,用于绘制点和线,并对其样式进行控制,下面这篇文章主要给大家介绍了关于Python绘制线图之plt.plot()的介绍以及使用的相关资料,需要的朋友可以参考下 plt.plot() 是Matplotlib库中用于绘制线图(折线图)的主要函数之一。它的作用是将一组数据点连接起来,以可视化数据的趋势、关系或模式。以下是 plt.plot() 的详细介绍: 1 plt.plot(x, y, fmt, **kwargs) x:表示X轴上的数据点,通常是一个列表、数组或一维序列,用于指定数据点的水平位置。y:表示Y轴上的数据点,通常也是一个列表、数组或一维序列,用于指定数据点的垂直位置。fmt:是一个可选的格式字符串,用于指定线条的样式、标记和颜色。例如,‘ro-’ 表示红色圆点线条。**kwargs:是一系列可选参数,用于进一步自定义线条的属性,如线宽、标记大小、标签等。 以下是一些常用参数和用法: 样式参数(fmt): 格式字符串可以包含一个字符来指定颜色,一个字符来指定标记样式,以及一个字符来指定线条样式。例如,‘r-’ 表示红色实线,‘bo–’ 表示蓝色圆点虚线。 线条样式(linestyle): 使用linestyle参数可以指定线条的样式,如实线(‘-’)、虚线(‘–’)、点划线(‘-.’)等。 标记样式(marker): 使用marker参数可以指定数据点的标记样式,如圆点(‘o’)、方块(‘s’)、星号(‘*’)等。 线条颜色(color): 使用color参数可以指定线条的颜色,可以使用颜色名称(如’red’)、缩写(如’r’)或十六进制颜色码(如’#FF5733’)。 线宽(linewidth): 使用linewidth参数可以指定线条的宽度,以数字表示。 标记大小(markersize): 使用markersize参数可以指定标记的大小,以数字表示。 图例标签(label): 使用label参数可以为线条指定标签,用于创建图例。 其他属性: 还有许多其他属性可用于自定义线图,如透明度、渐变、线型、阴影等。 plt.plot() 不仅可以绘制简单的线图,还可以用于绘制多条线,添加图例、标签、标题,设置坐标轴范围和刻度等。它是Matplotlib中最常用的绘图函数之一,适用于可视化数据集的趋势和关系。 --------------------------------------------------------------- import matplotlib.pyplot as plt #显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 示例数据 x = [1, 2, 3, 4, 5] y = [10, 15, 13, 18, 16] # 绘制线图,并自定义外观 plt.plot( x, # X轴数据 y, # Y轴数据 marker='o', # 标记样式:圆点

JavaSE:继承和多态(下篇)

目录 一、前言 二、多态 (一)多态的概念 (二)多态实现条件 (三)多态的优缺点 三、重写 (一)重写的概念 (二)重写的规则 (三)重写和重载的区别 四、向上转型和向下转型 (一)向上转型 (二)向下转型 五、总结 一、前言 大家好,前几天蜡笔小欣带大家了解并学习了Java中的继承,子类通过extends关键字来继承父类。通过继承,子类可以重写父类的方法,从而实现多态性。今天我们就一起去认识Java中的多态,了解多态的概念,掌握多态的用法,使我们在写程序时更加方便。 二、多态 (一)多态的概念 多态 通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状 态。 举个栗子:打印机的功能是打印文件,那么打印机又分为 彩色打印机和 黑白打印机。 简单来说就是同一件事情,发生在不同对象身上,会产生不同的结果 。 (二)多态实现条件 多态实现的条件: 1. 必须在继承体系下, 2. 子类必须要对父类中方法进行重写, 3. 通过父类的引用调用重写的方法。 下面举个例子让大家更好地理解: 我们先定义一个父类Animal,这个类里面有两个成员变量,一个方法。 class Animal { public String name; public int age; public Animal(String name, int age) { this.name = name; this.age = age; } public void eat() { System.out.println(name + "正在吃东西"); } } 接着我们定义两个子类,分别是Dog和Cat,都继承父类Animal,在这两个类中重写eat()方法。

AI绘画:利用ComfyUI进行文生图操作的完整指南

前言 ComfyUI作为一款基于Stable Diffusion的节点式操作界面,为用户提供了一个更加灵活和高效的文生图(文本生成图像)创作环境。本篇博客将详细介绍如何使用ComfyUI进行文生图操作,无论你是初学者还是有一定基础的用户,都能够通过本指南快速上手。 书接上文,香型大家已经完成了Stablle Difution comfyui的安装。接下来我们通过流程、节点操作等方面。讲解如何利用comfyui进行文生图。 创建文生图流程 1. 大模型加载器 首先,我们需要加载Stable Diffusion的大模型。在ComfyUI中,这可以通过“Checkpoint加载器”节点实现。 右键点击画布空白处,选择“新建节点” -> “加载器” -> “Checkpoint加载器(大模型加载器)”。在“Checkpoint名称”处选择你需要的模型。 2. 文本输入节点(CLIP文本编码器) 接下来,我们需要添加关键词输入节点。在ComfyUI中,正向和反向提示词都通过“CLIP文本编码器”节点输入。 右键点击画布空白处,选择“新建节点” -> “条件” -> “CLIP文本编码器”。添加两个“CLIP文本编码器”节点,分别用于输入正向和反向提示词。通过右键点击节点并选择“标题”来修改节点名称,以便区分正反向提示词。将“Checkpoint加载器”的CLIP连接点与两个“CLIP文本编码器”节点相连。 (因为没有区分正反关键词,我们可以自己去修改名称和颜色用于区分,我们在节点上方“右键——标题”输入名称后确定就可以。修改节点颜色也是“右键——颜色”然后选择颜色就可以了。 这时候我们是不是发现“Checkpoint加载器”和“CLIP文本编码器”上面都有一个同样名称、同样颜色的黄点“CLIP”,我们把它连起来,鼠标放在上面会有“十”字标识,我们左键按住住拖到另一个节点的对应位置就连上了) 3. 采样器 采样器节点用于控制图像生成的具体参数。 右键点击画布空白处,选择“新建节点” -> “采样” -> “采样器”。在采样器节点中,你可以设置随机种子、运行后操作、步数、CFG、采样器、调度器和降噪等参数。将“模型”连接点与“Checkpoint加载器的模型”相连,“正面提示词”和“负面提示词”连接点分别与对应的“CLIP文本编码器”节点相连。 4. 宽高(空Latent) 控制生成图像的宽高。 点击“Latent”连接点,选择“空Latent”添加节点。在“空Latent”节点中设置批次大小(一次生成的图像数量)和其他相关参数。 5. VAE解码 VAE解码节点用于生成图像的潜在表示。 右键点击画布空白处,选择“新建节点” -> “Latent” -> “VAE解码”。将“VAE解码”的“Latent”连接点与采样器的“Latent”连接点相连。如果需要,也可以将“Checkpoint加载器”的“VAE”连接点与VAE解码节点相连。 6. 保存图像 最后,我们需要添加一个节点来保存生成的图像。 右键点击画布空白处,选择“新建节点” -> “图像” -> “保存图像”。保存图像节点会将生成的图像保存到ComfyUI的output文件夹中。 出图操作 完成上述步骤后,你已经成功创建了一个文生图流程。现在可以输入关键词,调整模型和采样参数,然后点击“提示词队列”或使用快捷键“Ctrl+Enter”进行出图操作。 课后小知识 使用快捷键“Ctrl+C”复制节点,“Ctrl+V”粘贴节点,“Ctrl+Shift+V”粘贴带连接线的节点。使用“Shift+鼠标左键点击”进行多选节点,“Ctrl+鼠标左键框选”进行框选节点。使用“Ctrl+鼠标左键”拖动节点以移动多个节点。每个节点都可以在右下角拖拽以调整大小。右键点击空白处选择“新建编组”来对节点进行编组和区分。 通过以上步骤,你现在应该能够熟练地使用ComfyUI进行文生图操作了。详细附件请大家期待下一篇文章refiner细化流程,关注不迷路。随着你对ComfyUI的进一步了解和实践,你将能够更加深入地探索其强大的功能和灵活性,从而创作出更加丰富和个性化的艺术作品。

解决: phpstudy 无法启动 MySQL

一、问题 二、解决方法分类 电脑没有安装 MySQL电脑安装了 MySQL 三、电脑没有安装 MySQL 若还是不行,找到安装的 phpstudy 目录 ---- Extensions ---- MySQL 文件夹中的 my.ini 查看其中的port、basedir、datadir 是否正确 四、电脑安装了MySQL 在桌面找到控制面板 — 点击 — 在搜索栏中搜索服务 — 找到查看本地服务 找到 Mysql ,这里会有两种情况,第一种服务名为 MySQL ,第二种服务名不叫 MySQL 先解决第一种情况:服务名为 MySQL以管理员身份运行 cmd 然后输入以下指令,用来删除 MySQL 服务名 sc delete MySQL MySQL 服务名删除后,用 cd 切换到你安装 MySQL 的 bin 目录下输入以下指令,重新指定 MySQL 的服务名 mysqld --install MySQL5 //这里指定 MySQL5 为新的名字 重启 MySQL net start MySQL5 验证:在桌面找到控制面板 — 点击 — 在搜索栏中搜索服务 — 找到查看本地服务 此时便转变为第二种情况:MySQL 服务名不叫 MySQL方法一:打开 phpstudy — MySQL 的配置 — 修改端口 方法二:在桌面找到控制面板 — 点击 — 在搜索栏中搜索服务 — 找到查看本地服务 — 找到 MySQL 服务 — 关闭所有服务