一、文件系统测试工具简介

1、LTP

LTP(Linux Test Project)是由SGI和IBM联合发起的项目,提供一套验证Linux系统可靠性、健壮性、稳定性的测试套件,也可用来进行POSIX兼容测试和功 能性测试。LTP提供了2000多个测试工具,可以根据需要自行进行定制。同时,LTP还是一个优秀的自动化测试框架,基于它通过设计测试用例和测试工具 可以实现更多功能的测试自动化。

稳定性测试相关参考:

2、fstest

fstest是一套简化版的文件系统POSIX兼容性测试套件,它可以工作在FreeBSD, Solaris, Linux上用于测试UFS, ZFS, ext3, XFS and the NTFS-3G等文件系统。fstest目前有3601个回归测试用例,测试的系统调用覆盖chmod, chown, link, mkdir, mkfifo, open, rename, rmdir, symlink, truncate, unlink。

该用例测试以上几个常用的文件系统调用,涉及用例约2K条左右,基于Android系统的测试,需要将相关测试用例的shell脚本稍微做下适配,可以基 于busybox下的相关命令(如dirname修改为busybox dirname),另外还需要适配主脚本“misc.sh”里面的相关命令

3、locktests

locktest用于fcntl锁功能的压力测试。运行时,主进程先在指定文件区域设置字节范围的记录锁,然后多个从进程尝试在该文件区域执行read, write, 加新锁操作。这些操作结果是可预期的(矩阵如下),如果操作结果与预期一致则测试通过,否则测试失败。

Expected results

Here is the table of expected results, depending on :Slave test operations (READ, WRITE, SET A WRITE LOCK … )

Master Operation (SET A READ LOCK, SET A WRITE LOCK )

Slave types (Processes, threads)

Locking profile (POSIX locking, Mandatory locking)Master

Slave typeTest operationadvisorylockingmandatorylocking

read lockwrite lockread lockwrite lock

threadset a read lockAllowedAllowedAllowedAllowed

set a write lockAllowedAllowedAllowedAllowed

readAllowedAllowedAllowedAllowed

writeAllowedAllowedAllowedAllowed

processset a read lockAllowedDeniedAllowedDenied

set a write lockDeniedDeniedDeniedDenied

readAllowedAllowedDeniedAllowed

writeAllowedAllowedDeniedDenied

4、PCTS

PCTS(Posix Complicance Testing Suite),POSIX一致性测试套件,是从POSIX标准出发,通过严格的、定量地测试,以验证、评价、认证操作系统符合POSIX标准的程序的测试 软件。IEEE std2003.1是PCTS的设计标准,常见的PCTS主要有VSX-PCTS、NIST-PCTS、OPTS-PCTS三种实现,上面提供的连接为 VSX-PCTS。

5、iozone

Iozone是目前应用非常广泛的文件系统测试标准工具,它能够产生并测量各种的操作性能,包括read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write等操作。Iozone目前已经被移植到各种体系结构计算机和操作系统上,广泛用于文件系统性能测试、分析与评估的标准工具。

6、Postmark

Postmark 是由著名的 NAS 提供商 NetApp 开发,用来测试其产品的后端存储性能。Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁、大量地存取小 文件。 Postmark 的测试原理是创建一个测试文件池。文件的数量和最大、最小长度可以设定,数据总量是一定的。创建完成后, Postmark 对文件池进行一系列的事务( transaction )操作,根据从实际应用中统计的结果,设定每一个事务包括一次创建或删除操作和一次读或添加操作,在有些情况下,文件系统的缓存策略可能对性能造成影响, Postmark 可以通过对创建 / 删除以及读 / 添加操作的比例进行修改来抵消这种影响。事务操作进行完毕后, Post 对文件池进行删除操作,并结束测试,输出结果。 Postmark是用随机数来产生所操作文件的序号,从而使测试更加贴近于现实应用。输出结果中比较重要的输出数据包括测试总时间、每秒钟平均完成的事务 数、在事务处理中平均每秒创建和删除的文件数,以及读和写的平均传输速度。

一、Postmark原理

Postmark是由着名的NAS提供商NetApp开发,用来测试其产品的后端存储性能。

Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁、大量地存取小文件。

