百度提前批 一面凉经
岗位:SRE工程师
1. 自我介绍 (1到2分钟不能超时)
面试官你好,我叫xx,是xx大学24届学生,就读网络工程专业,本次应聘的贵公司的岗位是SRE工程师,我目前是在xx公司担任运维开发实习生的岗位,主要工作是负责XX产品的维护,一键部署shell脚本的编写,集群化部署方案设计,如MySQL,Redis,ElasticSearch 集群部署,其余时间是学习公司的容器化运维文档,Docker和K8S 运维方面的学习; 我在大二暑假期间是在XX公司担任Java实习生的岗位,主要工作是负责WebXX项目的开发,和一些数据处理,我觉得我的优势在于有一定的运维工作经验,希望可以能够加入贵公司担任SRE工程师的岗位
2.谈谈你对运维的理解?以及你对运维的一些接触
平时我在学校的话,我既是开发也是运维,我当时认为运维就是把项目放到服务器上部署,不需要了,再把这个项目停掉,负责项目的发布和删除。但是对于一个企业,或者说系统化的运维来说,运维应该从成本,稳定性,移植更新迭代这几个方向上来考虑,比如说我现在参与的一键部署shell脚本的编写,就是为了方便部署,减少成本;但是对于有些企业来说可能单机部署方案不能够满足他们的需求,他们就需要根据自己的需求自定义构建集群,这是从稳定方面来考虑,项目更新升级迭代这些方面运维也需要考虑
3.Shell 脚本
面试官:”现在实习是写脚本比较多是吗?看样子你Shell学的还行。“
我:”我觉得还可以“
面试官:”来做道题“
我:”…………“
题目一
描述:有三列数字以 | 分隔 求每一列的平均数
#! bin/bash awk -F "|" '{ sum1+=$1; sum2+=$2; sum3+=$3; }END{ printf "%.2f %.2f %.2f\n",sum1/NR,sum2/NR,sum3/NR }' data.txt 自测结果 [root@localhost ~]# cat data.txt 1|2|3 1|2|3 1|2|3 [root@localhost ~]# bash baidu.com 1.00 2.00 3.00
题目二
描述:给定一个文本,行可能是重复的,把重复的去了输出
#! bin/bash cat data.txt | sort |uniq 自测结果 [root@localhost ~]# cat data.txt 123 123 8989 123 8989 [root@localhost ~]# bash baidu.com 123 8989
面试官:”你平时装软件yum 用的多还是apt 用的多“
我:”yum用的多一点,ubuntu只有大二实习的时候用过,现在基本没用“
面试官:”你写shell脚本还有那些命令用的多“
我:”我现在主要写的是项目部署脚步,用ps -ef 查看项目是否启动,netstat看端口占用,id -u 看是不是root用户启动脚本,tar -cxvf 解压,mysql -uroot -p < xxx.sql 运行sql“
面试官:”你判断端口占用使用netstat ,就是你有了解过,其实这个命令它的开销是很大的“
我:”这个我不太了解(毕竟能跑就行)但是用tasklist 也可以查看端口占用“
面试官:”行吧“
4.计算机网络
面试官:”网络工程专业是吧,那我问你点网络基础知识,你从宿舍输入baidu.com,到拿到响应结果期间过程说一下,能说多细就说多细“
我:“我在浏览器输入baidu.com ,首先我的主机回去host文件找这个域名有没有对应的ip,没有的话,就去找DNS服务器,如果你没改过,一般DNS服务器地址就是144.144.144.144,域名解析后拿到对应的ip,三次握手后拿到服务器的响应。”
面试官:”能不能细致一点,你在宿舍是怎么拿到外网服务器的响应的?“
我:”通过路由器转发“
面试官:”怎么个转发,宿舍有这么多设备,为什么不是发给你的手机而是到了路由器“
我:”网关的最后一位ip地址是1………………“ (我是真的不太会计网)
面试官:”或者我换个问法,你现在是在厦门,服务器是在北京,或者在广东,你是怎么把请求发过去的而不是发到别的位置“
我:“这我不太清楚………………”
面试官:”你们专业计算机网络应该学过吧“
我:“大一学的忘了”
这个问题后面百度了一下,感兴趣的同学看看,或者评论补充答案,我是真的不会(https://zhuanlan.zhihu.com/p/339106514)
5. 爬虫
面试官:”我看你大二实习这边有做过天眼查的爬虫是吗,具体过程说一下“
我:”我的任务是,给了我个excel表格,上面有很多公司的名称,一行一行排列,后面几列是空的,需要我把电话号码,邮箱,公司地址等信息从天眼查上爬下来,然后填进去,我是直接爬取的静态网页,观察天眼查网页搜索功能发现,比如说搜索 “百度”,他的url可能就会变成 http://tianyancha.com?search="百度” ,我直接用Java发一个http请求过去,然后返回网页的响应,它是一个字符串,从这个字符串里面截取 “邮箱:”,就能拿到我要的邮箱信息 ”
面试官:”那它有些URL是不会变的你怎么搞,比如说你点那些地址,或者子公司什么的,有些他浏览器上面的URL不会变的,是JavaScript发的请求,这种你怎么弄“
我:”这个我爬公司专利信息的时候也弄过,比如说我搜,百度,有个专利信息链接,点击后url不会变,但是你打开F12,会看到对应的请求,也是有一定规律,在上一步后面加就行了“
面试官:”天眼查这个网站应该要登录吧“
我:”要登录,我在浏览器上面登录,登录后到设置,把这个网站上存的cookie,全部复制下来,再用Java 存起来后模拟登录,发送请求“
6. 算法
面试官:“数据结构与算法90是吧,来两道题”
题目一:括号匹配
#include<stack> class Solution { public: bool isValid(string s) { stack<char> mystack; for(int i = 0 ;i< s.length();i++){ if(s[i]=='('||s[i]=='{'||s[i]=='['){ mystack.push(s[i]); }else if(s[i]!='\"'){ if(!mystack.size()) return false; if(s[i]==')'&&mystack.top()!='(') return false; if(s[i]==']'&&mystack.top()!='[') return false; if(s[i]=='}'&&mystack.top()!='{') return false; mystack.pop(); } } if(mystack.size()) return false; return true; } };
题目二:数据流中的中位数
class MedianFinder { public: priority_queue<int ,vector<int> ,greater<int>> A; priority_queue<int ,vector<int>, less<int>> B; MedianFinder() { } void addNum(int num) { if(A.size()==B.size()){ B.push(num); A.push(B.top()); B.pop(); }else { A.push(num); B.push(A.top()); A.pop(); } } double findMedian() { return A.size()==B.size()?(A.top()+B.top())/2.0:A.top(); } };
7.反问部门业务
面试官讲了挺长时间,百度地图,还有贴吧什么的,主要介绍SRE工程师负责的内容,和运维开发工程师负责的内容,记不太清了
大概是运维开发主要是开发运维平台,而SRE主要是从整体架构上考虑运维成本,运维稳定性,用最少的机器达到最好的运行效果
8.总结
没问Docker,K8S 可能看我简历也觉得我不太会,计算机网络基础答的一团糟,虽然有过挺多次面试,但是自我介绍还是慌得一批,不知道有没有二面
#提前批##百度##java话题##运维##秋招提前批启动你开冲了吗#