JVM第十七讲:调试排错 - Java 问题排查之Linux命令
调试排错 - Java 问题排查之Linux命令
本文是JVM第十七讲, Java 问题调试排错。Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查。
文章目录
- 调试排错 - Java 问题排查之Linux命令
- 在项目中,日志操作的常用命令
- 1、在终端中登录日志系统
- 2、查看模块位置的指令
- 3、查看错误日志
- 1、文本操作
- 1.1、文本查找 - grep (常用)
- 1.2、文本分析 - awk (不常用)
- 1.3、文本处理 - sed (不常用)
- 2、文件操作
- 2.1、文件监听 - tail (常用)
- 2.2、文件查找 - find (常用)
- 2.3、pgm (不常用)
- 3、查看网络和进程
- 3.1、查看所有网络接口的属性 (常用)
- 3.2、查看防火墙设置 (不常用)
- 3.3、查看路由表 (不常用)
- 3.4、netstat (不常用)
- 3.5、查看所有进程 (常用)
- 3.6、top (常用)
- 4、查看磁盘和内存相关
- 4.1、查看内存使用 - free -m (常用)
- 4.2、查看各分区使用情况 (常用)
- 4.3、查看指定目录的大小 (常用)
- 4.4、查看内存总量 (常用)
- 4.5、查看空闲内存量 (常用)
- 4.6、查看系统负载磁盘和分区 (常用)
- 4.7、查看系统负载磁盘和分区 (常用)
- 4.8、查看挂接的分区状态 (常用)
- 4.9、查看所有分区 (常用)
- 4.10、查看所有交换分区
- 4.11、查看硬盘大小
- 5、查看用户和组相关
- 5.1、查看活动用户
- 5.2、查看指定用户信息
- 5.3、查看用户登录日志
- 5.4、查看系统所有用户
- 5.5、查看系统所有组
- 6、查看服务,模块和包相关
- 7、查看系统,设备,环境信息
- 8、tsar
在项目中,日志操作的常用命令
1、在终端中登录日志系统
- 账号: ssh developer@172.16.101.123 密码: zcy 日志中心
2、查看模块位置的指令
- find -name web-item* 或 find ./ -name item-mi* (模糊搜索以web-item开头的模块)
3、查看错误日志
- 方式1: tail -f filename(filename为前一个命令查到的路径)
- 方式2:通过 vi filename 来查询 可以更加方便地搜索日志中的关键字
注意事项
- 日志操作命令仅能查看线下环境(dev-debug/test),staging和真线必须使用“日志平台”进行查看日志平台地址
常用vi命令
- shift+g 查看最新日志 ?关键字 结合 n /n 关键字搜索
具体可以参考这篇文章:开发工具篇第九讲:菜鸟入坑指南
1、文本操作
1.1、文本查找 - grep (常用)
grep常用命令:
# 基本使用
grep yoursearchkeyword file.txt #文件查找
grep 'KeyWord otherKeyWord' file.txt cpf.txt #多文件查找, 含空格加引号
grep 'KeyWord' /home/admin -r -n #目录下查找所有符合关键字的文件
grep 'keyword' /home/admin -r -n -i # -i 忽略大小写
grep 'KeyWord' /home/admin -r -n --include *.{vm,java} #指定文件后缀
grep 'KeyWord' /home/admin -r -n --exclude *.{vm,java} #反匹配# cat + grep
cat file.txt | grep -i keyword # 查找所有keyword且不分大小写
cat file.txt | grep -c 'KeyWord' # 统计Keyword次数# seq + grep
seq 10 | grep 5 -A 3 #上匹配
seq 10 | grep 5 -B 3 #下匹配
seq 10 | grep 5 -C 3 #上下匹配,平时用这个就妥了
Grep的参数:
--color=auto:显示颜色;
-i, --ignore-case:忽略字符大小写;
-o, --only-matching:只显示匹配到的部分;
-n, --line-number:显示行号;
-v, --invert-match:反向显示,显示未匹配到的行;
-E, --extended-regexp:支持使用扩展的正则表达式;
-q, --quiet, --silent:静默模式,即不输出任何信息;
-w, --word-regexp:整行匹配整个单词;
-c, --count:统计匹配到的行数; print a count of matching lines;-B, --before-context=NUM:print NUM lines of leading context 后#行
-A, --after-context=NUM:print NUM lines of trailing context 前#行
-C, --context=NUM:print NUM lines of output context 前后各#行
1.2、文本分析 - awk (不常用)
awk基本命令:
# 基本使用
awk '{print $4,$6}' file.txt
awk '{print NR,$0}' file.txt cpf.txt
awk '{print FNR,$0}' file.txt cpf.txt
awk '{print FNR,FILENAME,$0}' file.txt cpf.txt
awk '{print FILENAME,"NR="NR,"FNR="FNR,"$"NF"="$NF}' file.txt cpf.txt
echo 1:2:3:4 | awk -F: '{print $1,$2,$3,$4}'# 匹配
awk '/ldb/ {print}' file.txt #匹配ldb
awk '!/ldb/ {print}' file.txt #不匹配ldb
awk '/ldb/ && /LISTEN/ {print}' file.txt #匹配ldb和LISTEN
awk '$5 ~ /ldb/ {print}' file.txt #第五列匹配ldb
内建变量
`NR`: NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。`FNR`: 在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。`NF`: NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。
更多请参考:Linux awk 命令
1.3、文本处理 - sed (不常用)
sed常用:
# 文本打印
sed -n '3p' file.log #只打印第三行
sed -n '$p' file.log #只打印最后一行
sed -n '3,9p' file.log #只查看文件的第3行到第9行
sed -n -e '3,9p' -e '=' file.log #打印3-9行,并显示行号
sed -n '/root/p' file.log #显示包含root的行
sed -n '/hhh/,/omc/p' file.log # 显示包含"hhh"的行到包含"omc"的行之间的行# 文本替换
sed -i 's/root/world/g' file.log # 用 world 替换file.log文件中的root; s==search 查找并替换, g==global 全部替换, -i: implace# 文本插入
sed '1,4i hahaha' file.log # 在文件第一行和第四行的每行下面添加hahaha
sed -e '1i happy' -e '$a new year' file.log #【界面显示】在文件第一行添加happy,文件结尾添加new year
sed -i -e '1i happy' -e '$a new year' file.log #【真实写入文件】在文件第一行添加happy,文件结尾添加new year# 文本删除
sed '3,9d' file.log # 删除第3到第9行,只是不显示而已
sed '/hhh/,/omc/d' file.log # 删除包含"hhh"的行到包含"omc"的行之间的行
sed '/omc/,10d' file.log # 删除包含"omc"的行到第十行的内容# 与find结合
find . -name "*.txt" |xargs sed -i 's/hhhh/\hHHh/g'
find . -name "*.txt" |xargs sed -i 's#hhhh#hHHh#g'
find . -name "*.txt" -exec sed -i 's/hhhh/\hHHh/g' {} \;
find . -name "*.txt" |xargs cat
更多请参考:Linux sed 命令 或者 Linux sed命令详解
2、文件操作
2.1、文件监听 - tail (常用)
最常用的 tail -f filename
# 基本使用
tail -f file.log # 循环监听文件
tail -300f file.log # 倒数300行并追踪文件
tail +20 file.log # 从第20行至文件末尾显示文件内容# tail f使用
tail f file.log #等同于tail -f -n 10 打印最后10行,然后追踪文件
tail -f 与tail F 与tailf三者区别
`tail -f` 等于--follow=descriptor,根据文件描述进行追踪,当文件改名或删除后,停止追踪。`tail -F` 等于 --follow=name ==retry,根据文件名字进行追踪,当文件改名或删除后,保持重试,当有新的文件和他同名时,继续追踪`tail f` 等于tail -f -n 10(tail -f或-F默认也是打印最后10行,然后追踪文件),与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以 tailf 特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电。
tail的参数
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
2.2、文件查找 - find (常用)
sudo -u admin find /home/admin /tmp /usr -name \*.log(多个目录去找)
find . -iname \*.txt(大小写都匹配)
find . -type d(当前目录下的所有子目录)
find /usr -type l(当前目录下所有的符号链接)
find /usr -type l -name "z*" -ls(符号链接的详细信息 eg:inode,目录)
find /home/admin -size +250000k(超过250000k的文件,当然+改成-就是小于了)
find /home/admin f -perm 777 -exec ls -l {} \; (按照权限查询文件)
find /home/admin -atime -1 1天内访问过的文件
find /home/admin -ctime -1 1天内状态改变过的文件
find /home/admin -mtime -1 1天内修改过的文件
find /home/admin -amin -1 1分钟内访问过的文件
find /home/admin -cmin -1 1分钟内状态改变过的文件
find /home/admin -mmin -1 1分钟内修改过的文件
2.3、pgm (不常用)
批量查询 vm-shopbase 满足条件的日志
pgm -A -f vm-shopbase 'cat /home/admin/shopbase/logs/shopbase.log.2017-01-17|grep 2069861630'
3、查看网络和进程
3.1、查看所有网络接口的属性 (常用)
[root@qiwenjie ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.31.165.194 netmask 255.255.240.0 broadcast 172.31.175.255ether 00:16:3e:08:c1:ea txqueuelen 1000 (Ethernet)RX packets 21213152 bytes 2812084823 (2.6 GiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 25264438 bytes 46566724676 (43.3 GiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1000 (Local Loopback)RX packets 502 bytes 86350 (84.3 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 502 bytes 86350 (84.3 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.2、查看防火墙设置 (不常用)
[root@qiwenjie ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination
3.3、查看路由表 (不常用)
[root@qiwenjie ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.175.253 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.31.160.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
3.4、netstat (不常用)
查看所有监听端口
[root@qiwenjie ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 970/nginx: master p
tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 1249/java
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/nginx: master p
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1547/sshd
tcp6 0 0 :::3306 :::* LISTEN 1894/mysqld
查看所有已经建立的连接
[root@qiwenjie ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 970/nginx: master p
tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 1249/java
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/nginx: master p
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1547/sshd
tcp 0 0 172.31.165.194:53874 100.100.30.25:80 ESTABLISHED 18041/AliYunDun
tcp 0 64 172.31.165.194:22 xxx.194.1.200:2649 ESTABLISHED 32516/sshd: root@pt
tcp6 0 0 :::3306 :::* LISTEN 1894/m
查看当前连接
[root@qiwenjie ~]# netstat -nat|awk '{print $6}'|sort|uniq -c|sort -rn5 LISTEN2 ESTABLISHED1 Foreign1 established)
查看网络统计信息进程
[root@qiwenjie ~]# netstat -s
Ip:21017132 total packets received0 forwarded0 incoming packets discarded21017131 incoming packets delivered25114367 requests sent out324 dropped because of missing route
Icmp:18088 ICMP messages received692 input ICMP message failed.ICMP input histogram:destination unreachable: 4241timeout in transit: 19echo requests: 13791echo replies: 4timestamp request: 3313825 ICMP messages sent0 ICMP messages failedICMP output histogram:destination unreachable: 1echo replies: 13791timestamp replies: 33
IcmpMsg:InType0: 4InType3: 4241InType8: 13791InType11: 19InType13: 33OutType0: 13791OutType3: 1OutType14: 33
Tcp:12210 active connections openings208820 passive connection openings54198 failed connection attempts9805 connection resets received
...
netstat 请参考这篇文章: Linux netstat命令详解
3.5、查看所有进程 (常用)
[root@qiwenjie ~]# ps -ef | grep java
root 1249 1 0 Nov04 ? 00:58:05 java -jar /opt/tech_doc/bin/tech_arch-0.0.1-RELEASE.jar --server.port=9999
root 32718 32518 0 08:36 pts/0 00:00:00 grep --color=auto java
3.6、top (常用)
top除了看一些基本信息之外,剩下的就是配合来查询vm的各种问题了
# top -H -p pid
top - 08:37:51 up 45 days, 18:45, 1 user, load average: 0.01, 0.03, 0.05
Threads: 28 total, 0 running, 28 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882088 total, 74608 free, 202228 used, 1605252 buff/cache
KiB Swap: 2097148 total, 1835392 free, 261756 used. 1502036 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND1347 root 20 0 2553808 113752 1024 S 0.3 6.0 48:46.74 VM Periodic Tas1249 root 20 0 2553808 113752 1024 S 0.0 6.0 0:00.00 java1289 root 20 0 2553808 113752 1024 S 0.0 6.0 0:03.74 java
...
4、查看磁盘和内存相关
4.1、查看内存使用 - free -m (常用)
[root@qiwenjie ~]# free -mtotal used free shared buff/cache available
Mem: 1837 196 824 0 816 1469
Swap: 2047 255 1792
4.2、查看各分区使用情况 (常用)
[root@qiwenjie ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 452K 919M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/vda1 40G 15G 23G 40% /
tmpfs 184M 0 184M 0% /run/user/0
4.3、查看指定目录的大小 (常用)
[root@qiwenjie ~]# du -sh
803M
4.4、查看内存总量 (常用)
[root@qiwenjie ~]# grep MemTotal /proc/meminfo
MemTotal: 1882088 kB
4.5、查看空闲内存量 (常用)
[root@qiwenjie ~]# grep MemFree /proc/meminfo
MemFree: 74120 kB
4.6、查看系统负载磁盘和分区 (常用)
[root@qiwenjie ~]# grep MemFree /proc/meminfo
MemFree: 74120 kB
4.7、查看系统负载磁盘和分区 (常用)
[root@qiwenjie ~]# cat /proc/loadavg
0.01 0.04 0.05 2/174 32751
4.8、查看挂接的分区状态 (常用)
[root@qiwenjie ~]# mount | column -t
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=930732k,nr_inodes=232683,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
...
4.9、查看所有分区 (常用)
[root@qiwenjie ~]# fdisk -lDisk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0008d73aDevice Boot Start End Blocks Id System
/dev/vda1 * 2048 83884031 41940992 83 Linux
4.10、查看所有交换分区
[root@qiwenjie ~]# swapon -s
Filename Type Size Used Priority
/etc/swap file 2097148 261756 -2
4.11、查看硬盘大小
[root@qiwenjie ~]# fdisk -l |grep Disk
Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Disk label type: dos
Disk identifier: 0x0008d73a
5、查看用户和组相关
5.1、查看活动用户
[root@qiwenjie ~]# w08:47:20 up 45 days, 18:54, 1 user, load average: 0.01, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 xxx.194.1.200 08:32 0.00s 0.32s 0.32s -bash
5.2、查看指定用户信息
[root@qiwenjie ~]# id
uid=0(root) gid=0(root) groups=0(root)
5.3、查看用户登录日志
[root@qiwenjie ~]# last
root pts/0 xxx.194.1.200 Fri Dec 20 08:32 still logged in
root pts/0 xxx.73.164.60 Thu Dec 19 21:47 - 00:28 (02:41)
root pts/0 xxx.106.236.255 Thu Dec 19 16:00 - 18:24 (02:23)
root pts/1 xxx.194.3.173 Tue Dec 17 13:35 - 17:37 (04:01)
root pts/0 xxx.194.3.173 Tue Dec 17 13:35 - 17:37 (04:02)
...
5.4、查看系统所有用户
[root@qiwenjie ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
...
5.5、查看系统所有组
cut -d: -f1 /etc/group
6、查看服务,模块和包相关
# 查看当前用户的计划任务服务
crontab -l # 列出所有系统服务
chkconfig –list # 列出所有启动的系统服务程序
chkconfig –list | grep on # 查看所有安装的软件包
rpm -qa # 列出加载的内核模块
lsmod
7、查看系统,设备,环境信息
# 常用
env # 查看环境变量资源
uptime # 查看系统运行时间、用户数、负载
lsusb -tv # 列出所有USB设备的linux系统信息命令
lspci -tv # 列出所有PCI设备
head -n 1 /etc/issue # 查看操作系统版本,是数字1不是字母L
uname -a # 查看内核/操作系统/CPU信息的linux系统信息命令# /proc/
cat /proc/cpuinfo :查看CPU相关参数的linux系统命令
cat /proc/partitions :查看linux硬盘和分区信息的系统信息命令
cat /proc/meminfo :查看linux系统内存信息的linux系统命令
cat /proc/version :查看版本,类似uname -r
cat /proc/ioports :查看设备io端口
cat /proc/interrupts :查看中断
cat /proc/pci :查看pci设备的信息
cat /proc/swaps :查看所有swap分区的信息
cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id"
8、tsar
tsar是淘宝开源的的采集工具。很好用, 将历史收集到的数据持久化在磁盘上,所以我们快速来查询历史的系统数据。当然实时的应用情况也是可以查询的啦。大部分机器上都有安装。
tsar ##可以查看最近一天的各项指标
tsar --live ##可以查看实时指标,默认五秒一刷
tsar -d 20161218 ##指定查看某天的数据,貌似最多只能看四个月的数据
tsar --mem
tsar --load
tsar --cpu ##当然这个也可以和-d参数配合来查询某天的单个指标的情况
具体可以看这篇文章:linux 淘宝开源监控工具tsar
相关文章:
JVM第十七讲:调试排错 - Java 问题排查之Linux命令
调试排错 - Java 问题排查之Linux命令 本文是JVM第十七讲, Java 问题调试排错。Java 在线问题排查主要分两篇:本文是第一篇,通过linux常用命令排查。 文章目录 调试排错 - Java 问题排查之Linux命令在项目中,日志操作的常用命令1、…...

米哈游、复旦发布,具备感知、大脑、行动的大语言模型“智能体”
ChatGPT等大语言模型展示了前所未有的创造能力,但距AGI(通用人工智能)还有很大的距离,缺少自主决策、记忆存储、规划等拟人化能力。 为了探索大语言模型向AGI演变,进化成超越人类的超级人工智能,米哈游与复…...

企业知识库管理系统怎么做?
21世纪,一个全新的信息化时代,从最初的传统办公到现在的信息化办公,一个世纪的跨越造就了各种大数据的诞生。 知识库系统 在这个数据横行的时代,文档管理产品市场逐渐兴盛起来,企业知识库管理系统作为企业的智慧信息的…...

嵌入式养成计划-45----QT--事件机制--定时器事件--键盘事件和鼠标事件--绘制事件
一百一十五、事件机制 当这件事情发生时,会自动走对应的函数处理(重写的事件函数) 115.1 事件处理简介 什么是事件? (重点) 件是由窗口系统或者自身产生的,用以响应所发生的各类事情,比如用户按下并释放…...
git远程仓库、开发者使用流程、ssh连接
git远程仓库 https://www.cnblogs.com/liuqingzheng/p/15328319.html 远程仓库有: : github gitlab gitee 在gitee上创建了仓库 (确保仓库是空的)本地:git init本地:git commit -m 提交版本指定远程仓库地址 添加一…...

SpringBoot (3) Profiles,外部化配置,自定义starter
目录 1 Profiles 1.1 "组件"环境隔离 1.1.1 标识环境 1.1.2 激活环境 1.2 "配置"环境隔离 1.2.1 添加"副配置文件" 1.2.2 激活环境 2 外部化配置 2.1 配置优先级 2.2 快速部署 3 自定义starter 3.1 基本抽取 3.1.1 导yaml提示包 3…...

【C++】类型转换(dynamic_cast,const_cast,static_cast,reinterpret_cast)
🌏博客主页: 主页 🔖系列专栏: C ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 文章目录 C语言中的类型转换一、static_cast二、reinterpret_cast三、 const_cast四、 dynamic…...

冷笑话-1
代码检视时,程序员A看着下面的代码,疑惑地问程序员B:“为什么不用重载?” class MyClass {public MyClass queryById(long id) { //......}public MyClass queryByName(String Name) { //......}public MyClass queryByIdAndNam…...

模拟退火算法(SA)求解旅行商问题(TSP)python
目录 一、模拟退火算法求解TSP(city14)的python代码 二、city14的运行结果 三、 模拟退火算法求解TSP(city30)的python代码 四、city30的运行结果 一、模拟退火算法求解TSP(city14)的python代码 impor…...

Intelijj使用Gitee团队开发
初始化项目到Gitee服务器 成功标识: 添加团队成员 点击管理——仓库成员设置——开发者 2.添加仓库成员 (最多不超过5人) 3.通过链接或者二维码邀请新成员,或者可以自己手动添加新成员并提交 多人项目仓库创建完成 通…...

气象台使用vr模拟仿真实训教学降低成本投入
气候仿真实验室用于模拟高低温、高湿、干燥、阳光光照、降雨、降雪、覆冰、雾天与强风等多种环境适应性试验等气候和环境条件,在环境试验中,温度、湿度、光照、降雨这些常见的仿真环境都很容易实现。而比较少见的雾天、强风、降雪等环境就比较难。因此为…...

智能井盖是什么?万宾科技智能井盖传感器有什么特点
智能井盖是一种基于物联网和人工智能技术的新型城市设施。它不仅具备传统井盖的功能,还能通过数字化、自动化的方式实现远程监控和智能管理,提升城市运行效率和服务水平。 WITBEE万宾智能井盖传感器EN100-C2是一款井盖异动监测的传感终端。对窨井盖状态(…...

使用 类加载器 或者 类对象 读取文件
相对路径:项目 的 根目录 开始查找。( 但是在我们真正开发的时候,我们读到的更多的文件并不是直接放在我们项目里面这个文件夹里面,而是放在我们模块里面 )同理可得,我们直接创建 文件 b.txt 会在项目的根目…...

《深度学习推荐系统》王喆 笔记
这个笔记,是我记录的阅读该书,对我比较有用的一些点。不算是能完全覆盖全书知识点的笔记。 能完全覆盖全书知识点,比较详尽的笔记,可以参考如下。 《深度学习推荐系统》超级详细读书笔记https://www.zhihu.com/tardis/bd/art/44…...

微软Azure OpenAI支持数据微调啦!可打造专属ChatGPT
10月17日,微软在官网宣布,现在可以在Azure OpenAI公共预览版中对GPT-3.5-Turbo、Babbage-002 和Davinci-002模型进行数据微调。 使得开发人员通过自己的数据集,便能打造独一无二的ChatGPT。例如,通过海量医疗数据进行微调&#x…...

Kali Linux 安装搭建 hadoop 平台 详细教程
1)前期环境准备:(虚拟机、jdk、ssh) 2)SSH相关配置 安装SSH Server服务器:apt-get install openssh-server 更改默认的SSH密钥 cd /etc/ssh mkdir ssh_key_backup mv ssh_host_* ssh_key_backup 创建新…...
leetcode做题笔记190. 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因…...
JAVA如何获取服务器ip
一、最简单的方法就是使用InetAddress获取本机ip InetAddress.getLocalHost().getHostAddress(); public static void main(String[] args) {try {//用 getLocalHost() 方法创建的InetAddress的对象InetAddress address InetAddress.getLocalHost();System.out.println(addr…...

Power BI 傻瓜入门 4. Power BI:亮点
本章内容包含: 在Power BI Desktop上学习诀窍摄入数据使用模型试用Power BI服务 就像评估一个由多种成分组成的蛋糕一样,Power BI要求其用户熟悉商业智能(BI)解决方案中的功能。几乎所有与Power BI交互的用户都是从桌面版开始的…...
网络参考资料搬运(3)
(1) Python: 使用Python打开新的终端(terminal)并执行语句 通过Python 打开各系统(MAC, LINUX, WINDOWS)下的终端 (Terminal) python执行shell脚本的几种方法 自己写Linux命令 用Python写个Linux系统命令 Python 使用sftp传输文件…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...