热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pstree和ss命令详解

pstree查看进程树将所有进程以树状形式显示,表示进程间的关系以init进程(PID为1)为根或者指定PID的进程为根init进程,它是内核启动的第一个用户级进程pstree-V
pstree查看进程树

将所有进程以树状形式显示,表示进程间的关系
以init进程(PID为1)为根或者指定PID的进程为根
init进程,它是内核启动的第一个用户级进程

pstree -V查看版本,这里介绍22.15

root@ubuntusvn:~# pstree -V
pstree (PSmisc) 22.15
版权所有 (C) 1993-2009 Werner Almesberger 和 Craig Small

PSmisc 无任何保证。
该程序为自由软件,欢迎你在 GNU 通用公共许可证(GPL) 下重新发布。
详情可参阅 COPYING 文件。

相同进程或线程合并显示,进程名前有相同进程的数量,只显示进程名,进程的子线程用大括号{}表示

root@ubuntusvn:~# pstree 
init─┬─acpid
     ├─atd
     ├─cron
     ├─dbus-daemon
     ├─6*[getty]
     ├─httpd───10*[httpd]
     ├─irqbalance
     ├─mysqld───149*[{mysqld}]
     ├─nginx───6*[nginx]
     ├─php5-fpm───5*[php5-fpm]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─snmpd
     ├─sshd───sshd───bash───pstree
     ├─su───java───66*[{java}]
     ├─udevd───2*[udevd]
     ├─upstart-socket-
     ├─upstart-udev-br
     ├─vim
     ├─vsftpd
     ├─whoopsie───{whoopsie}
     └─wrapper-linux-x─┬─java───56*[{java}]
                       └─{wrapper-linux-x}

pstree -n 按进程号排序

root@ubuntusvn:~# pstree -n
init─┬─upstart-udev-br
     ├─udevd───2*[udevd]
     ├─vsftpd
     ├─upstart-socket-
     ├─sshd───sshd─┬─bash
     │             └─bash───pstree
     ├─rsyslogd───3*[{rsyslogd}]
     ├─dbus-daemon
     ├─6*[getty]
     ├─cron
     ├─atd
     ├─acpid
     ├─irqbalance
     ├─whoopsie───{whoopsie}
     ├─wrapper-linux-x─┬─{wrapper-linux-x}
     │                 └─java───56*[{java}]
     ├─httpd───10*[httpd]
     ├─mysqld───76*[{mysqld}]
     ├─su───java───66*[{java}]
     ├─php5-fpm───5*[php5-fpm]
     ├─snmpd
     ├─vim
     └─nginx───6*[nginx]

pstree -p显示进程及其子线程,并且显示PID
pstree -c显示进程及其子线程,与pstree -p相同,只是不显示PID

root@ubuntusvn:~# pstree -p
init(1)─┬─acpid(1040)
        ├─atd(1039)
        ├─cron(1038)
        ├─dbus-daemon(968)
        ├─getty(1021)
        ├─getty(1027)
        ├─getty(1031)
        ├─getty(1032)
        ├─getty(1035)
        ├─getty(2519)
        ├─httpd(1635)─┬─httpd(980)
        │             ├─httpd(2443)
        │             ├─httpd(2736)
        │             ├─httpd(3571)
        │             ├─httpd(3804)
        │             ├─httpd(5208)
        │             ├─httpd(5223)
        │             ├─httpd(5334)
        │             ├─httpd(30936)
        │             └─httpd(31365)
        ├─irqbalance(1140)
        ├─mysqld(2229)─┬─{mysqld}(2241)
        │              ├─{mysqld}(2242)
        │              ├─{mysqld}(2243)
        │              ├─{mysqld}(2244)
        │              ├─{mysqld}(2245)
        │              ├─{mysqld}(2246)
        │              ├─{mysqld}(2247)
        │              ├─{mysqld}(2248)
        │              ├─{mysqld}(2249)
        │              ├─{mysqld}(2250)
        │              ├─{mysqld}(2252)
        │              ├─{mysqld}(2253)
        │              ├─{mysqld}(2254)
        │              ├─{mysqld}(2255)
        │              ├─{mysqld}(2264)
        │              ├─{mysqld}(9669)
        │              ├─{mysqld}(11878)
        │              ├─{mysqld}(11881)
        │              ├─{mysqld}(11905)
        │              ├─{mysqld}(11907)
        │              ├─{mysqld}(11909)
        │              ├─{mysqld}(11910)
