奇技淫巧第9期

news2025/1/19 23:14:36

今天回顾一下 5~12 月所遇到的零碎知识点。

文章目录

  • 歪门邪道
    • 优雅删除“学习资料”
    • 快速下载 vscode
    • 两种硬盘格式
    • zotero在word中插入参考文献
    • markdown 下划线
    • 查看 CPU Linux 命令
    • postgres 无法通过 root 用户操作
    • bash 初学者礼包
    • git
    • win 11 edge 浏览器0x80190001 报错
  • python 强化
    • python 中的省略号
    • 捕获 warning 输出日志
    • CPU 资源不够
    • 安全创建目录
    • sys.argv
    • argparse
    • wandb
    • pip 源更换
    • 无损迁移 conda 环境
    • 关于matplotlib legend的一些参数
    • 极坐标系下的等高热力图
    • seaborn set 参数
    • matplotlib 保存图片防止截断
    • conda 初始化
    • conda 安装小窍门
    • cudnn 下载
    • 安装 pytorch
    • cuda 和 cudnn 联系和区别
    • npz 文件
    • numpy 向量补充知识
    • 查看模型参数
    • tensorboard 小知识
    • torch_scatter.scatter()的使用方法
    • cycle_momentum 报错 (一些废话)
    • 模型跑崩的表现 (一些废话)
    • python 路径搜索相关知识
    • seed(42)
    • EMA
    • segmentation error
    • dataloader 报错
    • pytorch lightning 单机多卡报错
  • Latex
    • 超大写
    • 抽象字体
  • 领域知识
    • ase.db
    • 贝塞尔函数可视化方法
    • 格式转换

歪门邪道

那些不知道什么时候能再次用上,但确实好用的知识点

优雅删除“学习资料”

