2018年企业运维开发经典面试题

【岗位职责】
负责DevOps业务线项目的实施交付工作
负责idc机房、私有云、公有云的私有化部署工作
负责公司产品的测试、生产环境搭建、维护
完善各环境中服务稳定性、监控、日志、部署、安全等需求
?
?【任职要求】
计算机相关专业本科毕业,2年以上的工作经验
深入理解Linux操作系统、体系结构
优秀的脚本语言的开发能力(bash,python)
熟悉常用的持续集成工具(例如Jenkins等)
熟悉Linux操作系统,熟悉常用的CentOS/Ubuntu/RedHat,熟悉网络知识
熟悉Linux下常用的应用集群、高可用和负载均衡技术
熟练使用常见开源监控工具者优先,如zabbix、Nagios、elk等
熟练使用常见关系型数据库Mysql、Postgresql,或Nosql数据库
熟悉Hbase 相关原理和最佳实践
熟悉Redis 相关原理及高可用的最佳实践
熟练使用阿里云、aws、腾讯云相关产品
熟练掌握docker相关知识
掌握git相关原理,github,gitlab
具备扎实的系统集成和运维技术能力
认同DevOps文化,认同“Automate Everything You Can”的原则,在开源社群活跃并有积极贡献者优先。
有技术热情和探索精神,有较强的快速学习能力和自驱能力,有良好的全局意识和系统风险识别能力
具备良好的英文阅读能力和快速学习能力
可以接受临时的出差工作
积极主动、责任心强、现场协调能力强、富有团结精神;有人际沟通能力和团队合作能力;性格开朗外向,做事认真细致,有责任感和风险意识;;
?
【加分项】
有微服务相关使用经验
有kafka、elk相关使用经验
有springcloud、nodejs 微服务部署相关经验
有Docker/k8s/Mesos/Swarm生产环境的使用经验
阿里云/aws 命令行工具的开发使用经验

有海量设备监控系统/自动化平台/服务管理/自动化部署/日志收集等系统开发设计经验

面试题如下:

1、描述Hbase中scan和get的功能以及实现的异同
HBase的查询实现只提供两种方式: 1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get) 2、按指定的条件获取一批记录,scan方法(org.apache.hadoop.hbase.client.Scan) 实现条件查询功能使用的就是scan方式

2、redis的并发竞争问题如何解决
方案一:可以使用独占锁的方式,类似操作系统的mutex机制。(网上有例子,http://blog.csdn.net/black_ox/article/details/48972085 不过实现相对复杂,成本较高)

方案二:使用乐观锁的方式进行解决(成本较低,非阻塞,性能较高)

3、为什么redis需要把所有数据放到内存中
redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和持久化的特征。如果不将数据放在内存中,磁盘I/O速度会严重影响redis的性能。如果使用了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。

4、redis支持的数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

5、处理中文时出现错误‘ascil’ codec can‘t decode byte 0xe9 in position 0:ordinal not in range(128) 解决办法“UnicodeDecodeError”:‘ascli‘ codec decode byte 0xe9 in posttion 0:ordinal not in range(128)
解决办法,在该python文件的前面加上如下几句,问题得到解决。

import sys
default_encoding = ‘utf-8‘
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)

6、python里面match()和search()的区别
match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配;
也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。
例如:
print(re.match(‘super‘, ‘superstition‘).span()) 会返回(0, 5)
而print(re.match(‘super‘, ‘insuperable‘)) 则返回None
search()会扫描整个字符串并返回第一个成功的匹配:
例如:print(re.search(‘super‘, ‘superstition‘).span())返回(0, 5)
print(re.search(‘super‘, ‘insuperable‘).span())返回(2, 7)
其中span函数定义如下,返回位置信息:
span([group]):
返回(start(group), end(group))。

7、python里面如何实现tuple和list的转换
Python中,tuple和list均为内置类型,
以list作为参数将tuple类初始化,将返回tuple类型
tuple([1,2,3]) #list转换为tuple
以tuple作为参数将list类初始化,将返回list类型
list((1,2,3)) #tuple转换为list

8、请写出一段python代码实现删除一个list里面的重复元素
我写的代码:

list1 = [5,1,3,1,6,2,3]

list2 = []