........

pstree -p [PID] 以指定PID的进程为根,显示进程名和进程号

root@ubuntusvn:~# pstree -p 30395
nginx(30395)─┬─nginx(30396)
             ├─nginx(30397)
             ├─nginx(30398)
             ├─nginx(30399)
             ├─nginx(30400)
             └─nginx(30401)

pstree -u显示进程所属用户名

root@ubuntusvn:~# pstree -u
init─┬─acpid
     ├─atd(daemon)
     ├─cron
     ├─dbus-daemon(messagebus)
     ├─6*[getty]
     ├─httpd(svnuser)───10*[httpd]
     ├─irqbalance
     ├─mysqld(mysql)───71*[{mysqld}]
     ├─nginx───6*[nginx(nginx)]
     ├─php5-fpm───5*[php5-fpm(www-data)]
     ├─rsyslogd(syslog)───3*[{rsyslogd}]
     ├─snmpd(snmp)
     ├─sshd───sshd───bash───pstree
     ├─su(artifactory)───java───66*[{java}]
     ├─udevd───2*[udevd]
     ├─upstart-socket-
     ├─upstart-udev-br
     ├─vim
     ├─vsftpd
     ├─whoopsie(whoopsie)───{whoopsie}
     └─wrapper-linux-x(svnuser)─┬─java───56*[{java}]
                                └─{wrapper-linux-x}

pstree -a 显示每个程序的完整指令,包含路径,可能显示不全,配合-l才完整显示

root@ubuntusvn:~# pstree -a
init    
  ├─acpid -c /etc/acpi/events -s /var/run/acpid.socket
  ├─atd
  ├─cron
  ├─dbus-daemon --system --fork --activation=upstart
  ├─getty -8 38400 tty4
  ├─getty -8 38400 tty5
  ├─getty -8 38400 tty2
  ├─getty -8 38400 tty3
  ├─getty -8 38400 tty6
  ├─getty -8 38400 tty1
  ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   └─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  ├─irqbalance
  ├─mysqld
  │   └─96*[{mysqld}]
  ├─nginx
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   └─nginx                   
  ├─php5-fpm      
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   └─php5-fpm                                         
  ├─rsyslogd -c5
  │   └─3*[{rsyslogd}]
  ├─snmpd -Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid
  ├─sshd -D
  │   └─sshd    
  │       └─bash
  │           └─pstree -a
  ├─su - artifactory --shell=/bin/sh -c exec /tar/artifactory-2.5.1.1/bin/artifactory.init /tar/artifactory-2.5.1.1/etc/jetty.xml >>/tar/artifactory-2.5.1.1/logs/consoleout.log 2>&1
  │   └─java -server -Xms1g -Xmx1g -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31-XX:+Use
  │       └─66*[{java}]
  ├─udevd --daemon
  │   ├─udevd --daemon
  │   └─udevd --daemon
  ├─upstart-socket- --daemon
  ├─upstart-udev-br --daemon
  ├─vim erp.conf.sav
  ├─vsftpd
  ├─whoopsie
  │   └─{whoopsie}
  └─wrapper-linux-x /opt/csvn/bin/../data/conf/csvn-wrapper.conf wrapper.syslog.ident=csvn wrapper.pidfile=/opt/csvn/bin/../data/run/csvn.pid wrapper.name=csvnwrapper.displayname
      ├─java -XX:MaxPermSize=128m -Djetty.home=../appserver -Djetty.port=3343 -Djetty.ssl.port=4434 -Xms64m -Xmx512m -Djava.library.path=../lib -classpath ../lib/wrapper.jar-Dwrapper
      │   └─56*[{java}]
      └─{wrapper-linux-x}

