Linux必懂知识大总结(上)

CPU

top

top:查看每个进程的情况

 

在top模式下,输入1:查看每个CPU的性能数据,注意观察是否有CPU100%占用率

 

CPU参数含义:

 

1)us过高表示Java应用程序消耗了大量CPU,需要定位是哪一个线程,并分析线程堆栈。

 

在top模式下,输入H:查看每个线程的性能信息

如果某个线程CPU利用率一直100%,则说明这个线程可能有死循环,也有可能是GC的问题。jstat命令可以查看GC情况,是不是产生了FullGC。

 

还可以把线程dump下来,看看是哪个线程、执行什么代码造成的CPU利用率高。

jstack PID | grep ‘nid=十六进制线程id’ > /dir

dump出来的线程ID(nid)是十六进制,TOP命令看到的线程ID是十进制的

 

2)sy过高表示花费了更多时间进行线程切换。同样需要查看Java线程的状态。

文件IO 磁盘

ls

显示文件夹下的文件详情,包括大小

ls –al

a表示all,包括隐藏文件

stat(查看文件详情)

stat filepath

软硬连接

软硬连接(inode这块,ln / ln -s)

硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。硬链接可由命令 link 或 ln 创建。

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。

ln -s   source  target

文本操作命令

cat     由第一行开始显示内容,并将所有内容输出

tac     从最后一行倒序显示内容,并将所有内容输出

more    根据窗口大小,一页一页的显示文件内容

less    和more类似,但其优点可以往前翻页,而且进行可以搜索字符

head    只显示头几行

tail    只显示最后几行

sort、uniq

sort 进行排序。

 

$ sort [-fbMnrtuk] [file or stdin]

-f :忽略大小写

-b :忽略最前面的空格

-M :以月份的名字来排序,例如 JAN, DEC

-n :使用数字

-r :反向排序

-u :相当于 unique ,重复内容只出现一次

-t :分隔符,默认为tab

-k :指定排序的区间

范例:/etc/passwd 内容是以 : 来分隔的,以第三栏来排序。

 

$ cat /etc/passwd | sort -t ':' -k 3

root:x:0:0:root:/root:/bin/bash

dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash

alex:x:1001:1002::/home/alex:/bin/bash

arod:x:1002:1003::/home/arod:/bin/bash

uniq 可以将重复的数据只取一个。

 

$ uniq [-ic]

-i :忽略大小写

-c :进行计数

 

使用cat命令可以显示文本文件内容, 把几个文件内容附加到另一个文件中。

使用more命令可以分页显示文本文件的内容。

使用less命令可以回卷显示文本文件的内容。

使用head命令可以显示指定文件的前若干行文件内容。

使用tail命令可以查看文件的末尾数据。

使用sort命令可以对文件中的数据进行排序,并将结果显示在标准输出上。

使用uniq命令可以将文件内的重复行数据从输出文件中删除,只留下每条记录的唯一样本。

使用cut命令可以从文件的每行中显示出选定的字节、字符或字段。

使用comm命令可以比较两个已排过序的文件,并将其结果显示出来。

使用diff命令可以逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

 

vim

 

vi编辑器有3种基本工作模式,分别是命令行模式、插入模式和末行模式。

命令行模式控制屏幕光标的移动,字符、字或行的删除,移动、复制某区域及进入插入模式,或者到末行模式。

只有在插入模式下,才可以做文字输入,按“Esc”键可回到命令行模式。

末行模式将文件保存或退出vi编辑器,也可以设置编辑环境,如寻找字符串、列出行号等。

 

在指令列模式下,有以下命令用于离开或者存储文件。

 

命令       作用

:w    写入磁盘

:w!   当文件为只读时,强制写入磁盘。到底能不能写入,与用户对该文件的权限有关

:q    离开

:q!   强制离开不保存

:wq  写入磁盘后离开

:wq! 强制写入磁盘后离开

实时查看日志命令

tail -f path

-f 循环读取

 

系统日志

/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一

/var/log/secure 与安全相关的日志信息

/var/log/maillog 与邮件相关的日志信息

/var/log/cron 与定时任务相关的日志信息

/var/log/spooler 与UUCP和news设备相关的日志信息

/var/log/boot.log 守护进程启动和停止相关的日志消息

/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件

find

查找磁盘上最大的文件的命令

find / -type f -size +10G

列出当前目录及子目录下所有文件和文件夹

 

在/home目录下查找以.txt结尾的文件名 find /home -name "*.txt"

 

同上,但忽略大小写 find /home -iname "*.txt"