Postmark的测试原理是创建一个测试文件池。文件的数量和最大、最小长度可以设定,数据总量是一定的。创建完成后,Postmark对文件池进行一 系列的事务(transaction)操作,根据从实际应用中统计的结果,设定每一个事务包括一次创建或删除操作和一次读或添加操作,在有些情况下,文件 系统的缓存策略可能对性能造成影响,Postmark可以通过对创建/删除以及读/添加操作的比例进行修改来抵消这种影响。事务操作进行完毕后,Post 对文件池进行删除操作,并结束测试,输出结果。

Postmark是用随机数来产生所操作文件的序号,从而使测试更加贴近于现实应用。

输出结果中比较重要的输出数据包括测试总时间、每秒钟平均完成的事务数、在事务处理中平均每秒创建和删除的文件数,以及读和写的平均传输速度。

二.Postmark的安装:

postmark软件只有一个.c文件,在gcc下编译即可。假定编译之后的可执行文件名为postmark。

三.postmark命令集3.1 postmark命令解析

postmark的操作是在命令行的环境下的。

一个配置文件(在命令行中被指定)包含了一组可以直接运行的命令。

在命令行提示下,有如下命令:

pm > ?

set size : 设置文件大小的上限和下限。(low bound and high bound)

set number : 设置并发的文件数(simultaneous files)

set seed : 为随机数产生器设置种子(sets seed for random number generator)

set transactions : 设置事务处理的数目(set number of transactions)

set location : 设定工作文件的location(sets location of working files)

set read : 设定读取block的大小(sets read block size)

set write : 设定写block的大小(sets write block size)

set buffering : (set usage of buffered I/O)

set bias read : 设置读操作发生的频率(sets the chance of choosing read over append)

set bias create : 设置删除操作发生的频率(sets the chance of choosing create over delete)

run : 运行该软件

show : 显示当前的配置信息(displays current configuration)

help : 显出可用的命令(prints out available commands )

quit : Exit program

pm >

show命令显示可用于下次run的当前的配置信息。系统的默认配置信息如下:

pm>show

Current configuration is:

Transactions: 500 事务处理的数目是500个;

Files range between 500 bytes and 9.77 kilobytes in size

文件大小的上下限分别是500字节和9.77K字节。

Random number generator seed is 42 随机数产生器的种子是42

The base number of files is 500 并发的文件数是500个

The working directory is: . 工作目录是 .

Block sizes are: read=512 bytes, write=512 bytes 块大小是:读:512字节,写:512字节

Biases are: read/append=5, create/delete=5

读/追加发生的概率相等;创建/删除发生的概率相等。

Using Unix buffered file I/O 文件操作将使用标准的缓冲区I/O

pm>

If this configuration is run:

500 files will be initially created, between .. and 10 Kilobytes in size

The files will be processed in the current directory

All reads will occur in 512 byte blocks

All writes will occur in 512 byte blocks

Reads and appends are equally likely to occur

Creates and deletes are equally likely to occur

File operations will be performed using the standard buffered I/O in the runtime library

部分命令解释:

pm > set size 10000 20000 表示文件大小的下限是10000字节,文件大小的上限是20000字节;

pm > set size 15000 表示文件的大小只能固定是15000字节,不能变化。

pm > set number 整数 注意:后面的整数可以是任何大于1的整数,但是要保证文件系统有足够的空间来存放结果文件;设置并发的文件数;

pm > set seed 整数; 表示随机数产生器的种子。注意:任何整数都是可以的。但是这个项很少被自行设置,因为改变这个数之后测试结果将与原先测试的结果不同。

pm > set transaction 表示即将到来的下一次run中读/追加、创建/删除等操作的事务数目。任何大于1的整数都是可以的。

pm > set location 表示程序运行过程中产生文件的工作目录。例如:pm > set location user2/tmp

pm > set read 整数 以及 pm > set write 整数 表示从文件中一次读取的数据的大小或者一次写进文件的数据的大小。这两个整数的取值范围是:1

pm > set buffering true(默认是true) 或者 pm > set buffering false

true表示buffering is enabled.

false表示buffering is not enabled.

pm > set bias read整数 和 pm > set bias create 整数 两个整数分别表示该操作发生的频率;

其取值范围是:-1,0,1,2,3,…,10

