Ubuntu学习记录
冷知识补充
1.VMware官网安装后,会有两个软件,一个收费(pro)(功能更多,可以一次运行多个虚拟机)(尽管2024年最新版本的也免费了)一个免费(player)。
2.ubuntu打开终端快捷键:ctrl+alt+T
3.
4.文件表达方式
5.mounted on 挂载,这个信息可以从Ubuntu中的Disk中看到,或者df -h
6.
7.首先"/"为根目录,“/bin”中存储了相关命令:比如ls
8./home文件夹下每个文件代表一个用户。
9.shell寻找程序:会从path环境变量所指示的位置中去找程序(ls命令其实对应的就是一个程序),也可以指定相对位置或绝对位置去找执行程序。
10.修改环境变量方法:
临时设置: export PATH = $PATH:/Home/Hellohamburger (仅对当前终端有效,当前终端关闭后就无效了)
永久设置:
其中方法2仅对当前用户(/Home下的用户)有效,方法1对所有用户有效。
11.修改文件权限chmod
12.bzip2相比gzip压缩率更高,这两个只能压缩单个文件,不能压缩目录
13.vi编辑器模式切换
一些修改操作
/etc/passwd 文件中通过超级用户权限将book用户从/bin/sh变为/bin/bash,即设置book用户登陆系统使用bash这个功能齐全的shell进行命令交互,方便命令补全,这个问题最开始是为了解决ssh连接后Tab无法补全的问题
linux可执行文件
#include <stdio.h>
int main(int argc, char **argv)
{
printf("hello, world!\n");
return 0;
}
argc为命令行参数的数量,linux从可执行文件名称开始计数,输入几个参数几个参数
比如: ./hello [参数] [参数] 此时argc计数为3
argv为命令行参数的数组
重要文件所在位置
/etc/environment PATH所在位置
相关命令
命令本身是文件路径下的程序,命令的选项和参数为程序的入口参数,前面所指的文件路径包括:1.默认PATH路径下的文件路径2.指定的相对位置或绝对位置路径
df -h 显示分区磁盘挂载信息:磁盘被挂载到哪个文件目录下,其中“/”表示系统根目录
ls -al 所有文件名称及信息(包括隐藏和非隐藏以及用户读写权限信息)
ls 列举非隐藏文件
ls -a 列举隐藏和非隐藏文件名称
echo $PATH 查看环境变量PATH的值
echo Hamburger 打印Hamburger到终端
echo Hamburger >1.txt 写入Hamburger到1.txt文件中去
> 重定向操作符,这个符号会覆盖文件原有内容
>> 重定向操作符,追加内容
env 查看所有环境变量(环境变量 = 环境变量的值)
ls 从PATH环境变量所指示的位置中去找程序ls去运行
/bin/ls 从指定位置/bin中去找程序ls去运行
gedit 文本文件编辑程序
cd ~
cd /
cd ..
pwd
cd - 切回到上一次访问的目录
./ 当前目录下
../ 上一级目录下
mkdir
rmdir 一般用rm -rf递归强制删除可以直接用
rm -rf [目录名(文件夹名称)],删除路径文件夹中所有信息。
mv ls
cat+文件名,显示文件中的信息或者串联文件并将信息打印出来
cat 01.txt
cat 01.txt 02.txt
Date 查看电脑上的的时间
touch 修改文件时间为当前时间
chmod 改变文件的权限
chmod 777 [文件名] 修改文件权限为rwxrwxrwx(文件所有者/所在用户组/其他用户)
chmod -x [文件名] 修改文件权限为rw-rw-rw-
ls -ld [指定目录] 显示指定目录信息
sudo 申请超级用户(root)的权限
chown 改变文件的所有者
chown book:book(账号名:组名) [文件名] 改变文件的所有者
cp 1.txt 2.txt 复制1.txt中的信息去2.txt(默认情况下:2.txt不存在则新建,存在则覆盖复制)
快捷键
ctrl + l 清空命令行
A
配置网络:Ubuntu 配置的默认源并不是国内的服务器,下载更新软件都比较慢。
源文件保存在/etc/apt/sources.list中,可以在里面添加国内镜像源
软件包管理系统中的apt命令sudo apt-get install gparted 下载磁盘管理工具
B
bzip2 -k test -k表示压缩解压文件时保留源文件
C
cd - 进入上次目录
chmod -w 1.txt 撤销写权限cp * -drf [目标目录] 将当前文件夹文件拷贝到目标目录 -d是保留链接文件 -r是递归 -f是强制 一般链接文件类型用l表示,文件夹为d,普通文件为-
D
dd if=/dev/zero of=test bs=1024 count=1024
dd 处理数据命令
if (intput file)
/dev/zero 是一个特殊的设备文件,它可以看作是一个源源不断输出零字节数据的 “数据源”。
当 dd 命令以它作为输入文件时,就会不断从这里获取零字节数据用于后续的操作,比如创建
一个全是零字节填充的文件。
of (output file) 输出文件,新建或覆盖
bs (block size) 这意味着 dd 命令在进行数据处理(如读取、写入)时,会以 1024 字节为
一个基本的操作单元。
count 要处理块的数量
上面这条 dd 命令的主要作用是创建一个大小为 1MB(1024*1024) 且内容全部为零字节填充的文件 test。
E
env 查看环境变量
F
find [指定目录] -name [待查找文件名] 从指定目录路径开始搜索
find -name [待查找文件名] 从当前文件目录开始搜索文件
find -name "*1.txt" 其中*是一个通配符,可以找到如21.txt这种文件
find -name "*1.txt*"也可以file [文件名] 查询该文文件的详细属性,比如是可执行文件还是其他等等。
G
grep "abc" [指定文件名] 从指定文件目录中查找含有“abc”的文件的内容
grep "abc" * *指代当前文件夹下的所有文件
grep "abc" * -n -n指定显示找到后在第几行
grep "abc" * -nw -w对应全词匹配
grep "abc" * -nwr -r (最常用)代表递归查找(不仅找当前目录下的文件,也把当前目录下子文件夹下的文件也进行递归查找)gzip -k [待压缩文件名] -k压缩/解压文件时保留源文件
gzip -dk [待解压文件名] -d解压命令 -k保留源文件编译过程中 gcc test.c -o test -D DEBUG(为程序进行宏定义)
gcc -o hello hello.c 用于将名为 hello.c 的 C 语言源文件编译成可执行文件hello
gcc -E -o hello.i hello.c 预处理之后得到.i文件,将头文件中的内容展开,将宏进行替代,目前还不会处理函数内容
gcc -S -o hello.s hello.i 编译之后得到.s文件,.s文件为汇编语言
gcc -c -o hello.o hello.s 汇编之后得到.o文件,.o文件为机器码
-c 指令是只完成预处理,编译,汇编,但不进行链接
gcc -o hello hello.o 链接操作
gcc -o hello hello.c -v 查看整个编译过程 (这个其实就是一口气全部预处理,编译,
汇编,链接)
gcc进行编译的整个流程:预处理将所有.c文件中的.h文件路径展开,宏定义展开,最后变成.i文件;编译和汇编操作将.i变成.o文件。最后一步是链接,是将所有.c文件生成的.o文件进行链接,这个链接是最后一步,在这一步之前,所有的.c文件是独立编译的,最后一步才会链接合体。
gcc -o [执行文件] [.c文件1] [.c文件2] 将两个.c文件预处理编译汇编并链接成执行文件
gcc -o [执行文件] [.o文件1] [.o文件2] 将两个.o文件直接链接成执行文件gcc编译过程中的头文件位置问题:
include<stdio.h> <>括号会从工具链目录中找
include<sub.h> 假如sub.h不在gcc工具链目录中,那么则必须指定头文件目录,使用-I指定
比如将sub.h文件放在当前文件下,就可以使用
gcc -o main.exe main.c -I ./ -I用来指定头文件的目录 制作使用静态库(静态库在编译时被链接到可执行程序中,一旦链接完成,可执行程序就包含了静态库中的所有代码和数据,不再依赖于外部的库文件,但是,由于静态库的代码被复制到每个可执行程序中,这会导致可执行程序的体积较大,所以不要把静态库运行到板子上)
gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
ar crs libsub.a sub.o sub2.o sub3.o(可以使用多个.o生成静态库)
ar crs libxxx.a sub.o sub2.o sub3.o(可以使用多个.o生成静态库)
gcc -o test main.o libsub.a (如果.a不在当前目录下,需要指定它的绝对或相对路径 通过 -L 指定) 制作使用动态库(.so文件,多个可执行程序共享一个动态库,因为库代码在内存中只需要加载一次。同时,动态库的更新也比较方便,只需要更新动态库文件,而无需重新编译所有使用该库的可执行程序)将多个.o文件打包
动态库比较特殊,链接动态库时,可执行程序在运行时还需要能够找到动态库文件。即链接时需要用一次.so文件,程序执行时还需要找一次.so文件。
gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
gcc -shared -o libsub.so sub.o sub2.o sub3.o(可以使用多个.o生成动态库)
-fpic生成位置无关代码,即该动态库可以加载到内存任何位置,因为一个动态库可能被多个程序调用,所以要保证动态库可以加载到任意位置
动态库命名规则:lib[自定] , 比如libsub,libhambur等
gcc -o test main.o -lsub/-lhambur(-l为指定链接哪一个库文件,sub为libsub的缩写取后半部分) -L [指定链接时库文件目录] echo 'main(){}'| gcc -E -v - // 它会列出头文件目录、库目录(LIBRARY_PATH) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./指定程序运行时动态库查找路径,仅在当前会话窗口起作用。
等正式做项目的时候再搞这个,也可以去bashrc文件中去修改交叉编译需要在最后面加上-fPIC参数。ldd main(可执行程序):可以检测动态依赖关系是否完善,即动态库加载GDB调试
1.准备工作:关闭编译器的优化选项(-O),并打开调试选项-g,-Wall是在不影响程序行为的情况下打开所有warning,可以帮助发现许多问题,避免不必要的bug
gcc -g -Wall program.c -o program(为调试而进行编译),确保调试时gdb可以找到源文件,显示代码和对应的行号联系起来
GDB命令:
启动退出:
gdb 可执行程序
quit
给程序设置参数
set args 10 20
show args
GDB使用帮助
help
查看当前文件代码:
list/l (从默认位置显示)
list/l [行号] (从指定行显示)
list/l [函数名] (从指定函数显示)
查看非当前文件代码
list/l [文件名:行号] (从指定行显示)
list/l [文件名:函数名] (从指定函数显示)
设置显示行数:
show list
set list [行数]
设置断点:
b/break 行号/函数名/文件名:行号/文件名:函数
查看断点:
i/info b/break
删除断点:
d/del/delete b/break;
设置断点无效
dis/disable 断点编号
设置断点生效
ena/enable 断点编号
设置条件断电(一般在循环的位置)
b/break 10 if i==5
运行:
start (程序停在第一行)
run (遇到断电再停)
c/continue
n/next(不会进入函数体)
s/step(遇到函数进入函数体)
finish(跳出函数体)
p/print 变量名(打印变量值)
ptype 变量名(打印变量类型)
display num (自动打印指定变量的值)
i/info display
undisplay 编号
set var 变量名 = 变量值
until 跳出循环info registers查看汇编代码
backtrace 查看崩溃时的调用栈TUI模式:
layout asm 仅显示汇编
layout spilt 分屏显式源码和汇编
退出TUI模式:tui disable查看数据示例:
在GDB中,x命令用于查看内存内容
通用语法为:x/[数量][格式][单位] 地址
常用格式:
x 十六进制
a 地址(解析符号名)
d 十进制
u 无符号十进制
s 字符串
i 汇编代码
常用单位:
b 字节(1字节)
h 半字(2字节)
w 字(4字节)
g 双字(8字节)
x/1gx查看指针值
H
[命令] --help 输出命令使用提示
I
配置网络工具:
sudo apt install net-tools
ifconfig 查看IP命令
ping news.qq.com 验证是否可以与服务器网络畅通
ping(Packet InterNet Groper) 分组网间探测,探索本地主机与外部服务器(主机)是否联通,使用是ICMP协议
J
K
L
ls -l text* *是通配符,省略后面的路径名
ll 直接列出当前文件夹下的所有信息
M
man [命令] 查看该命令的手册
man 2 open 打开第二项系统调用中的open函数mkdir -p [文件夹名称]mount 命令用来挂载各种支持的文件系统协议到某个目录下。
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
将远程 NFS 服务器(IP 地址为 192.168.5.11)上的共享目录/home/book/nfs_rootfs挂载到本地的/mnt目录下,这样本地系统就可以像访问本地文件系统一样访问远程 NFS 服务器上的文件make mrproper Linux 内核源代码目录下使用的命令,它主要用于清理内核源代码树,是内核编译准备工作的一部分。删除所有编译生成的文件和配置文件,例如,如果你之前进行了一次内核编译,生成了很多中间文件和最终的内核镜像文件,执行make mrproper后,这些文件都会被清除,使得源代码目录恢复到比较 “纯净” 的状态,就好像你刚刚解压了内核源代码包一样。
make dtbs 编译设备树makefile内容部分
makefile规则
[目标文件]:[依赖文件1][依赖文件2].....[依赖文件n]
TAB [命令]
执行规则:如果依赖文件比目标文件新,或者目标文件还未生成,执行命令
举例makefile文件:
test:a.o b.ogcc -o test a.o b.o
a.o:a.cgcc -c -o a.o a.c -c仅预处理编译汇编未链接
b.o:b.cgcc -c -o b.o b.c
执行make命令便会执行makefile文件通配符
%.o:表示所用的.o文件
%.c:表示所有的.c文件
$@:表示目标文件
$<:表示第1个依赖文件
$^:表示所有依赖文件 假想目标:.PHONY
test: a.o b.o c.ogcc -o test $^
%.o : %.cgcc -c -o $@ $<
clean:rm *.o test 清楚所有.o文件和目标文件test,说明执行make命令会生成一系列.o文件和目标文件
为什么要用假想目标?
当文件中存在一个clean文件时,makefile文件中的clean目标文件不会执行。为什么呢?因为makefile文件中目标文件执行的条件是:依赖文件比目标文件新或者目标文件不存在,所以makefile文件中的clean目标文件下的命令不会被执行。使用假想目标的作用就是:假想目标文件不用判断是否存在依赖文件或者依赖文件比目标文件新,而是直接执行假想目标即可
具体示例:
test: a.o b.o c.ogcc -o test $^
%.o : %.cgcc -c -o $@ $<
clean:rm *.o test
.PHONY:clean 这条是设定clean为假想目标的代码,这样的话就算文件里有clean文件,也会执行清楚命令make [目标文件] 如果目标文件为空,则make默认生成第一个目标文件,如果不为空,则生成对应目标文件即时变量,延时变量 export
1.简单变量(即时变量):
A := xxx # A的值即刻确定,在定义时即确定
对于即使变量使用 “:=” 表示,它的值在定义的时候已经被确定了
2.延时变量
B = xxx # B的值使用到时才确定
对于延时变量使用“=”表示。它只有在使用到的时候才确定,在定义时并没有确定下来
:= # 即时变量
= # 延时变量
?= # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+= # 附加, 它是即时变量还是延时变量取决于前面的定义
执行make命令之后,一般会将命令打印下来,如果不想把命令打印下来,就在命令前加@,比较方便。
基本函数
1.foreach
$(foreach,var,list,text) 对list中的每一个var执行text公式
比如:
A = a b c
B = $(foreach f, $(A), $(f).o)
all:@echo B = $(B)
执行make命令后得:B = a.o b.o c.o
2.filter(英文是滤波器的含义)
$(filter pattern...,text) # 在text中取出符合patten格式的值
3.filter-out
$(filter-out pattern...,text) # 在text中取出不符合patten格式的值
比如:
C = a b c d/
D = $(filter %/, $(C))
E = $(filter-out %/, $(C))其中%指的是占位符4.$(wildcard pattern) # pattern定义了文件名的格式, wildcard取出其中存在的文件。
比如:
files = $(wildcard *.c)
执行make后在当前文件夹下寻找.c文件
files2 = a.c b.c c.c d.c e.c abc
files3 = $(wildcard $(files2)) 这个则是判断files2中的文件哪些文件在当前文件夹下真实存在。
特别的,这句话是有错误的,files2 = $(wildcard $(files2)),“=”是延时变量,files2是不能调用自己的,这个是个明显错误。files2 := $(wildcard $(files2))这样子实时赋值是可以的5.patsubst
$(patsubst pattern,replacement,$(var))
patsubst 函数是从 var 变量里面取出每一个值,如果这个符合 pattern 格式,把它替换成 replacement 格式。
比如:
files2 = a.c b.c c.c d.c e.c abc
dep_files = $(patsubst %.c,%.d,$(files2)) 将.c修改为.d,其余保留实例讲解:
头文件依赖问题,makefile将头文件依赖包含的话,这样不论是.c文件还是.h文件变化,都会再次生成.o文件以及最终链接后的文件
gcc -M c.c // 打印出依赖,这个依赖指的是c.c的include的.h文件
gcc -M -MF c.d c.c // 把依赖的头文件写入文件c.d
gcc -c -o c.o c.c -MD -MF c.d // 编译c.c生成c.o, 并把依赖头文件写入文件c.dmakefile实例:
objs = a.o b.o c.o 定义延时变量,调用时才会赋值
dep_files := $(patsubst %,.%.d, $(objs))第一个%是匹配字符串,即把a.o替换为.a.o.d
dep_files := $(wildcard $(dep_files))找出在当前文件夹中存在的文件
test: $(objs)gcc -o test $^
ifneq ($(dep_files),)
include $(dep_files)
endif 判断当前依赖文件是否为空,如果不为空,则全部
%.o : %.cgcc -c -o $@ $< -MD -MF .$@.d 预处理编译汇编第一个依赖文件生成目标文件,并将依赖文件的包含的头文件写入到.d文件中去
clean:rm *.o test 删除所有.o文件和最终的目标文件
distclean:rm $(dep_files) 删除所有依赖文件
.PHONY: clean
make文件实例:重要是哪个if语句的位置导致程序出现问题,即修改头文件后,二次make有问题。
原因找到了,因为保存.c文件依赖头文件的.d文件中的格式是:a.o : a.c b.h c.h…
这个格式刚好是makefile中目标文件和依赖文件的形式,make没有指定目标文件的时候则会将a.o作为默认输出目标文件。如果把包含include的代码写在test目标文件上面,那么a.o则变成了默认目标文件。第一个make正常是因为.d文件不存在,include代码并没有执行,第二次.d文件存在了,include生效了,结果输出a.o up to date。这下终于想明白了。
#尝试自行编写makefile文件
objs = a.o b.o c.o
dep_files := $(patsubst %,.%.d, $(objs)) #替换名称
dep_files := $(wildcard $(dep_files)) #检查文件是否在当前文件夹下存在
CFLAGS = -Werror -Iinclude 设置编译选项,所以警告提示错误,并添加头文件包含位置在include文件夹下
test : $(objs) 默认执行目标问题gcc -o test $^ ifneq ($(dep_files),) #查看文件是否非空
include $(dep_files) #如果不非空,则make包含这些文件
endif 这段代码必须放在默认执行目标的后面,放在前面的话,每次make都得清除原来的文件
%.o : %.cgcc $(CFLAGS) -c -o $@ $< -MD -MF .$@.d 按照编译选项去执行
clean:rm *.o test
disclean:rm $(dep_files)
.PHONY:clean
N
O
P
poweroff 关机命令
Q
R
rm 一般只能删除文件,不能删除文件夹
rm [文件夹] -r 递归删除文件夹(可以删除文件夹中的普通文件)
rm [文件夹] -rf 递归并强制删除文件夹(删除所有文件,包括.git等这种不可见文件)reboot 重启电脑
S
ssh [用户名]@[目标主机IP地址或域名] 之后输入用户密码就可以远程连接并操作远程服务器了
source ~/.bashrc 重新加载配置文件,使得对于~/.bashrc文件的修改立即生效。
T
tree 查看当前文件夹的目录树
tar 命令更加常用
tar czf test.tar.gz test1
tar xzvf test.tar.gz 解压到当前目录下
tar xzvf test.tar.gz -C [指定解压后存放位置]
-c:创建文件包
-z:gzip压缩
-J:bzip2压缩
-f:后面跟着一个压缩后的文件名(tar打包,gzip/bzip2压缩)
-v:详细报告tar处理的信息
-x:解压
tar cJf test.tar.bz2(压缩后的文件名) [待压缩文件或文件夹]
tar xJvf test.tar.bz2
tar xJvf test.tar.bz2 -C [指定解压后存放目录文件夹]tracert (windows)
traceroute (unix)
追踪去往目的地时沿途经过的路由器
traceroute [目的ip地址]
U
ulimit -a 查看用户可以使用的资源
V
vi 2.txt 新建并打开或打开2.txt
vi 2.txt +2 光标跳到第二行还是
vi进入后首先为一般模式:
i(insert模式在光标前输入字符) a(光标后追加模式) i a进入编辑模式 ESC返回到一般模式
终端命令:
:q 退出
:wq 保存并退出
:q! 不保存退出
一般模式下:
:set number 显示行号
: [行号] 光标跳到该行首个字符
:set nonumber 不显示行号
翻页:
ctrl + f 向前翻页(下一页)
ctrl + b 向后翻页(上一页)
shift + G 转至文件结尾
0 跳到当前行的首字符一般模式下可以执行的命令:
dd 删除该行
d+$ 删除改行从该字符开始之后的所有字符
x 删除光标所在的字符(删除一个字母)
xw 删除一个单词(光标指在首字母)
u 撤销上一步操作
o 增加新的一行yy 复制当前行
nyy 复制当前行及下方的n-1行
p 粘贴最近复制的内容/[字符] 搜索字符
n 提示搜索到的下一个字符
N 向前查找:
:%s/[字符串1]/[字符串2]/g 全局替换字符串1为字符串2
:%s/[字符串1]/[字符串2]/gc c是确认的意思,替换之前会提示确认
W
X
Y
Z
root用户理解
su root 切换到超级用户
- 当执行 su root 命令时,系统会提示输入超级用户(root)的密码(注意,不是当前用户的密码)。这是因为切换到超级用户身份需要超级用户的身份验证。
- 输入正确的超级用户密码后,系统会将当前用户的环境切换到超级用户的环境,此时用户就拥有了超级用户的所有权限,可以执行任何需要超级用户权限才能完成的任务,比如修改系统关键文件、安装软件包到系统级别的目录、配置系统网络等。
- sudo(superuser do)是用来申请超级用户权限,会要求输入当前用户的密码,验证当前用户身份后才会给与当前用户使用超级用户权限。
文件IO
./open open.c & 这个&符号表示后台运行该代码,即立刻释放该终端,终端立刻出现命令行提示符,程序在后台执行
执行该命令后输出:[作业号] 进程ID号
Ctrl+Z 挂起进程
ps显示当前进程
kill -9 [进程ID] 强制杀死该进程
cd /proc/[进程号]/fd 查看系统进程目前打开的文件
主要函数实例:
sprintf(result_buf, "%s,%d,%d,%d,%d,%s", name, scores[0], scores[1], scores[2], sum, levels[level]);
sscanf(data_buf, "%[^,],%d,%d,%d,", name, &scores[0], &scores[1], &scores[2]);
其中%[^,]用于匹配除都好之外的字符序列(即一直读取字符,直到遇到逗号为止)
len = read(fd, buf, sizeof(buf)-1);
fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, 0644);
lseek(fd, 3, SEEK_SET);光标偏移
fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, 0777);
比较新的一个函数:
int fd3 = dup(fd);复制文件句柄fd为fd3,即假设文件句柄fd对应的文件为1.txt,fd3也对应1.txt.韦东山例程里给的案例是使用open函数读文件时,文本位置光标会偏移,而fd3保留了fd的偏移。
dup2(fd, 1);把文件句柄句柄为1的文件指针指向fd,文件句柄:0表示标准输入文件,1表示标准输出文件,2表示标准错误文件。此时操作系统的标准输出文件就指向fd所对应的文件了。
相关文章:
Ubuntu学习记录
冷知识补充 1.VMware官网安装后,会有两个软件,一个收费(pro)(功能更多,可以一次运行多个虚拟机)(尽管2024年最新版本的也免费了)一个免费(player)。 2.ubuntu打开终端快捷键:ctrlal…...
【音频】如何解析mp3文件
解析和播放MP3文件涉及两个主要步骤:解码(将MP3压缩数据转换为原始PCM音频)和播放(将PCM数据通过音频设备输出)。以下是不同平台和编程语言的实现方法: 一、MP3文件结构基础 MP3文件由多个**帧(Frame)**组成,每帧包含固定时长的音频数据(通常为26ms)。每个帧包含:…...
学习笔记:黑马程序员JavaWeb开发教程(2025.4.9)
12.16 异常处理 定义一个类,加上注解RestControllerAdvice,即定义了一个全局异常处理器 再方法上加上注解ExceptionHandler,通过注解当中的value属性来指定捕获那个类型的异常 完成Filter、interceptor、异常处理代码实操 Filter Filter里…...
【音频】wav文件如何解析编码格式(压缩格式)?
要确定一个WAV文件的编码格式,可以通过以下几种方法实现,包括使用操作系统自带工具、专业音频软件或编程解析文件头信息。以下是详细说明: 一、通过文件属性查看(Windows/macOS) 1. Windows系统 步骤: 右…...
【Django系统】Python+Django携程酒店评论情感分析系统
Python Django携程酒店评论情感分析系统 项目概述 这是一个基于 Django 框架开发的酒店评论情感分析系统。系统使用机器学习技术对酒店评论进行情感分析,帮助酒店管理者了解客户反馈,提升服务质量。 主要功能 评论数据导入:支持导入酒店…...
OpenCv高阶(十六)——Fisherface人脸识别
文章目录 前言一、Fisherface人脸识别原理1. 核心思想:LDA与Fisher准则2. 实现步骤(1) 数据预处理(2) 计算类内散布矩阵 SW对每个类别(每个人)计算均值向量 μi:(3) 计算类间散布矩阵 SB(4) 求解投影矩阵 W(5) 降维与分类 3. Fish…...
数据库与Redis数据一致性解决方案
在写数据时保证 Redis 和数据库数据一致,可采用以下方案,需根据业务场景权衡选择: 1. 先更新数据库,再更新 Redis 步骤: 写入 / 更新数据库数据。删除或更新 Redis 缓存。适用场景:读多写少,对缓存一致性要求不高(短暂不一致可接受)。风险:若第二步失败,导致缓存与…...
Python面试题
Python面试题 Python面试题回答1. Python面向对象的三个特征?多态如何实现和使用2. is 和 的区别?3. GIL了解吗?说说4. 可变类型和不可变类型?5. yield用法?6. 深拷贝和浅拷贝区别?7. Python中的线程8. 生…...
力扣周赛置换环的应用,最少交换次数
置换环的基本概念 置换环是排列组合中的一个概念,用于描述数组元素的重排过程。当我们需要将一个数组转换为另一个数组时,可以把这个转换过程分解为若干个 “环”。每个环代表一组元素的循环交换路径。 举个简单例子 假设原数组 A [3, 2, 1, 4]&…...
差分数组 - 对区间内元素的统一操作
目录 概念 题单 1 拼车 2 将区间分为最少组数 3 字母移位 4 使数组中的所有元素都等于零 5 零数组变换Ⅰ 6 最大化城市的最小电量 概念 差分数组,顾名思义,就是由原数组的相邻元素作差而得到的差值组成的新的数组。 对于原数组 a [ 1 , 3 , 5 …...
线上问题排查
一:CPU飙高问题排查过程 遇到这种问题,首先是登录到服务器,看一下具体情况。 定位进程:top命令,查看CPU占用情况定位线程:top -Hp 1893命令,查看各个线程的CPU使用情况定位代码:pr…...
计及可再生能源不确定性的经济优化调度方法
目前,计及可再生能源不确定性的经济调度方法主要有随机优化、鲁棒优化和区间优化。 随机优化:可再生能源输出被定义为一个已知概率分布的随机变量。 难以同时保证计算精度和效率。 1-场景法 场景生成 基于随机变量概率分布进行采样:蒙特…...
支持向量机(SVM):分类与回归的数学之美
在机器学习的世界里,支持向量机(Support Vector Machine,简称 SVM)是一种极具魅力且应用广泛的算法。它不仅能有效解决分类问题,在回归任务中也有着出色的表现。下面,就让我们深入探索 SVM 如何在分类和回归…...
用户刷题记录日历——签到表功能实现
MySQL实现 在数据库中设计一张签到表,记录用户每次签到的日期及其他相关信息。然后通过时间范围查询得到用户的签到记录。 CREATE TABLE user_sign_in (id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 主键,自动递增userId BIGINT NOT NULL, …...
C语言中的内存函数
目录 1 memcpy()函数的基本信息及功能(1) void * destination(2) const void * source(3) size_t num 1.2 memcpy()函数实战演练1.3 memcpy()函数的模拟实现1.3.1 my_memcpy()函数定义及参数1.3.2 my_memcp…...
本特利内华达330103-00-03-05-02-05毫米接近传感器
描述 3300 XL 8 mm近程传感器系统包括:一个3300 XL 8 mm探头、一根3300 XL延长电缆1和一个3300 XL近程传感器2。 该系统提供的输出电压与探针尖端和观察到的导电表面之间的距离成正比,可以测量静态(位置)和动态(振动)值。该系统的主要应用是流体膜轴承机器的振动和位…...
啤酒游戏与系统思考
今天,与上海地产集团的伙伴们一同体验经典的系统思考沙盘模拟——“啤酒游戏”。虽然大家身处房地产行业,但也会惊讶地发现,啤酒游戏的核心理念对任何行业都适用,尤其是站在全局的角度,做出精准决策。 每次进行啤酒游戏…...
id分页遍历数据漏行问题
令入参id为0 while(true){ select * from table where id>#{id} order by id asc limit 100; 取结果集中最大id作为下次查询的入参 其他操作 } 这个算法一般没问题,但在主从数据系统中,主库写,查询从库遍历数据时,出现了…...
【Vue3】Vue3工程的创建 及 开发者工具的安装
目录 一、创建Vue3工程的方式 方法一 方法二 二、区分Vue3 和 Vue2的构建 观察main.js vue3不向下兼容,也就是说Vue3不支持Vue2的写法! JavaScript 的模块导入有两种常见写法: 三、安装Vue3的开发者工具 总结不易~本章节对我有很大的…...
docker exec -it abc bash
当然可以!让我们详细解析一下 docker exec -it abc bash 这个命令的各个部分及其作用。 命令概述 docker exec -it abc bash这个命令用于在已经运行的 Docker 容器 abc 中启动一个新的交互式终端会话。具体来说,它会执行容器内的 bash 命令,…...
基于AI大语言模型的历史文献分析在气候与灾害重建中的技术-以海南岛千年台风序列重建为例
随着人工智能技术的飞速发展,大语言模型如GPT、BERT等在自然语言处理领域取得了显著成果。这些模型不仅提高了文本数据的处理和理解效率,还为历史灾害研究提供了全新的视角和方法。本文将深入探讨基于AI大语言模型的历史文献分析在气候与灾害重建领域中的…...
【最细】自动化测试-解决日志问题,一文贯通...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 持续集成的自动化…...
PromptIDE:一款强大的AI提示词优化工具
今天向大家推荐一款专业且免费的AI提示词工具——PromptIDE。作为AI领域从业者,我们都深知提示词质量对模型输出的重要性,而这款工具正是为解决这一痛点而生。 核心功能解析 1、提示词优化 简单输入你的需求描述,点击AI生成提示词…...
f-string 高效的字符串格式化
f-string,称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal String Interpolation,主要目的是使格式化字符串的操作更加简便。 p…...
Powershell及命令行文章合集(不定期更新)
一、Powershell: 1.Powershell中常用命令和常用属性:https://blog.csdn.net/humors221/article/details/147978718 2.Powershell数值应用讲解:https://blog.csdn.net/humors221/article/details/142897029 3.PowerShell 抓取网络日志:https://blog.csdn.net/humors221/artic…...
leetcode hot100刷题日记——8.合并区间
class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.empty()){//复习empty函数啊,日记1有的return {};}// 按照区间的起始位置进行排序sort(intervals.begin(), intervals.end());vect…...
基于moonshot模型的Dify大语言模型应用开发核心场景
基于moonshot模型的Dify大语言模型应用开发核心场景学习总结 一、Dify环境部署 1.Docker环境部署 这里使用vagrant部署,下载vagrant之后,vagrant up登陆,vagrant ssh,在vagrant 中使用 vagrant centos/7 init 快速创建虚拟机 安装…...
系统设计应优先考虑数据流还是控制流?为什么优先考虑数据流?数据流为主、控制流为辅的架构原则是什么?控制流优先会导致哪些问题?
在当代软件工程的复杂演化中,每个现代系统,不论是处理金融交易的平台、智能家居系统,还是自动驾驶系统,都面临同一个核心问题:设计者该以“数据流”为主导,还是以“控制流”为主导? 在系统设计过程中,工程师所面对的核心问题不仅是代码的堆叠与组织,更是信息流动模式…...
Redis Cluster动态扩容:架构原理与核心机制解析
一、哈希槽的数学本质与拓扑重构 核心图示:哈希槽分配演变 #mermaid-svg-YmcBfipoPA8LvxYF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YmcBfipoPA8LvxYF .error-icon{fill:#552222;}#mermaid-svg-Y…...
高考之外,英国国际大一:开启本科留学新征程
在竞争激烈的教育赛道上,高考一直被视为通向高等学府的重要关卡。然而,当千军万马挤在国内升学这座独木桥时,越来越多有远见的学生和家长将目光投向海外,英国本科留学凭借其灵活的录取机制和多元的升学路径,成为众多学…...
UML 图的细分类别及其应用
统一建模语言(UML,Unified Modeling Language)是一种用于软件系统建模的标准化语言,广泛应用于软件工程领域。UML 图分为多种类别,每种图都有其特定的用途和特点。本文将详细介绍 UML 图的细分类别,包括 类…...
Android10如何设置ro.debuggable=1?
说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除 作者:zhu6201976 目录 一、背景 二、如何解决? 三、操作步骤 一、背景 Android 10 开始的限制:ro.debuggable 是只读属性 从 …...
每日算法刷题计划Day12 5.21:leetcode不定长滑动窗口求最短/最长3道题,,用时1h40min(有点长了)
求最短/最小 一般题目都有「至少」的要求。 想窗口成立的条件,right右移增强条件,然后while循环left右移最终破坏条件 模版套路 在while循环内更新答案 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int …...
JUC高并发编程
1. JUC概述 1.1 什么是JUC JUC时java.util.concurrent工具包的简称。这是一个处理线程的工具包,JDK1.5开始出现的。 1.2 进程和线程的概念 1.2.1 进程与线程 打开一个软件,就开启了一个进程,一个进程会包括很多个线程,线程是…...
算法--js--电话号码的字母组合
题:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 function letterCombinations (digits){if (!digits.length)…...
数据库blog4_数据库软件的设计方法与实际架构
🌿数据库的设计 由上一章可以得出数据库着重关注数据的逻辑结构和存储结构。即这是数据库设计的核心,但详细的设计结构也要研究。以下是介绍 🍂数据库架构思路 ● 数据库本身 数据(Data) 数据:数据库中存储的实际信息,是用户存储…...
Kubernetes中runnable接口的深度解析与应用
在 Kubernetes 或其他 Go 项目中,runnable 接口定义了一个通用的运行契约,允许不同类型的组件通过统一的接口启动和管理生命周期。以下是详细解析: 1. 接口定义分析 type runnable interface {RunWithContext(ctx context.Context) error }关…...
curl: (35) Peer reports incompatible or unsupported protocol version.
这个错误信息表明在使用 curl 命令时遇到了 TLS 协议版本不兼容的问题。这通常是因为 curl 和服务器之间在协商 TLS 协议版本时出现了问题。在 CentOS 7 中,你可以尝试以下解决方案: 一、使用--tlsv1.2选项 尝试在 curl 命令中添加 --tlsv1.2 选项&…...
算法竞赛板子
算法竞赛板子 目录 1. ST表_区间最值_gcd_按位与_按位或 2. 树状数组 3. 快读 4. 带权并查集 5. 欧拉筛 6. 组合数 7. lucas定理求组合数 8. 离散化 9. 线形基 10. 主席树 11. 约瑟夫环 12. tarjan 求静态LCA 13. tarjan 求无向图割点 14. tarjan 求无向图割点后的连通块 15.…...
Vulkan 动态渲染
前言 开发环境:Vulkan 1.3.2 Vulkan SDK VS 2022。语言 C vulkan.hpp。依赖vk-bootstrap,SDL3。 很久以前学Vulkan学得不彻底,写引擎的时候才发现那么困难,于是重新回来巩固一下Vulkan基础。并发现了很多小细节大学问。 动态渲…...
【亲测有效】Ubuntu22.04安装黑屏重启进入系统卡死
一:进入U盘安装引导时黑屏 问题描述:选择 ‘try or install ubuntu’ ,开始安装,出现黑屏。 解决方案: 1.安装时,先选择" try or install ubuntu", 此时不要按enter,按"e&quo…...
wps编辑技巧
1、编辑模式 2、图片提取方法:右键保存图片 可以直接右键保存下来看看是否是原始图,如果歪着的图,可能保存下来是正的,直接保存试下 3、加批注...
磁盘分区与挂载——笔记
1.磁盘分区 磁盘分区是将物理磁盘划分为多个逻辑区域的过程。每个分区可视为独立的存储单元,拥有独立的文件系统,可安装不同操作系统或存放不同类型数据。例如,将硬盘分为系统盘(存放操作系统)、数据盘(存…...
安卓基础(代码解析)
Build.VERSION.SDK_INT > Build.VERSION_CODES.M && !Settings.canDrawOverlays(this) Build.VERSION.SDK_INT > Build.VERSION_CODES.M Build.VERSION.SDK_INT:获取当前Android系统的API版本号,每个Android版本都有一个对应的API版本号…...
基于Android的XX校园交流APP
开发语言:Java框架:ssmAndroidJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7数据库工具:Navicat12开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 系统展示 APP登录 APP首页…...
tshark的使用技巧(wireshark的命令行,类似tcpdump):转换格式,设置filter
tshark的使用技巧(wireshark的命令行,类似tcpdump):转换格式,设置filter tshark一般在 C:\Program Files\Wireshark 使用管理员权限 打开cmd tshark -D 列出支持抓包的接口: c:\Program Files\Wiresh…...
TCP全连接和tcpdump抓包实现
1.全连接队列 listen函数的第二个参数backlog1,就是TCP全连接队列的长度。 客服端进行连接进入established状态后,服务器如果处于忙碌状态没有调用accept函数将连接取走,这个连接就会呆在TCP全连接队列中,直到上层调用函数accep…...
Windows安装Jenkins Jenkins打包部署
1、 start.cmd echo off title jenkins SET JENKINS_HOMED:\tools\Jenkins\home SET JAVA_HOMED:\developtools\jdk-11.0.8 D:\developtools\jdk-11.0.8\bin\java.exe -jar D:\tools\Jenkins\jenkins.war --httpPort8089 pause执行start.cmd 报错:是因为原来jdk8…...
目标检测:YOLO 模型详解
目录 一、YOLO(You Only Look Once)模型讲解 YOLOv1 YOLOv2 (YOLO9000) YOLOv3 YOLOv4 YOLOv5 YOLOv6 YOLOv7 YOLOv8 YOLOv9 YOLOv10 YOLOv11 YOLOv12 其他变体:PP-YOLO 二、YOLO 模型的 Backbone:Focus 结构 三、…...
85本适合AI入门的人工智能书籍合集免费资源
宝藏资源!分享85本适合AI初学者入门人工智能的书籍合集给大家下载,都是epub格式的,方便大家阅读,文末给大家提供免费下载方式,主要包括如下电子书: Julia机器学习核心编程:人人可用的高性能科学…...