当前目录及子目录下查找所有以.txt和.pdf结尾的文件 find . \( -name "*.txt" -o -name "*.pdf" \) 或 find . -name "*.txt" -o -name "*.pdf"

匹配文件路径或者文件 find /usr/ -path "*local*"

基于正则表达式匹配文件路径 find . -regex ".*\(\.txt\|\.pdf\)$"

同上,但忽略大小写 find . -iregex ".*\(\.txt\|\.pdf\)$"

找出/home下不是以.txt结尾的文件 find /home ! -name "*.txt"

根据文件类型进行搜索find . -type 类型参数

 

类型参数列表:

f 普通文件

l 符号连接

d 目录

c 字符设备

b 块设备

s 套接字

p Fifo

 

基于目录深度搜索

向下最大深度限制为3 find . -maxdepth 3 -type f

搜索出深度距离当前目录至少2个子目录的所有文件 find . -mindepth 2 -type f

根据文件时间戳进行搜索 find . -type f 时间戳

 

UNIX/Linux文件系统每个文件都有三种时间戳:

 

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。

修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。

变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

搜索最近七天内被访问过的所有文件

find . -type f -atime -7 搜索恰好在七天前被访问过的所有文件

find . -type f -atime 7 搜索超过七天内被访问过的所有文件

find . -type f -atime +7 搜索访问时间超过10分钟的所有文件

find . -type f -amin +10 找出比file.log修改时间更长的所有文件

find . -type f -newer file.log 根据文件大小进行匹配

find . -type f -size 文件大小单元 文件大小单元:

b —— 块(512字节)

c —— 字节

w —— 字(2字节)

k —— 千字节

M —— 兆字节

G —— 吉字节

搜索大于10KB的文件find . -type f -size +10k

搜索小于10KB的文件find . -type f -size -10k

搜索等于10KB的文件find . -type f -size 10k

删除匹配文件

删除当前目录下所有.txt文件 find . -type f -name "*.txt" -delete

根据文件权限/所有权进行匹配

当前目录下搜索出权限为777的文件 find . -type f -perm 777

找出当前目录下权限不是644的php文件 find . -type f -name "*.php" ! -perm 644

找出当前目录用户tom拥有的所有文件 find . -type f -user tom

将当前目录下所有以“.txt”结尾的文件打印出来,再追问,除了“.txt”再加上“.abc”结尾的也打印出来。

find . -name "*.txt"

grep

在文件内查找字符串

grep “字符串” filename

文件权限

r:可读(4)

w:可写(2),对于目录来说表示可在目录中新建文件

x:可执行(1),对于目录来说为可进入到该目录中

-:表示无对应位上的权限

4代表读权限,2代表写权限,1代表执行权限

 

7=4+2+1,表示拥有可读可写可执行权限

5=4+1,表示拥有可读可执行权限,但是没有写权限

4 代表拥有可读权限

0 代表没有任何权限

 

chmod 修改文件属性

chmod 777 /home/berry

chmod u+x /home/berry

 

u 表示“用户(user)”,即文件或目录的所有者。

g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。

o 表示“其他(others)用户”。

a 表示“所有(all)用户”。它是系统默认值。

 

chown 修改文件的属主与属组

chown guest:guest a.txt

chown -R guest /home/berry (把berry文件下的所有文件都改成guest这个组)

chgrp 修改文件的所属的用户组

chgrp -R guest /var/tmp/f.txt

chgrp - R root /home/berry/file/a.txt

iostat(查看各个设备的IO状态,查看磁盘读写性能)

直接输入iostat:

tps是每秒的IO请求数,这是IO消耗情况值得关注的数字。

Blk_read/s是指每秒读取的块数量,通过块的大小是512字节

Blk_read是指总共读取的块数量

 

iostat –x xvda 3 5 定时采样查看IO消耗情况

首先要关注的是CPU中的iowait%所占的百分比,当iowait占据主要的百分比时,就表示要关注IO方面的消耗状况了。

pidstat(查看某个线程的IO状态)

pidstat –d –t –p [pid] 1 100

KB_rd/s 表示每秒读取的KB数

KB_wd/s 表示每秒写入的KB数

通过pidstat直接找到文件IO操作多的线程,之后结合jstack找到对应的Java代码。

cp/mv的区别

1、功能上的区别

mv:用户可以使用该命令为文件或目录重命名或将文件由一个目录移入另一个目录中。

cp: 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中。

 

2、从inode角度来区分

mv:会将存储于indoe索引节点上的文件元信息也移动到新文件中。

cp : 只会复制文件数据,不会复制inode索引节点上的文件元信息。

 

cp 的时候是真正意义上的内容copy,对于 inode 节点却是不会变化的。

