面试知识点总结(Part 2:数据库、网络、操作系统、Nginx)

本文涉及:

  1. 数据库:范式、索引、MySQL主备
  2. 网络:TCP/IP(三次握手、滑动窗口)、流量控制和拥塞控制、网络层次结构、http状态码、局域网通信原理、http和https、http1.0和http1.1、浏览器访问页面的整个过程
  3. 操作系统:线程和进程、进程通信、进程状态转化、银行家算法、死锁,Linux命令(cd、ls、top、ps、netstat -anp、lsof -i、grep、cat、echo、awk)Linux进程状态
  4. Nginx:Nginx的特性、与lvs的区别、Nginx负载均衡原理、Nginx关键配置、Nginx常见错误码
  5. 一点补充……

=== 数据库:范式、索引、MySQL主备 ===

范式:

1NF:原子性,列不能再被划分为其他的列
2NF:包含1NF,并有主键,而且其他的列必须完全依赖于主键,不能部分依赖。(不符合2NF的表结构容易产生冗余)
3NF:包含2NF,其他列必须直接依赖主键,不能传递依赖。(不存在非主键A依赖于非主键B,非主键B依赖于主键C)

索引(数据结构+算法):

MySQL索引的原理
B树:在B树上进行查找包含两部操作(1)在B树中查找结点,(2)在结点中找关键字。操作1是在磁盘上进行的,操作2在内存中。在磁盘上找到指针p所指结点之后,先将结点中的信息读入内存,然后再利用顺序查找或者折半查找查询等于K的关键字。关键字所在结点在B树上的层次数,决定B树查找效率。

B+树,解决I/O大小限制,改变了存储结构,在同等限制条件下,快速检索到目标
所有的关键字都被包含在叶子节点中,叶子节点中包含有这些关键字记录的指针。

