Java全栈面试题汇总目录https://blog.csdn.net/weixin_42173947/article/details/138966376
目录
7 为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
14 如果客户端禁止cookie能实现session还能用吗?
1 网络协议是什么?
在计算机网络要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络协议。
2 为什么要对网络协议分层?
- 简化问题难度和复杂度。由于各层之间独立,我们可以分割大问题为小问题
- 灵活性好。当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响
- 易于实现和维护
- 促进标准化工作。分开后,每层功能可以相对简单地被描述
网络协议分层的缺点:功能可能出现在多个层里,产生了额外开销。
OSI的七层协议体系结构的概念清楚,理论也较完整,但它既复杂又不实用,TCP/IP体系结构则不同,但它现在却得到了非常广泛的应用。TCP/IP是一个四层体系结构,它包含应用层,运输层,网际层和网络接口层(用网际层这个名字是强调这一层是为了解决不同网络的互连问题),不过从实质上讲,TCP/IP只有最上面的三层,因为最下面的网络接口层并没有什么具体内容,因此往往采用折中的办法,即综合OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚,有时为了方便,也可把最底下两层称为网络接口层。
四层协议,五层协议和七层协议的关系如下:
- TCP/IP是一个四层的体系结构,主要包括:应用层、运输层、网际层和网络接口层
- 五层协议的体系结构主要包括:应用层、运输层、网络层,数据链路层和物理层
- OSI七层协议模型主要包括是:应用层、表示层、会话层、运输层、网络层、数据链路层、物理层
注:五层协议的体系结构只是为了介绍网络原理而设计的,实际应用还是TCP/IP四层体系结构。
3 TCP/IP协议族?
应用层
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。
对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等等。
运输层
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。
运输层主要使用一下两种协议
传输控制协议-TCP:提供面向连接的,可靠的数据传输服务。
用户数据协议-UDP:提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。
UDP |
TCP |
|
是否连接 |
无连接 |
面向连接 |
是否可靠 |
不可靠传输,不使用流量控制和拥塞控制 |
可靠传输,使用流量控制和拥塞控制 |
连接对象个数 |
支持一对一,一对多,多对一和多对多交互通信 |
只能是一对一通信 |
传输方式 |
面向报文 |
面向字节流 |
首部开销 |
首部开销小,仅8字节 |
首部最小20字节,最大60字节 |
场景 |
适用于实时应用 (IP电话、视频会议、直播等) |
适用于要求可靠传输的应用 例如文件传输 |
每一个应用层(TCP/IP参考模型的最高层)协议一般都会使用到两个传输层协议之一:
运行在TCP协议上的协议:
- HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览
- HTTPS(HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本
- FTP(File Transfer Protocol,文件传输协议),用于文件传输
- POP3(Post Office Protocol,version 3,邮局协议),收邮件用
- SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件
- TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络
- SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用
运行在UDP协议上的协议:
- BOOTP(Boot Protocol,启动协议),应用于无盘设备
- NTP(Network Time Protocol,网络时间协议),用于网络同步
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址
运行在TCP和UDP协议上:
- DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作
网络层
网络层的任务就是选择合适的网间路由和交换结点,确保计算机通信的数据及时传送。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报。
互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Internet Prococol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP层。
数据链路层
数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。
在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。
一般的web应用的通信传输流是这样的:
发送端在层与层之间传输数据时,每经过一层时会被打上一个该层所属的首部信息。反之,接收端在层与层之间传输数据时,每经过一层时会把对应的首部信息去除。
物理层
在物理层上所传送的数据单位是比特。物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
TCP/IP协议族
TCP(传输控制协议)和IP(网际协议)是最先定义的两个核心协议,所以才统称为TCP/IP协议族。
4 TCP的三次握手四次挥手?
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。
TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。
一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个链接,通过四次挥手来关闭一个连接。
当一个连接被建立或被终止时,交换的报文段只包含TCP头部,而没有数据。
TCP报文的头部结构
- 序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记
- 确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
- 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
- ACK:确认序号有效
- FIN:释放一个连接
- PSH:接收方应该尽快将这个报文交给应用层
- RST:重置连接
- SYN:发起一个新连接
- URG:紧急指针(urgent pointer)有效
需要注意的是:
- 不要将确认序号ack与标志位中的ACK搞混了
- 确认方ack=发起方seq+1,两端配对
三次握手
三次握手的本质是确认通信双方收发数据的能力
首先,我让信使运输一份信件给对方,对方收到了,那么他就知道了我的发件能力和他的收件能力是可以的。
于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力是可以。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后回馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的。
- 第一次握手:客户端要向服务端发起连接请求,首先客户端随机生成一个起始序列号ISN(比如是100),那客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100。
- 第二次握手:服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序列号100存起来,并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。
- 第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同时发现SYN=1,知道了服务端同意了这次连接,于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端序列号+1)、seq=101(第一次握手时发送报文是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端通过TCP建立了连接。
四次挥手
四次挥手的目的是关闭一个连接
比如客户端初始化的序列号ISA=100,服务端初始化的序列号ISA=300。TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共回复了2000个字节的数据。
- 第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。
- 第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。
- 第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号seq=2350(2300+50)。
- 第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。
5 为什么TCP连接的时候是3次?2次不可以吗?
因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。
如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。
6 为什么TCP连接的时候是3次,关闭的时候却是4次?
因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。
7 为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了。
8 如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
9 什么是HTTP,HTTP与HTTPS的区别?
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
区别 |
HTTP |
HTTPS |
协议 |
运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份 |
身披SSL(Secure Socket Layer)外壳的HTTP,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。 |
端口 |
80 |
443 |
资源消耗 |
较少 |
由于加解密处理,会消耗更多的CPU和内存资源 |
开销 |
无需证书 |
需要证书,而证书一般需要向认证机构购买 |
加密机制 |
无 |
共享密钥加密和公开密钥加密并用的混合加密机制 |
安全性 |
弱 |
由于加密机制,安全性强 |
10 常用HTTP状态码?
HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等。
状态码的类别:
类别 |
原因短语 |
1XX |
Informational(信息性状态码)接受的请求正在处理 |
2XX |
Success(成功状态码)请求正常处理完毕 |
3XX |
Redirection(重定向状态码)需要进行附加操作以完成请求 |
4XX |
Client Error(客户端错误状态码)服务器无法处理请求 |
5XX |
Server Error(服务器错误状态码)服务器处理请求出错 |
常用HTTP状态码:
2XX |
成功(这系列表明请求被正常处理了) |
200 |
OK,表示从客户端发来的请求在服务器端被正确处理 |
204 |
No content,表示请求成功,但响应报文不含实体的主体部分 |
206 |
Partial Content,进行范围请求成功 |
3XX |
重定向(表明浏览器要执行特殊处理) |
301 |
moved permanently,永久性重定向,表示资源已被分配了新的URL |
302 |
found,临时性重定向,表示资源临时被分配了新的URL |
303 |
see other,表示资源存在着另一个URL,应使用GET方法获取资源(对于301/302/303响应,几乎所有浏览器都会删除报文主体并自动用GET重新请求) |
304 |
not modified,表示服务器允许访问资源,但请求未满足条件的情况(与重定向无关) |
307 |
temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求 |
4XX |
客户端错误 |
400 |
bad request,请求报文存在语法错误 |
401 |
unauthorized,表示发送的请求需要有通过HTTP认证的认证信息 |
403 |
forbidden,表示对请求资源的访问被服务器拒绝,可在实体主体部分返回原因描述 |
404 |
not found,表示在服务器上没有找到请求的资源 |
5XX |
服务器错误 |
500 |
internal sever error,表示服务器端在执行请求时发生了错误 |
501 |
Not Implemented,表示服务器不支持当前请求所需要的某个功能 |
503 |
service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求 |
11 GET和POST区别?
- GET是不安全的,因为在传输过程,数据被放在请求的URL中;POST的数据放在RequestBody,所有操作对其他用户来说都是不可见的。但是这种做法也不是绝对的,也可以在GET请求加上RequestBody,给POST请求带上URL参数
- GET请求提交的url中的数据最多只能是2048字节,这个限制是浏览器或者服务器给添加的,http协议并没有对url长度进行限制,目的是为了保证服务器和浏览器能够正常运行,防止有人恶意发送请求。POST请求则没有大小限制
- GET限制Form表单的数据集的值必须为ASCII字符;而POST支持整个ISO10646字符集
- GET执行效率却比POST方法好。GET是form提交的默认方法
- GET产生一个TCP数据包;POST产生两个TCP数据包
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
而对于POST,浏览器先发送header,服务器响应100,浏览器再发送data,服务器响应200(返回数据)
12 什么是HTTP2?
HTTP2可以提高网页的性能。
在HTTP1中浏览器限制了同一个域名下的请求数量(Chrome下一般是六个),当在请求很多资源的时候,由于队头阻塞当浏览器达到最大请求数量时,剩余的资源需等待当前的六个请求完成后才能发起请求。
HTTP2中引入了多路复用的技术,这个技术可以只通过一个TCP连接就可以传输所有的请求数据。多路复用可以绕过浏览器限制同一个域名下的请求数量的问题,进而提高了网页的性能。
13 Session、Cookie和Token的主要区别?
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。
什么是cookie
cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户身份。
什么是session
session是依赖Cookie实现的。session是服务器端对象
session是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置sessionid,浏览器在向服务器请求过程中传输cookie包含sessionid,服务器根据sessionid获取出会话中存储的信息,然后确定会话的身份信息。
cookie与session区别
存储位置与安全性:cookie数据存放在客户端上,安全性较差,session数据放在服务器上,安全性相对更高;
存储空间:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,session无此限制
占用服务器资源:session一定时间内保存在服务器上,当访问增多,占用服务器性能,考虑到服务器性能方面,应当使用cookie。
什么是Token
Token 是一种在客户端和服务端之间传递身份信息的方式。当用户登录成功后,服务端会生成一个 Token,将其发送给客户端。客户端在后续的请求中,需要将 Token 携带在请求头或请求参数中。服务端通过验证 Token 的合法性,就可以确定该请求来自哪个用户,并且可以根据用户的权限进行相应的操作。Token可以有效地避免了 Cookie 的一些安全问题,比如 CSRF 攻击。
方式 |
特点 |
优点 |
缺点 |
cookie |
1.存储在客户端。2.请求自动携带 cookie。3.存储大小 4KB。 |
1.兼容性好,因为是比较老的技术。2.很容易实现,因为 cookie 会自动携带和存储。 |
1.需要单独解决跨域携带问题,比如多台服务器如何共享 cookie。2.会遭受 CSRF 攻击。3.存储在客户端,不够安全。 |
session |
1.存储在服务端。2.存储大小无限制。 |
1.查询速度快,因为是个会话,相当于是在内存中操作。2.结合 cookie 后很容易实现鉴权。3.安全,因为存储在服务端。 |
1.耗费服务器资源,因为每个客户端都会创建 session。2.占据存储空间,session 相当于存储了一个完整的用户信息。 |
token |
1.体积很小。2.自由操作存储在哪里。 |
1.安全,因为 token 一般只有用户 id,就算被截取了也没什么用。2.无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息。3.跨域处理较为方便,比如多台服务器之间可以共用一个 token。 |
1.查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库。 |
总结下来就是session 是空间换时间,token 是时间换空间。
14 如果客户端禁止cookie能实现session还能用吗?
Cookie与Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。
但为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。
假定用户关闭Cookie的情况下使用Session,其实现途径有以下几种:
手动通过URL传值、隐藏表单传递Session ID。
用文件、数据库等形式保存Session ID,在跨页过程中手动调用。
15 什么叫CC攻击,什么叫DDOS攻击?
CC攻击,主要是用来攻击页面的,模拟多个用户不停的对你的页面进行访问,从而使你的系统资源消耗殆尽。
DDOS攻击,中文名叫分布式拒绝服务攻击,指借助服务器技术将多个计算机联合起来作为攻击平台,来对一个或多个目标发动DDOS攻击。
攻击,即是通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。
怎么预防CC攻击和DDOS攻击?
防CC、DDOS攻击,这些只能是用硬件防火墙做流量清洗,将攻击流量引入黑洞。
流量清洗这一块,主要是买ISP服务商的防攻击的服务就可以,机房一般有空余流量,我们一般是买服务,毕竟攻击不会是持续长时间。
16 什么是网站数据库注入?
由于程序员的水平及经验参差不齐,大部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断。
应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL注入。
SQL注入,是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,如果管理员没查看日志的习惯,可能被入侵很长时间都不会发觉。
如何过滤与预防
数据库网页端注入这种,可以考虑使用nginx_waf做过滤与预防。
17 请问当用户反馈网站访问慢,你会如何处理?
有哪些方面的因素会导致网站访问慢?
1. 服务器出口带宽不够用
本身服务器购买的出口带宽比较小。一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。
跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。
2. 服务器负载过大,导致响应不过来
可以从两个方面入手分析:
分析系统负载,使用w命令或者uptime命令查看系统负载。如果负载很高,则使用top命令查看CPU,MEM等占用情况,要么是CPU繁忙,要么是内存不够。
如果这二者都正常,再去使用sar命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。
3. 数据库瓶颈
如果慢查询比较多。那么就要开发人员或DBA协助进行SQL语句的优化。
如果数据库响应慢,考虑可以加一个数据库缓存,如Redis等。然后,也可以搭建MySQL主从,一台MySQL服务器负责写,其他几台从数据库负责读。
4. 网站开发代码没有优化好
例如SQL语句没有优化,导致数据库读写相当耗时。
针对网站访问慢,怎么去排查?
1. 首先要确定是用户端还是服务端的问题。当接到用户反馈访问慢,那边自己立即访问网站看看,如果自己这边访问快,基本断定是用户端问题,就需要耐心跟客户解释,协助客户解决问题
不要上来就看服务端的问题。一定要从源头开始,逐步往下。
2. 如果访问也慢,那么可以利用浏览器的调试功能,看看加载那一项数据消耗时间过多,是图片加载慢,还是某些数据加载慢
3. 针对服务器负载情况。查看服务器硬件(网络、CPU、内存)的消耗情况。如果是购买的云主机,比如阿里云,可以登录阿里云平台提供各方面的监控,比如CPU、内存、带宽的使用情况
4. 如果发现硬件资源消耗都不高,那么就需要通过查日志,比如看看MySQL慢查询的日志,看看是不是某条SQL语句查询慢,导致网站访问慢
怎么去解决?
1. 如果是出口带宽问题,那么就申请加大出口带宽
2. 如果慢查询比较多,那么就要开发人员或DBA协助进行SQL语句的优化
3. 如果数据库响应慢,考虑可以加一个数据库缓存,如Redis等等。然后也可以搭建MySQL主从,一台MySQL服务器负责写,其他几台从数据库负责读
4. 申请购买CDN服务,加载用户的访问
5. 如果访问还比较慢,那就需要从整体架构上进行优化。做到专角色专用,多台服务器提供同一个服务