mv 的时候是把源文件直接删除了(inode 删除了),新的文件其实已经不是以前的文件了,只是名字一样而已。

 

网络

netstat(端口)

查看tcp连接数状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

统计8080端口上有多少个TCP连接,命令:

netstat –nat | grep 8080 | wc –l

 

TCP连接中有多少个连接状态是ESTABLISHED,命令:

netstat –nat | grep 8080 | grep ESTABLISHED| wc -l

 

TCP连接中有多少个连接状态是CLOSE_WAIT

netstat –nat | grep 8080 | grep CLOSE_WAIT| wc -l

 

TCP连接中有多少个连接状态是TIME_WAIT

netstat –nat | grep 8080 | grep TIME_WAIT| wc -l

 

使用awk来完成统计信息,命令如下

netstat –nat | grep 8080 | awk ‘{++S[$NF]} END {for (a in S) print a, S[a]}’

sar

sar –n FULL 1 2 执行后以1s为频率,总共输出两次网络IO的消耗情况。

输出信息包含三部分:网卡上成功的接包和发包的信息 网卡上失败的接包和发包信息 sockets上的统计信息(tcpsck、udpsck)

如需详细跟踪tcp/ip通信过程的信息,则可通过tcpdump来进行。

tcpdump

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]

        [ -s snaplen ] [ -w file ] [ expression ]

抓包选项:

-c:指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。

-i interface:指定tcpdump需要监听的端口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback端口,要抓取loopback接口使用tcpdump -i lo),

            :一旦找到第一个符合条件的端口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。

-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。

-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。

-N:不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'。

-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。

-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,

      :输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,

      :从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

 

输出选项:

-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。

-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。

-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。

-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。

-v:当分析和打印的时候,产生详细的输出。

-vv:产生比-v更详细的输出。

-vvv:产生比-vv更详细的输出。

 

其他功能性选项:

-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。

-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。

-w:将抓包数据输出到文件中而不是标准输出。可以同时配合"-G time"选项使得输出文件每time秒就自动切换到另一个文件。可通过"-r"选项载入这些文件以进行分析和打印。

-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。

 

(1).默认启动

tcpdump

默认情况下,直接启动tcpdump将监视第一个网络接口(非lo口)上所有流通的数据包。这样抓取的结果会非常多,滚动非常快。

 

(2).监视指定网络接口的数据包

tcpdump -i eth1

如果不指定网卡,默认tcpdump只会监视第一个网络接口,如eth0。

 

(3).监视指定主机的数据包,例如所有进入或离开longshuai的数据包

tcpdump host longshuai

 

(4).打印helios<-->hot或helios<-->ace之间通信的数据包

tcpdump host helios and \( hot or ace \)

 

(5).打印ace与任何其他主机之间通信的IP数据包,但不包括与helios之间的数据包

tcpdump ip host ace and not helios

 

(6).截获主机hostname发送的所有数据

tcpdump src host hostname

(7).监视所有发送到主机hostname的数据包

tcpdump dst host hostname

 

(8).监视指定主机和端口的数据包

tcpdump tcp port 22 and host hostname

 

(9).对本机的udp 123端口进行监视(123为ntp的服务端口)

tcpdump udp port 123

 

(10).监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包

tcpdump -c 10 net 192.168

 

(11).打印所有通过网关snup的ftp数据包(注意,表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析)

shell> tcpdump 'gateway snup and (port ftp or ftp-data)'

 

(12).抓取ping包

[root@server2 ~]# tcpdump -c 5 -nn -i eth0 icmp

内存

vmstat、sar、top、pidstat等可以查看swap和物理内存的消耗情况。

vmstat和sar共同的弱点是不能分析进程所占用的内存量。

top可以查看进程所消耗的内存量,在top中看Java进程的内存包括了JVM已分配的内存加上JVM外的物理内存。

pidstat也可以查看进程所消耗的内存量。

pidstat –r –p [pid] [interval] [times]

进程

ps –ef/-aux

ps aux 和ps -ef

两者的输出结果差别不大,但展示风格不同。aux是BSD风格,-ef是System V风格。这是次要的区别,一个影响使用的区别是aux会截断command列,而-ef不会。当结合grep时这种区别会影响到结果。

 

ps -ef 显示出的结果:

    1.UID       用户ID

    2.PID        进程ID

    3.PPID      父进程ID

    4.C           CPU占用率

    5.STIME     开始时间

    6.TTY         开始此进程的TTY----终端设备

    7.TIME       此进程运行的总时间

    8.CMD       命令名

lsof 进程打开的文件、端口

lsof [options] filename

-a:列出打开文件存在的进程;

