概述
按面试项目分为笔试题、面试题,有的公司会有机试题(带你到工位电脑让你操作),如何才能临危不惧,应对自如?
答案是:提前研究公司岗位的需求,制定大的战略,做到腹有良谋,口若悬河,言简意赅、控制时间(自我介绍1分半;面试官感兴趣,又是你擅长的时间长些,但不要超过限度,注意,反馈,不要偏离中心)。
考察点分为:有固定答案型、无固定答案型;有固定答案型:比如:Raid的特点与原理,这是固定的,提前背下,就行;无固定答案型,你对服务器安全方面有什么看法?考察的是,你的思维深度,和结构思维,我们一般,先说大的概述,比如:策略、账号管理、定期杀毒等;再往小的方面缩,提前做好灾备,监控,将问题消灭在萌芽中。
还有,非技术问题,做好运维工作是技术更重要还是服务更重要?回答,哪个重要都不是最佳答案,考察的是应变能力!参考一下:技术和服务是相辅相成的,技术在不断的发展也在不断的进步,作为技术人员,不但需要有良好的技能也,同时需要有良好的服务态度,全面考虑问题才能保证设备正常的运转,避免给公司带来不必要的在损失。
非技术问题
1、介绍一下你(以我为例,您说的必须真实、巧妙,一分钟半内说完,他反馈内容也要能答上)
答:xxx,性格沉稳,为了适应云计算岗位,做了很多学习、研究,在CSDN发表相关文章,上过热榜,考虑问题全面做事把握轻重缓急。
分析:投其所好、重量级优先;控制时间、结构统一 要说对岗位,有优势又可直观体现,具体优秀到哪个程度。简言之,就是为了胜任岗位要求做了什么?取得了什么成绩?(这成绩不是自己吹的,是CSDN官方综合认定的),我说的这个,即和岗位相关,又很直观,他可以现在就打开我的博客验证,而且得到专业机构认可;我说的这些优势都是统一在一个中心,还有心理素质要好,只要面试官没说结束面试,您就有机会,有次去面试,他把简历当面撕掉了,我想,肯定没戏了,说句客气的话,走吧!但他说,明天带上需要的材料,来公司上班!。
2、你对加班的看法?(或者会问您类似的问题,我们公司处在发展阶段,加班会比较频繁,你能接受吗?)
答:工作需要我义不容辞加班,我现在单身,没有家庭负担,可以全身心的投入工作。同时,我也会提高工作效率,减少不必要的加班。
分析:一般是人事面试问题,并不证明一定加班,也不要说的太假,没机智的体现,此类问题,不要和人家扯的太长,毕竟人家只是简单考考你是不是乐于奉献。
3、说说你最大的缺点?
答:英语发音不太准,我正在通过软件学习提高,已经明显得到改善了。(前提是你面试的岗位对英语发音没有严格要求,非外企、翻译类岗位)
分析:不要说对岗位有影响的缺点,比如,学历低,就不要提了,除非,他问你,想以此来压压你的工资,你可以说,我是个不断追求进步的人,在业余时间,会抽出时间,学习,报考学历,提升学历。说很容易补足缺点,你是努力弥补的,表面上看起来是缺点,其实只要及时学习就可以轻松改变。从自己的小缺点说起,中间加一些优点,我有缺点,但是针对缺点,我已经做了改善,并获得了成果。比如,已经在通过什么方式来弥补了,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。
5、上家公司为什么离职?
不要按你的说,要分析面试官想要什么?也许上家公司真的有种种弊端,但是你要成功,就不能说。也不要千篇一律。篇幅勿过长,这不是重点内容,谈的多反而不好。
6、在公司做什么?
说你做的出色的业务,擅长的方面,展示亮点的时候到了!
故障排查
1、cpu100% 如何排查?或者,面试官问Linux服务器CPU负载高如何排查,语言不一样,考察点相同。
答:
1)用top命令, 查找到cpu占用高的进程对应的PID
2)top -p PID -H , 查看指定服务内部线程cpu占用情况
3)程序big,如果是Java语言开发的提供的信息,使用jstack命令保存信息,提供给开发部门。
程序无big,则需升级CPU。
2、磁盘100% 限于web或mysql日志信息过多情况
答:查看存放日志目录;找到无用的文件,用rm -fr删除。使用命令du -sh /opt/(目录名)
查看磁盘占用情况,磁盘占用率还是高,是删除文件还在后台运行,空间没有释放。使用命令lsof | grep delete 查找删除文件PID号。使用kill加PID杀掉这些进程即可
3、在无网的环境下,解决依赖环境
答:配置本地yum源;或者有网的主机下载所需包及依赖,上传到服务器
4、二进制与rpm包区别
答:二进制包
二进制包里面包括了已经编译的文件,可以马上运行的程序。只需要下载和解包(安装)它们以后,就马上可以使用。.tar.gz结尾;安装方式,直接解压安装。
RPM是redhat系列发行版本所用的格式软件包。一般在RHEL、CentOS、下都可以安装。标准的安装方法是rpm -ivh。还有红帽系列经常使用的yum,其实就是自动判断rpm包的依赖,然后一次性把所有需要安装的N个rpm统一下载安装,其实原理和一个个的安装rpm没有什么本质区别。rpm结尾;rpm -ivh 或者yum
概念
1、centos7开机启动流程
1)开机自检BIOS:根据BIOS中设置,检测内存、硬盘、CPU等硬件信息,决定启动介质,找到MBR扇区
2)MBR引导:读取硬盘第一个扇区,将MBR加载到内存,根据MBR的设置,去找系统的grub引导
3)GRUB2菜单:显示启动菜单给用户,根据所选项或采用默认值,加载内核文件,将系统控制权转交内核
4)加载内核:加载内核文件vmlinuz、虚拟文件系统模块initramfs
5)systemd进程初始化:挂载/etc/fstab文件中的系统,从虚拟文件系统模块initramfs挂载磁盘根目录,内核初始化,加载/usr/lib/systemd/systemd文件,执行默认target配置(运行级别)。
2、简述Raid的特点与原理
级别 | 特点 | 缺点 | 场景 |
---|---|---|---|
Raid0 | 读写速度最快;成本低;最少两块硬盘 | 损坏几率高;无冗余 | mysql slave、集群节点 |
Raid 1 | 读性能提升,写性能下降;有冗余;两块或2的倍数硬盘组成 | 硬盘利用率50% | 重要数据:监控、系统盘等 |
Raid 5、6 | 读性能提升,写性能一般;有冗余;最少由三、四块 | 磁盘利用率是n-1、n-2块盘 | 对性能安全要求不是很高业务 |
Raid 10 | 读写性能很快 ;最少4块硬盘;有冗余 | 磁盘利用率50% ,同组不能都坏掉 | 数据库、存储的主节点 |
Raid 01 | 读写性能很快 ;最少4块硬盘;有冗余 | 磁盘利用率50%,同组都可坏,不同组相同标号不能坏 | 数据库、存储的主节点 |
Raid0(独立磁盘冗余阵列):
最少两块硬盘组成
是所有动态磁盘中,数据读写速度最快的
损坏几率相对最高
没有容错功能
Raid1:
由两块或2的倍数硬盘组成
硬盘使用率只有50%,读性能提升,写入速度降低
拥有容错功能
Raid5:
由三块或三块以上硬盘组成
磁盘利用率是n-1块盘
利用奇偶校验,拥有磁盘容错功能(只支持一块硬盘损坏)
Raid6:
Raid6是Raid5的增强版
由4块或以上硬盘组成
磁盘利用率是n-2块盘
支持容错,可以支持两块硬盘损坏
Raid10:(Raid01不常用,损坏率相对Raid10较高)
最少4块硬盘组成
两两硬盘先组成Raid1,再组成Raid0
兼顾Raid0和Raid1的特点,中和两种Raid的缺点
软Raid:是由操作系统模拟的Raid,一旦硬盘损坏,操作系统就会损坏,Raid会丧失作用
硬Raid:是由独立于硬盘之外的,硬件Raid卡组成;就算硬盘损坏,也不会导致Raid卡损坏,磁盘容错才能起作用。
3、简述TCP三次握手与四次挥手的过程?
答: 三次握手建立连接,四次挥手断开连接;SYN:同步位; ACK:确认位 ;ack:确认号;seq:序号(随机生成)FIN用于释放连接。第一次客户端A向服务端B主动发建立连接请求,SYN=1,seq=x;第二次服务端B响应请求,发送ACK=1,SYN=1,ack=x+1,seq=y;
第三次客户端A收到响应,回复ACK=1,ack=y+1,seq=x+1;客户端与服务器建立连接,可以传输数据。
第一次客户端A向服务端B主动发断开连接请求,FIN=1,seq=u并停止传输数据;第二次服务端B响应请求,ACK=1,ack=u+1,seq=v;第三次服务端B向客户端A发送响应请求,FIN=1,ACK=1,seq=w,ack=u+1;第四次客户端A向服务端B发送ACK=1,ack=w+1,seq=u+1,服务器端与客户端断开连接。
4、HTTP返回状态码(status-code),由3位数字组成,简述各自含义。
答:
2xx、3xx正常
200 请求成功
201 上传文件成功
301 永久重定向(redirect)
302,307 临时重定向(redirect)
304 浏览器缓存
4xx 用户方面问题(无权限,或请求的方式不支持)
403 请求不到首页,没有权限(文件没有设置权限,或权限不足以完成这个请求)
404 请求的资源在前端查明不存在
405 请求方法不支持(以未做重定向为例,仅允许https的方式访问,如果用http不支持)
5xx服务端程序错误
500 服务器的内部错误,程序错误
502 请求的资源前端有记录,指向后端数据库,却找不到后端资源(多为php或mysql问题,如:Apache有记录,Apache向mysql请求数据,找不到资源,或php配置错误,连接不到mysql)
503 服务暂时不可用(服务器的程序出现问题)
504 请求超时(规定时间,没有收到响应)
5、说一说yaml(非标记语言)的要素?
答:缩进:两个字符
冒号:冒号后面需要空格,除了以冒号结尾
短横杆:列表项,后面要空格
6、使用touch test时报错分区磁盘已满,但利用df -h查看后磁盘空间还有,请解释原因
答:小文件过多,导致inode耗尽,可以使用命令查找到小文件,把确定无用的删除。
7、突然发现一台Linux系统只读,应该怎么处理,请写出详细步骤。(问法可能不一样考察点一样,比如:磁盘空间还有写不进去东西了)
答:文件系统只读,可能是误操作,挂载的时候加了ro的挂载选项。也可能是文件系统损坏,这时候可以使用fsck -y 分区 来尝试修复一下,但在修复之前最好是把重要数据做一个备份以防万一。如果修复失败,那说明是磁盘损坏,这就需要更换磁盘了。
8、格式的加密解密压缩在哪一层?
答:表示层
数据库
一、Memcache与Redis的区别都有哪些?
答:
1)、存储方式 Memecache把数据全部存在内存之中,断电后消失,要持久化存储需借助其他工具;数据不能超过内存大小。 Redis有部份存在硬盘上,redis本身可以持久化存储数据
2)、支持数据类型 memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 ,提供list,set,zset,hash等数据结构的存储
3)、底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求所有, redis的速度比memcached快很多。
4)、value 值大小不同:Redis 最大可以达到 512M;memcache 只有 1mb。
5)、数据的备份 Redis支持数据的备份,即master-slave模式的数据备份。
二、Redis 的持久化机制是什么?各自的优缺点?
答: RDB 和 AOF 机制。
Redis DataBase持久化方式:
是指用数据集快照的方式记录redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据备份。
优点:
(1)只有一个文件 dump.rdb,方便持久化。
(2)容灾性好,一个文件可以保存到安全的磁盘。
(3)性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。保证了 redis的高性能
(4)相对于数据集大时,比 AOF 的启动效率更高。
缺点:
数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
AOFAppend-only file持久化方式:
是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储保存为 aof 文件。
优点:
(1)数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
(2)通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
(3)AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))
缺点:
(1)AOF 文件比 RDB 文件大,且恢复速度慢。
(2)数据集大的时候,比 rdb 启动效率低。
三、Redis集群的原理是什么?
答:
(1)Redis Sentinal(哨兵) 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务。
(2)Redis Cluster 着眼于扩展性,在单个 redis 内存不足时,使用 Cluster 进行分片存储。
四、Redis 集群最大节点个数是多少?
答:16384 个。
五、Redis 最适合的场景?
答:
1、会话缓存(Session Cache)
把session会话存在redis,过期删除
缓存用户信息,缓存Mysql部分数据,用户先访问redis,redis没有再访问mysql
商城优惠卷过期时间
2、全页缓存(FPC)
除基本的会话 token 之外,Redis 还提供很简便的 FPC 平台。回到一致性问题,即使重启了 Redis 实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似 PHP 本地 FPC。 再次以 Magento 为例,Magento提供一个插件来使用 Redis 作为全页缓存后端。 此外,对 WordPress 的用户来说,Pantheon 有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。
3、队列
Reids 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得 Redis能作为一个很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本地程序语言(如 Python)对 list 的 push/pop 操作。 如果你快速的在 Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用 Redis 创建非常好的后端工具,以满足各种队列需求。例如,Celery 有一个后台就是使用 Redis 作为 broker,你可以从这里去查看。
4,排行榜/计数器
Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis 只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的 10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES Agora Games 就是一个很好的例子,用 Ruby 实现的,它的排行榜就是使用 Redis 来存储数据的,你可以在这里看到。
5、消息队列-发布订阅
配合ELK缓存收集来的日志
虚拟化
docker
1、什么是docker?
答:是一个把应用程序及所依赖项打包自动部署到容器的开源引擎。
2、docker有哪些好处?
答:1)占用资源低,硬件开销少;2)部署快速;3)启动快速;4)快速回滚;容器技术天生带有回滚属性,因为每个历史容器或者镜像都会有保存,而替换一个容器或者某个历史镜像是非常快速和简单的。5)隔离性好;两个应用需要使用同一个依赖,或者两个应用需要的依赖之间会有一些冲突,这个时候就很容易出现问题了。
3、Docker与传统虚拟机的区别
请看这张图
特点 | docker | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
交付/部署/集成 | 开发、测试、生产环境一致 | 不一致会导致问题 |
性能 | 物理资源消耗小 | 物理资源消耗大 |
体量 | 极小(MB) | 较大(GB) |
迁移/扩展 | 跨平台方便 ,可复制 | 较为复杂 |
答:传统虚拟机占用硬件资源大;部署、启动慢;docker不仅解决了传统虚拟机的两项问题,而且还保障了更好的持续集成
4、你们公司用docker做什么?
答:测试开发的软件性能
命令
1、find
查找最后创建时间是3天前(-1是一 天内,),后缀是*.log的文件
如何在 /usr 目录下找出大小超过 10MB 的文件?
当前目录下查找文件 “test” ,如发现则无需提示直接删除它们?
shell脚本
- 有一段日志,编写对应的处理脚本
输入:
Apache
2020-02-03 11:03:23 WARN My warning message repeated 3 times
2020-02-03 11:03:23 ERR oops, error message repeated 8 times
2020-02-03 11:03:26 ERR this is my error message repeated 1 times
2020-02-03 11:03:26 WARN MY warning , so scary, repeated 1 times
2020-02-03 11:03:26 WARN cpu utilization high, repeated 1 times
2020-02-03 11:03:29 INFO this is for test repeated 2 times
1.1 统计不同级别日志的行数
输出:
Apache
WARN: 3
ERR: 2
INFO: 1
答:编辑脚本vim log.sh
第二种方法:
#!/bin/bash
#defined variable
W=`grep "WARN" apache.log |cut -d ' ' -f 3 | uniq -c |awk '{print $1}'`
E=`grep "ERR" apache.log |cut -d ' ' -f 3 | uniq -c |awk '{print $1}'`
I=`grep "INFO" apache.log |cut -d ' ' -f 3 | uniq -c |awk '{print $1}'`
#The results are displayed on the screen.
echo "WARN:$W"
echo "ERR:$E"
echo "INFO:$I"
验证:效果和上图一样
1.2 统计Error/WARN发生的总次数
输出:
Apache
ERR: 9
WARN: 5
答:
#!/bin/bash
W=`awk '/WARN/{print $(NF-1)}' apache.log |awk '{sum+=$1} END {print sum}'`
E=`awk '/ERR/{print $(NF-1)}' apache.log |awk '{sum+=$1} END {print sum}'`
echo "Apache"
echo "WARN:$W"
echo "ERR:$E"
执行脚本:
- 写一段代码,将一个域名反转过来
例如:
输入: www.toutiao.com
输出: com.toutiao.www
答:echo “www.toutiao.com” |awk -F “.” ‘{print $3"."$2"."$1}’