月黑风高,当你进入“贤者时间”后,如何删除“学习资料”以消灭作案证据?
简单使用 delete 会将文件移至回收站,需要手动再次清空回收站才能彻底删除,存在一定风险。优雅的老贼则常常采用 shift + delete 的方式一劳永逸。这种方式更适用于批量删除大量小文件,效率高。
(见 https://www.knowbaike.com/it/14929.html )

快速下载 vscode

复制下载链接后,修改服务器地址至国内源即可
https://blog.csdn.net/weixin_46621570/article/details/128007351

两种硬盘格式

修复移动硬盘报错的时候遇到了GPT和MBR两种硬盘格式
https://www.disktool.cn/content-center/difference-between-mbr-and-gpt-1016.html
https://www.knowbaike.com/it/26421.html
省流版:GPT方式更加先进,是MBR迭代后的产物
性能区别:
MBR分区表最多只能识别2TB左右的空间,大于2TB的容量将无法识别从而导致硬盘空间浪费,而GPT分区表则能够识别2TB以上的硬盘空间。

zotero在word中插入参考文献

正确的插入格式:
https://zhuanlan.zhihu.com/p/570641329
注意到,zotero默认的添加文献的方式(在网页PDF上直接点收藏)容易漏时间,出版号等关键信息,最完备的方式是去到文献刊发的网站,找其对应的 bibtex,然后再添加
https://blog.csdn.net/aiboom/article/details/128651501
https://blog.csdn.net/aiboom/article/details/128651501

markdown 下划线

https://www.zhihu.com/question/28375977
markdown 并无原生的下划线语法,可使用斜体替代

查看 CPU Linux 命令

https://zhuanlan.zhihu.com/p/372564248
查看物理 CPU,每个 CPU 的核数
查看逻辑 CPU(线程数)

postgres 无法通过 root 用户操作

https://blog.csdn.net/li_101357/article/details/69367457
Linux 创建新用户
postgres 等数据库不能在 root 用户下操作


https://zhuanlan.zhihu.com/p/205217949
创建新用户后shell无法自动补全命令或使用基本的shell命令
使用root用户查看passwd文件,可以发现默认的shell 是/bin/sh,将其修改为/bin/bash 后即可


su postgres -c “echo $original_user > new.txt”
使用 su 切换用户
使用 -c 在切换用户之后执行一条命令
两个引号将将要执行的命令裹起来
感谢llm
在这里插入图片描述

bash 初学者礼包

如果你是 bash 初学者,发现网上的简单 bash 脚本均无法运行,此时你需要检查测试文件是否是 unix 文件
修改文件为 unix 文件的命令:
https://blog.csdn.net/HYZX_9987/article/details/120061672
‘.sh’文件是如何运行的
https://baijiahao.baidu.com/s?id=1773849793111298095&wfr=spider&for=pc
${} 是如何运行的
https://blog.csdn.net/qq_25518029/article/details/119564512
bash和shell的区别
https://blog.csdn.net/qq_28284627/article/details/124509159
bash语言中的 if else 语句
https://zhuanlan.zhihu.com/p/649417352
冷知识:
在Linux 和 UNIX系统里可以使用多种不同的shell可以使用。最常用的几种是 Bourne shell (sh), C shell (csh), 和 Korn shell (ksh)。
Bourne Again shell ( bash), 正如它的名字所暗示的,是 Bourne shell 的扩展。
https://blog.csdn.net/wenlifu71022/article/details/4069929

git

懒人用 git desktop
但 github desktop 不能指定分支clone
这个问题似乎并没有解决方案
最后是使用命令行的git clone加上-b参数,克隆指定分支,然后打开github desktop添加local仓库

另外,github在和私人仓库进行交互时,有可能会弹出账户密码的对话框。对此,一定要检查,自己想要clone的仓库的地址,注意要去掉特定分支后缀(为此折腾了快一小时)


使用代理 https://ghproxy.com/ 加速 github clone 的速度

注意,第一次使用命令行 git 时需要配置链接秘钥。
https://blog.csdn.net/qq_35206244/article/details/97698815
如果是私密仓库,需要配置一个 personal token
https://github.com/settings/tokens


修改远程仓库地址

git remote set-url origin URL

https://blog.csdn.net/yihanzhi/article/details/78801027

win 11 edge 浏览器0x80190001 报错

https://zhuanlan.zhihu.com/p/632718025
使用 Fiddler 解决win11 edge 登录时报错08x…1的问题
注意,这个fiddler似乎只会捕捉一次报错,每次输完密码,点击继续等等之后,fiddler页面会出现一个 error 的 banner,在报错前即时点一下这个banner就可以了

python 强化

python 中的省略号

https://zhuanlan.zhihu.com/p/489862322
省略号在 Python 中的应用:

  1. 类型提示。
  2. 相当于 pass。
  3. numpy 中做索引

捕获 warning 输出日志

使用 contextlib.redirect_stdout 或 contextlib.redirect_stderr 能够捕获异常和输出,并将其输出至指定位置
https://stackoverflow.com/questions/22822267/how-to-capture-print-output-of-another-module

CPU 资源不够

The paging file is too small for this operation to complete. Error loading “C:\Users\16608\AppData\Roaming\Python\Python310\site-packages\torch\lib\cufft64_10.dll” or one of its dependencies.

网络太大,限制num_workers=1即可
num_workers 指 cpu 并行处理数据的线程数,num_workers 设置过大会占用过多 CPU 资源。因此,限制num_workers=1可以大幅减轻 CPU 压力

上述报错是 CPU 资源不够,GPU 资源不够一般是 memory, cuda 报错

在这里插入图片描述

安全创建目录

https://zhuanlan.zhihu.com/p/317254621
使用 pathlib 安全的创建目录

mkdir(parents=True, exist_ok=True)

sys.argv

https://blog.csdn.net/fancynthia/article/details/126271660
Python 中 sys.argv 用法详解
sys.argv[]是一个列表
sys.argv[0]是被调用的脚本文件名或全路径
sys.argv[1:]之后的元素就是我们从程序外部输入的,而非代码本身的,想要看到它的效果,就要将程序保存,从外部运行程序并给参数,这也是我们在cmd里面运行的原因。

argparse

用来做简易接口
https://blog.csdn.net/feichangyanse/article/details/128559542


metavar 和 action 在 argparse 中的含义
https://blog.csdn.net/FelixHe_FelixHe/article/details/130498476

https://stackoverflow.com/questions/19124304/what-does-metavar-and-action-mean-in-argparse-in-python


parser.add_argument 中 nargs 用法

nargs=N,一个选项后可以跟多个参数(action='append’时,依然是一个选项后跟一个参数,只不过选项可以多次出现),参数的个数必须为N的值,这些参数会生成一个列表,当nargs=1时,会生成一个长度为1的列表。

nargs=?,如果没有在命令行中出现对应的项,则给对应的项赋值为default。特殊的是,对于可选项,如果命令行中出现了此可选项,但是之后没有跟随赋值参数,则此时给此可选项并不是赋值default的值,而是赋值const的值。

nargs=*,和N类似,但是没有规定列表长度。

nargs=+,和*类似,但是给对应的项当没有传入参数时,会报错error: too few arguments。

wandb

https://zhuanlan.zhihu.com/p/493093033
wandb
weights and biases
是用来存模型参数、记录实验参数的工具,还能输出视频,GIF 图片等
类似tensorboard,但没有 tensorboard 用起来方便


https://blog.csdn.net/qq_42312574/article/details/132662921
wandb offline 模式 sync
https://zhuanlan.zhihu.com/p/493093033
wandb 基本用法

pip 源更换

我们常常使用 pip 源去加速软件包的安装。有时,pip 源网址本身可能会发生更换,比如半年前,我在使用西交源的时候就遇到了更换:
从原先的: https://mirrors.xjtu.edu.cn/pypi/simple
更换为了:https://mirrors.xjtu.edu.cn/pypi/web/simple
学到的知识点是:
源更换不可怕,因为一般源作者会在原来的地方留下新源的信息。就好比饭店搬迁,会在原址留下新饭店的位置。我们可以登录源网址查看变更信息。一般来说,不会整个源丢掉,大概率是换了链接,耐心一点总能找到。

无损迁移 conda 环境

如果你想要无损搬迁自己的conda环境,不妨了解一下 pip freeze
https://blog.csdn.net/qq_44886601/article/details/129933666

关于matplotlib legend的一些参数

columnspacing, labelspacing, handletextpad, borderpad
这几个参数指定了 legend 中的一些细节
ncols 可以指定 legend 有几列
在 matplotlib < 3.6 版本中,这一参数叫 ncol
在 matplotlib >= 3.6 版本中,这一参数叫 ncols
在这里插入图片描述
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html

极坐标系下的等高热力图

https://www.youtube.com/watch?v=DyPjsj6azY4&ab_channel=HagesLab
contour 是 绘制等高线的函数
contourf 是 填充等高线间的空隙的函数

contour中的linewidth调节成None即可获得光滑过度的热力图
ax.set_rticks([])
ax.set_xticks([])
去掉等高线和刻度的正确方法
https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.contourf.html#matplotlib.axes.Axes.contourf

seaborn set 参数

https://www.statology.org/seaborn-title/
seaborn 绘图中使用 set 设置标题和 xlabel, ylabel 等

matplotlib 保存图片防止截断

在 savefig 中使用 bbox_inches=‘tight’ 可以解决
https://stackoverflow.com/questions/35992492/savefig-cuts-off-title

conda 初始化

win下初始化conda环境,是使用conda可执行文件,地址在script目录下
https://blog.csdn.net/u010984516/article/details/125517492

在新进入镜像时,一般来说,是没有一个conda shell环境的
此时需要用命令 conda init bash 来初始化一个环境(不是 conda init )
初始完后再次进入该镜像即有初始的 conda 环境

conda 安装小窍门

conda install -y -c conda-forge rdkit==2021.09.5

-y 指 Sets any confirmation values to ‘yes’ automatically. Users will not be asked to confirm any adding, deleting, backups, etc.
-c 是选择安装的源

cudnn 下载

更换国内源加速下载(com改成cn即可):
https://blog.csdn.net/HunterMiki/article/details/122738632

安装 pytorch

我们可以使用 -i & -f 两个参数指定下载源,虽然有博客认为,使用 -f 会影响下载速度
https://blog.csdn.net/WannaSeaU/article/details/102830613
但我这边实测没有感受到。反而,二者同时用可以避免“镜像源配置错误”的问题。
也有博客认为二者同时使用比较好
https://blog.csdn.net/uflexnihao/article/details/113244103

我这边无痛安装 cu117 版本的 pytorch 以及一些附属的库:

pip install -i http://mirrors.aliyun.com/pypi/simple/  --trusted-host mirrors.aliyun.com torch==2.0.0+cu117 torchvision==0.15.1+cu117 torchaudio==2.0.1 -f https://download.pytorch.org/whl/cu117/torch_stable.html
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  torch_geometric torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.0.0+cu117.html

注意:-i 和 --trusted-host 放在包前面较为合适, -f 是在指定链接里去找想要的包


requirements.txt 里的空行会先对空行前的包build dependency,然后再接着安装剩余的包
requirements编写时考虑CPU和GPU的不同
https://stackoverflow.com/questions/72720235/requirements-txt-for-pytorch-for-both-cpu-and-gpu-platforms
苹果用户:
http://www.360doc.com/content/23/0701/13/54508727_1086924383.shtml
如果机器是cuda版本,需要先在conda里安装cuda和cudann
https://blog.csdn.net/qq_43705697/article/details/121618276
最后,安装完cuda可能检测不到
https://blog.csdn.net/weixin_43301333/article/details/128911561

cuda 和 cudnn 联系和区别

CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。
https://www.jianshu.com/p/622f47f94784
更详细的工具的汇总可以参见:
https://blog.csdn.net/qq_42406643/article/details/109545766

npz 文件

split.npz 文件常用来存储训练集、验证集、测试集中每个样本在原数据集中的位置。
我们可以使用 np.load 载入该文件,并使用 test = info['test_idx'] 的方式查看文件内容
在存的时候,与 npy 不同的是,我们需要用 np.savez 函数


使用npz存字典时会遇到一个问题,在不知道字典的键值情况下,可以尝试将整个字典写到一个条目下,但在取数据时会遇到格式问题。
在解决上述问题时,无意间翻到了一个回答,答主指出,可以使用kwargs语法,在不知道键值的情况下将字典以键值对的形式写入

https://stackoverflow.com/questions/52996433/loading-dictionary-stored-as-npz-fails

numpy 向量补充知识

使用 type 查看类型,使用 ndim 查看维度,使用 shape 查看维度
(22, 0) 这样子是一维
round 相关知识
np.ndarray 类型数据在round以后,确实是变成了四舍五入的格式
但是输出的时候,如果不变成str,输出时小数点后好几位会有数字
如果变成了str,输出时会保留截取的形式

float形式的数据,round以后直接输出,会自动保持截取的形式
(这个事情还不好下定论,养成输出时加str的习惯是对的)

查看模型参数

num_params = sum(p.numel() for p in model.parameters())
print(f'#Params: {num_params}')

tensorboard 小知识

同时观察多个 event 文件
我们在主文件夹下建立多个子文件夹,每个子文件夹放入一个 event 文件,这样在 logdir=主文件夹 的时候会同时打开多个子文件夹中的 event,且曲线图中每条曲线的名字就是子文件夹的名字。

torch_scatter.scatter()的使用方法

scatter函数的作用就是将index中相同索引对应位置的src元素进行某种方式的操作,例如sum、mean等,然后将这些操作结果按照索引顺序进行拼接
https://blog.csdn.net/Cyril_KI/article/details/125908710

cycle_momentum 报错 (一些废话)

pytorch CyclicLR momentum 参数仅在优化器支持 momentum 的情况下有效
https://blog.csdn.net/weixin_43002433/article/details/104969477

模型跑崩的表现 (一些废话)

验证集和训练集均出现了nan值
在这里插入图片描述

python 路径搜索相关知识

Python import module 的搜索路径由sys.path指定,实质为一个列表,列表索引先后决定搜索优先级。
我们可以人为补充某些路径,从而可以直接索引
如下:

import sys
sys.path.append('.')

from sub_image.pyG_infer import leftnet_dpdispatcher
from sub_image.postgres import postgres_interaction
from sub_image.cgleftnet import cgleftnet_dpdispatcher

这样我们可以在不安装包的情况下将当前目录补充到包搜索列表中
该实例中 sub_image 是当前目录下一个文件夹,我们需要在该文件夹下填入一个 _init_ 文件才能将该文件夹转换成可以被搜索的模块(module
下图是示例中提到的三个模块
在这里插入图片描述

seed(42)

np.random.seed(42) 的用法

https://stackoverflow.com/questions/21494489/what-does-numpy-random-seed0-do

If you set the np.random.seed(a_fixed_number) every time you call the numpy’s other random function, the result will be the same

EMA

https://testerhome.com/topics/10996
指数加权平均(EMA)稳定训练的原理:
EMA 可以让梯度下降更加稳定

segmentation error

指你的程序波及到了本该不属于它的范围
就好比,每个程序对应现实世界一个人,程序运行时,这个人的活动范围局限在特定的街区。如果程序因为特别的错误,比如除零等,导致其占用了过多的资源,以至于跑到了其他街区。此时会报错 segmentation error
segmentation 还用于种族隔离等语境。

python 中无法捕获因C子程序导致的 segmentation error (极难捕获)
遇到类似的问题只能想方设法解决造成 error 的原因,而不是做 try catch

dataloader 报错

raise RuntimeError(‘DataLoader worker (pid(s) {}) exited unexpectedly‘.format(pids_str))RuntimeErro
原因是程序运行需要在一个主程序下,把

if __name__ == "__main__":

添加到主程序目录下即可

pytorch lightning 单机多卡报错

跟slurm系统
RuntimeError: You set --ntasks=40 in your SLURM bash script, but this variable is not supported. HINT: Use --ntasks-per-node=40 instead.

网上也有很多讨论:
https://github.com/Lightning-AI/lightning/pull/16955/files
一般是让自己新建一个 slurm 脚本 & 修改任务名称
在提交任务的 command 里加上两句 unset 即可:
unset SLURM_NTASKS && unset SLURM_JOB_NAME && python train_homo_lumo_ddp.py > tmp_log 2>&1

Latex

超大写

经常阅读计算机系算法论文的同学可能会看到同一个单词里出现了大小不一的大写字母。
如下:
在这里插入图片描述
这种单词可以通过 latex (\textsc{} 或者 \scshape)超大写格式实现。U 是超大写,NIFIED 大写
此外,我们可以使用 \textsuperscript{} 实现上标,\textsubscript{} 实现下标
\textregistered 是带圆圈的R

抽象字体

读论文时,可能会遇到一些抽象的字体,例如Fraktur字体。这种字体常用于表示集合等,曾广泛应用于德国、东欧国家
https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols
在latex里,使用 \mathfrak{} 可以轻松打出 Fraktur 字体

领域知识

ase.db

ase.db 有一个默认的 id 参数,该参数记录了当前条目在 db 中的位置,是创建 db 时自动赋值的,不能手动赋值
我们可以通过新建 id 名的方式手动赋值新的 id,比如,ep_id


ase.db select 时候不是一个atoms对象,往往需要根据某个 id 重新 select
一个相对优雅的方式是将 row 对象一步转成 atoms 对象

with connect('new.db') as db:
    for a_row in db.select():
        an_atoms = a_row.toatoms()
        view(an_atoms)

数据库操作应该注意,删除一行,会造成数据库的不连续( id 的不连续)
可行(但有点笨拙)的方法是重新写一个数据库,跳过待删除行

贝塞尔函数可视化方法

https://www.youtube.com/watch?v=DyPjsj6azY4&ab_channel=HagesLab
make a 2D contour plot in Python in polar coordinates.
炫酷的贝塞尔函数可视化方法

格式转换

pyG object 和 ase object 的相互转换:

https://ulissigroup.cheme.cmu.edu/ml_catalysis_tutorials/notes/custom_datasets/data_preprocessing.html

lmdb 和 ase object 的相互转换:

https://ulissigroup.cheme.cmu.edu/ml_catalysis_tutorials/notes/custom_datasets/lmdb_dataset_creation.html

xyz 2 mol 的标准操作:
https://github.com/jensengroup/xyz2mol

熵,交叉熵,KL散度公式与计算实例
https://finisky.github.io/2020/07/09/crossentropyloss/

相对熵=KL散度,描述了两个概率分布间的相对大小
如果两个分布完全相同,则相对熵为0

相对熵+目标函数本身的熵=交叉熵
由于目标函数本身的熵是固定的,因此在训练网络时,选择交叉熵作为损失函数与相对熵等同
https://finisky.github.io/2020/07/09/crossentropyloss/

nllloss,negative log likelihood loss 负对数似然损失函数,常用于分类问题中,是CrossEntropyLoss的其中一个吧步骤
NLLloss+log+softmax=CrossEntropyLoss

https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html
https://zhuanlan.zhihu.com/p/570118948


nll loss 本应该处于 0~1 之间,但前提是 predicted distribution 也处于 0~1 之间,即 normalize 过

如果没有 normalize 过,也可能会出现 nll loss 取负的现象,这些都是正常的行为

在这里插入图片描述

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

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

相关文章

inux基础项目开发1:量产工具——业务系统(七)

前言&#xff1a; 前面我们已经构造出来显示系统、输入系统、文字系统、UI系统、页面系统&#xff0c;这个项目百分之八十需要实现的都已经构建出来了&#xff0c;最后让我们对这个项目进行最后一项系统的搭建&#xff0c;也就是业务系统&#xff0c;说到业务大家应该就知道我们…

软件生命周期四个阶段SDLC

软件产品生命周期&#xff1a;指软件产品研发全部过程、活动和任务的结构框架。 产品的生命周期一般包括四个阶段&#xff1a;引入期、成长期、成熟期和衰退期&#xff0c;在不同的阶段中&#xff0c;市场对产品的反应不同&#xff0c;其销售特点不同&#xff0c;因而产品管理的…

Windows驱动中使用数字签名验证控制设备访问权限

1. 背景 在一般的驱动开发时&#xff0c;创建了符号链接后在应用层就可以访问打开我们的设备并进行通讯。 但我们有时候不希望非自己的进程访问我们的设备并进行交互&#xff0c;虽然可以使用 IoCreateDeviceSecure 来创建有安全描述符的设备&#xff0c;但大数的用户账户为了方…

【理解ARM架构】中断处理 | CPU模式

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《理解ARM架构》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f35c;中断&#x1f368;GPIO中断代码实现 &#x1f35c;CPU&#x1f368;CONTROL…

设计模式-结构型模式之装饰者设计模式

文章目录 六、装饰者模式 六、装饰者模式 装饰者模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。它是作为现有的类的一个包装。 装饰类和被装饰类可以独立发展&#xff0c;不会相互耦合&#xff0c;装饰者模…

各大期刊网址

AAAL: http://dblp.uni-trier.de/db/conf/aaai/ CVPR: http://dblp.uni-trier.de/db/conf/cvpr/ NeurlPS:http://dblp.uni-trier.de/db/conf/nips/ ICCV: http://dblp.uni-trier.de/db/conf/iccv/ IJCAL: http://dblp.uni-trier.de/db/conf/ijcal/ 并非原创引…

Linux(12):磁盘配额(Quota)与进阶文件系统管理

磁盘配额&#xff08;Quota&#xff09;的应用与实作 Quota 的一般用途&#xff1a; 针对 www server &#xff0c;例如:每个人的网页空间的容量限制&#xff1b; 针对 mail server&#xff0c;例如:每个人的邮件空间限制。 针对 file server&#xff0c;例如:每个人最大的可用…

【开源】基于Vue+SpringBoot的康复中心管理系统

项目编号&#xff1a; S 056 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S056&#xff0c;文末获取源码。} 项目编号&#xff1a;S056&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员…

详解Spring对Mybatis等持久化框架的整合

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

最大单词数算法分析

题目描述&#xff1a; 算法一&#xff1a; 代码实现&#xff1a; # include<stdio.h> # include<string.h>int main(){//char text[100]"leet code";//char brokenLetters[26]"lt";char text[100]"hello world";char brokenLetters…

28、DS18B20温度传感器

DS18B20介绍 DS18B20是一种常见的数字温度传感器&#xff0c;其控制命令和数据都是以数字信号的方式输入输出&#xff0c;相比较于模拟温度传感器&#xff0c;具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围&#xff1a;-55C 到 125C 通信接口&#xff1a;1-Wire…

常见的线程安全问题及解决

1. 什么是线程安全 线程安全指的是当多个线程同时访问一个共享的资源时&#xff0c;不会出现不确定的结果。这意味着无论并发线程的调度顺序如何&#xff0c;程序都能够按照设计的预期来运行&#xff0c;而不会产生竞态条件&#xff08;race condition&#xff09;或其他并发问…

【数据库原理】函数依赖、三范式、视图、事务、数据库设计(概念、逻辑、物理结构设计,实施)、数据流图、数据字典、存储过程、触发器、备份与还原【我统统拿下!】

函数依赖 函数依赖是关系数据库中的重要概念&#xff0c;用于描述关系中属性之间的依赖关系。 在关系数据库中&#xff0c;如果关系 R 中的某个属性或属性组的值能够唯一确定关系中其他属性的值&#xff0c;那么我们就说这个属性或属性组对其他属性具有函数依赖关系。 举个例…

pytest系列——allure之在测试用例添加标题(@allure.title())

前言 通过使用装饰器allure.title可以为测试用例自定义一个更具有阅读性的易读的标题。 allure.title的三种使用方式&#xff1a; 直接使用allure.title为测试用例自定义标题&#xff1b;allure.title支持通过占位符的方式传递参数&#xff0c;可以实现测试用例标题参数化&a…

SpringBootCache缓存——j2cache

文章目录 缓存供应商变更&#xff1a;j2cache 缓存供应商变更&#xff1a;j2cache <!-- https://mvnrepository.com/artifact/net.oschina.j2cache/j2cache-core --><dependency><groupId>net.oschina.j2cache</groupId><artifactId>j2cache-cor…

【数组和函数实战: 斗地主游戏】

目录 1. 玩法说明 2. 分析和设计 3. 代码实现 4. 游戏演示1. 玩法说明 一副54张牌,3最小,两个王最大,其实是2,和上面一样从大到小排列 2. 分析和设计 2.1 分析和设计 常量和变量设计 一副牌有54张,有牌的数值和花色,可以分别用两个数组来存储,card为卡牌表示的数值,color为…

WebGL笔记:矩阵平移的数学原理和实现

矩阵平移的数学原理 让向量OA位移 x方向&#xff0c;txy方向&#xff0c;tyz方向&#xff0c;tz 最终得到向量OB 矩阵平移的应用 再比如我要让顶点的x移动0.1&#xff0c;y移动0.2&#xff0c;z移动0.3 1 &#xff09;顶点着色器核心代码 <script id"vertexShader&…

echarts实现全国及各省市地图

echarts实现全国及各省市地图&#xff08;内附地图json文件&#xff09; 去阿里云就可以获取&#xff1a;[阿里云地理]&#xff1a;http://datav.aliyun.com/portal/school/atlas/area_selector#&lat31.769817845138945&lng104.29901249999999&zoom4(http://datav…

6.7 Windows驱动开发:内核枚举LoadImage映像回调

在笔者之前的文章《内核特征码搜索函数封装》中我们封装实现了特征码定位功能&#xff0c;本章将继续使用该功能&#xff0c;本次我们需要枚举内核LoadImage映像回调&#xff0c;在Win64环境下我们可以设置一个LoadImage映像加载通告回调&#xff0c;当有新驱动或者DLL被加载时…

HTML块元素和行内元素

HTML块元素和行内元素 1.分类2.块元素3.行内元素 1.分类 在HTML中&#xff0c;根据元素的表现形式&#xff0c;一般可以分为两类&#xff1a; 块元素&#xff08;block&#xff09;行内元素&#xff08;inline&#xff09; 2.块元素 在HTML中&#xff0c;块元素在浏览器显示…