19个运维工程师面试集锦

第一部分:Linux基础

  • 题目1:

有一百个图片文件,它们的地址都是

http://down.xiaomi.com/img/1.png
http://down.xiaomi.com/img/2.png

一直到 http://down.xiaomi.com/img/100.png

如何批量下载这100个图片文件,并找出其中大于500KB的文件。

$: echo http://down.xiaomi.com/img/{1..100}.png > url.txt
#得到的100个图片的url地址是以空格分隔的,我们可以用vim编辑该文件,把空格替换成回车:s/ /\r/g
#再用 wget 命令批量下载wget -i url.txt -P .
#最后查找大于500k的文件find . -size +500k
  • 题目2:

一个文本文件 info.txt 的内容如下:​​​​​​​

aa,201zz,502bb,1ee,42
每行都是按照逗号分隔,其中第二列都是数字,请对该文件按照第二列数字从大到小排列。awk -v FS=',' '{print $2}' info.txt |  sort -rn
  • 题目3:

查看当前 Linux 服务器是否监听80端口,如果在监听,请找出其进程ID,并结束该进程。


kill `lsof -i:80 | tail -2 | awk '{print $2}'`
  • 题目4:

使用 curl 或 wget 命令获取 http 服务的 header 信息。​​​​​​​

curl -I www.baidu.comwget --server-response www.baidu.com
  • 题目5:

关于 Linux 的用户账号,下面说法正确的有:​​​​​​​

A.用户的密码,是以明文形式存储在 /etc/passwd 文件中的
B.用户的密码,是以密文形式存储在 /etc/passwd 文件中的
C.用户的密码,是以密文形式存储在 /etc/shadow 文件中的
D.用户登录的时候,会把用户的密码明文与保存的密码做对比

答案:C

  • 题目6:

对于N块硬盘组成的硬盘阵列,下面的说法哪个是错误的:​​​​​​​

A.raid1 与 raid5 相比,读取数据的速度 raid5 更快
B.raid1 与 raid5 相比,raid5 的磁盘空间利用率更高
C.raid1 在 (N-1)块磁盘损坏的情况下,不影响数据的完整性
D.raid0 相比于raid1、raid5,读写速度最快
  • 题目7:

负载均衡,你了解的常用软件有哪些?

请写出至少三种以上,并评价各自的缺点。​​​​​​​

(1)nginx缺点:1.nginx仅能支持http,https和email协议,这样就在使用范围上面小了。2.对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。不支持session的直接保持,但能通过ip_hash来解决。3.nginx工作在应用层,所以负载均衡会受到socket个数影响。
(2)LVS缺点:1.软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都要较强需求,这个就是Nginx/HAproxy + Keepalived的优势所在。2.如果网站比较庞大的话,LVS+Keepalived实施起来就比较复杂了,特别是有Windows Server机器。
(3)HAproxy1.HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS。2.如果是用作有关网站负载均衡工作的话,HAproxy比不上Nginx,因为Nginx本身就提供有HTTP服务。
  • 题目8:

执行 $ time sleep 2,输出如下:​​​​​​​

real    0m2.003s
user   0m0.004s
sys    0m0.000s
请说明 real、user、sys三者具体代表的意思和区别。
real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞所花费的时间。user时间是指进程花费在用户模式的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。sys时间是指花费在内核模式中的CPU时间,代表在内核中执行系统调用所花费的时间,这也就是真正由进程使用的CPU时间。
  • 题目9:

nginx rewrite 规则中 last、break、redirect、permanent 的含义​​​​​​​

1.rewrite break -url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变。2.rewrite last -url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏不变3.rewrite redirect返回302临时重定向,地址栏显示重定向后的url,,爬虫不会更新url(临时)4.rewrite permanent返回301永久重定向,地址栏显示重定向后的url,爬虫更新url
  • 题目10:

WEB 服务 cookies 和 session 的区别​​​​​​​

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群,数据库,文件中。Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
  • 题目11:

http 1.0 和 http 1.1 下有何区别?http 2.0 的主要变化或优势有哪些?​​​​​​​

区别:1.HTTP/1.0协议使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象;2.HTTP/1.1默认使用持久连接(然而,HTTP/1.1协议的客户机和服务器可以配置成使用非持久连接)。在持久连接下,不必为每个Web对象的传送建立一个新的连接,一个连接中可以传输多个对象!http2.0的优势:1.采用二进制格式传输数据,而非http1.1文本格式,二进制格式在协议的解析和优化扩展上带来了很多的优势和可能。2.对消息头采用Hpack进行压缩传输,能够节省消息头占用的网络流量,http1.1每次请求,都会携带大量冗余的头信息,浪费了很多带宽资源。3.异步连接多路复用。4.Server Push,服务器端能够更快的把资源推送到客户端。5.保持与HTTP1.1语义的向后兼容性也是该版本的一个关键。