for i in list1:
if i not in list2:
list2.append(i)
else:
continue
list1=list2

网上给出的答案:
for i in list1:
if i not in list2:
list2.append(i)
else:
continue

9、如何批量删除或者停止运行的容器
docker rm -f $(docker ps -a)

10、docker本地镜像文件放在哪

/var/lib/docker

11、构建docker镜像应该遵循哪些规则
整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括:
尽量选取满足需求但较小的基础系统镜像,例如docker.io/centos7
清理编译生成文件、安装包的缓存等临时文件
安装各个软件是要指定准确的版本号,并避免引入不需要的依赖
应用尽量使用系统的库和依赖
使用dockerfile创建镜像时要添加.dockerignore文件或使用干净的工作目录

12、容器退出后,通过docker ps 命令查不到,数据会丢失吗

不会

13、docker查看日志
docker logs -f 容器id

14、如何控制容器占用系统资源(cpu、内存)的份额
:在使用 docker create 命令创建容器或使用 docker run 创建并启动容器的时候,可以使用 -c|--cpu-shares[=0] 参数来调整容器使用 CPU 的权重;使用 -m|--memory[=MEMORY] 参数来调整容器使用内存的大小。

15、如何根据容器的名字列出容器状态
docker status 容器id

16、docker与LXC有何不同
lxc 是 Linux 内核容器虚拟化的一项技术,可以实现资源的隔离和控制,也就是对 Cgroup 和 Namespace 两个属性的控制。对于 docker 而言,它发展到现在不仅仅是容器的代名词了,不过它的基础技术是需要依赖内核的 Cgroup 和 Namespace 特性。docker 出现之初,便是采用了 lxc 技术作为 docker 底层,对容器虚拟化的控制。后来随着 docker 的发展,它自己封装了 libcontainer (golang 的库)来实现 Cgroup 和 Namespace 控制,从而消除了对 lxc 的依赖。总结一下,lxc 是早期版本 docker 的一个基础组件,docker 主要用到了它对 Cgroup 和 Namespace 两个内核特性的控制。

17、docker与Vagrant有何不同
Vagrant适合用来管理虚拟机,而docker适合用来管理应用环境。

18、开发环境中docker与vagrant如何选择
Docker是应用执行环境,不是虚拟机,对于宿主来说只是个隔离的进程;而Vagrant是虚拟机辅助软件,使用Vagrant既使用虚拟机,因此所运行的是一个完整操作系统。这是最本质的区别。

Docker运行需要依托Linux内核,因此对于Windows, OSX系统而言,需要有一个Linux虚拟机运行起来,才可以使用Docker。因此在这种环境下,从单一虚拟机角度来说,Docker和Vagrant没有占用资源的差别。对于 Linux工作环境来说,那就没有这个问题,使用Docker要比Vagrant轻量级很多。