-c<进程名>:列出指定进程所打开的文件;

-g:列出GID号进程详情;

-d<文件号>:列出占用该文件号的进程;

+d<目录>:列出目录下被打开的文件;

+D<目录>:递归列出目录下被打开的文件;

-n<目录>:列出使用NFS的文件;

-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )

-p<进程号>:列出指定进程号所打开的文件;

-u:列出UID号进程详情;

-h:显示帮助信息;

-v:显示版本信息。

 

lsof输出各列信息的意义如下:

COMMAND:进程的名称

PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等

TYPE:文件类型,如DIR、REG等

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

 

cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改

txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序

lnn:library references (AIX);

er:FD information error (see NAME column);

jld:jail directory (FreeBSD);

ltx:shared library text (code and data);

mxx :hex memory-mapped type number xx.

m86:DOS Merge mapped file;

mem:memory-mapped file;

mmap:memory-mapped device;

pd:parent directory;

rtd:root directory;

tr:kernel trace file (OpenBSD);

v86  VP/ix mapped file;

0:表示标准输出

1:表示标准输入

2:表示标准错误

 

kill

杀死进程

 

负载 Load Average

系统的load被定义为特定时间间隔内运行队列的平均线程数,如果一个线程满足以下条件,该线程就会处于运行队列中: 

    1. 没有处于I/O等待状态。
    2. 没有主动进入等待状态,也就是没有调用wait操作;
    3. 没有被终止。

 

每个CPU的核都维护了一个运行队列,系统的load主要由运行队列来决定。load的值越大,也就意味着系统的CPU越繁忙,这样线程运行完以后等待操作系统分配下一个时间片段的时间也就越长。一般来说,只要每个CPU当前的活动线程数不大于3,我们认为它的负载是正常的,如果每个CPU的线程数大于5,则表示当前系统的负载已经非常高了,需要采取措施来减低系统的负载,以提高响应速度。

 

使用top命令查看,该值是三个浮点数,表示最近1分钟、5分钟、15分钟的运行队列平均进程数。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何抓住QQ小游戏买量红利:休闲与内购小游戏买量优化方法分享

2019年5月&#xff0c;Qzone小游戏、玩一玩整合升级为全新QQ小游戏平台&#xff0c;其以开放的社交生态和关系链&#xff0c;为开发者带来了巨大的流量红利。 为了帮助更多开发者适应和了解新市场。本文将介绍QQ小游戏投放规模现状以及各项扶持政策&#xff0c;并解读轻度小游…

(一)容器从入门到深入-容器和镜像

一、容器与镜像 什么是容器&#xff1f; 在介绍容器的具体概念之前&#xff0c;先简单回顾一下操作系统是如何管理进程的。 首先&#xff0c;当我们登录到操作系统之后&#xff0c;可以通过 ps 等操作看到各式各样的进程&#xff0c;这些进程包括系统自带的服务和用户的应用…

记一次海外大型SLG游戏服务器进程被OOM的修复经历

事情经过 最近刚接手一个多次获得海外GooglePlay推荐的SLG的游戏项目,服务器是java的netty框架写的,客户端是cocos lua。 好吧既然服务器进程运行在jvm之上,吃内存倒是挺厉害的,我一个16G内存的服务器被吃的满满的,这个时候为了解决内存不足,我开启了4G的虚拟内存,方法…

(一)nodejs循序渐进-nodejs环境安装(基础篇)

目录 Node Node的优点 Node.js 安装配置 使用nvm管理不同版本的 node 与 npm nvm 与 n 的区别 卸载全局安装的 node/npm Windows 安装 Linux 安装 安装多版本 node/npm 在不同版本间切换 列出已安装实例 在多环境中&#xff0c;npm该如何使用呢&#xff1f; 其他命…

(二)nodejs循序渐进-nodejs基本类型和循环条件语法篇(基础篇)

目录 入门之helloworld 进阶之helloworld http服务器 步骤一、引入 required 模块 步骤二、创建服务器 基本语法篇 变量声明 基础类型 if else 循环语句 for for ... in while do和do while 运算符 加减乘除 , , !, ! typeof null&#xff0c;undefine…

(七)nodejs循序渐进-模块系统(进阶篇)

模块系统 为了让Node.js的文件可以相互调用&#xff0c;Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分&#xff0c;文件和模块是一一对应的。换言之&#xff0c;一个 Node.js 文件就是一个模块&#xff0c;这个文件可能是JavaScript 代码、JSON 或…

(八)nodejs循序渐进-事件驱动(进阶篇)