pstree -l 不截断长行,一般与-a连用,显示完整的命令路径

root@ubuntusvn:~# pstree -al
init
  ├─acpid -c /etc/acpi/events -s /var/run/acpid.socket
  ├─atd
  ├─cron
  ├─dbus-daemon --system --fork --activation=upstart
  ├─getty -8 38400 tty4
  ├─getty -8 38400 tty5
  ├─getty -8 38400 tty2
  ├─getty -8 38400 tty3
  ├─getty -8 38400 tty6
  ├─getty -8 38400 tty1
  ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   └─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  ├─irqbalance
  ├─mysqld
  │   └─76*[{mysqld}]
  ├─nginx
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   └─nginx                   
  ├─php5-fpm      
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   └─php5-fpm                                         
  ├─rsyslogd -c5
  │   └─3*[{rsyslogd}]
  ├─snmpd -Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid
  ├─sshd -D
  │   └─sshd
  │       ├─bash
  │       └─bash
  │           └─pstree -al
  ├─su - artifactory --shell=/bin/sh -c exec /tar/artifactory-2.5.1.1/bin/artifactory.init /tar/artifactory-2.5.1.1/etc/jetty.xml >>/tar/artifactory-2.5.1.1/logs/consoleout.log 2>&1
  │   └─java -server -Xms1g -Xmx1g -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Djava.awt.headless=true -XX:NewSize=512m -XX:MaxNewSize=512m -XX:-UseConcMarkSweepGC -XX:+UseParNewGC -server -Djetty.home=/tar/artifactory-2.5.1.1 -Dartifactory.home=/tar/artifactory-2.5.1.1 -Dfile.encoding=UTF8 -cp /tar/artifactory-2.5.1.1/artifactory.jar:/tar/artifactory-2.5.1.1/lib/jetty-ajp-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-continuation-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-http-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-io-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-security-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-server-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-servlet-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-util-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-webapp-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-xml-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/servlet-api-2.5.jar:/tar/artifactory-2.5.1.1/lib/wrapper.jar org.artifactory.standalone.main.Main /tar/artifactory-2.5.1.1/etc/jetty.xml
  │       └─66*[{java}]
  ├─udevd --daemon
  │   ├─udevd --daemon
  │   └─udevd --daemon
  ├─upstart-socket- --daemon
  ├─upstart-udev-br --daemon
  ├─vim erp.conf.sav
  ├─vsftpd
  ├─whoopsie
  │   └─{whoopsie}
  └─wrapper-linux-x /opt/csvn/bin/../data/conf/csvn-wrapper.conf wrapper.syslog.ident=csvn wrapper.pidfile=/opt/csvn/bin/../data/run/csvn.pid wrapper.name=csvn wrapper.displayname=CSVN Console wrapper.daemOnize=TRUE wrapper.statusfile=/opt/csvn/bin/../data/run/csvn.status wrapper.java.statusfile=/opt/csvn/bin/../data/run/csvn.java.status
      ├─java -XX:MaxPermSize=128m -Djetty.home=../appserver -Djetty.port=3343 -Djetty.ssl.port=4434 -Xms64m -Xmx512m -Djava.library.path=../lib -classpath ../lib/wrapper.jar -Dwrapper.key=fbjCafq7XJRD2XTW -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.disable_console_input=TRUE -Dwrapper.pid=1295 -Dwrapper.version=3.4.1 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.tanukisoftware.wrapper.WrapperJarApp ../appserver/start.jar
      │   └─56*[{java}]
      └─{wrapper-linux-x}

pstree -A 用 ASCII 画线符