聚簇索引(InnoDB)和非聚簇索引(MyISAM)
聚簇索引:表数据和主键一起存放,主键索引的叶子节点存放行数据,二级索引的叶子节点存放行的主键值。叶子节点上的数据是主键和具体记录(数据内容)。
优点:1.适合读取一段范围内的数据
缺点:
1.插入速度严重依赖于插入顺序,按照主键顺序插入最快。(对于InnoDB,一般定义一个自增的ID为主键;
2.更新主键的代价高(InnoDB主键不可更新);
3.二级索引需要两次查找,(先找到主键值,再根据主键值找到行数据);
4.插入新值速度相比较慢,因为需要遍历索引中的主键判断不能重复,聚簇索引的叶子节点包含主键和记录值,I/O代价昂贵。

非聚簇索引:表数据和索引分两部分存储,主键索引和二级索引没有存储的区别。B+树,所有节点都是索引,叶子节点存储的是索引+索引对应的记录的地址。

唯一索引:主键就是唯一索引,但是唯一索引不一定是主键,可为空。
普通唯一索引:单个字段上建立的唯一索引,此字段所在列不能有重复值,属于二级索引
复合唯一索引:多个字段上联合建立唯一索引,属于二级索引

MySQL支持最左前缀原则进行筛选
创建索引:create index idx_a_b_c on tb1(a,b,c)
只有使用如下条件才可能应用到这个复合索引
1.where a=? 2.where a = ? and b = ? 3.where a = ? and b = ? and c = ? 但 4.where a = ? and c = ? 只会使用到mysql 索引 a 列的信息

事务是什么?有什么特性呢?

事务就是一系列操作,保证数据的完整性和一致性。ACID属性,原子性、一致性、隔离性、持久性
原子性(atomic):原子工作单元,对数据修改,要么全部执行,要么全部不执行。避免了只执行操作子集的情况;
一致性(consist):事务完成时,所有的数据都要保持一致;
隔离性(isolation):事务之间相互不受干扰,串行化(两个事务操作同一张表,先后执行,每个事务感受不到其他事务在并发执行)
持久性(durability):事务提交后,数据被持久的保存在数据库中,不会被事务回滚。

事务的隔离级别有哪几种?
1.未提交读(脏读):事务中的修改即使没有提交,对其他事务也都是可见的。事务可以读取正在修改中未提交的数据。会导致很多问题,很少使用
2.提交读(不可重复读):一个事务开始时,只能读取已经提交的事务所做的修改。一个事务从开始到提交之前,所做的修改对其他事务不可见
3.可重复读:保证了同一个事务中多次读取同样记录的结果是一致的。但是用户在读取某个范围内的记录时,另一个事务中又在该范围插入了新行,当用户再次读取该范围的数据行时,会发现有新的幻影行。MySQL的默认隔离级别,InnoDB通过多版本并发控制MVCC机制解决该问题。
4.可串行化:最高的隔离级别,强制事务串行执行,避免了幻读问题。在每一行数据都加锁,可能会导致大量的超时问题,使用较少

事务的并发处理会带来哪些问题?
1.不可重复读:A在两次读取之间,B对数据修改,两次数据不一致;
2.更新丢失:A和B同时操作一个数据,最后执行完毕的会覆盖前一个执行的结果;
3.脏读:A事务添加数据并未提交,B读取之后A回滚,脏读
4.幻读:A事务第二次读取数据之前,B数据提交了满足条件的数据

MySQL存储引擎有哪些?他们的特点以及使用场景?

InnoDB、MyISAM
InnoDB支持事务,行级锁;MyISAM非事务型,表级锁
行级锁带来的消耗高于表级锁,但是系统并发访问量较高时,InnoDB性能远高于MyISAM。InnoDB的索引不仅缓存索引本身,也缓存数据,需要耗费更大的内存(然而内存是廉价的)。
InnoDB的使用场景:
读写较少,大量的更新操作
千万条数据的表,并发高
安全性可靠性高

MyISAM使用场景:
读远大于写,更新操作较少
并发不高,不需要事务
表数据量小
MyISAM只支持表级锁,锁的模式有共享锁和排它锁。共享锁他人可以读不能写,排它锁会阻塞他人的读写操作。MyISAM的读写、写写之间都是船形的。执行SQL时先会给SELECT语句加上共享锁,为UDI操作加上排它锁。

MySQL如何提升性能(性能优化方案),稳定性提升方案

数据库优化方案:一方面优化SQL,另一方面MySQL配置和优化
SQL优化方案:1.复杂的join查询拆分,否则可能会导致锁定和堵塞;2.like模糊语句优化;列出仅需要查询的字段(不影响速度,但是会节省内存);3.数据量大的时候将limit语句换成between,但是如果数据范围中有断行,会导致between结果少于预期。
MySQL优化:1.选用合适的存储引擎;2.关闭不必要的日志,增加MySQL允许的最大连接数。
MySQL性能提升方案:1.增加硬件配置,CPU和内存;2.数据库分库、分表操作,减少单表体积;3.使用Redis等辅助;4.使用中间件进行分布式部署(Mycat);5.使用数据库连接池(数据库连接的管理和分配,程序可以直接使用现有的数据库连接,不需要重新建立)。
稳定性能提升方案:主从复制,主服务器和从服务器之间切分处理客户端查询的负荷。(负载均衡策略)
增加健壮性,主服务器宕机之后切换到从服务器;从服务器备份,主服务器仍然可以进行操作(更新)
主从同步原理:1.主服务器将用户的更新操作二进制保存到日志文件,由Binlog Dump线程将日志文件传输给从服务器
2.从服务器通过IO线程将主服务器日志文件中的更新操作复制到本地的中继日志文件中
3.从服务器通过另一个SQL线程将中继日志文件中的操作依次在本地执行,从而实现数据同步。
MySQL分表:垂直切分和水平切分。
水平切分:切分到另一个表(按照日期或者取模余数),例如根据日期切分日志表,过于久远的日志直接归档处理。

MySQL主备
MySQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。
在这里插入图片描述

悲观锁和乐观锁

悲观锁:每次拿数据都默认为别人会修改,所以在数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠于数据库提供的锁机制。修改记录之前,会尝试对记录加上“排它锁”,加锁成功之后,对记录进行修改,事务完成之后解锁。
MySQL的InnoDB中使用悲观锁:关闭事务自动提交属性,autocommit=0。更新记录之前可以执行select…for update的方式加排它锁来锁定一条记录,修改完记录之后,在commit提交事务。(行级锁,用到索引)

//0.开始事务
begin;/begin work;/start transaction; (三者选一就可以)
//1.查询出商品信息
select status from t_goods where id=1 for update;
//2.根据商品信息生成订单
insert into t_orders (id,goods_id) values (null,1);
//3.修改商品status为2
update t_goods set status=2;
//4.提交事务
commit;//commit work;

悲观锁会的加锁机制,会让数据产生额外的开销,甚至产生死锁;降低了并行性,一个事务锁定一条记录时,其他事务就必须等待。

乐观锁:假设认为数据处理不会造成冲突,所以在提交的时候进行检测,如果有冲突,返回报错,交给用户去决策。乐观锁不会用数据库的锁机制,通过记录数据版本、使用时间戳实现。
使用版本号时,在数据初始化的时候指定一个版本号,每次对数据的更新操作都对版本号+1操作,并判断当前本版号是不是该数据的最新版本号。

1.查询出商品信息
select (status,status,version) from t_goods where id=#{id}
2.根据商品信息生成订单
3.修改商品status2
update t_goods 
set status=2,version=version+1
where id=#{id} and version=#{version};

适用于写较少的情况,即冲突很少发生的情况,省去了锁的开销,加大了系统的吞吐量。




=== 网络:TCP/IP(三次握手、滑动窗口)、流量控制和拥塞控制、网络层次结构、http状态码、局域网通信原理、http和https、http1.0和http1.1、浏览器访问页面的整个过程 ===

三次握手协议

在socket编程中,由客户端发起connect():
①客户端发送TCP的SYN标志位置1的包,以及初始序号x(SYN=1,seq=x),客户端进入SYN_SEND状态;
②服务器发回确认包ACK应答,并将自己的序列放入到seq中,将确认序号设置为客户端发来的序列+1(SYN=1,ACK=1,seq=y,ACKnum=x+1),服务器进入SYN_RCVD状态;
③客户端再次发送确认包ACK,SYN标志位为0,ACK标志位为1,并把服务器发来的ACK序列号+1,放在确认字段中(ACK=1,ACKnum=y+1),客户端进入ESTABLISHED状态。当服务器收到这个包之后,也进入ESTABLISHED状态。
*如果采用二次握手可以吗?不可以,采用三次握手是为了防止失效的连接请求报文段忽然有传送到服务器,从而发生错误。

四次挥手协议

在socket编程中,可以由任意一方执行close()操作(以客户端发起为例)
①客户端发送FIN标志位为1的包(FIN=1,seq=x),进入FIN_WAIT_1状态;
②服务器确认客户端的FIN包,发送一个确认ACK包(ACK=1,ACKnum=x+1),表明已收到关闭连接请求,但是不会立即关闭,服务器进入CLOSE_WAIT状态,客户端收到确认包之后,进入FIN_WAIT_2状态,等待服务器关闭;
③服务器准备关闭连接时,向客户端发送断开连接请求,FIN为1(FIN=1,seq=y),服务器进入LAST_ACK状态,等待客户端的最后一次确认;
④客户端收到服务器的关闭连接请求,发送一个确认包(ACK=1,ACKnum=y+1),并进入TIME_WAIT状态,等待可能会出现要求重传的ACK包。服务器收到客户端的ACK之后,关闭连接,进入CLOSE模式。客户端会等待2个最大段生命周期,如果没有收到来自服务器的消息,认为服务器已经关闭,然后关闭自己的连接,进入CLOSE状态。
TIME_WAIT状态:执行主动关闭的一端会进入TIME_WAIT状态,留在TIME_WAIT状态的持续时间是2MSL(2倍的最长分节声明周期,Maximum Segment Lifetime)。MSL一般情况时长30s到2min,所以TIME_WAIT的时间一般为1~4min。TIME_WAIT状态可以确保TCP全双工连接的终止

滑动窗口协议

发送方和接收方都会维护一个数据帧的序列(窗口),窗口大小由接收方确定,目的在于控制发送速度,防止溢出,同时可以控制流量避免网络拥塞

TCP连接的可靠性

1.TCP将数据分割成合理的长度再发送(UDP长度不变);
2.TCP发出一段之后,启动定时器,等待目的端收到这个报文。如果没有及时收到确认,重发;
3.TCP收到消息后会发送确认,确认会延迟发送,延迟是因为可能需要对包最完整校验;
4.有端到端的校验和,目的是检测在传输过程中的变化。有差错会丢弃报文,不确认收到;
5.对失序的数据进行重排,之后再交给应用层;
6.对重复发送的数据,接收端进行丢弃;
7.TCP滑动窗口协议进行流量控制

网络层次结构

OSI七层模型:物理层(bit流,中继器、集线器)、数据链路层(帧Frame,交换机、网桥,MAC)、网络层(包,路由器,IPv4、IPv6、ICMP)、传输层(TCP、UDP,端到端的传输)、会话层(RPC)、表示层(CSS、HTML、JSON)、应用层(FTP、NFS、SMTP)
TCP/IP四层结构:网络接口层、网际层、传输层(TCP、UDP)、应用层(各种应用协议)

常见的HTTP状态码

200 OK:请求成功,信息包含在返回的响应报文中。
301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的Location 首部行中指定。客户机可自动用新的URL获取该对象。
400 Bad Repuest:一个通用差错代码,指示该请求不能被服务器所理解。
404 Not Found:被请求的文档不在服务器上。
505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。

HTTP1.0和HTTP1.1

1.0版本,TCP不能复用,一次TCP连接对应一次HTTP请求
1.1版本,顺序性TCP复用,长连接
HTTP请求建立在一次TCP连接基础上,一次TCP连接至少产生一次HTTP请求。

HTTP和HTTPS

HTTPS是安全的HTTP,加入SSL(Secure Socket Layer安全套接层)。建立安全的通道来保证数据传输的安全,验证及确认网站的真实性。
HTTPS协议就是HTTP + SSL共同构建的可进行加密传输、身份认证的网络协议
区别如下:1.HTTPS协议需要申请证书;2.http是明文传输,HTTPS是SSL的加密传输;3.http的端口80,HTTPS端口443;4.HTTP应用层,HTTPS传输层

浏览器访问页面的整个过程

①浏览器输入网址
②浏览器查找域名的IP地址:浏览器缓存(浏览器会缓存DNS记录一段时间)、路由器缓存、递归搜索域名服务器,将最终的IP地址返回给浏览器;
③请求之前与服务器建立连接TCP(三次握手)、UDP,与服务器建立管道连接(socket)
④浏览器给Web服务器发送http请求。http请求头,GET/POST、Connection(是否需要关闭TCP连接)、Cookie等
⑤服务器处理请求
⑥服务器返回一个HTML响应,响应头与body分开的
⑦服务器传输数据完毕,与客户端断开TCP连接(四次挥手)
⑧浏览器显示HTML文档(浏览器缓存静态文件,不需要和服务器通信,直接从缓存中读取。检查ETeg来判断是否有静态文件的缓存)




=== 操作系统:线程和进程、进程通信、进程状态转化、银行家算法、死锁,Linux命令(cd、ls、top、ps、netstat -anp、lsof -i、grep、cat、echo、awk)Linux进程状态 ===

进程和线程

进程是指系统中正在运行的应用程序。每个进程是独立的,且运行在专用的受保护的内存空间内。多进程可以提高CPU利用率。
进程只能在一个时间干一件事,进程如果在执行过程中阻塞,整个进程就会被挂起。

线程:一个进程如果需要执行任务,必须有线程,一个进程的所有任务都在线程中执行。线程提高了进程的并发度,可以有效地利用多处理器和多和计算机。
一个线程中的任务是串行执行的,同一时间内,1个线程只能执行1个任务。
进程和线程的区别:进程是操作系统分配资源的基本单位;线程是进程的一个实体,是CPU调度和分派的基本单位。线程本身不拥有系统资源,只拥有必不可少的资源(计数器寄存器),与其他同属一个进程的线程共享进程的资源。

进程和线程的区别:
调度:线程作为调度和分配的基本的单位,进程作为拥有资源的基本单位
并发性:不仅进程之间可以并发执行,同一个进程的多个进程也可以并发执行
拥有资源:进程是拥有资源的独立单位,线程基本不拥有系统资源,只拥有计数器、寄存器、栈等必不可少的资源
系统开销:进程需要系统为之分配和回收资源,所以创建和撤销进程时的开销明显大于创建撤销线程的开销。

进程通信

管道:在内核中的缓冲区,一个写端一个读端,只能用于父子进程和兄弟进程。类似于文件系统但是只在内存中,不属于任何文件系统;
内存共享:多个进程共享的存储区,可以同时操作,所以需要同步,一般和信号量结合使用,信号量用来同步对内存的访问;
消息队列:消息的链表,有标识符(队列ID)来标识。独立于发送和接收进程,进程终止时队列中的内容不会被删除。不一定要按照先进先出的顺序读取;
socket:利用套接字进行通信,可实现网络间不同主机的通信。建立的通信是双向的。

进程状态转换

三态模型:运行态:占有CPU,正在运行;就绪态:具备运行条件,等待系统分配处理器以便运行;等待态:不具备运行条件,正在等待某个事件完成。

运行->等待:正在执行的进程等待使用资源;比如等待外设传输,进程申请资源得不到满足,等待人工干预;
等待->就绪:等待的事件已发生,资源得到满足;比如外设传输结束,人工干预完成;
就绪->运行:CPU空间时,按照一定的策略选择一个就绪进程开始运行;
运行->就绪:运行时间片用完,或出现更高优先权的进程而被迫让出资源。

进程调度方法:先来先服务、短作业优先、优先权调度、高响应比优先

线程之间的通信:锁机制、信号量机制、信号机制。通信的目的是线程的同步

死锁是什么呢:

死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用进程无法向前推进

死锁产生的原因:
1.系统资源不足导致竞争;
2.进程推进顺序非法
死锁产生的必要条件(必须同时满足四个条件,只要有一个不成立,死锁就不会发生):
①互斥条件:某个资源在一段时间内,只能由一个进程占有,不能同时被两个或以上的进程占用(类似于独木桥,A用完释放之后B才可以用);
②不剥夺条件:进程获得的资源,在未使用完毕之前,不能被其他进程强行夺走,只能有获取该资源的进程释放;
③请求和保持条件:进程已经占用资源,但又申请新的资源,新的资源已经别其他进程占用,此时该进程阻塞;
④循环等待条件:进程等待序列p1,p2,…,pn,其中p1等待p2的资源,p2等待p3资源,pn等待p1资源,形成进程循环等待。

死锁处理策略:
①预防死锁:设置某些限制条件,破坏产生死锁的四个必要条件;
②避免死锁:在资源动态分配过程中,用某种方法防止系统进入不安全状态(银行家算法);
③检测及解除:无须采取限制措施,允许发生死锁,系统检测机制及时的检测出死锁的发生,然后通过资源剥夺、撤销进程、进程回退方法解除死锁。




Nginx:Nginx的特性、与lvs的区别、Nginx负载均衡原理、Nginx关键配置、Nginx常见错误码

Nginx的特性:

IO多路复用;轻量级(只保留了http相关的核心模块、功能模块少,代码模块化);CPU亲和(把CPU核心和Nginx进程绑定在一起,减少CPU的cache miss,提升性能);sendfile高效传输文件(可以让Nginx在传输文件时,直接在磁盘和TCP socket之间传输数据)

Nginx和LVS区别

LVS,使用Linux内核集群实现高性能、高可用的负载均衡服务器。进行请求分发,工作在网络第4层(传输层),可以对web、数据库等进行负载均衡。对网络的依赖性较大。
Nginx工作在第7层(应用层),可以对HTTP应用实施分流策略(域名、目录结构等)。对网络稳定性依赖小。可以把返回错误的请求重新提交到另一个节点。支持正则表达式。两者对网络环境的依赖性也不同。

四层和七层负载均衡:
四层是基于IP+端口的负载均衡,七层是基于URL等应用层信息的负载均衡。
四层通过虚拟IP+端口接受请求,在分配到真实的服务器,七层通过虚拟的URL或主机名接收请求,再分配到真实的服务器。
四层主要分析IP层和TCP/UDP层,实现四层流量负载均衡。七层除了支持四层负载均衡意外,还有分析应用层的信息,如http协议URI以及cookie信息等

Nginx负载均衡原理

默认采用轮询机制进行调度
SLB(服务器负载均衡),负载均衡算法有WRR(加权轮询weighted round robin)和WLC(加权最小连接调度weighted least connections)
在server之外添加配置:upstream zero_test {server sername1 weight=5;server sername2;server sername3 backup;},
(weight表示权重,backup在其他服务正常时,不会启用)
在server的location中,修改proxy_pass http://zero_test;
调度算法:轮询、加权轮询、ip_hash(每个请求按照访问IP的hash分配,来自同一个IP的请求固定访问一个服务器,防止session信息丢失,用户掉线。根据remote_addr识别,只需要在upstream中添加“ip_hash”即可)、url_hash(根据URL的hash结果来分配请求,每个URL定向到同一个后端服务器)

Nginx配置

events:worker_connections每个进程允许的最大连接数;use工作进程数
http{…}:可以配置多个server,每个server里面有对应的端口、主机名、location目录、error_page
location:expires缓存的有效时间;proxy_pass配置正向代理
nginx -t -c /dir/file.conf 检查配置文件是否满足nginx语法

Nginx访问控制
在server的location中,可以配置允许访问的IP已经拒绝的IP,allow/deny address;需要成对出现。
http_access_module局限性(目标服务器只能识别代理服务器的地址,存在误差),可以用http_x_forwarded_for头信息控制访问

Nginx提供静态资源web服务
静态资源:浏览器端渲染(HTML、CSS、js不需要服务器端处理的)、图片、视频、文件
浏览器缓存:浏览器请求->无缓存->请求Web服务器->展示
跨域访问、防盗链(防止资源被恶意盗用,http_refer)等……

Nginx常见错误码

413:请求实体过大,用户上传文件限制client_max_body_size
502:网关错误,后端服务没有响应。例如后端的proxy_pass是tomcat,tomcat服务未开启,访问代理服务器就会502
504:网关超时,后端服务执行超时。后台负载很高,执行很慢。nginx默认60s,后台处理超出60s之后报错504

=======================================

---------2017092补充---------

InnoDB
InnoDB基于磁盘存储,基于磁盘的数据库使用缓冲池技术提高性能。
对数据库中页的修改操作,首先修改缓冲池中的页,再以一定频率(Checkpoint机制)刷新到磁盘上。
缓冲池中缓存的数据页类型由:索引页、数据页、undo页、插入缓存、数据字典信息、自适应哈希索引等

二叉查找树和平衡二叉树
二叉查找树中,左子树的键值总是小于根的键值,右子树的键值总是大于根的键值。
平衡二叉树,是二叉查找树的一种,并且每个节点的两个子树高度最大差为1。(查询速度快,维护代价高)

B+树:
是为磁盘或其他直接存取辅助设备设计的一种平衡查找树。
所有的记录节点都是按照键值的大小顺序存放在同一层的叶子节点上,由各个叶子节点指针进行连接。

B+树索引在数据库中,树的高度一般在24层,最多需要24次磁盘IO。

数据库中的B+索引可以分为聚集索引和辅助索引(非聚集索引)
聚集索引:能在B+树索引的叶子节点上直接找到数据,叶子节点的数据就是用户所要查询的数据。
非聚集索引:叶子节点并不包含行记录的所有数据,叶子节点包含键值外,还包含一个bookmark,用来指向与索引对应的行数据

Linux命令(cd、ls、top、ps、netstat -anp、lsof -i、grep、cat、echo、awk)Linux进程状态
rpm、yum区别
RPM是RedHat软件包管理工具,安装、删除、升级和管理软件,还可以检查依赖性。文件后缀为.rpm的文件可以用rpm命令安装
YUM更方便的管理RPM包,自动解决依赖问题,使用便捷。yum check -update, yum install XXX
wget: 在线下载文件,wget http://asdf.com/sadf.tar.gz获取到文件之后,执行tar zxf解压,cd打开文件夹后./install.sh运行脚本安装
查看进程:top可以查看系统动态实时视图、ps查看进程,“ps -ef | grep java” -e表示查看进程所有环境变量,-f全格式,grep正则匹配。pstree显示进程树。
ps: ps -aux --sort -pcpu | less -aux显示全面的信息,-a所有all,-x显示没有控制终端的进程,–sort表示降序排序,用|竖线结合less和管道限制显式的结果便于查看。上述命令表示根据CPU使用量降序排序进程。注:可以将less换成 head -n 10表示显示前10个结果
/proc目录:伪文件系统。只存在于内存中,包含有进程信息(每个进程都有一个以PID为目录名的接口,可以读取进程信息)。/proc/cpuinfo、/proc/meminfo
tail -f filename监视文件的尾部内容,默认10行,相当于tail -n 10 filename
cat filename一次性显示整个文件,cat > filename从键盘创建一个新文件
curl获取
netstat -apn | grep 3306查看占用3306端口的进程(PID和进程名)

MyCat原理
前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信
特点1.由MyCat统一管理所有数据源,解决多应用竞争的问题;
特点2.独创ER分片,跨节点join查询;
特点3.全局分片技术,每个节点可以同时并发插入和更新数据,每个节点都可以读取数据
MyCat技术原理中最重要的是“拦截”,拦截了用户发送过来的SQL,对其进行分析,分片分析、路由分析、读写分离分析等,再发送到后端的真实数据库。

链表的基本操作
http://blog.csdn.net/dezhihuang/article/details/39118293
http://blog.csdn.net/hackbuteer1/article/details/6591486/
单链表的建立、插入、删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值