事件驱动程序 Node.js 使用事件驱动模型&#xff0c;当web server接收到请求&#xff0c;就把它关闭然后进行处理&#xff0c;然后去服务下一个web请求。 当这个请求完成&#xff0c;它被放回处理队列&#xff0c;当到达队列开头&#xff0c;这个结果被返回给用户。 这个模型…

leetcode304. 二维区域和检索 - 矩阵不可变

给定一个二维矩阵&#xff0c;计算其子矩形范围内元素的总和&#xff0c;该子矩阵的左上角为 (row1, col1) &#xff0c;右下角为 (row2, col2)。 上图子矩阵左上角 (row1, col1) (2, 1) &#xff0c;右下角(row2, col2) (4, 3)&#xff0c;该子矩形内元素的总和为 8。 示例…

(九)nodejs循序渐进-Express框架(进阶篇)

Express 框架 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用&#xff0c;和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 Express 框架核心特性&#xff1a; 可以设置中间件来响应 HTTP 请求。 定…

leetcode326. 3的幂 如此6的操作你想到了吗

给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。 示例 1: 输入: 27 输出: true 示例 2: 输入: 0 输出: false 示例 3: 输入: 9 输出: true 示例 4: 输入: 45 输出: false 进阶&#xff1a; 你能不使用循环或者递归来完成本题吗&#xff1f; 注意最后一句…

(十)nodejs循序渐进-高性能游戏服务器框架pomelo之介绍和安装篇

目录 Pomelo 安装Pomelo 创建demoserver项目 pomelo命令 项目结构说明 pomelo框架 架构 服务器实现 客户端请求与响应、广播的抽象介绍 Pomelo pomelo是一个快速、可扩展、Node.js分布式游戏服务器框架&#xff0c;对游戏服务器开发感兴趣的同学可以关注关注。 之前…

(十二)nodejs循序渐进-高性能游戏服务器框架pomelo之创建一个游戏聊天服务器

上个章节我们简单介绍了下pomelo的安装和目录结构&#xff0c;有读者可能觉得有点吃不消&#xff0c;为什么不再深入讲一讲目录结构和里边的库&#xff0c;这里我就不费口舌了&#xff0c;大家可以去官网参考文档说明&#xff0c;本文只告诉大家如何利用这个框架来开发自己的东…

(十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天

聊天服务器扩展 大家在上一篇文章里相信已经学会了pomelo框架的基本用法了&#xff0c;那么我们在上一篇文章的代码基础上继续扩展&#xff0c;丰富系统&#xff0c;另外也熟悉下他的更多的用法&#xff0c;这一节我将扩展它&#xff1a;增加一个机器人自动聊天的功能。 目的…

leetcode1290. 二进制链表转整数 刷新认知,最简单算法题

给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1&#xff1a; 输入&#xff1a;head [1,0,1] 输出&#xff1a;5 解释&#xff1a;二进制数 (101) 转化为十进…

Redis:02---安装Redis(Linux+Windows+Docker)

Linux安装&#xff1a;一、安装方式1&#xff08;下载源码编译安装&#xff09;第一步&#xff1a;从下面的网址中下载Redis最新稳定版本的源代码sudo wget http://download.redis.io/redis-stable.tar.gz第二步&#xff1a;下载完之后解压&#xff0c;建立一个软链接指向于red…

C++: 06---构造函数析构函数

拷贝构造函数: 用一个已经存在的对象来生成一个相同类型的新对象。(浅拷贝)默认的拷贝构造函数: 如果自定义了拷贝构造函数,编译器就不在生成默认的拷贝构造函数。 如果没有自定义拷贝构造函数,但在代码中用到了拷贝构造函数,编译器会生成默认…

C++:11---友元函数、友元类

一、友元(friend) 概念:通过友元,打破了类的封装性,可以访问类内的所有成员分类:友元函数、友元类二、友元函数 概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系 友元函数可访问类内所有成员,但类不可以访问友元函数…

C++:12---运算符重载

一、概念 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型重载的运算符是具有特殊名字的函数,该函数也有返回值、参数列表、函数体二、运算符重载的3种实现方式 成员函数:私有、公有、保护都可以友元函数:同上全局函数:只能访问公有的三、运算符重载的…

Redis:03---Redis的启动与配置参数大全

一、Redis的可执行文件当我们安装完Redis之后&#xff0c;src和/usr/local/bin目录下提供了下面这些可执行程序&#xff0c;我们称之为Redis Shell&#xff1a;redis-serverRedis服务器redis-cliRedis命令行客户端redis-benchmarkRedis性能测试工具redis-check-aofRedis AOF持久…

leetcode80. 删除排序数组中的重复项 II

给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素最多出现两次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums [1,1,1,2…