root@ubuntusvn:~# pstree -A
init-+-acpid
     |-atd
     |-cron
     |-dbus-daemon
     |-6*[getty]
     |-httpd---10*[httpd]
     |-irqbalance
     |-mysqld---86*[{mysqld}]
     |-nginx---6*[nginx]
     |-php5-fpm---5*[php5-fpm]
     |-rsyslogd---3*[{rsyslogd}]
     |-snmpd
     |-sshd---sshd---bash---pstree
     |-su---java---66*[{java}]
     |-udevd---2*[udevd]
     |-upstart-socket-
     |-upstart-udev-br
     |-vim
     |-vsftpd
     |-whoopsie---{whoopsie}
     `-wrapper-linux-x-+-java---56*[{java}]
                       `-{wrapper-linux-x}

pstree -h 高亮显示当前正在使用的进程
技术图片

pstree -H [PID] 高亮显示 "进程号" 指定的进程及其父进程
技术图片

pstree -s [PID] 显示所选进程的父级进程

root@ubuntusvn:~# pstree -s 5707
init───su───java───{java}

pstree -G 使用 VT100 划线符
pstree -U 使用 UTF-8 (Unicode) 划线符

ss获取socket统计信息

它可以显示和netstat类似的内容。能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。

ss -h ss的使用帮助

root@ubuntusvn:~# ss -h
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help           this message
   -V, --version        output version information
   -n, --numeric        don‘t resolve service names
   -r, --resolve       resolve host names
   -a, --all            display all sockets
   -l, --listening      display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes      show process using socket
   -i, --info           show internal TCP information
   -s, --summary        show socket usage summary

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet display PACKET sockets
   -t, --tcp            display only TCP sockets
   -u, --udp            display only UDP sockets
   -d, --dccp           display only DCCP sockets
   -w, --raw            display only RAW sockets
   -x, --unix           display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

ss -V ss版本

root@ubuntusvn:~# ss -V
ss utility, iproute2-ss111117

ss -n 不解析服务名称,显示服务对应的端口号,比如mysql:3306;https:443;ssh:22。Ss命令直接显示服务名称

[root@localhost ~]# ss
状态    接收队列  发送队列    本地地址:端口号           对等地址:端口号
State      Recv-Q        Send-Q      Local Address:Port           Peer Address:Port
ESTAB      0         0           192.168.1.191:https          192.168.5.89:58426
......
[root@localhost ~]# ss -n
State      Recv-Q        Send-Q      Local Address:Port           Peer Address:Port
ESTAB      0         0           192.168.1.191:443           192.168.5.89:58426
......

ss -r 解析主机名

root@ubuntusvn:~# ss -r
State      Recv-Q   Send-Q     Local Address:Port       Peer Address:Port   
ESTAB      0         0          ubuntusvn:https        192.168.5.89:58426
......

ss -l 统计处于监听状态的socket,默认情况下它们是被忽略的

root@ubuntusvn:~# ss -l
State      Recv-Q   Send-Q    Local Address:Port     Peer Address:Port   
LISTEN     0            50        *:3306                    *:*       
LISTEN     0            50        :::3343                   :::*       
LISTEN     0        511       *:http                    *:*       
LISTEN     0            100       :::4434                   :::*       
LISTEN     0        511       *:9876                    *:*       
LISTEN     0        32        *:ftp                 *:*       
LISTEN     0        128       :::ssh                    :::*       
LISTEN     0        128       *:ssh                 *:*       
LISTEN     0        511       *:https                   *:*       
LISTEN     0        511       *:4444                    *:*       
LISTEN     0        1         127.0.0.1:32000           *:*       
LISTEN     0        50        *:8001                    *:*       
LISTEN     0        511       *:9990                    *:*       
LISTEN     0        128       127.0.0.1:9000            *:*       
LISTEN     0        511       *:8008                    *:* 