第二部分:安全部分

  • 题目12:

请列举 WEB 常见安全问题(不少于三项),阐述其原理、危害。​​​​​​​

sql注入:拖库,撞库,爆破,删除数据跨站脚本攻击:向web页面里插入恶意html代码 用户浏览该页面时,嵌入其中的html代码会被执行失效的身份认证和会话管理
  • 题目13:

请列举常见DOS攻击类型,并分别介绍其原理和防御方法。​​​​​​​

Land攻击:向某个设备发送数据包,并将数据包的源IP和目的IP都设置成攻击目标的地址。
Teardrop攻击:利用OS处理分片重叠保温的漏洞进行攻击。
DDos分布式拒绝服务攻击:攻击者攻破了多个系统。并利用这些系统去集中攻击其他目标。成千上万的主机发送大量的请求,受害设备因为无法处理而拒绝服务。
Ping of Death攻击:通过构造出重缓冲区大小异常的ICMP包进行攻击,不断ping。。
Smurf攻击:攻击者冒充受害主机的IP地址,向一个大的网络发送echo request的定向广播包,此网络的许多主机都作出回应,受害主机会受到大量的echo reply消息。
SYN Flooding攻击:利用TCP连接的3此握手过程进行攻击。攻击者主机使用无效的IP地址,与受害主机进行TCP3次握手。在完成第二步后,受害主机就会处于开放会话的请求之中,但会话并未真正完成。受害主机必须等待连接超时,之后才能清除未完成的对话。在此期间,受害主机将会连续收到这样的请求,最终因耗尽用来管理绘画资源的资源而停止响应。
  • 题目14:

服务器遭到入侵,作为安全管理人员,你应做如何处理?​​​​​​​

系统遭受攻击并不可怕,可怕的是面对攻击束手无策,下面就详细介绍下在服务器遭受攻击后的一般处理思路。
1.切断网络
所有的攻击都来自于网络,因此,在得知系统正遭受黑客的攻击后,首先要做的就是断开服务器的网络连接,这样除了能切断攻击源之外,也能保护服务器所在网络的其他主机。
2.查找攻击源
可以通过分析系统日志或登录日志文件,查看可疑信息,同时也要查看系统都打开了哪些端口,运行哪些进程,并通过这些进程分析哪些是可疑的程序。这个过程要根据经验和综合判断能力进行追查和分析。下面的章节会详细介绍这个过程的处理思路。
3.分析入侵原因和途径
既然系统遭到入侵,那么原因是多方面的,可能是系统漏洞,也可能是程序漏洞,一定要查清楚是哪个原因导致的,并且还要查清楚遭到攻击的途径,找到攻击源,因为只有知道了遭受攻击的原因和途径,才能删除攻击源同时进行漏洞的修复。
4.备份用户数据
在服务器遭受攻击后,需要立刻备份服务器上的用户数据,同时也要查看这些数据中是否隐藏着攻击源。如果攻击源在用户数据中,一定要彻底删除,然后将用户数据备份到一个安全的地方。
5.重新安装系统
永远不要认为自己能彻底清除攻击源,因为没有人能比黑客更了解攻击程序,在服务器遭到攻击后,最安全也最简单的方法就是重新安装系统,因为大部分攻击程序都会依附在系统文件或者内核中,所以重新安装系统才能彻底清除攻击源。
6.修复程序或系统漏洞
在发现系统漏洞或者应用程序漏洞后,首先要做的就是修复系统漏洞或者更改程序bug,因为只有将程序的漏洞修复完毕才能正式在服务器上运行。
7.恢复数据和连接网络
将备份的数据重新复制到新安装的服务器上,然后开启服务,最后将服务器开启网络连接,对外提供服务。

第三部分:网络部分

  • 题目15:

请简述TCP的三次握手过程。

首先Client端发送连接请求报文,Server端接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了
  • 题目16:

发现系统中存在大量TIME_WAIT,分析原因并提出三条以上优化建议。​​​​​​​

对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务. TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证.解决方法:1、缩短TIME_WAIT的等待时间2、允许将TIME-WAIT sockets重新用于新的TCP连接3、开启TIME-WAIT sockets的快速回收4、使用长连接

第四部分:Python部分

  • 题目17:

xrange 和 range 的异同。

range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。xrange生成的不是一个数组,而是一个生成器。
  • 题目18:

列表 A 和 B,使用Python快速获取 A 和 B 中的共有元素。​​​​​​​