当取值为-1时,表示系统禁止read和append这两个操作;取值从0到10变化过程中,值越小,表示read操作发生的几率小于append操作发 生的几率;值越大,表示read操作发生的几率大于append操作发生的几率。默认是5,表示read和append两种操作发生的几率相等。

同样,对于pm > set bias write 整数 和 pm > set bias delete 整数 两个整数分别表示该操作发生的频率;

其取值范围是:-1,0,1,2,3…10;

当取值为-1时,表示系统禁止write和delete这两个操作;取值从0到10变化过程中,值越小,表示write操作发生的几率小于delete操 作发生的几率;值越大,表示write操作发生的几率大于delete操作发生的几率。默认是5,表示write和delete两种操作发生的几率相等。

set bias read n n为read/append中read所占比例 n/10

set bias create n create/delete中create所占比例 n/10

set report verbose(default)/terse 设置报告模式,terse模式的输出没有文字说明,便于通过批处理运行多个测试之后,使用excel对结果进行分析

pm > run 命令表示在当前的配置下运行程序

7、fio

fio是一个I/O标准测试和硬件压力验证工具,它支持13种不同类型的I/O引擎(sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio等),I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs等等。fio可以支持块设备和文件系统测试,广泛用于标准测试、QA、验证测试等,支持Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, HP-UX, Windows等操作系统。

8、filebench

Filebench 是一款文件系统性能的自动化测试工具,它通过快速模拟真实应用服务器的负载来测试文件系统的性能。它不仅可以仿真文件系统微操作(如 copyfiles, createfiles, randomread, randomwrite ),而且可以仿真复杂的应用程序(如 varmail, fileserver, oltp, dss, webserver, webproxy )。 Filebench 比较适合用来测试文件服务器性能,但同时也是一款负载自动生成工具,也可用于文件系统的性能。

9、bonnie

参考网站:

Bonnie++是一个用来测试UNIX文件系统性能的测试工具,主要目的是为了找出系统的性能瓶颈,其名字来源于作者喜爱的歌手Bonnie Raitt。

Bonnie++在类似的测试工具和软件中不是最大的和最复杂的,但是在易用性和输出结果显示方面很不错。

为什么需要bonnie++?

我们有以下假设:

内存是有限的,因此cache经常会达到上限;因此

许多I/O操作最终需要真正执行I/O;因此

有必要测试真实I/O的速度,而且

在UNIX文件系统中随机搜索是非常慢的;

Bonnie++做了什么?

Bonnie++在一个已知文件大小的文件上执行一系列的测试操作。如果不指定文件大小,Bonnie++默认使用100MB。这个默认大小对于大型服务器来说可能不够大,因此文件的大小最好比可用RAM的大小大一点,一般会要求大两倍。

Bonnie++的使用说明

Bonnie++将长时间的执行磁盘文件读写操作(中间不断给出进程报告),然后生成一个小而精的报告。

下载Bonnie++的源码;

解压tar -xzf bonnie++-1.03e.tgz

进入解压后的目录

编译Bonnie++:make

至此,Bonnie++就已经安装,并可以使用了。

命令:[cpp] view plaincopyprint?

01.#./Bonnie

02.You must use the "-u" switch when running as root.

03.usage: bonnie++ [-d scratch-dir] [-s size(MiB)[:chunk-size(b)]]

04. [-n number-to-stat[:max-size[:min-size][:num-directories]]]

05. [-m machine-name]

06. [-r ram-size-in-MiB]

07. [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]

08. [-q] [-f] [-b] [-D] [-p processes | -y]

09.

10.11.Version: 1.03e

方括号中的选项都是可选,其含义如下:

Bonnie

程序名字。

-d 起始路径

目录名字;Bonnie将在该目录下创建测试文件并进行读写,即为需要测试的文件系统挂载的目录。bonnie不会对目录名字进行任何特殊的解释,只是按照原名字使用。

-s size-in-MB

测试文件的大小,以MB为单位。默认是100MB大小。文件大小一定要是数倍于可用内存的大小,否则操作系统将会把文件的大部分文件cache到内存中,从而导致bonnie执行的真正的I/O次数非常少。建议设置至少为可用内存大小的2倍(另一种说法为4倍)。

-m machine-label

给出bonnie用来生成报告的标识。如果不使用该选项,bonnie将不在报告中提供特定标识。

-html

以html的格式输出测试结果

-m 机器名