ss -a 显示所有状态的socket(ESTAB、CLOSE-WAIT、TIME-WAIT、LISTEN等)

ss -o 显示计时器信息,keepalive默认为120min,可以设置;on是重发时间

[root@localhost ~]# ss -o
State      Recv-Q        Send-Q      Local Address:Port           Peer Address:Port
ESTAB      0         0           192.168.1.191:mysql         192.168.5.17:64906         timer:(keepalive,17min,0)
ESTAB      0         52           192.168.1.191:ssh            192.168.5.2:57611         timer:(on,448ms,0)
......

ss -e 显示详细的socket信息

[root@localhost ~]# ss -e
State      Recv-Q     Send-Q      Local Address:Port         Peer Address:Port
ESTAB      0      0        192.168.1.191:3306          192.168.5.82:63573    timer:(keepalive,7min43sec,0) uid:107 ino:13561506 sk:ffff8801135f57c0
ESTAB      0      0           192.168.1.191:3306         192.168.1.203:54196    timer:(keepalive,12min,0) uid:107 ino:13569965 sk:ffff8801b4f16540
ESTAB      0      52          192.168.1.191:ssh            192.168.5.2:57611    timer:(on,440ms,0) ino:12131853 sk:ffff88006b9586c0.
.....

ss -m 显示socket内存使用情况

[root@localhost ~]# ss -m
State      Recv-Q     Send-Q      Local Address:Port         Peer Address:Port
ESTAB      0      0               192.168.1.191:https        192.168.5.240:58565    mem:(r0,w0,f0,t0)
......

ss -p 显示使用socket的进程

[root@localhost ~]# ss -p | grep mysql
State      Recv-Q     Send-Q      Local Address:Port         Peer Address:Port
ESTAB      0      0           192.168.1.122:mysql        192.168.1.121:53969    users:(("mysqld",24205,110))
ESTAB      0      0           192.168.1.122:mysql        192.168.1.121:54783    users:(("mysqld",24205,45))
ESTAB      0      0           192.168.1.122:mysql        192.168.5.204:49995    users:(("mysqld",24205,106))
......

ss -i显示 tcp 内部信息

root@ubuntusvn:~# ss -i
State  Recv-Q Send-Q Local Address:Port      Peer Address:Port
ESTAB  0      0  192.168.1.122:mysql  192.168.1.121:54678   cubic wscale:7,7 rto:207 rtt:7.75/12 ato:40 cwnd:10 send 14.9Mbps rcv_rtt:1 rcv_space:14480
......

ss -s 显示socket使用概况

[root@localhost ~]# ss -s
Total: 509 (kernel 589)
TCP:   368 (estab 249, closed 9, orphaned 0, synrecv 0, timewait 1/0), ports 201

Transport Total     IP        IPv6
*         589       -         -        
RAW       0         0         0        
UDP       0         0         0        
TCP       359       79        280      
INET      359       79        280      
FRAG      0         0         0  

ss -4 仅显示 IPv4
ss -6 仅显示 IPv6

root@ubuntusvn:~# ss -6
State      Recv-Q Send-Q    Local Address:Port           Peer Address:Port   
ESTAB       0   0          ::ffff:127.0.0.1:31000       ::ffff:127.0.0.1:32000   
ESTAB       0   0          ::ffff:192.168.1.191:2100        ::ffff:208.75.196.43:http  

ss -t 仅显示 TCP 套接字
ss -u仅显示 ?UDP套接字
ss -d 仅显示 DCCP 套接字
ss -w 仅显示 ?RAW 套接字
ss -x 仅显示 Unix 套接字

比较netstat和ss的效率,ss比netstat快很多

root@ubuntusvn:~# time ?netstat ?-at
real    0m2.667s
user    0m0.000s
sys     0m0.020s

root@ubuntusvn:~# time ?ss
real    0m0.013s
user    0m0.000s
sys     0m0.008s

pstree和ss命令详解


推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
author-avatar
goxtop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有