而在OSX, Windows下使用Docker和Vagrant开发,很重要的一个问题在于共享文件目录上。之前大家在这两个系统上安装的Docker环境都是通过Docker Toolbox ( https://docs.docker.com/toolbox/overview/ )来安装配置的,它使用的是Virtualbox,对于共享主机文件目录到Docker环境上有一些问题,大多数情况能用,但是部分情况会出故障。所以相对于 Docker Toolbox的环境而言,如果需要一些文件目录监控等高级功能,vagrant更适合开发。

但是,这个问题现在已经解决,Docker刚刚发布了Docker for Mac/Windows (beta) (https://docs.docker.com/docker-for-mac/),这将不在使用Virtualbox,而是使用 xhype (OSX), Hyper-V (Windows 10) 来运行一个更为精简的Linux (Alpine)。由于使用了操作系统原生虚拟框架,因此共享目录上的种种问题得到了解决,此外 Alpine 的使用,让Linux虚拟机加载更为迅速。所以在这种情况下,使用 Docker 要比 Vagrant 有更多的优势。

所以,从未来角度看,Docker是大势所趋。

19、salt minion配置文件的默认路径
/etc/salt/minion

20、如何手动刷新pillar
在master端定义,指定给对应的minion。可以使用saltuitl.refresh_pillar刷新。

21、介绍下salt的反射系统

22、写一个脚本,判断192.168.1.0/24网络里,当前在线ip有哪些

#!/bin/bash
for ip in seq 1 255
do
{
ping -c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 192.168.1.$ip UP
else
echo 192.168.1.$ip DOWN
fi
}&
done
wait

23、描述linux运行级别0-6的含义
0:关机

1:单用户模式

2:无网络支持的多用户模式

3:有网络支持的多用户模式(文本模式,工作中最常使用的模式)

4:保留,未使用

5:有网络支持有X-Window支持的多用户模式

6:重新引导系统,即重启

24、linux开机过程

25、修改内核如何生效

source /etc/profile

26、Django中想验证表单提交是否格式正确需要用到Form中哪个函数

is_valid()函数方法,用于检查表单提交是否正确。

27、Django中如何读取和保存session,整个session的运行机制是什么

说到session的运行机制,就一定要先说一下cookie这一段信息。一般情况下cookies都是我们的浏览器生成的(显然可以人为修改),用于服务器对户进行筛选和维护,但是这个听上去很好吃的东西,能存的东西有点少而且容易被别人利用。这时候基于cookies的session的意义就比较明显了,在客户端的cookies中我们只保存session id,而将完整信息以加密信息的形式保存到服务器端,这样服务器可以根据session id相对安全的在数据库中查询用户的更细致的信息和状态。

28、kafka查看指定topic信息
bin/kafka-topics.sh --zookeeper node01:2181 --describe --topic t_cdr

29、git初始化和更新子模块
git submodule init 初始化子模块
git submodule update 更新子模块

30、ubuntu搜索可用包
apt-cache search package-name

31、在10.0.0.8/8中划分出3个子网,保证每个子网有4089个私有ip
略,本人不太精通子网划分

32、ip报文格式
版本:IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。

首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。

服务类型:Type Of Service。

总长度:IP报文的总长度。报头的长度和数据部分的长度之和。

标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。

标志:共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。

片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)

生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。

协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.

首部校验和:计算IP头部的校验和,检查IP报头的完整性。

源IP地址:标识IP数据报的源端设备。

目的IP地址:标识IP数据报的目的地址。

33、keepalived工作原理
Layer3,4,&5工作早IP/TCP协议栈的IP层,TCP层,及应用层
原理:
Layer3:keepalived使用layer3的方式工作时,keepalived会定期向服务器群中发送一个ICMP的数据包(即我们平时用的ping程序),如果发现某台服务器的IP地址没有激活,keepalived便会报告这台服务器是小,并将他从服务器群中剔除。Layer3的方式是以服务器的IP第孩子是否有效作为服务器工作正常与否的标准。

Layer4:主要以TCP端口的状态来决定服务器工作正常与否。如web sercer的服务端口一般是80.如果keepalived检测到80端口没有启动,则keepalived将这台服务器从服务群中删除。

Layer5:layer5就是工作载具体的应用层,比layer3,4要复杂一点,载网络上占用的宽带也要打一些。Keepalived将根据用户的设定检查服务器的运行是否正常。如果设定不相符,则keepalived将把服务器从群中踢除。

原文地址:http://blog.51cto.com/yw666/2119035

时间: 2024-11-01 11:04:58

2018年企业运维开发经典面试题的相关文章

Linux运维工程师经典笔试题30道

1. cat -n file1 file2 命令的意思是? 把文件file1和file2连在一起,然后输出到屏幕上. 2. Linux下查看服务程序占用的端口命令是什么? netstat –apn 3. 对于Linux说法,下列说法正确的是() 线性访问内存非法时,当前线程会进入信号处理函数 4. 在Linux系统上,下面那个命令不可以用来查看文件内容() A cat    B ls     C less   D more 5. 下面哪个命令可以从文本文件的每一行中截取指定内容的数据. A cp

2017最新企业Shell面试题及企业运维实战共30道案例

<跟老男孩学习Linux运维:Shell高级编程实战>一书第19章企业面试题分享. 答案: 1.答案在<跟老男孩学习Linux运维:Shell高级编程实战>第19章一书2016年年底前即将出版. 2.2016最新Shell视频http://edu.51cto.com/pack/view/id-546.html 第19章企业Shell面试题及企业运维实战案例 19.1 企业Shell面试题实战案例 19.1.1 企业Shell面试题1:批量生成随机字符文件名案例 使用for循环在/o

老男孩运维开发最新毕业项目邀你来战

一不小心,老男孩Python运维开发6期班即将毕业了,大家都知道,每期毕业时都有一个做运维平台的大项目,老男孩PY课程经过2年共6期的演变,课程内容不断的更新和完善,总课程时长由最初的10天扩展至如今的16-18天,并且第6期的毕业项目内容做了很多的更新和优化,使之更符合企业的实际需求.为了让之前几期的童鞋也享受到课程更新带来的好处,本校决定,6期的毕业项目对前几期所有老男孩PY项目学员免费开放,欢迎大家来参加面授课程,课程内容如下: 项目内容: 1.   开发CMDB资产数据库,实现资产数据的

云计算视频,Linux云计算运维开发架构视频

云计算视频,Linux云计算运维开发架构视频,该视频一共分为两大板块: 一.Python Linux自动化运维开发实战 1.python开发环境部署 2.python文件类型 3.python运算符及表达式 4.python数据类型 5.python流程控制 6.python文件操作 7.python 函数 8.python包与模块 9.python正则表达式 10.python异常处理 11.python面向对象 12.收集主机系统信息 13.构建信息发布系统 Django 14.批量主机管理

Python运维开发基础01-语法基础【转】

开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶,Python网页编程,Python项目实战 Python开发基础分为语法基础篇,文件基础篇,函数基础篇,模块基础篇 语法基础篇中,我着重希望训练同学的是作为开发应该具备的一种逻辑思路. 文件基础篇中,我们需要练习的是如何将数据永久性的存储在硬盘上,提供读,写. 函数基础篇中,我重点是要引导同学们构

重磅|0元学 Python运维开发,别再错过了

51reboot 运维开发又双叒叕的搞活动了,鉴于之前 51reboot 的活动反馈,每次活动结束后(或者已经结束了很长时间)还有人在问活动的事情.这一次小编先声明一下真的不想在此次活动结束后再听到类似下面的话了 我之前不知道有活动 (这个锅小编我背了) 这个活动还有吗? 我想了解一下这个活动 跟我说可以给我按活动价算吗? .......... 针对以上类似的询问小编在此统一回复大家: 好了,接下来进入今天的重中之重 本次活动:Python 运维开发——18天训练营 本课程为:网络班+面授班(北

基础入门_Python-模块和包.运维开发中日志模块logging的最佳实践?

简单介绍: 说明: 此模块儿提供了文件,HTTP GET/POST,SMTP,SOCKET等方式实现日志记录,甚至可以自动实现具体的日志记录方式 快速安装: pip install --upgrade logging 处理流程: 日志级别: 属性名称 属性说明 logging.NOTSET 默认为0 logging.DEBUG 调试为10 logging.INFO 一般为20 logging.WARN 警告为30 logging.ERROR 错误为40 logging.CRITICAL 严重为5

办公管理支撑流程能力PaaS平台运维开发软件需求设计方案

1.概述 办公管理支撑流程能力PaaS平台(以下文中简称"能力平台")运维开发是指基于Cordys BOP 4 PaaS平台,通过二次开发,为运维开发人员提供快速支撑办公管理流程开发.实施.再造的能力,也为管理流程全生命周期管理提供数据支撑能力.管理目标及软件需求如下: (1)开发/运维人员 开发/运维人员是指系统平台管理人员.运维人员,例如:省公司与地市公司信息化系统管理员.开发/运维人员为专业信息化管理员,都是受过专业计算机教育,懂计算机软件维护.开发,但是,不是专业程序员,也就是

运维和运维开发

国内做运维的人,很多觉得开发很神秘很难 国内做开发的人,很多觉得运维就是搬机器收报警,脏活累活7*24随时等待召唤 相互都把对方理解错了. 以我多年的经验来看,国内的运维的确存在很多问题.比如,开发人员被宠的太厉害,运维人员话语权少.由于人力便宜,在自动化运维方面重视不够.等等. 这样造成一个印象,运维围着开发转,运维只能干累活脏活,待遇还比开发低. 国外反过来.最突出的一个方向,dev-ops,运维开发.要求又有系统管理经验,又懂底层又懂运维,又会开发. 这种人比普通开发的收入还高. 简单来说