实际上我们可以认为是本次测试的方案名,可以随便定义。默认是本机的hostname。

-r 内存大小

指定内存大小,这样可以通过-s参数创建r*2大小的文件,通常用于缩短测试时间,但是需要注意这样由于内存的cache可能导致测试结果的不准确

-x 测试的次数

-u 测试文件的属主和组,默认是执行bonnie++的当前用户和当前组

-g 测试文件的组,默认是执行bonnie++的当前用组

-b 在每次写文件时调用fsync()函数,对于测试邮件服务器或者数据库服务器这种通常需要同步操作的情况比较适合,而不使用该参数则比较适合测试copy文件或者编译等操作的效率。在此,我们的文件系统挂载在/mnt目录下,因此我们将工作目录定为/mnt

[cpp] view plaincopyprint?

01.[root@de18 bonnie++-1.03e]# ./bonnie++ -d /mnt -s 1000 -u root

02.Using uid:0, gid:0.

03.File size should be double RAM for good results, RAM is 1000M.

说明我们的文件大小设置小了,RAM的大小为1000M,因此我们设置文件大小为2000M:

#./bonnie++ -d /test -s 2000 -u root

则可以得到测试结果:

[cpp] view plaincopyprint?

01.Version 1.03e ——Sequential Output—— –Sequential Input- –Random-

02. -Per Chr- –Block– -Rewrite- -Per Chr- –Block– –Seeks–

03.Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP

04.de18 2000M 7849 44 16681 34 15773 37 60869 86 215620 36 9076 98

05. ——Sequential Create—— ——–Random Create——–

06. -Create– –Read— -Delete– -Create– –Read— -Delete–

07. files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP

08. 16 1993 24 8381 16 2545 11 2025 30 8922 17 2576 15

09.de18,2000M,7849,44,16681,34,15773,37,60869,86,215620,36,9075.7,98,16,1993,24,8381,16,2545,11,2025,30,8922,17,2576,15

测试结果分析:

Sequential Output部分表示写文件的相关信息

Sequential Input部分表示读文件的相关信息

Per Chr表示以字符为单位读写文件

Block表示以block为单位读写文件

Rewrite表示修改并重写已经存在的文件的每一个block

K/sec表示每秒读或写文件的速率,以K为单位

%CP表示在某阶段执行操作时平均消耗的CPU

Sequential Output

1. Per Char

就是Per-Character的含义。使用putc()函数进行循环写入,每次写入的字节很小,基本上可以放入任意一种I-Cache中,这种情况下的CPU消耗在处理putc()代码和分配磁盘文件空间上。

2. Block

使用write(2)函数创建文件。这种情况下的CPU消耗只是在分配磁盘文件空间上。

3. Rewrite

使用read(2)函数读取文件,然后修改再用write(2)函数写回。由于文件的空间已经分配好,所以这种方式可以很有效地测试文件系统缓存和数据传输的速度。

Sequential Input

1. Per Char

使用getc()函数循环 读取文件内容

2. Block

使用read(2)函数循环读取文件内容,有效测试磁盘读取的效率。

Random Seek

默认3个seeks进程作8000次的测试。用read(2)函数读取文件的block,同时有10%的操作是用write(2)函数将block修改以 后写回文件中。在这个测试中,如果内存容量大于创建的文件大小,那么将会出现比较高的数值,而这个数值可能并不能准确反映磁盘本身的I/O效率。

Sequential Create和Radom Create

这两大类测试均是用创建,读取,删除大量的小文件来测试磁盘效率。文件名用7位数字和任意个数(0-12)的任意英文字母来组成。在Sequential部分,字母在数字之后,而Random部分则是字母在数字之前。

创建文件的最小值和最大值等参数可以在bonnie++命令行中用-n参数来控制。

最后需要注意的是,在测试RAID的时候,对于多CPU的系统,bonnie++并没有发挥CPU的最大潜力,也就是说bonnie++发出的I/O请求 通常不够达到CPU和磁盘的最大压力,这时候显示的吞吐量就不是存储设备能够达到的最大值。因此,这些数字智能作为在单CPU系统中操作的有效性指标。

二、内存测试工具简介

1、memtester

memtester是用户态工具,用于测试内存子系统的故障。非常方便,支持32位或64位Unix-like系统。对于硬件开发开发者来说,memtester可以定位到物理地址。

