VMware虚拟机VMware下载(需注册登录):https://support.broadcom.com/group/ecx/productdownloads?subfamily=VMware%20Workstation%20Pro,这里选择VMware Workstation Pro 17.0 for Personal Use (Windows)进行下载,版本为17.5.2(2024-05-10)。整个下载过程比较繁琐,不想折腾的话,可直接这里下载:https://www.123pan.com/s/jersTd-n6eyhSHA256:2c3a40993a450dc9a059563d07664fc0fb85ae398a57d22b1b4bf0e602417bf7(生成指定哈希值:certutil -hashfile 文件名 sha256)MD5:c0a0353c1dade2089b55ce04ca942964(生成指定哈希值:certutil -hashfile 文件名 md5)创建虚拟机打开VMware,右键「我的计算机」→「新建文件夹」,设置为RockyLinux。「文件」→「
Python编程中一般无须关心变量存亡,也不用关心内存管理。Python使用引用计数记录所有对象的引用数,当对象引用数变为0,它就会被垃圾回收GC。计数增加:赋值给其它变量就增加引用计数实参传参计数减少:函数运行结束,局部变量就会被自动销毁,对象引用计数减少变量被赋值给其它对象import sys x = [] # 引用计数为1 print(sys.getrefcount(x)) # 引用计数为2,函数调用加1,用完减1 y = x print(sys.getrefcount(x)) # 引用计数为3
概述什么是模块化将程序文件依据一定规则拆分成多个文件,这种编码方式就是模块化的编码方式拆分出来的每个文件就是一个模块,模块中的数据都是私有的,模块之间互相隔离同时也能通过一些手段,把模块内的指定数据“交出去”,供其他模块使用为什么需要模块化随着应用的复杂度越来越高,其代码量和文件数量都会急剧增加,会逐渐引发以下问题:全局污染问题依赖混乱问题数据安全问题有哪些模块化规范?随着时间的推移,针对 JavaScript 的不同运行环境,相继出现了多种模块化规范,按时间排序,分别为:CommonJS 服务端应用广泛AMDCMDES6 模块化 浏览器端应用广泛导入与导出模块化的核心思想是:模块之间是隔离的,通过导入和导出进行数据和功能的共享。导出(暴露):模块公开其内部的一部分(如变量、函数等),使这些内容可以被其他模块使用导入(引入):模块引入和使用其他模块导出的内容,以重用代码和功能CommonJS 规范导出数据在 CommonJS 标准中,导出数据有两种方式:第一种方式:module.exports = value第二种方式:exports.name = value// a.js const
100门有100扇门,最初都是关闭的。你要通过这些门100次,第一次通过,访问每一扇门并“切换”门(如果门关闭,打开它;如果它打开,关闭它)。第二次,只访问2倍数的门(即门#2 #4 #6...)。第三次,只访问3倍数的门(即门#3 #6 #9...),直到只访问100倍数的门。实现一个函数,以确定最后一次通过后门的状态。以数组形式返回最终结果,数组中只包含打开的门的门号。function getFinalOpenedDoors(numDoors) { let doors = [] for (let i = 0; i < 100; i++) doors[i] = false for (let i = 1; i <= 100; i++) for (let i2 = i - 1; i2 < 100; i2 += i) doors[i2] = !doors[i2] for (let i = 0; i < 100; i++) doors[i] = doors[i] ? i + 1 : 0 return doors.filter((door) =
Vue 3简介Vue 3中文官网:https://cn.vuejs.org/官方发版地址:https://github.com/vuejs/core/releases截止2024年7月17日,最新的公开版本为:v3.4.32。创建Vue 3工程前提条件:已安装 18.3 或更高版本的Node.js安装好pnpm:npm i -g pnpmVite是新一代前端构建工具,官方推荐基于Vite创建项目,具体操作如下。创建项目命令:pnpm create vue@latest,将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工具。具体配置:√ 请输入项目名称: ... vue-project √ 是否使用 TypeScript 语法? ... 是 √ 是否启用 JSX 支持? ... 否 √ 是否引入 Vue Router 进行单页面应用开发? ... 否 √ 是否引入 Pinia 用于状态管理? ... 否 √ 是否引入 Vitest 用于单元测试? ... 否 √ 是否要引入一款端到端(End to End)测试工具? » 不需要 √ 是否引入 ESLint 用于代码质
什么是构建工具首先,看下企业级项目里可能会用到哪些功能:TypeScript:如果遇到ts文件需要使用tsc将TypeScript代码转换为js代码React/Vue:安装react-compiler/vue-complier,将jsx文件或者vue文件转换为render函数less/sass/postcss/component-style:需要安装less-loader,sass-loader等一系列编译工具语法降级:babel将ES新语法转换为旧版浏览器可接受语法体积优化:uglifyjs将代码进行压缩,变成体积更小性能更高的文件而浏览器只认识html,css,js,所以就需要一个东西能够把这些功能集成到一起,这个东西就是构建工具。将我们写的浏览器不认识的代码,交给构建工具进行编译处理的过程叫做打包,打包完成以后会给出浏览器可以认识的文件。构建工具承担了哪些脏活累活:模块化开发支持。支持直接从node_modules里引入代码 + 多种模块化支持处理代码兼容性。比如babel语法降级,less/ts语法转换(不是构建工具做的,构建工具只是将这些语法对应的处理工具集成进来自动化处理)
发行版信息:lsb_release -a。apt命令apt和apt-getapt 命令比 apt-get 更新。作为普通用户,还是应该首先使用 apt,具体看个人习惯。更新系统更新apt资源列表:apt update,没有真正对系统执行更新。apt upgrade将已安装软件包实际升级到最新版本。卸载软件获取 Ubuntu 软件包列表:sudo apt list --installed。删除已安装软件包(保留配置文件):sudo apt remove package_name,使用该命令卸载软件包,可能会留下一些配置文件。删除已安装软件包(不保留配置文件)请使用purge:sudo apt purge package_name。删除为了满足依赖而安装的,但现在不再需要的软件包。:sudo apt autoremove。清除缓存apt clean命令清除遗留在 /var/cache 中已取回包文件的本地仓库。它清除的目录是 /var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/。它留在 /var/cache/apt/arch
三范式第一范式:任何一张表都应该有主键,每个字段是原子性的不能再分。第二范式:建立在第一范式基础上,另外要求所有非主键字段完全依赖主键,不能产生部分依赖。学生编号(PK)教师编号(PK)学生姓名教师姓名10011张三王老师10022李四赵老师10031王五王老师10012张三赵老师上表虽然符合第一范式,但违背第二范式,学生姓名、老师姓名都产生了部分依赖,导致数据冗余。第三范式:建立在第二范式基础上,非主键字段不能传递依赖于主键字段。学生编号(PK)学生姓名班级编号班级姓名1001张三1一年一班1002李四2一年二班1003王五3一年三班1004赵六3一年三班上表因为产生了传递依赖,导致班级名称冗余。表设计一对多(学校 - 学生):一对多两张表,多的表加外键。多对多(学生 - 课程):多对多三张表,关系表加外键。一对一第一种方案:主键共享。hid(主键)hname1张三2李四3王五wid(主键+外键)wname1小花2小兰3小红一对一第二种方案:外键唯一。hid(主键)hname1张三2李四3王五wid(主键)wnamehid(外键+unique)1小花12小兰23小红3最终设计以满足客
字符串相关在MySQL中,字符串既可以使用双引号也可以使用单引号,但建议使用单引号,因为单引号属于标准SQL。upper():转大写,转小写是lower()SELECT UPPER('abc');ABClength():获取字节长度SELECT LENGTH('张三123');9char_length():获取字符个数SELECT CHAR_LENGTH('张三123');5concat():字符串拼接,MySQL8之后,||只作为逻辑运算符使用,也不可以使用+进行字符串拼接select concat('123', 'abc');123abclpad():左填充,右填充为rpad()select lpad('abc', 5, '-');--abctrim():去除首尾空白,也可去除指定的前缀后缀select trim(' abc 123 ');abc 123select trim(leading '0' from '000111000'); -- 111000select trim(trailing '0' from '000111000'); -- 000111select trim
中括号中括号有两种使用方法:用于比较操作符:比较两个值大小或者判断两个值是否相等。例如:-eq:判断两个值是否相等(equal to),例如[ $a -eq $b ]-ne:判断两个值是否不相等(not equal to),例如[ $a -ne $b ]-lt:判断左边的值是否小于右边的值(less than),例如[ $a -lt $b ]-gt:判断左边的值是否大于右边的值(greater than),例如[ $a -gt $b ]-le:判断左边的值是否小于等于右边的值(less than or equal to),例如[ $a -le $b ]-ge:判断左边的值是否大于等于右边的值(greater than or equal to),例如[ $a -ge $b ]用于测试表达式:测试某个表达式是否成立。例如:-f:判断某个文件是否存在并且是一个常规文件(regular file),例如[ -f file.txt ]-d:判断某个文件是否存在并且是一个目录(directory),例如[ -d dir ]-z:判断某个字符串是否为空(zero length),例如[ -z &qu
在Linux中,有三种类型的Shell变量,包括:环境变量本地变量特殊变量变量名命名规范:环境变量一般全部大写,单词和单词之间采用下划线分割:JAVA_HOME本地变量一般小写环境变量环境变量是在Shell会话外设置的,可由多个脚本和进程共享。在Linux中,环境变量没有固定值,而是在需要时通过脚本或命令进行设置或更新,系统环境变量一般在/etc/profile文件中设置。查看当前所有环境变量:printenv或env。设置一个新环境变量,使用export命令,例如:export MY_VAR="Hello World"。要使用环境变量,必须在变量名称前加上$符号,例如:echo $MY_VAR。本地变量本地变量是一种临时变量,在Shell会话中设置和使用。与环境变量不同,本地变量仅限于当前Shell会话,不会被其他脚本或命令使用。设置本地变量可以使用“=”号操作符,例如:MY_VAR="Hello World"。类似于环境变量,在使用本地变量时,变量名称前必须加上$符号。例如:echo $MY_VAR。特殊变量特殊变量是在Shell中预定义的变
输出重定向凡是在控制台上能够打印出来的,都可以重定向,将其打印到控制台的行为重定向到文件或其它设备。ls -l > ls.txt执行结果是将输出重定向到ls.txt文件(覆盖写),追加到文件为:ls -l >> ls.txt。输入重定向<:将文件内容输入给某个命令,这是一种默认行为,通常<可省略。例如,a.txt文件内容如下:10 5 2 44 68 51将a.txt文件中的内容输入给sort命令:sort -n < ls.txt。通常<可省略,也就是:sort -n ls.txt。<<:可以接收键盘输入,例如,EOF是一个结束符,随意的,当键盘输入EOF之后,键盘输入则自动结束,然后sort命令将键盘输入的内容进行排序。# sort -n << EOF > 10 > 3 > 6 > 99 > 54 > 657 > 1 > EOF 1 3 6 10 54 99 657
软链接软链接,也称为符号链接,类似于Windows操作系统中的快捷方式,作用是方便操作。有些经常被操作的文件,藏的很深,每一次找很麻烦,怎么办?可以给这些经常操作的文件创建软链接,通过软链接快捷的操作目标文件。ln命令用来创建软链接:ln -s a.txt a,表示给a.txt文件创建一个a的快捷方式(软链接)。软链接和目标文件实际上是两个文件,在软链接中存储的是目标文件的路径。软链接关联的目标文件如果被删除,软链接这个快捷方式也就失效了。可以通过查看inode号,来证明软链接和目标文件是两个不同的文件。硬链接创建硬链接:ln a.txt a,不加-s是创建硬链接。硬链接和原文件inode号一致,说明是同一个文件。硬链接特点:主要是用来做:重要文件备份目标文件删除之后,硬链接只要在,文件其实就没有被删除。总结一句话:目标文件或者硬链接只要有一个存在,文件就没有被真正的删除硬链接机制和复制粘贴还不一样,复制粘贴之后的文件,修改其中之一,另一个不会变,但是硬链接就不一样了。通过操作硬链接,目标文件会改变;操作目标文件,硬链接也会改变
升级R在Windows环境下,使用installr包自动将R升级到最新版本,并将旧版本安装的R包复制到新版本R中,注意根据需求进行选择。建议在RGui中更新R,前往RGui,使用以下命令,安装并加载一个名为installr的包。install.packages("installr") library("installr")接着,运行installr::updateR()命令,并等待对话框出现。升级RStudio检查RStudio更新:Help -> Check for Updates
pyttsx3是Python文本转语音第三方库,与其他库不同,它可以脱机工作。它基于底层的TTS(Text-to-Speech)引擎,并提供了简单易用的接口,可以将文本转换为声音输出。安装安装pyttsx3:pip install pyttsx3,pip下载速度慢的话,可通过修改pip镜像源加快模块下载速度。使用import cowsay import pyttsx3 this = input("What's this? ") cowsay.cow(this) engine = pyttsx3.init() # 初始化语音引擎 engine.setProperty("rate", 150) # 设置语速 engine.setProperty("volume", 0.8) # 设置音量 voices = engine.getProperty("voices") engine.setProperty("voice", voices[0].id) # 设置语音合成器 engin
之前介绍过利用Python实现图片翻转图片裁剪图片拼接,使用的第三方库是matplotlib,今天来学习另一个用于图像处理的第三方库Pillow。PillowPIL( Python Imaging Library)是一个Python第三方图像处理库,由于其功能丰富,API简洁易用,因此深受好评,是Python中最常用且最受欢迎的图像处理库之一。但是,PIL库更新缓慢。于是一群Python社区志愿者在PIL库的基础上开发了一个支持Python3版本的图像处理库,它就是Pillow。安装安装Pillow:pip install Pillow,pip下载速度慢的话,可通过修改pip镜像源加快模块下载速度。使用文件hello.py:import sys from PIL import Image images = [] for arg in sys.argv[1:]: images.append(Image.open(arg)) images[0].save( "merged.gif", save_all=True, append_images=imag
之前有用到Python自带的测试框架unittest,听说,Python中最火的第三方开源测试框架是pytest,我们也稍微来学习一下吧!介绍pytest是一个非常成熟的全功能Python测试框架,简单灵活,容易上手。文档:http://docs.pytest.org/en/latest/contents.htmlGithub地址:https://github.com/pytest-dev/pytest/安装安装pytest:pip install pytest,pip下载速度慢的话,可通过修改pip镜像源加快模块下载速度。查看pytest版本:pytest --version。使用文件hello.py:def hello(to="world"): return f"hello, {to}" print(hello()) print(hello("python"))文件test_hello.py:from hello import hello def test_hello(): assert hello()
行列设置import pandas as pd print(pd.get_option("display.max_columns")) # 显示列数 print(pd.get_option("display.max_rows")) # 显示行数 pd.set_option("display.max_columns", 1000) # 如果设置成 None 则显示所有 pd.set_option("display.max_rows", 1000) pd.reset_option("display.max_columns") # 重置为默认值 pd.reset_option("display.max_rows") print(pd.get_option("display.max_colwidth")) # 默认列宽50字符 pd.set_option("colheader_justify", "left&q
Go内置flag包实现了对命令行参数的解析,使得开发命令行工具更为简单。package main import ( "flag" "fmt" ) // 定义命令行参数 var n1 = flag.Int("n1", 0, "第一个整数") var n2 = flag.Int("n2", 0, "第二个整数") func main() { flag.Parse() // 解析命令行参数 sum := *n1 + *n2 // 计算和 fmt.Printf("%d + %d = %d", *n1, *n2, sum) }在命令行中运行该程序,并指定命令行参数:go run main.go --n1=1 --n2=2,输出结果为:1 + 2 = 3
RPC协议Remote Procedure Call Protocol,远程过程调用协议,IPC是进程间通信,RPC是远程进程通信。服务端和客户端编码实现服务端:package main import ( "fmt" "net" "net/rpc" ) // 定义类对象 type World struct { } // 绑定类方法 func (this *World) SayHello(name string, resp *string) error { *resp = name + " 你好!" return nil } func main() { // 1. 注册RPC服务,绑定对象方法 err := rpc.RegisterName("hello", new(World)) if err != nil { fmt.Println("注册RPC服务失败:", err) return } // 2.
IP地址在IP地址中,全0代表网络地址,全1代表广播地址,这两个特殊用途IP地址,不可作为主机地址使用。为了科学使用IP地址,减少浪费,将IP地址根据使用数量级划分为:A类:1.0.0.1~126.255.255.254,有126个网络,即共有2^7-2个网络号,每个网络最多有2^24-2个主机地址。127开头的地址可以说是A类的保留地址,用于本地软件环回测试B类:128.0.0.1~191.255.255.254C类:192.0.0.1~223.255.255.254D类:224.0.0.0~239.255.255.255E类:240.0.0.1~255.255.255.254,科研用常见为ABC类,DE类不常见 0 1 7 8 15 16 23 24 31 A: 0 网络地址 主机地址--------------------(24) B: 1 0 网络地址---(14) 主机地址----------(16) C: 1 1 0 网络地址------------(21) 主机地址(8) D: 1 1 1 0 组播、路由器修改-------
三毛
头发渐少,仅剩三根