a = set(A)b = set(B)print(a.intersection b)
  • 题目19:

有20台服务器,需要在所有机器上 echo “123”,要求同时并行操作5台服务器,请使用Python或shell写出相关代码。

import timeimport sysimport osimport threadpool
def cmd(ip):    #需先设置远程无密码执行命令    os.system(‘ssh ip echo "123" 2>&1’)    time.sleep(2)
pool = threadpool.ThreadPool(5)                     #创建一个线程池,包括线程数10个requests = threadpool.makeRequests(cmd, ip_list)    #传递函数和参数[pool.putRequest(req) for req in requests]          #将请求放入线程池进行处理pool.wait()

来源:IT运维技术圈

### Java运维常见面试题及答案 Java运维工程师面试过程中,除了需要掌握基本的编程知识外,还需要具备系统部署、监控、日志分析、性能调优等方面的能力。以下是一些常见的Java运维相关面试问题及其详细解答。 #### 1. Java语言的三大特性是什么? Java语言的三大核心特性包括**封装**、**继承**和**多态**。 - **封装**:将数据和行为包装在一个类中,对外隐藏实现细节,提供公开接口进行访问。 - **继承**:允许一个类(子类)继承另一个类(父类)的属性和方法,提高代码复用性。 - **多态**:同一个接口可以有不同的实现方式,通常通过方法重写和接口实现来体现[^1]。 #### 2. JDK 和 JRE 的区别是什么? JDK(Java Development Kit)是面向开发者的工具包,包含编译器、调试器等开发工具以及完整的JRE环境;而JRE(Java Runtime Environment)仅用于运行Java程序,不包含开发工具。因此,如果只是运行Java程序,安装JRE即可;若需开发Java应用,则必须安装JDK[^1]。 #### 3. Java 基本数据类型及其封装类有哪些? Java有8种基本数据类型,分别是: - 整型:`byte`、`short`、`int`、`long` - 浮点型:`float`、`double` - 字符型:`char` - 布尔型:`boolean` 每种基本数据类型都有对应的封装类,如 `Integer` 对应 `int`,`Double` 对应 `double` 等。这些封装类提供了丰富的操作方法,常用于集合类中存储基本类型数据[^1]。 #### 4. 如果 main 方法被声明为 private 会怎样? Java程序的入口是 `public static void main(String[] args)` 方法。如果该方法被声明为 `private`,则 JVM 将无法找到并执行它,导致程序启动失败,并抛出 `NoSuchMethodError` 异常[^1]。 #### 5. public static void main(String args[]) 这段声明里每个关键字的作用是什么? - `public`:表示该方法对所有类可见,JVM才能调用。 - `static`:表示该方法属于类而不是对象,JVM无需创建实例即可调用。 - `void`:表示该方法没有返回值。 - `main`:是JVM识别的固定入口方法名。 - `String args[]`:用于接收命令行参数,是一个字符串数组。 #### 6. == 与 equals 的区别是什么? - `==`:比较两个变量的值是否相等。对于基本类型,比较的是数值;对于引用类型,比较的是对象的内存地址。 - `equals()`:是 `Object` 类的方法,默认情况下与 `==` 相同,但很多类(如 `String`、`Integer`)都对其进行了重写,使其能够比较对象的内容是否相同。 #### 7. Object 类有哪些公用方法? `Object` 是 Java 中所有类的根类,其常用方法包括: - `toString()`:返回对象的字符串表示。 - `equals(Object obj)`:判断对象是否相等。 - `hashCode()`:返回对象的哈希码。 - `getClass()`:返回对象的运行时类。 - `notify()` / `notifyAll()` / `wait()`:用于线程同步控制。 - `clone()`:用于对象拷贝。 - `finalize()`:用于垃圾回收前的清理操作。 #### 8. char 型变量中能不能存储一个中文汉字?为什么? `char` 是 16 位 Unicode 编码字符,在 Java 中占用 2 个字节,能表示大部分常用汉字(如 GBK 编码中的汉字)。然而,部分生僻汉字可能使用 4 字节的 UTF-16 编码,此时需要用两个 `char` 表示,即“代理对”(Surrogate Pair),因此单个 `char` 不能完整表示所有汉字[^1]。 #### 9. public、private、protected 的区别是什么? - `public`:任何位置都可以访问。 - `protected`:同一包内或不同包中的子类可以访问。 - 默认(无修饰符):仅同一包内可访问。 - `private`:仅本类内部可访问。 继承关系中,`private` 成员不可继承,`default` 成员只能在同包中继承,`protected` 成员可在不同包中继承,`public` 成员在任何地方都可继承。 #### 10. float f = 3.4; 是否正确? 不正确。因为 `3.4` 在 Java 中默认是 `double` 类型,将其赋值给 `float` 变量会导致精度丢失。正确的写法是: ```java float f = 3.4f; ``` 或者强制类型转换: ```java float f = (float) 3.4; ``` #### 11. short s1 = 1; s1 = s1 + 1; 有错吗?short s1 = 1; s1 += 1; 有错吗? 第一句 `s1 = s1 + 1;` 会报错,因为 `s1 + 1` 是 `int` 类型,赋值给 `short` 需要显式类型转换。 第二句 `s1 += 1;` 是合法的,因为复合赋值运算符(如 `+=`)会自动进行类型转换[^1]。 #### 12. hashCode() 和 equals() 的区别是什么? - `equals()`:用于判断两个对象是否“逻辑上相等”,默认比较引用地址,可通过重写比较内容。 - `hashCode()`:返回对象的哈希码,用于快速定位对象在哈希表中的位置。 一般要求:如果两个对象 `equals()` 返回 `true`,它们的 `hashCode()` 必须相同;反之不一定成立。两者配合使用,确保对象在集合类(如 `HashMap`、`HashSet`)中正常工作。 #### 13. 深拷贝和浅拷贝的区别是什么? - **浅拷贝**:只复制对象本身及其基本类型的字段值,对于引用类型的字段,复制的是引用地址,原对象和拷贝对象共享同一个引用对象。 - **深拷贝**:不仅复制对象本身,还递归复制其所有引用对象,使得原对象和拷贝对象完全独立[^1]。 #### 14. Java 中 final、finally、finalize 的区别是什么? - `final`:用于修饰类、方法、变量,表示不可继承、不可重写、不可修改。 - `finally`:用于异常处理结构中,无论是否发生异常,都会执行其中的代码块,常用于资源释放。 - `finalize()`:是 `Object` 类的一个方法,在对象被垃圾回收之前由 JVM 调用,用于执行清理操作,但不建议依赖此机制管理资源。 #### 15. String、StringBuilder 和 StringBuffer 的区别是什么? - `String`:不可变字符串类,适用于少量字符串操作。 - `StringBuilder`:可变字符串类,非线程安全,适用于单线程环境下的频繁字符串拼接。 - `StringBuffer`:可变字符串类,线程安全,适用于多线程环境下的字符串拼接[^1]。 #### 16. Java 中如何检测脚本语法错误并提示用户修复? 可以通过 `sh -n` 命令检测 shell 脚本的语法错误,例如: ```bash sh -n script.sh || read -p "存在语法错误,输入Q退出或V编辑: " cmd && [ "$cmd" == "V" ] && vim script.sh ``` 上述命令首先检查脚本是否有语法错误,如果有则提示用户选择是否进入编辑模式修正[^3]。 #### 17. Session 和 Cookie 的安全性有何不同? Session 数据存储在服务器端,客户端仅保存一个标识符(session ID),相对更安全;而 Cookie 数据存储在客户端,容易被篡改或窃取,因此安全性较低。此外,Session 可以存储任意类型的对象,包括 Java Bean,而 Cookie 只能存储字符串信息[^2]。 #### 18. Java 序列化与反序列化的应用场景有哪些? Java 序列化是指将对象转换为字节流以便于传输或持久化存储,反序列化则是将字节流转回对象的过程。常见应用场景包括: - 网络通信(如 RMI、RPC) - 对象缓存(如 Redis 存储 Java 对象) - 日志记录(如将异常对象序列化保存) 要使类支持序列化,必须实现 `Serializable` 接口。如果某些字段不希望被序列化,可以使用 `transient` 关键字修饰。 #### 19. Java 中 Comparator 与 Comparable 有什么不同? - `Comparable`:是类内部实现的接口,定义了自然排序顺序,如 `String`、`Integer` 等类已经实现了该接口。 - `Comparator`:是外部定义的比较器,可以在不修改类源码的情况下定义多种排序规则,适用于已有类或第三方类的排序需求[^1]。 #### 20. Java 中四种引用类型分别是什么? Java 提供了四种引用类型,用于控制对象的生命周期和垃圾回收策略: - **强引用(StrongReference)**:最常见的引用类型,只要强引用存在,对象就不会被回收。 - **软引用(SoftReference)**:用于缓存,只有在内存不足时才会被回收。 - **弱引用(WeakReference)**:只要发生垃圾回收就会被回收,适用于临时缓存。 - **虚引用(PhantomReference)**:最弱的引用,无法通过虚引用来获取对象实例,主要用于跟踪对象被回收的状态[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值