1、安装

下载获取memtester-4.3.0.tar.gz源码包。

#tar –zxvf memtester-4.3.0.tar.gz

#make

#make install

2、测试

./memtester [-p physaddrbase] [B|K|M|G] [loops]

其中:

Physaddrbase:需要测试的物理地址;

[B|K|M|G]:测试内存的大小;

[loops]:测试次数

案例:

# ./memtester -p 0x0a0000 4k 1二、网络带宽IO测试工具简介

在进行SDN研究和开发时经常要进行网络性能的测试,iperf是一款非常出色的网络性能测试工具(Mininet自带iperf)。

jperf是iperf的GUI接口,可以实时的以图形方式显示性能测试结果,并可以保存测试结果。jperf也需要调用iperf来完成测试,它只是iperf的GUI外壳而已,所以本质的还是要掌握iperf的用法。

1 iperf的下载与安装

由于是开发源代码的,可以下载源码进行编译安装。如果仅仅是测试只用的话,推荐直接使用编译好的二进制版本即可。

iperf的官方网址 :

jperf的下载链接:

2 使用方法

由于Iperf工具是基于服务器和客户端的工作模式,所以在进行测试之前应先在目标计算机上启动服务器端程序,Iperf客户端和服务器端程序其实都是同一个程序,只是使用了不同的命令选项而已。

iperf服务器端选项和启动:-s 以server模式启动,eg:*iperf –s* 。Server端为数据的接收端。

-D 以服务方式运行ipserf,eg:*iperf -s -D*

-R 停止iperf服务,针对-D,eg:iperf -s -R

-o   重定向输出报告或错误信息到指定文件。

-c  如果Iperf运行为服务器模式,则可利用-c参数指定一个客户端,本机将接受指定客户端的连接,但不支持UDP协议。

-P,--parallel #  设置Iperf服务模式下的最大连接数,默认值为0,表示不限制连接数量。

iperf客户端选项-b,--bandwidth 指定客户端通过UDP协议发送信息的带宽,默认值为1Mbit/s

-c,--client  指定Iperf服务器的主机名和IP地址

-d,--dualtest 同时进行双向传输测试

-n,--num 指定传输的字节数,eg:*iperf -c 222.35.11.23 -n 100000*

-r,--tradeoff 单独进行双向传输测试

-t,--time 指定Iperf测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5

-L,--listenport 指定一个端口,服务器将利用这个端口与客户机连接

-P, --parallel 设置Iperf客户端至Iperf服务器的连接数,默认值为1

-S, --tos  设置发出包的类型,具体类型请参阅man文档

-F 指定需要传输的文件

-T 指定ttl值

通用参数-f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:*iperf -c 222.35.11.23 -f K*

-i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2

-l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16

-m 显示tcp最大mtu

-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o ciperflog.txt

-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999

-u 使用udp协议

-w 指定TCP窗口大小,默认是8KB

-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)

-C 兼容旧版本(当server端和client端版本不一样时使用)

-M 设定TCP数据包的最大mtu值

-N 设定TCP不延时

-V 传输ipv6数据包

3 iperf应用实例

3.1 以服务器模式启动iperf

使用 iperf -s 命令将 Iperf 启动为 server 模式:iperf –s

————————————————————

Server listening on TCP port 5001

TCP window size: 8.00 KByte (default)

————————————————————

3.2 启动iperf客户端

向IP为10.230.48.65的主机发出TCP测试,并每2秒返回一次测试结果:iperf -c 10.230.48.65 -i 2

3.3 以Mbytes/sec为单位显示测试结果:iperf -c 10.230.48.65 -f M -i 2

3.4 设置TCP传输窗口大小为300Kiperf -s -w 300K

————————————————————

Server listening on TCP port 5001

TCP window size: 300 KByte

———————————————————

3.5 指定传输约1MB数据iperf -c 59.125.103.56 -f K -i 2 -w 300K –n 1000000

3.6 指定测试持续时间

指定测试持续时间为36秒:iperf -c 59.125.103.56 -f K -i 2 -w 300K –t 36

3.7 测试双向传输iperf -c 220.112.45.87 -f K -i 2 -w 300k -n 1000000 -d

3.8 UDP测试iperf -c 59.125.103.56 -f K -i 2 -w 300K –u

