一、linux基础
1) 如何杀掉linux系统中所有的带“nginx”字段的进程,请给出详细命令?
2) linux系统中如何获取pid为100的进程的所有TCP连接,请给出详细命令?(尽可能给出效率最高的方法)
3) 阻塞和非阻塞系统调用的区别是什么?请举一个应该使用非阻塞系统调用的例子?
4) 主机A需要给主机B传输一份10GB的数据,从应用层上可以做哪些传输优化?从TCP上可以做哪些传输优化?请分别列举优化措施
二、系统/网络
1) 介绍linux系统的启动过程
2) 尽可能多的列出你知道的安装linux操作系统的方法
3) 简述下传统机械硬盘和SSD的性能差异
4) 简述DHCP的获取IP地址的过程
5) 简述traceroute命令的原理
三、开发/安全
1) ftp的默认使用的20和21端口,各自的用途是什么?
2) ftp的主动模式和被动模式,各有什么使用场景,并简述两种模式下,ftp的连接建立过程
3) ftp的数据传输过程中,是明文传输还是加密传输?请描述相应的嗅探方案
4) 如果要对一个ftp服务进行ddos攻击,简述你的思路,请从应用层和网络层分别阐述。
5) ddos问题产生的本质是什么,阐述你想到的防御思路
6) 编码实现一个简单的ftp server,支持连接建立,列目录(dir),下载文件(get)功能,编程语言不限
四、数据库
某计数系统有两张表,网站信息表和访问记录表,结构和数据如下:
网站信息表:site
ID
(自增主键) |
URL
(非空,长度128字节) |
Title
(非空,长度1024字节) |
Body
(text) |
1 | www.baidu.com | Badiu | <html>…</html> |
2 | www.google.com | Google_xiaomi | <html>…</html> |
3 | www.xiaomi.com | Xiaomi | <html>…</html> |
4 | www.facebook.com | <html>…xiaomi…</html> |
访问记录:history
ID
(自增主键) |
User
(非空,长度32字节) |
Site_id
(非空) |
access_date |
1 | A | 1 | 2013-10-01 |
2 | B | 1 | 2013-10-05 |
3 | A | 2 | 2013-10-05 |
4 | C | 3 | 2013-10-06 |
1) 请按要求,写出上面两张表的建表语句;
2) 请写出每个网站的总访问次数,并按访问次数从多到少进行排序;
3) 系统运行一段时间后,访问记录表的数据量变得非常大,通过URL查询每个网站的访问次数时响应速度非常慢,请简述你的优化方案。
4) 请用一条SQL语句查询出符合条件的数据:url或者title或者body中包含xiaomi关键字的记录,要求url中匹配记录的排在前面,title匹配的排在其后,body中匹配的排在最后,最后的输出结果预期如下:
ID | URL |
3 | www.xiaomi.com |
2 | www.google.com |
3 | www.xiaomi.com |
4 | www.facebook.com |
9 Comments
这些题我估计我只能回答80%
那很厉害啊,因为这题目涉及安全、开发、数据库、系统/运维多个方向的……不指望答及格的,求简历啊,呵呵
不好意思,我不在北京
:)
能答个80%
一、
1. ps aux + kill + ack
advanced:killall/pkill
2. netstat -an + ack
3. 阻塞需要等待,非阻塞不需要,比如write就是非阻塞的(写入缓存即可,并不一定已写入磁盘)。
4. 应用层上可以分包并行,异步;TCP层可以修改MTU
二、
1. 这个说起来有点没完没了,大概是:
载入/boot
运行/sbin/init
读取/etc/inittab
根据/etc/rc.d/rc.sysinit进行初始化
根据/etc/init.d/启动服务
运行/etc/rc.d/rc.local
加载终端
这里面还有很多没说到的地方,甚至看完『Linux内核设计的艺术』还能以另一个角度再说一遍。
2. ??不是很明白这道题的意思,通过本地安装?通过网络安装?以前Ubuntu还能通过wubi安装?
3. SSD的随机读、顺序读、顺序写快,而且无噪音。
4. 用OpenStack的时候虽然研究了下dnsmasq,但是还没看过DHCP的过程。翻了下,大概是发现、提供、请求、确认四个步骤,具体通过UDP实现,抽时间可以拿wireshark实验下~
5. 利用路由器接受一次TTL减1,然后等着收ICMP的Time Exceeded.
三、
1. 20是控制端口,21是数据端口。
2. 主动模式用于客户端主动连接服务器,被动模式用于服务器主动连客户端(需要客户端通知其为被动模式,可以避免服务器到客户端的连接被防火墙墙掉)。
主动模式大概过程:
Client(Port:Rand>1024) –> Server(Port:21)
Client Listen: Rand + 1
Client Send ‘Prot Rand + 1′ to Server(Port:21)
Server(Port: 20) –> Client(Port:Rand + 1)
被动模式以前没看过,不过似乎大同小异,发送PORT变成发送PASV,然后服务器开一个 Server Rand Port, 发给客户端,然后客户端从Client Random Port + 1去连Server Rand Port
3. 明文,没怎么接触过嗅探,不知到是要干什么,没事连了下ftp.sjtu.edu.cn,在Wireshark里用(ip.src == 202.38.97.230) || (ip.dst == 202.38.97.230)过滤,从连接到用一个错误的用户名、密码连接失败共抓到17个包,其中两个以FTP协议传的包内含:Request Command:USER,Request Arg:***;Request Command:PASS,Request Arg:***,端口为21,也就是说我们只要监听源为本地,目标为任意切端口为21的数据包即可抓到FTP用户名、密码。
4. 没怎么接触过DDoS,也算稍微查了下,从应用层可以是大量被动连接吧,可以消耗服务器端口;也可以连接后疯狂下载,占用带宽?网络层的话因为从Wireshark可以看到前面的连接部分是TCP的,那就可以利用SYN Flood。
5. 我对这块不熟,所以仅基于自己有限的知识。如果被动连接如我前面所述会消耗大量端口资源的话最简单的办法是只允许主动连接,非要保留不可,可以限制同一IP的连接(自己用ftp -p实验了下,确实超过一个连接会返回421 There are too many connections from your internet address)。但是如果用肉鸡群的话应该可以做到让别人挤不进来;疯狂下载且不说是否有可行性,限速就完事了;SYN Flood的问题是消耗CPU、内存,还有占用SYN等待队列,这个是比较经典的攻击方法,解决方案也挺多的,SYN Cookie、设置SY队列长度、设置SYN+ACK最大重试次数还有清洗设备等,依情况而定解决方案。
6. 用Python写应该不会太难吧,有时间写写。
四、
1. CREATE TABLE site (
ID int not null primary key,
URL varchar(120) not null,
Title varchar(1024) not null,
Body text
);
CREATE TABLE history (
ID int not null primary key,
User varchar(32) not null,
Site_id int not null,
access_date date
);
2. select Site_id, count(*) from history group by Site_id order by count(*) desc;
3. 分级缓存、分表+哈希
4. 对SQL不是很熟,实现的比较笨:
select ID, URL from site where URL like ‘%xiaomi%’ union all
select ID, URL from site where title like ‘%xiaomi%’ union all
select ID, URL from site where Body like ‘%xiaomi%’;
有一些内容还是不怎么懂的,比如网络安全方面,数据库其实也不熟,只是还好考得不算难(数据库),所以一些答案还是花时间实验+Google才做出来。
本人大三在校生,现在在中科院计算所客座,暑假有机会希望能试试~~
P.S 第二题提交完才发现想着一会事,写着写错了,应该是netstat ap+ack,advanced:netstat+awk
求出个社招的题目,可以检验下自己和小米的差距有多少。
小米,一直是我向往的地方,可惜去过五道口无数次,默默经过小米总部