开发测试问题汇总
一、问题汇总
1、Linux添加静态IP
默认情况下是会自动ip,这个时候要改成手动的,然后再添加地址。
1.1 配置临时IP
ip addr add 192.168.237.128/24 dev eth2
1.2配置静态Ip地址
vim /etc/sysconfig/network-scripts/ifcfg-eth2
更改里面的配置
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.4.175
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Auto eth2"
UUID=73ba0a16-841f-464c-9d44-4299ffcc005b
ONBOOT=yes
IPADDR2=192.168.237.128
PREFIX2=24
HWADDR=00:0C:29:88:98:E0
LAST_CONNECT=1691043850
或者可以考虑虚拟机可视化界面添加
2、当出现最大文件限制把内存填满
首先 df -h 查看是哪里使用率最高
df -h 查看完了之后 比如说是/ 目录
cd /
du -sh * 可以查看哪个文件使用大小
之后一点点的递进
知道找出占用最多的文件删除掉
3. git
git本地没有分支的情况下 切换分支
git checkout --track origin/分支名 #这里本地与远程分支名字是一样的,相关联的
4 markdown绘制流程图
https://blog.csdn.net/zhw21w/article/details/125749449)
5、vscode (git graph出错)
报错内容:
加载 Web 视图时出错: Error: Could not register service worker: InvalidStateError: Failed to register a ServiceWorker: The document is in an invalid state…
解决方案 :
1、关闭vscode
2、按WIN + R,输入cmd,打开终端,然后输入命令
code --no-sandbox
3、会重启vscode,就可以正常使用了。
6.vscode更换字体
自带字体代码配置
Consolas, 'Courier New', monospace
重新配置字体
7. 压缩大文件
使用Bandzip压缩使用,很好用
8、navicat连接不上数据库,出现错误代码是1045
现在假设我本地机器的Ip是 192.168.2.2 ,服务器的ip是192.168.2.65
一定要保证在同意网段
直接在服务器登录mysql : mysql -u root -psunkaisens
直接在下面输入命令
grant all privileges on *.* to 'root'@'192.168.2.2' identified by 'sunkaisens';
这行的命令是给远程服务器加上本地机器访问权限,可以远程访问mysql数据库可以远程访问mysql数据库
9 mysql++库
mysql++库里面的 connected()方法和ping()方法的区别
在MySQL++库中,ping()
和 connected()
是用于检测连接状态的两种不同方法。
1、ping() 方法:
- 作用: 发送一个PING命令到MySQL服务器,用于检测连接是否仍然处于活动状态。
- 返回值: 如果连接活动,返回
true
;如果连接不活动或已经断开,返回false
。 - 使用场景: 适用于在程序中定期检测连接状态,以便及时发现并处理失效的连接。
mysqlpp::Connection con("database", "user", "password", "localhost");
// 检测连接状态
if (con.ping()) {
std::cout << "Connection is active." << std::endl;
} else {
std::cout << "Connection is not active." << std::endl;
}
2、connected() 方法:
- 作用: 返回一个布尔值,指示连接是否处于活动状态。
- 返回值: 如果连接活动,返回
true
;如果连接不活动或已经断开,返回false
。 - 使用场景: 适用于在程序中检查连接状态,以确定连接是否成功建立。
mysqlpp::Connection con("database", "user", "password", "localhost");
// 检查连接状态
if (con.connected()) {
std::cout << "Connected to MySQL server." << std::endl;
} else {
std::cout << "Connection failed." << std::endl;
}
区别:
ping()
主要用于在程序中定期检测连接状态,防止由于连接超时或其他原因导致连接失效。connected()
主要用于在程序中检查连接状态,以确保连接成功建立。connected()函数只会检测之前数据库连接的状态
在实际应用中,可以根据具体的需求选择使用哪种方法,或者在适当的情况下结合使用这两种方法。例如,可以在程序启动时使用 connected()
检查连接状态,然后在程序运行过程中定期使用 ping()
来保持连接活动。
10 配置的IP
192.168.100.175
192.168.4.176
192.168.237.176
10.99.0.113
10.1.1.10
10.21.1.145
192.168.100.27
192.168.20.34
11 linux虚拟机进行扩容内部操作 (前提是在外面做了扩容)
#查看当前分区情况
fdisk -l
Disk /dev/sda: 53.6 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 2610 20860402+ 8e Linux LVM
#Create a new partition that takes up the remaining space and is of filesystem type 8e (LVM):
fdisk /dev/sda
n (new)
p (primary)
3 (partition number, since 1st and 2nd partition already exists)
select default first available cylinder to the default last cylinder.
t (type)
3 (partition number)
8e (set type to LVM)
p (view the new partitions layout)
w (write out the new partitions layout to disk)
#重启系统
#查看更新的分区:重启后,可以看到新增分区,格式为lvm
Fdisk -l
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 2610 20860402+ 8e Linux LVM
/dev/sda3 2611 6527 31463302+ 8e Linux LVM
格式化硬盘格式(必选,由于不同的硬件环境有不同的格式,因此务必确认现有的磁盘格式,可以通过df -hT查看),如下是虚拟机常用的格式,xfs格式,注意如下命令的后缀代表了文件系统格式。
mkfs.xfs /dev/sda3
pvdisplay 查看VG名称,拓展现有组
#pvcreate命令 用于将物理硬盘分区初始化为物理卷,以便LVM使用。
pvcreate /dev/vda3
#通过 df -hT 查看所需添加到的卷组名称无须加root;或pvdisplay查看
vgextend rhel(卷名) /dev/vda3
(note the free space now in the Volume Group which can now be assigned to a Logical Volume)
#vgdisplay确认拓展后结果
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 49.88 GB
PE Size 32.00 MB
Total PE 1596
Alloc PE / Size 636 / 19.88 GB
Free PE / Size 960 / 30.00 GB
VG UUID 0JB6GV-gFJW-onuN-7Xq1-OKim-n5gM-EVPUKB
#拓展挂载点对应的文件系统。
lvextend -L +89G /dev/mapper/rhel-root /dev/vda3或
lvextend -l +100%FREE /dev/mapper/rhel-root /dev/vda3
#可选,立即使用拓展空间。注意这里与上面不一样,这是挂载点,是df命令的最后一列,而非第一列。
xfs_growfs /
#挂载点对应的文件系统名称可以df -h 1G,查看。
#Df -h确认根目录已经被拓展。
编译
编译4.2.0arm的smsc时候 去烧libudev库 在Makefile 里面 加上 -ludev链接试试
11、虚拟机共享文件配置了,终端不显示
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
/mnt/hgfs/ 是挂载点,我们也可以修改为其它挂载点
-o allow_other 表示普通用户也能访问共享目录。
然后,再次进入 /mnt/hgfs 查看 (注意:挂载后必须要再次进入/mnt/hgfs才能查看到共享的文件夹)
目录共享成功。
注意:如果虚拟机重启,需要再次挂载共享文件夹。
12、Mysql++
1、mysql++编译x86版本
`./config`ure (为了生成Makefile文件)
make
make install
2、mysql++编译arm版本
./configure CXX=/root/Libary/gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ LDFLAGS="-L/root/Libary/gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu/lib"
LIBS="-lmysqlpp.so -lmysqlclient.so"
make
make install
3、清除 make clean
13、openssl(版本是1.1.1w)
OpenSSL静态库编译及使用(linux环境)_openssl编译静态库 pbkdf1.c:(.text+0x153): undefined ref-CSDN博客
这个是编译动态链接库的链接 Linux(centos7)下安装OpenSSL 安装详解_/usr/include/openssl-CSDN博客
在makefile中加上 -lssl, -lcrypto
14.虚拟机配置桥接模式
vmware的NAT模式改成桥接模式_原本使用nat模式能换成桥接-CSDN博客
15、可以单独连接某个服务器
def ssh_execute_command(self, card_id, command):
"""
通过SSH连接到远程服务器并执行命令。
参数:
card_id (str): 板卡ID,用于获取相应的SSH连接对象。
command (str): 要执行的命令。
返回:
str: 命令执行结果。
"""
# 建立SSH连接
ssh = self.cardSSHCon[int(card_id)]
stdin, stdout, stderr = ssh.exec_command(command)
result = stdout.read().decode().strip()
ssh.close()
return result
16 麒麟v10系统配置lmt
16.1 第一种方式
1、首先安装openssl_dev版本的库, 因为原来的没有头文件, 导致pip不可用
yum install openssl_devel.aarch64
2、安装python3.9.5的源码包
python3.9.5的包在这个目录下 E:\lmt\python源码包
tar -zxvf Python-3.9.5.tgz
cd Python-3.9.5/
./configure --with-ssl --prefix=/usr/local/python3.9.5
make
make install
配置环境变量 在 /etc/profile下面配置
printenv 打印环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
export PATH=/usr/local/python3.9.5/bin/:$PATH
之后输入 python3 -V pip3 -V 检测一下
在这里插入图片描述
3、安装pv
yum install pv
4、安装nginx
yum install nginx*
是因为之前的nginx缺少库
cp /usr/sbin/nginx /opt/zqlmt/sbin/
5、配置lmt
执行install.sh 路径在 /opt/zqlmt/installShell/install.sh
先输入1 , 在输入2
进入目录
cd /op/zqlmt/
关闭
./stopweb.sh
开启
./startweb.sh
6、把softPackage 包移到/home/ 解压 tar -xvf 包名 ,
把pconfig.conf移动到softpackage替换掉
7、yum源联网配置
###Kylin Linux Advanced Server 10 - os repo###
[ks10-adv-os]
name = Kylin Linux Advanced Server 10 - Os
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/base/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 1
[ks10-adv-updates]
name = Kylin Linux Advanced Server 10 - Updates
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/updates/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 1
[ks10-adv-addons]
name = Kylin Linux Advanced Server 10 - Addons
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/addons/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 0
8.离线源配置
[ks10-adv-cdrom]
name = Kylin Linux Advanced Server 10 - cdrom
#baseurl = file:///run/media/root/KYLIN10-SVR
baseurl = file:///media/KylinV10
#baseurl = http://archive2.kylinos.cn/rpm/kylin/Library/custom/kylin-server/KY10-GFB-aarch64
gpgcheck = 0
enabled = 1
16,2 第二种方式
17电脑共享服务器网络
我现在能ping通的地址是200.200.200.20
1、那就在下面虚一个网卡
ifconfig enP1p6s0f0:2 本机联网ip
route -n 查看一下有没有路由
route add default gw 192.168.137.1 添加一个网关
vim /etc/resolv.conf
输入nameserver 114.114.114.114
2、下面在电脑上就行共享
专用网络连接选择以太网
之后通过配置的 本机联网ip 就可以登录了
enP1p6s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 200.200.200.20 netmask 255.255.255.0 broadcast 200.200.200.255
inet6 fe80::3209:f9ff:fe25:13b5 prefixlen 64 scopeid 0x20<link>
ether 30:09:f9:25:13:b5 txqueuelen 1000 (Ethernet)
RX packets 136185 bytes 11792323 (11.2 MiB)
RX errors 0 dropped 4434 overruns 0 frame 0
TX packets 8097 bytes 861195 (841.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enP1p6s0f0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.14 netmask 255.255.255.0 broadcast 192.168.137.255
ether 30:09:f9:25:13:b5 txqueuelen 1000 (Ethernet)
18 麒麟V10系统配置永久静态IP
1、首先进入
vim/etc/sysconfig/network-ifcfg-enP1p5s0f0:1
2、创建一个网卡的配置文件
cp ifcfg-enP1p5s0f0 ifcfg-enP1p5s0f0:1
3、打开 ifcfg-enP1p5s0f0:1文件
vim ifcfg-enP1p5s0f0:1
4、修改参数
HWADDR=30:09:F9:21:21:19
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_PRIVACY=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="enP1p5s0f0:1"
UUID=c199806a-6b2b-4237-b6f6-9189a61d1b55
DEVICE=enP1p5s0f0:1
ONBOOT=yes
IPADDR=200.200.200.45
NETMASK=255.255.255.0
5、重启网卡
systemctl restart network.service
19mysql事务抢占锁
要调整数据库中锁等待超时的阈值,需要根据具体的数据库管理系统来设置。以下是一些常见数据库系统(如MySQL/MariaDB)中调整锁等待超时阈值的方法示例:
MySQL / MariaDB 示例
在 MySQL 或 MariaDB 中,可以通过设置 innodb_lock_wait_timeout
参数来调整锁等待超时的阈值。这个参数控制了一个事务在等待锁释放的时间长度,单位是秒。
-
查看当前设置:
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
-
设置新值:
SET GLOBAL innodb_lock_wait_timeout = 60; -- 将锁等待超时时间设置为60秒
或者在配置文件(如
my.cnf
或my.ini
)中添加或修改以下行:目录在/etc/my.cnf.d/mariadb-server.cnf
[mysqld] innodb_lock_wait_timeout = 60
-
重新启动数据库: 修改完配置文件后,需要重新启动数据库服务使配置生效。
注意事项:
- 单位:超时时间的单位是秒。
- 影响:增加锁等待超时时间可能会使得长时间等待锁的事务能够成功完成,但也可能会导致其他事务等待时间变长或者资源争用加剧。因此,设置合适的超时时间需要根据实际应用和数据库负载情况来权衡。
- 权限:修改
innodb_lock_wait_timeout
需要相应的权限(通常是SUPER
权限)。
在实际应用中,建议根据数据库的负载和事务处理需求来调整这些配置参数,以提升系统性能和稳定性。
二、开发
1、前端获取数据时创建弹窗
<template>
<div class="student-data-container">
<!-- 加载按钮 -->
<el-button type="primary" @click="fetchStudentData">获取学生数据</el-button>
<!-- 数据表格 -->
<el-table :data="studentData" style="width: 100%; margin-top: 20px;">
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="age" label="年龄" width="180"></el-table-column>
<el-table-column prop="class" label="班级" width="180"></el-table-column>
</el-table>
<!-- 弹窗 -->
<el-dialog
title="正在获取用户数据,请稍等..."
:visible.sync="dialogVisible"
:close-on-click-modal="false"
>
<el-progress :text-inside="true" :percentage="progressPercentage"></el-progress>
</el-dialog>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
studentData: [],
dialogVisible: false,
progressPercentage: 0,
};
},
methods: {
async fetchStudentData() {
// 显示加载弹窗
this.dialogVisible = true;
this.progressPercentage = 0;
try {
const response = await axios.get('/api/students'); // 根据实际的API接口调整URL
this.studentData = response.data;
} catch (error) {
console.error('获取学生数据失败:', error);
this.$message.error('获取学生数据失败');
} finally {
// 关闭加载弹窗
this.dialogVisible = false;
}
},
},
};
</script>
<style scoped>
.student-data-container {
padding: 20px;
}
</style>
1.1 api模拟
如果没有实际的API,可以使用json-server
模拟一个API:
npm install -g json-server
创建一个db.json
文件:
{
"students": [
{ "name": "张三", "age": 18, "class": "一班" },
{ "name": "李四", "age": 19, "class": "二班" },
{ "name": "王五", "age": 20, "class": "三班" }
]
}
运行json-server
:
json-server --watch db.json
这样,你就可以在http://localhost:3000/students
访问到模拟的学生数据API。将axios.get
的URL改为http://localhost:3000/students
即可进行测试。
1.2 搜索框点击回车刷新页面问题
出现这个问题的主要原因是因为浏览器的默认行为。当一个输入框在表单中处于焦点时,用户按下回车键,浏览器会自动尝试提交该表单。这种行为是浏览器的默认设置,用于提交用户输入的数据。
1.2.1具体原因分析:
- 浏览器默认表单提交行为:
- 当用户在表单中按下回车键时,浏览器会尝试提交整个表单。这在普通的 HTML 表单中是有用的,因为它允许用户在填完表单后快速提交数据。
- 如果这个提交行为没有被阻止,页面会刷新,因为表单提交的默认行为是重新加载当前页面或导航到表单的
action
指定的目标页面。
- Vue 与 Element UI 的组合:
- Vue 在处理表单时,如果没有显式地阻止提交,依然会遵循浏览器的默认行为,即使表单中没有指定
action
。 - 在使用 Element UI 这样的 UI 框架时,表单控件如
<el-input>
会自动嵌套在<el-form>
中,用户按下回车时的默认表单提交行为依然存在,导致页面刷新。
- Vue 在处理表单时,如果没有显式地阻止提交,依然会遵循浏览器的默认行为,即使表单中没有指定
- 解决方案:阻止默认行为:
- 通过在
<el-form>
中添加@submit.native.prevent
,你显式地阻止了表单的默认提交行为,防止页面刷新。 - 使用
@keyup.enter.native.prevent
在输入框按下回车时,进一步阻止默认行为,并处理自定义的搜索逻辑。
- 通过在
550863346)]
[外链图片转存中…(img-R57Q9qxa-1731550863346)]
出现这个问题的主要原因是因为浏览器的默认行为。当一个输入框在表单中处于焦点时,用户按下回车键,浏览器会自动尝试提交该表单。这种行为是浏览器的默认设置,用于提交用户输入的数据。
1.2.1具体原因分析:
- 浏览器默认表单提交行为:
- 当用户在表单中按下回车键时,浏览器会尝试提交整个表单。这在普通的 HTML 表单中是有用的,因为它允许用户在填完表单后快速提交数据。
- 如果这个提交行为没有被阻止,页面会刷新,因为表单提交的默认行为是重新加载当前页面或导航到表单的
action
指定的目标页面。
- Vue 与 Element UI 的组合:
- Vue 在处理表单时,如果没有显式地阻止提交,依然会遵循浏览器的默认行为,即使表单中没有指定
action
。 - 在使用 Element UI 这样的 UI 框架时,表单控件如
<el-input>
会自动嵌套在<el-form>
中,用户按下回车时的默认表单提交行为依然存在,导致页面刷新。
- Vue 在处理表单时,如果没有显式地阻止提交,依然会遵循浏览器的默认行为,即使表单中没有指定
- 解决方案:阻止默认行为:
- 通过在
<el-form>
中添加@submit.native.prevent
,你显式地阻止了表单的默认提交行为,防止页面刷新。 - 使用
@keyup.enter.native.prevent
在输入框按下回车时,进一步阻止默认行为,并处理自定义的搜索逻辑。
- 通过在
总结来说,这个问题源于浏览器的默认表单提交行为,在使用 Vue 和 Element UI 时,如果没有正确处理,就可能会导致页面刷新。通过显式地阻止这些默认行为,可以解决这个问题。
原文地址:https://blog.csdn.net/qq_44139121/article/details/143760027
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!