rust程序设计笔记简记
1 入门 1.1 安装 linux or macos curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh windows 前往 https://www.rust-lang.org/install.html 并按照说明安装 Rust 1.2 更新与卸载 更新:consolerustup update 卸载:rustup self uninstall 2 常见编程概念 2.1 变量与可变性 变量 创建变量:let x = 5 rust变量默认不可变,创建可变变量:let mut x = 5 常量 不允许对常量使用 mut,常量不光默认不可变,它总是不可变 const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3; Rust 对常量的命名约定是在单词之间使用全大写加下划线 在声明它的作用域之中,常量在整个程序生命周期中都有效 变量隐藏 允许在同一作用域内重复声明同名变量,新变量会“覆盖”旧变量,但二者本质上是不同的内存对象。 特性 说明 允许类型变化 新变量可与旧变量类型不同(而 mut 变量无法改变类型)。 作用域隔离 隐藏仅在当前作用域内生效,旧变量在子作用域中仍可访问。 所有权独立 每次隐藏会创建新变量,旧变量的所有权可能被转移或释放。 2.2 数据类型 标量类型 整型 长度 有符号 无符号 8-bit i8 u8 16-bit i16 u16 32-bit i32 u32 64-bit i64 u64 128-bit i128 u128 arch isize usize 2. 浮点型:Rust 的浮点数类型是 f32 和 f64 3. bool型:Rust 中的布尔类型有两个可能的值:true 和 false 4. 字符类型:用单引号声明 char 字面量,而与之相反的是,使用双引号声明字符串字面量。Rust 的 char 类型的大小为四个字节,并代表了一个 Unicode 标量值,这意味着它可以比 ASCII 表示更多内容 复合类型 元组类型 元组是一个将多个其他类型的值组合进一个复合类型的主要方式。元组长度固定:一旦声明,其长度不会增大或缩小。使用.访问元组元素。 数组类型 数组中的每个元素的类型必须相同,Rust 中的数组长度是固定的。 2.3 函数 语句和表达式 语句(Statements)是执行一些操作但不返回值的指令。 表达式(Expressions)计算并产生一个值。 具有返回值的函数 函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return 关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式(不带分号) 2.4 注释 使用// 进行注释 ...
linux文件权限与属性管理
ubuntu文件权限与属性管理 系统:ubuntu2004 平台:腾讯云 时间: 2022/05/25 查看文件/目录属性 $ ll # 查看当前目录内文件属性 $ ll file/path # 查看指定文件/目录内文件属性 修改文件/目录的权限 # chmod [option] file/path # 更改文件/目录的权限 例: chmod u/g/o+x exp # 给exp user/group/other添加执行权限 chmod 111 exp # 给exp 各对象添加执行权限,效果同上 更改文件/目录属主/组 # chgrp [-R] groupname # 更改文件属组,-R递归执行 # chown [-R] username filename # 更改文件属主 username:groupname filename # 更改文件属主和属组 SetUID,SetGID,黏着位权限 当一个可执行程序(二进制文件,下同)具有SetUID权限,用户执行这个程序时,将以这个程序的所有者的身份执行。 设置:chmod u+s [文件];chmod 4xxx [文件] 取消:chmod u-s [文件];chmod xxx [文件] 当一个可执行程序具有SetGID权限,用户执行这个程序是,将以这个程序所属组的身份执行。如果对目录设置SetGID,所有在此目录下创建的文件和目录与此目录在同一个用户组下。 设置:chmod g+s [文件];chmod 2xxx [文件] 取消:chmod g-s [文件];chmod xxx [文件] 如果一个权限为777的目录,被设置了黏着位,每个用户都可以在此目录下创建文件,但是只可以删除自己是所有者的文件。 设置:chmod o+t [目录];chmod 1777 [目录] 取消:chmod o-t [目录];chmod 777 [目录] ACL权限 类windows权限 ...
绿联nas防火墙导致docker网络无法互通
问题描述 设备:绿联nas dxp4800 系统:ugnas pro 绿联新系统在12月份更新后,原本用nginx代理的alist,青龙等服务全都连接不上,在ugnas系统防火墙设置如下: 对外只通过80端口,其他docker服务都只能通过nginx反代访问,系统更新前一直都没问题。 问题排查 经过反复排查发现关闭防火墙后才能打开,ssh登入nas系统后查看iptable, Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 18M 19G DOCKER-USER all -- any any anywhere anywhere ..... Chain DOCKER-USER (1 references) pkts bytes target prot opt in out source destination 19M 20G UG_FORWARD all -- any any anywhere anywhere 300K 21M ACCEPT all -- !docker0 !docker0 anywhere anywhere 2079 553K RETURN all -- any any anywhere anywhere ...... Chain UG_FORWARD (2 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo any anywhere anywhere 64 4737 ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 RETURN tcp -- any any anywhere anywhere multiport dports 29999,29443 0 0 RETURN tcp -- any any anywhere anywhere multiport dports ssh,20022 0 0 RETURN tcp -- any any anywhere anywhere tcp dpt:microsoft-ds 0 0 RETURN tcp -- any any anywhere anywhere multiport dports 137:netbios-ssn 0 0 RETURN udp -- any any anywhere anywhere multiport dports 80,https 2 128 RETURN tcp -- any any anywhere anywhere multiport dports http,https 0 0 RETURN udp -- any any anywhere anywhere multiport dports 20000:29999 0 0 RETURN tcp -- any any anywhere anywhere multiport dports 20000:29999 200 12600 DROP all -- any any anywhere anywhere 注意绿联防火墙规则最后的DROP,导致后面的docker规则被跳过 ...
git基本操作
参考书:git book git使用记录: 查看所有的配置以及它们所在的文件:git config --list --show-origin 配置用户名、邮箱和编辑器: git config --global user.name "John Doe" git config --global user.email johndoe@example.com git config --global core.editor nvim 查看简洁的文件状态:git status -s 不追踪指定文件.gitignore:link 尚未暂存的文件更新了哪些部分:git diff 查看已暂存的将要添加到下次提交里的内容:git diff --staged/--cached 在工作区或暂存区移除文件git rm:link 查看提交历史git log:link 用新提交覆盖上一个提交:git commit --amend 基本撤销操作:link git的分支的新建与合并:link git分支变基:link 引用日志和祖先引用 查看引用日志(存储本地):git reflog ^:父引用,HEAD^第一个父引用,HEAD^2第二个父引用 ~:HEAD~父引用,HEAD~2祖父引用,都表示第一个父引用,相当于默认加一个^ 提交区间 贮存与清理:link 贮存当前目录:git stash 查看贮存列表:git stash list 应用贮存:git stash apply,git stash apply stash@{2},应用但不出栈git stash apply --index 重写历史rebase 重置揭密reset:reset 命令会以特定的顺序重写这三棵树,在你指定以下选项时停止: 移动 HEAD 分支的指向 (若指定了 --soft,则到此停止):git reset --soft HEAD~ 使索引(暂存区)看起来像 HEAD (默认行为,若未指定 --hard,则到此停止) 使工作目录看起来像索引 git子模块 添加子模块:git submodule add https://github.com/chaconinc/DbConnector 克隆含子模块的目录: 克隆同时克隆子模块: >git clone --recurse-submodules https://github.com/chaconinc/MainProject 克隆项目后进入子模块文件夹: git submodule update --init git submodule update --init --recursive ...
毕业要求
一、基本要求 学术性 论文需体现学生对学科领域的研究能力,具有理论深度或实践价值。 需在前人研究基础上提出新观点、新方法或新结论,体现创新性。 规范性 符合学术写作规范,逻辑清晰,结构严谨,数据真实可靠。 引用文献需注明来源,严禁抄袭、剽窃或篡改数据。 工作量 论文篇幅通常要求3-5万字(具体因学科而异)。 研究周期一般不低于1年,需体现系统性研究过程。 二、论文结构 硕士论文通常包括以下部分: 封面:学校统一模板,包含论文题目、作者、导师、学科等信息。 中英文摘要:简要概括研究背景、方法、结果和结论(300-500字)。 目录:章节标题及页码。 正文(核心部分): 第一章 绪论:研究背景、意义、文献综述、研究目标与内容。 第二章 理论与方法:理论基础、研究方法或技术路线。 第三章 实验/数据分析:研究过程、数据采集与分析。 第四章 结果与讨论:研究发现及与已有成果的对比分析。 第五章 结论与展望:总结研究成果,提出不足与未来方向。 参考文献:按学校格式(如GB/T 7714、APA等)规范列出。 致谢:对导师、同行及资助单位的感谢。 附录(可选):原始数据、代码、补充材料等。 三、格式要求 排版 字体:中文一般用宋体,英文用Times New Roman,字号小四。 行距:1.5倍行距,页边距按学校模板设置。 页眉页脚:包含章节标题或页码。 图表公式 图表需清晰编号(如图1-1、表2-1),标题置于图下方、表上方。 公式需用公式编辑器编写,按章编号(如式3-1)。 引用规范 直接引用需标注页码(如:作者, 年份, p.XX)。 参考文献需包含近5年内的国内外核心期刊文献,数量一般30-50篇。 四、查重要求 重复率标准 多数211高校要求查重率≤10%-15%(以知网检测为准)。 核心章节(如绪论、理论部分)需避免大段重复。 查重范围 包括正文、摘要、参考文献(部分学校可能不查参考文献)。 五、答辩与评审 盲审要求 部分学校要求论文送校外专家盲审,通过后方可答辩。 盲审未通过需修改后重新提交。 答辩流程 学生需准备PPT,陈述研究内容(15-20分钟)。 答辩委员会提问(10-15分钟),可能要求现场修改论文。 六、时间节点(示例) 开题报告:第2-3学期完成,明确研究计划。 中期检查:第4学期,汇报进展并调整方向。 预答辩:第5学期,模拟正式答辩。 正式答辩:第6学期,通过后提交终稿。 七、注意事项 选题建议 结合导师研究方向,选择可操作性强的题目。 避免过于宽泛或冷门,需保证数据可获取。 写作建议 尽早完成初稿,留足修改时间。 多与导师沟通,避免方向性错误。 ...
docker compose 忘记改service名称引发的问题
问题描述 本来有一个通过docker compose的alist项目,其docker-compose.yaml如下: services: alist: image: "xhofe/alist:latest" container_name: alist volumes: - "./alist:/opt/alist/data" environment: - PUID=0 - PGID=0 - UMASK=022 - TZ=Asia/Shanghai restart: unless-stopped networks: - alist_default networks: alist_default: name: my_bridge external: true 后来因为一些原因想另外新建一个alist容器,所为把原来docker-compose.yaml复制一份并改了一下container_name为alist-other。本来一些都好好的,之后突然发现原先的alist容器无法登录。具体为右上角会提示登录成功和登录无效两个弹窗,直接进入主页则有时成功,有时不成功。 问题分析 由于我是能过nginx来反向代理来访问这两个alist服务,所以最开始怀疑是nginx配置错了,以为nginx为这两个服务配置做了负载均衡,才会一会返回alist的内容,一会返回alist-other的内容,贴上nginx配置参考: map $host $upstream { default ""; alist.example.com alist:5244; other.example.com alist-other:5244; } server { listen 80; resolver 127.0.0.11; server_name *.example.com; location / { if ($upstream = "") { return 404; } # add_header X-Upstream $upstream; proxy_pass http://$upstream; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Range $http_range; proxy_set_header If-Range $http_if_range; proxy_redirect off; } } 其中使用alist.example.com可以正常使用,用other.example.com会出问题 ...
一些解决我问题的链接记录
hugo将baseURL设置为""后编译错误问题:点击 windows的smb一直显示有连接未关闭:点击 javascript异步:点击 多文件使用sed修改内容xargs:点击 python URL解析与拼接:点击 python 命令行参数解析:点击 ssh权限设置:点击 macos在vscode中使用neovim不能长按k,j:点击 内网穿透与nat网络类型:点击 git修改创建的默认分支为main: 点击 nginx中server_name匹配优先级:点击 python读取yaml科学计数法错误:点击 rsync基本使用:rsync 用法教程 - 阮一峰的网络日志,Arch Linux中文维基 frp安装与配置:概览 | frp
FFmpeg的基本使用
文档 FFmpeg 介绍 ffmpeg 是一款通用的媒体转换器。它能读取各种输入(包括实时抓取/录制设备),并将其过滤和转码为大量输出格式。 转码程序工作图 muxer:即多路复用器,主要用于将音频流、视频流、字幕流等不同的数据流进行混合,生成一个包含所有信息的单一数据流。如mp4等格式 demuxer:对视频进行解封装 工具 ffmpeg:主程序 ffplay:简单的音视频查看工具 ffprobe:查看音视频信息工具 示例 查看文件信息:ffmpeg -i demo.mp4或ffprobe demo.mp4,添加-hide_banner可以隐藏版本,配置参数等信息 转换文件格式:ffmpeg -i demo.mp4 demo.mov 获取一张视频截图:ffmpeg -i demo.mp4 -ss 00:00:01 -f image2 -vframes 1 out.jpg 视频添加水印:`ffmpeg -i demo.mp4 -i logo.png -filter_complex “overlay=x:y out.mp4” 视频去除水印:ffmpeg -i demo.mp4 -vf "delogo=x=xxx:y=xxx:w=xxx:h=xxx:show=0" -c:a copy out.mp4 更改视频分辨率:ffmpeg -i demo.mp4 -vf scale=-1:720 删除视频中的音频:ffmpeg -i demo.mp4 -an out.mp4 视频转gif图:ffmpeg -i demo.mp4 -ss 00:00:30 -t3 -vf "fps=24,scale=600:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" test.gif 参考 知乎:FFMPEG详解(完整版) B站:FFmpeg 速成教学 视频转gif图 ...
linux通过网桥将多网口主机当交换机
在 Arch Linux 中将多网口主机配置为交换机可以通过创建一个网桥来实现 步骤 1:安装必要的工具 确保系统上已安装 bridge-utils,通常情况下它默认包含在 Arch Linux 中。如果没有,可以使用以下命令安装它: sudo pacman -S bridge-utils 步骤 2:创建网桥 编辑网络配置文件:在 Arch Linux 中,可以使用 systemd 的网络配置方法或 netctl。这里我们将使用 systemd-networkd。 创建网桥配置文件,例如 /etc/systemd/network/10-br0.netdev: [NetDev] Name=br0 Kind=bridge 添加物理接口到网桥:例如,假设有两个接口:eth0 和 eth1。需要分别为这些接口创建配置文件,例如: /etc/systemd/network/20-eth0.network: [Match] Name=eth0 [Network] Bridge=br0 /etc/systemd/network/20-eth1.network: [Match] Name=eth1 [Network] Bridge=br0 配置网桥的IP地址:如果网桥需要获取一个静态IP地址,可以创建另一个配置文件,例如 /etc/systemd/network/30-br0.network: [Match] Name=br0 [Network] Address=192.168.1.100/24 # 请根据的网络环境调整 Gateway=192.168.1.1 DNS=8.8.8.8 如果想要使用 DHCP,可以设置: [Match] Name=br0 [Network] DHCP=yes 步骤 3:启用并启动 systemd-networkd 启用 systemd-networkd 服务: sudo systemctl enable systemd-networkd sudo systemctl start systemd-networkd 启用和启动 systemd-resolved 服务(如果使用 DNS): ...
linux笔记
linux笔记 Linux 教程 | 菜鸟教程 (runoob.com) 1. 字符/图形界面 1. 字符/图形界面的切换 计算机启动后默认进入图形界面登陆,若在进入字符界面,在图形登录界面使用Ctrl+Alt+F3; 若需从字符界面返回图形界面,使用Ctrl+Alt+F1 2. 查看/修改默认登陆界面 查看默认登陆界面:systemctl get-default 修改默认登陆界面:sudo systemctl set-default [登陆状态] 登陆状态: graphical.target 表示图形界面 multi-user.target 表示字符界面 3. 字符界面关闭和重启(需要root权限) 1. shutdown 命令格式:shutdown [选项] [时间] [警告信息] 最常用: $ sudo shutdown(一分钟后关机) 选项 选项含义 -k 并不会关机,只发出警告信息给所有用户 -r 重新启动系统 -h 关闭系统 -c 取消运行shutdown 例: 发出关机警告信息,并不会关机:$sudo shutdown -k 立即关机:$sudo shutdown –h now 45分钟后关闭计算机:$sudo shutdown –h +45 重启计算机并发出警告:$sudo shutdown –r now "system will be reboot now." 定时在1点38分重启计算机:$sudo shutdown –r 01:38 2. halt 命令格式:halt [选项] ...