1、TCP为什么要进行三次握手?(考的频率不是一点把点啊,命中率80%)
答:主要是为了防止已失效的连接请求报文段突然又传到了服务端,因而产生错误。
分析:本来TCP连接已经断开,但是由于之前一个数据包在连接建立的过程中,由于网络延迟问题迟迟没有到达,当该失效报文到达服务端的时候,服务端又会认为客户端想要建立新的TCP连接,于是便会进行确认同意建立连接,假如是2次握手,那么连接建立成功,服务端就会一直等待客户端传输数据,导致服务端浪费资源。
2、如果第三个ACK报文丢失了,会发生什么情况?(这算是比较不容易想到的了,命中率50%)
答:当客户端收到服务端的SYN+ACK应答后,其状态变为ESTABLISHED,并会发送ACK包给服务端,准备发送数据了。如果此时ACK在网络中丢失,过了超时计时器后,那么Server端会重新发送SYN+ACK包,重传次数根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认是5次。如果重传指定次数到了后,仍然未收到ACK应答,那么一段时间后,Server自动关闭这个连接。但是Client认为这个连接已经建立,如果Client端向Server写数据,Server端将以RST包响应,方能感知到Server的错误。
3、TCP连接的时候,服务端在什么情况下会发送RST包?(这就是真的难了,没学习过的不可能知道,命中率20%)
答:一般是发生错误,才会发送RST包。(1)对方端口未打开
(2)TCP连接被终止(就是前面说的ACK包丢失,重传次数到了,就要自动关闭)
(3)请求超时
(4)在一个已关闭的 socket 上收到数据
4、TCP和UDP区别(面试官最最最喜欢考的就是这个了,命中率高达90%)
答:(1)TCP称为传输控制协议,UDP称为用户数据包协议,TCP是面向字节流的,而UDP是报文段
(2)TCP是通过三次握手以及序列号、重传机制面向连接,从而保证可靠传输,而UDP没有这些手段,只是将数据报简单投递给网络层就算完成任务了,所以它是不可靠的。
(3)正因为TCP复杂的功能手段例如拥塞控制和流量控制,UDP跟他比起来,UDP系统开销大大减小
(4)从数据包的格式来说,TCP不加填充选项的时候首部是20字节,而UDP固定首部8字节。同时,TCP具有非常复杂的报文格式,而UDP很简单,比如源端口目的端口校验和以及数据总长度
(5)TCP适合路由信息报文以及普通数据包的这样的类似流量,而UDP适合传输大的流量,比如VOIP流量,视频流量。
5、tcp为什么是可靠传输的?(这题也喜欢啊,网络就考TCP协议和HTTP协议,变态一点出一个SSL协议, 让你懵逼,命中率60%)
答:(1)本身面向连接的三次握手机制(2)序列号保证它无重复无遗漏。重传机制用来对客户端进行反馈,表示我已经收到你的信息了(3)TCP校验和字段,如果在传输过程有错误,那么到达目的端,进行校验码比对,就知道有无错误了
6、四次挥手释放连接时,等待2MSL的意义?(四次挥手不常考,但考到不容易回答的漂亮,命中率30%)
第一,为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。
第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。
7、网站打开太慢的原因分析?(中档题,命中率60%)
答:(1)网络问题:ping、dig命令测试客户机和服务端网络情况以及DNS解析问题,如果DNS能解析但是很慢的话,使用CDN
(2)前端问题:浏览器落后,页面设计不佳
(3)服务端问题:(a)检查系统负载、CPU、内存、网络以及磁盘情况。(b)PHP响应慢,依据资源情况对FastCGI配置合适的参数(c)MySQL响应慢,SQL代码效率低下,读取慢,查询慢查询日志,show processlist 查看当前数据库状态,看哪些请求停留较多,磁盘IO率太大,my.cnf配置文件优化不够好(d)被攻击,
webserver进程数受限,甚至内网流量过高等原因
参考文档:http://www.wtoutiao.com/p/1a4rCZ2.html
8、tcp三次握手的过程中,accept发生在三次握手哪个阶段?(腾讯题目)
答:accept发生在三次握手之后,accept只是把内核中的已完成连接队列取出。
## connect才是发生在三次握手阶段,另一个队列是“未完成连接队列,并且这两个队列总和的最大值是backlog
9、常用的HTTP方法有哪些?
GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
OPTIONS:查询相应URI支持的HTTP方法。
TRACE:远程诊断服务器
10、GET方法与POST方法的区别
区别一:
get重点在从服务器上获取资源,post重点在向服务器发送数据;
区别二:
get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;
post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
区别三:
Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据,所以上传文件时只能用Post方式;
区别四:
get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;
post较get安全性较高;
区别五:
get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
post支持标准字符集,可以正确传递中文字符。
11、HTTP请求报文与响应报文格式
请求报文包含三部分:
a、请求行:包含请求方法、URI、HTTP版本信息
b、请求首部字段
c、请求内容实体
响应报文包含三部分:
a、状态行:包含HTTP版本、状态码、状态码的原因短语
b、响应首部字段
c、响应内容实体
12、常见的HTTP相应状态码
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙
11、HTTP1.1版本新特性
a、支持长连接
b、高并发连接请求
c、断点续传
13、URL和URI的对比(这是好题)
答:(1)URL是统一资源定位符,URI是统一资源标识符,URL是URI的一种
(2)URL用来标识某一个资源的具体位置,而URI标识某一类资源,如html、jpg、mp4
(3)组成部分不同,URL由协议名称、主机地址端口号、路径名构成,而URI由访问资源的命名机制、主机名、路径名构成。
(4)绝对路径和相对路径的区别
14、Cookie&Session的格式、传输的内容(网易题目,真尼玛难啊,我还打算笔试通过就去面试,这尼玛找死啊)
答:(1)Set-Cookie:NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN-NAME;SECURE
其中NAME是该Cookie的名称,VALUE是该Cookie的值;Expires变量是一个只写变量,它确定了Cookie有效终止日期;Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie;Domain=DOMAIN-NAME它确定了哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只有来自这个域的页面才可以使用Cookie中的信息,Secure:在Cookie中标记该变量,表明只有当浏览器和WebServer之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS。
Cookies以键值的方式记录会话跟踪的内容
(2)session包含一个session ID, SessionID是一个由24个字符组成的随机字符串。
当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session
15、数据库的组合索引和单索引,查询的时候有什么区别 ?
答:在多条件查询时,联合索引效率要高,查询条件中出现联合索引第一列,或者全部,则能利用联合索引。而单一索引只要条件中出现索引列,无论在什么位置,都能利用索引查询。
16、进程与线程区别,什么时候采用多进程,什么时候采用多线程?
答:(1)进程是CPU分配的基本单位,线程是CPU调度的基本单位
(2)进程独占资源,而一个进程中的多个线程共享资源,如地址空间和进程代码段等
(3)相对于进程而言,线程是一个更切近执行体的概念,线程产生和撤销快,线程通信和切换也快。
(3)需要频繁创建销毁的优先用线程、多线程适合在对称多处理机上运行,而多进程适合在跨主机上运行。
17、进程间通信方式,共享内存方式如何实现?
答:消息队列、信号、信号量、管道通信、套接字、共享内存
共享内存方式:这段共享内存由一个进程创建,但多个进程都可以访问。
<1>创建/打开共享内存
<2>映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问
<3>撤销共享内存映射
<4>删除共享内存对象
18、进程的调度方式,进程什么时候被调度,什么时候会退出?
答:调度方式:先来先服务、最高优先级、时间片轮转法、最高响应比、多级反馈队列。
什么时候调度:从阻塞到就绪,从就绪到运行,三个基本态的变化都会涉及到调度
什么时候退出:执行完毕或终止则退出。
19、线程太多有什么问题,任务太多怎么处理?
答:线程太多,同步是个麻烦问题,任务太多,就不断创建线程
20、shell:终端输入字符串如何一个字符一个字符地读到终端?(如果现场做,肯定做不出来的)
答:
1
2
3
4
5
6
7
8
|
1
#!/bin/bash
2
read
-p
"please input the string: "
STRING
3 num=1
4
while
(( $num<=${
#STRING} )) ##当num小于字符串总长度的时候
5
do
6
echo
${STRING}|
cut
-c $num
##截取第几个字符
7
let
num=num+1
8
done
|
21、聚集索引与非聚集索引的区别?
答:(1)聚集索引的物理顺序和索引顺序一致,非聚集索引的物理顺序和索引顺序不一致
(2)先创建聚集索引,然后才能创建非聚集索引
(3)一个表只能有一个聚集索引,但是可以有多个非聚集索引
(4)在聚集索引中,数据存储在B+树的叶子节点上,而非聚集索引的叶子节点存放的是索引值而不是数据
22、事务特性
(1)一致性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。
(2)原子性:事务在完成时,必须使所有的数据都保持一致状态,而且在相关数据中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都应该是正确的。
(3)隔离性:由并发事务所做的修改必须与任何其他事务所做的修改相隔离。事务查看数据时数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一并发事务修改之后的状态,即事务不会查看由另一个并发事务正在修改的数据。这种隔离方式也叫可串行性。
(4)持久性:事务完成之后,它对系统的影响是永久的,即使出现系统故障也是如此。
23、匹配文本中的key,并打印出该行及下面的5行?
grep -A5 key filename
24、源码编译安装apache,要求为:安装目录为/usr/local/apache,需有压缩模块,rewrite,worker模式;并说明在apache的workerMPM中,为什么ServerLimit要放到配置段最前面?
答:./configure --prefix=/usr/local/apache --enable-so --with-rewrite --with-mpm-worker
ServerLimit指定了Maxclients最大配置数目的上限值
25、A文件的内容是1.1.1.1,B文件的内容是2.2.2.2 要求shell编程实现C文件的内容是1.1.2.2 ?(这是个好题啊)
答:sed 'H;N;s#\(1.1.\).*\n\(2.2\).*#\1\2#' a.txt b.txt ##完全看不懂
26、mysql中,给本地用户webedit赋予webedit数据库中test表的查询权限,禁止其增加和删除的权限
grant select on wededit.test to 'webedit'@'localhost';
revoke update,delete on webedit.text from 'webedit'@'localhost';
27、目前,有一个文件,内容如下:
172.16.100.1
172.16.100.2
172.16.100.3
172.16.100.4
请使用while和ssh命令,登录文件内的ip并执行hostname命令
#!/bin/bash
while read line
do
ssh root@$line hostname
done <test.txt
28、请使用awk命令将如下两份文件中名字相同的两行合并起来(卧槽,这题是真难啊,如果是当场要求当场做,很难的)
A文件:
韩海林 21岁
海林韩 23岁
韩林海 22岁
林海韩 24岁
B文件:
韩林海 男
海林韩 男
韩海林 男
林海韩 男
输出效果:
韩海林 21岁 男
awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 2.txt 1.txt > 3.txt
##NR是所有读取的文件行数,而FNR是正在读取文件的行数,NR最大值为8,FNR则重新从1-4计数
参考文档:http://www.linuxdiyf.com/linux/13007.html
29、Linux查看某个进程的线程的3种方法
答:(1)ps -T -p 3306【进程pid】(2)top -H (3)htop
30、请写出五种系统性能分析工具,并简述其作用和特点
答:sysbench(磁盘IO性能)、Awstats(web服务日志分析)、ab和httperf(测量web并发服务)、mysqlslap(mysql压力测试)
31、用什么命令查询指定IP地址的服务器端口?
nmap -p80,21,23 192.168.1.1
参考文档:http://www.nxadmin.com/tools/600.html
32、用什么命令定义某个程序执行的优先级别?
nice renice
33、如何让history命令显示具体时间?
vi ~/.bash_profile
export HISTTIMEFORMAT='%F %T'
source ~/.bash_profile
34、查看Linux系统当前指定用户的邮件队列命令是
mailq 或者mail -u root
35、查看文件系统的类型
df -Th /dev/sda1
36、Ext4文件系统如何恢复rm命令删除文件
Linux下删除文件并不是真实的删除磁盘分区中的文件,而是将文件的inode节点中的扇区指针清除,同时释放这些数据对应的数据块,当释放的数据块被系统重新分配时,那些被删除的数据就会被覆盖,所以误删除数据后,应马上卸载文件所在的分区,umount /dev/sda1
yum install e2fsprogs-devel libcom_err-devel -y 、
tar -jxf extundelete-0.2.0.tar.bz2
cd extundelete-0.2.0 2 && ./configure && make&& make install
文件恢复:extundelete /dev/sda1 --restore-file 文件名
目录恢复:extundelete /dev/sda1 --restore-directory 目录名
37、简述linux下编译内核的意义与步骤?
答:编译内核的意义在于让硬件设备更稳定的发挥其应有的效能。
(1)下载内核源码包,解压并进入该目录
(2)make mrproper --清理内核源代码树(清理垃圾信息)
(3)make menuconfig --配置内核以及内核模块
(4)make dep --生成依赖关系
(5)make bzImage --生成新内核
(6)make moudulds --编译新模块
(7)make modules_install --安装内核模块
(8)make install --安装内核
38、你说下你技术的强项和不足?(50%要问)
答:强项:iptables、网络基础 不足:selinux和shell脚本
39、如果给你300台服务器,你该怎么去管理?(对于一个应届生来说,很难回答,但要是被问到了呢)
答:如果是linux服务器,那安装的话使用kickstart,监控nagios少不了的,甚至zabbix,自动化部署用ansible或者puppet
如果是windows服务器,做域控和组策略
49、简述调整哪些内核参数?
答:主要分为两类:一类是core,一类是tcp,vi /etc/sysctl.conf,包括缓冲大小,窗口大小,tcp队列大小,共享内存段
50、查看某个进程打开的文件数
答:lsof -p 3306 |wc -l