linux 测试程序性能,linux 压力测试性能IO MEM CPU相关推荐

  1. Linux下nvidia压力测试,一种服务器linux系统下GPU压力测试的监控方法与流程

    本发明属于服务器测试技术领域,具体涉及一种服务器linux系统下GPU压力测试的监控方法. 背景技术: 随着社会的快速发展,人们对高网络性能.快速存储.大量内存.超高计算能力的GPU的需求越来越大,产 ...

  2. ab压力测试工具linux,【Linux】ApacheBench(ab)压力测试工具

    AB的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比 ...

  3. 南柯服务器压力,性能/负载/压力测试 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    在面试测试人员的时候,这是一个很好的问题:你如何定义性能/负载/压力测试?在很多时候,人们都是将它们作为可互相替换的相同术语来使用,然而实际上他们之间的差异是比较大的.这个贴子是根据我自己的一些经验, ...

  4. Web 应用性能和压力测试工具 Gor

    Web 应用性能和压力测试工具 Gor 常见的 Web 应用的压力测试工具 Web 应用压力测试工具有很多,比如 Apache ab,node-ab,Apache JMeter, LoadRunner ...

  5. Windows开源Web服务器性能和压力测试工具

    linux有很多开源工具用来测试服务器负载,而windows上非常少,几乎没有除了几个复杂的JMeter WET等 将两个好用的工具是Linux版本通过Cygwin移植过来,方便广大windows人员 ...

  6. 终极Web应用性能和压力测试工具Gor

    什么是Gor 项目地址:https://github.com/buger/gor 官方描述 Gor is a simple http traffic replication tool written ...

  7. Portable Virtual Box+Kali Linux+Docker+WRK做压力测试

    需求:在Windows下安装Linux虚拟机,并安装docker,在docker镜像中安装WRK并进行"压力测试".主要考量是:(1)Windows下使用Linux,并进行前期的压 ...

  8. LINUX下简易网站压力测试--Webbench小记

    Webbench是一款小巧实用的网站压力测试工具,它是由 Lionbridge公司开发的.它的标准测试主要有两项内容:每秒钟相应请求数和每秒钟传输数据量.它最多可以模拟3万个并发连接去测试网站的负载能 ...

  9. Linux下Web网站压力测试工具Webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好用,安装使用也特别方便,并且非常小. 一,环境:linux 二,安装方式:编译安装 具体 ...

最新文章

  1. 栈和队列存储结构总结
  2. 清除DataTable中的空行记录
  3. Android inline hook手记
  4. 多核cpu应用场景_操作系统基础11-关于多核编程
  5. 使用JDK Logging - Java异常处理
  6. spring 数组中随机取几个_准备几个月,面试阿里耗时两周,最终凭借这些知识拿下阿里offer...
  7. 喜庆:上周阅读量5W,超过了99%的C友
  8. 从ISO 文件制作U盘启动盘.
  9. # ALPHACAM 橱柜门玻璃门反面加工插件
  10. 用latex生成pdf文件后,文本复制粘贴显示乱码
  11. 批发零售进销存 批发零售管理软件 批发零售店铺管理软件
  12. 企业如何推动流程管理
  13. 解决CTeX工具包中MikTeX编译TeX文件报错问题
  14. Linux环境重启系统网卡down,linux重启网卡命令有哪些
  15. 个人总结/IPC方法的优缺点和适用场景
  16. 华为服务器光盘安装系统按f几,服务器操作系统安装
  17. Ubuntu查找软件源
  18. 一步一步学Spring Boot(二)课程发布了~~~
  19. 2017年哈工大数理逻辑B期末考试参考答案(1)
  20. 解读ICDE‘22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

热门文章

  1. Java学习_从常用类到多线程引入
  2. python混淆_python实现混淆矩阵
  3. 安卓逆向笔记(课外资料)
  4. CS231n 之 INTRODUCTION
  5. 数据冒险之顺序表应用
  6. HTML标签列表(字母排序)
  7. 【君思智慧园区】如何打造产业社区?产业社区的打造思路有哪些?
  8. hdu - 3498 - whosyourdaddy(重复覆盖DLX)
  9. 动态规划系列之六01背包问题
  10. python用来做什么好_Python可以被用来做哪些神奇好玩的事情