当报一些很奇怪的错,比如报错多了一个空格,但 vim 看打开没有,比如: 或者肉眼看上去路径正常,但却报路径不存在: 这种时候要使用 dos2unix 工具,把这个列表文件转换一下:
App.config <?xml version=1.0 encoding=utf-8 ?> <configuration> <appSettings> <add key=a1 value=a1_result/> </appSettings> </configuration> C#代码 ExeConfigurationFileMap map = new ExeConfigurationFileMap(); map.ExeConfigFilename = @D:\App.config; ; Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); string value = config.AppSettings.Settings[a1].Value; Console.WriteLine(value); C#转PowerShell $map=New-Object System.Configuration.ExeConfigurationFileMap $map.ExeConfigFilename=D:\App.config ### OpenMappedExeConfiguration 是静态函数 ### [System.Configuration.ConfigurationUserLevel]::None 枚举 $configobj = [System.Configuration.ConfigurationManager]::OpenMappedExeConfiguration($map,[System.Configuration.ConfigurationUserLevel]::None) $keys = $configobj.AppSettings.Settings[a1] $keys.Value
1. 配置虚拟机网络 删除其它网络,保留如下的网络 编辑VMnet8网络属性 NAT设置 点击上图的NAT设置 2. 本地网络设置 点击属性,编辑ip地址,前3段与虚拟机的Ip保持一致,网关需要跟虚拟机的网关保持一致。 3. centos配置 开机后,执行命令进入配置文件夹 cd /etc/sysconfig/network-scripts/ 执行命令(如果不知道名字,可以通过ip addr指令查看) vi ifcfg-ens32 修改TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 使用静态IP地址,默认为dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens32 UUID=94bb5610-8ade-4659-a95a-dd4e81e41330 DEVICE=ens32 ONBOOT=yes #是否开机启用 DNS1=114.114.114.114 # DNS服务器 IPADDR=192.168.10.10 # 设置的静态IP地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.10.2 # 网关地址 重启网卡,完成 systemctl restart network.service 查看网络状态 ip addr
背景 Redis 或许是我们大部分场景都会用到的一个利器,虽然是利器,用的姿势不对的话,终究还是会整出幺蛾子的。
比较常见的问题,不外乎内存暴增,慢查询等情况。
那么对于内存问题,可以借助redis自带的bigkey分析,也可以借助一些第三方工具来进行离线分析,如 redis-rdb-tools 和 rdr。
为什么是离线分析呢?
redis 在运行时,根据配置会生成一个 dump.rdb 的备份文件,这个备份文件是一个二进制文件,也是存在 redis 里面的数据的一个快照。
离线分析,分析的就是这个 rdb 文件。
受这两个项目的启发,老黄也用了好几个周末的时间写了个简单的离线分析工具。
下面简单介绍一下如何使用这个小工具。
rdb-tools 项目地址: https://github.com/catcherwong/rdb-tools
工具下载方式:
从 Github Release 下载最新稳定版本 https://github.com/catcherwong/rdb-tools/releases/ 通过 nuget 下载安装 https://www.nuget.org/packages/rdb-cli/ 在 Github Release 下载的是无需运行时的单文件,压缩后是 5MB 左右,解压后是 11MB 左右,需要根据不同的操作系统下载不同的可运行文件,
nuget 的话,自然就是在安装了 .net 6 的前提下, 通过 dotnet tool install 的方式来安装
输入 ./rdb-cli -h 可以看到帮助信息。
其中最主要的还是 memory 命令。
从帮助信息可以看到,需要指定 rdb 文件,和一些特定的选项。
一个比较简单常用的示例如下:
./rdb-cli memory /tmp/test/demo.rdb -ot html 这个会分析 demo.
班级:2133 姓名:李鹏宇 学号:20213306 实验教师:王志强 实验日期:2022年4月18日 必修/选修:公选课
CSDN文章链接:Python技能树及CSDN MarkDown编辑器测评
问题描述:
实体类变量的命名格式
如果采用的是 XX_XX带下划线的形式,那么在低版本的mybatis-plus是不支持和数据库映射的。
如果是单个单词不存在这个问题,如果出现多个单词,尽量采用驼峰式命名来规避此问题!
如上两张图所示,此时我的命名比如 document_type是带下划线的,那么在执行sql语句的时候,这些属性值是无法与数据库的属性正常映射的!
而id、name等不带下划线的属性值则可以正常读取到!
总结:只有一句话,规范自己的编码习惯,遵守Java关于多个单词组成变量名时的驼峰式命名规则!
目录: 1.bin:可执行文件 2.dev:设备 3.home:用户目录,有哪些用户 4.etc:用户相关配置信息,比如密码 5.lib:库路径 6.boot:存放开机启动文件 7.usr:用户资源目录,用户安装的库等
文件类型: 1.普通文件:- 2.目录文件:d 3.字符设备文件:c 4.块设备文件:b 5.软连接:l 6.管道文件:p 7.套接字:s
第一种方式
import unittest from day07.单元测试应用2 import TestLogin #导入测试用例类名 suite=unittest.TestSuite()#实例化测试套件 suite.addTest(TestLogin('test_login_success'))#一次添加一条测试用例,addTest(用例类名('用例名')) suite.addTests([TestLogin('test_login_error_pwd'),TestLogin('test_login_empty_name')])#addTests添加多条测试用例,其参数需要维护为一个序列,可以是元组也可以是列表。 # f=open('result_01.txt','a',encoding='utf-8')#打开一个文件流对象 with open('result_01.txt','a',encoding='utf-8') as f: runner=unittest.TextTestRunner(stream=f)#实例化TextTestRunner,该类继承了TestRunner runner.run(suite)#run使用的是其父类的run方法 第二种方式
#将所有的用例文件的名称改为以test开头 #将HTMLTestRunner文件放在自己的python的安装路径下,最好放在Lib目录下的site_packages中 import unittest from HTMLTestRunner import HTMLTestRunner#第三方的包 suite=unittest.TestSuite()#实例化测试套件 loader=unittest.TestLoader()#实例化用例加载器 #discover要求的是在该路径下查找所有以test开头的py文件。 suite.addTests(loader.discover('../day07'))#测试用例文件用test开头命名 with open('test_report.html','ab') as f:#ab中a为append,b为binary runner=HTMLTestRunner(stream=f,title='自动化测试',description='我就是来试试看的') runner.run(suite)#run方法是HTMLTestRunner中的实例方法,需要传递一个实参【用例或者套件】 第三种方式
将BeautifulReport文件放在自己python的安装路径下Lib/site_packages中 import unittest from BeautifulReport import BeautifulReport loader=unittest.TestLoader()#加载器 suite=loader.discover('../day07')#生成测试套件 bf=BeautifulReport(suite)#实例化BeautifulReport对象 bf.report('自动化测试报告','report') #report是BeautifulReport的实例方法
1、缓存穿透 缓存穿透:访问的 Key 不存在。
查询缓存(Redis)时无法找到指定 Key,因此会请求查询数据库。 利用一个不存在的 Key 值进行攻击,会穿透数据库。 解决方案
对空值缓存:若查询返回的数据为 null,将结果 null 进行缓存并设置较短的过期时间(通常不超过 5min) 设置白名单:使用 bitmaps 定义一个可访问名单。 名单 ID 作为 bitmaps 的偏移量。 每次访问数据时,将访问者 ID 与 bitmaps 中的 ID 进行比较。 若访问者 ID 不在 bitmaps 中则进行拦截。 布隆过滤器:哈希函数 + 位图 作用:检索一个元素是否在一个集合中。 特点:空间效率和查询效率快,但有一定的误识别率和删除困难。 做法:将所有可能存在的数据哈希到一个足够大的 bitmaps 中,请求访问不存在的数据时会被 bitmaps 拦截。 实时监控:当 Redis 的命中率骤低,需排查访问对象和访问数据,可设置黑名单限制服务。 2、缓存击穿 缓存击穿:访问的某个 Key 缓存过期,且有大量并发请求。
Key 对应的数据存在,但在 Redis 中缓存过期。 此时有大量并发请求数据库访问压力瞬间增大。,则 Redis 会从数据库加载大量数据并缓存。 数据库的访问压力瞬间增大。 解决
只需要把询问按x升序排序,在查询的过程中不断让树状数组把<=x元素的下标处+1即可。(为此,把序列按val排序)
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; pair<int, int> a[N]; #define val first #define pos second struct query { int l, r, x, pos, ans; } q[N]; int n, m; struct BIT { int t[N]; BIT() { memset(t, 0, sizeof(t)); } void add(int i, int x) { for (; i <= n; i += i & -i) t[i] += x; } int sum(int i) { int res = 0; for (; i; i -= i & -i) res += t[i]; return res; } }; int main() { ios::sync_with_stdio(false); cin.