1.自我介绍面试官:“你先做一下自我介绍吧。”我:“面试官您好,我叫XX ,是XX大学网络工程24届应届生,本次应聘的是贵公司的运维开发工程师,我现在是在XX公司当运维开发实习生,主要负责的内容是Shell脚本维护,数据库集群搭建,LVS的配置;大二的时候是在XX做Java开发实习生,工作内容是参与XXWeb平台的开发,和数据爬取处理的工作。现在呢我对运维方案也有了自己的一些理解,后续职业规划也是朝着SRE,和运维这方面发展,希望能够成为快手运维的一份子。”面试官:“讲下你在实习中遇到的某个问题,解决办法,以及对自己的提升,在其中学到了什么?”我:“我现在的主要实习工作是写Shell脚本,在上上周的时候有个需求是产品版本升级,需要写了一个seaweedFS ——分布式文件存储的安装脚本,并导入一些系统配置,我在之前是没有用过这个文件存储系统,然后按照网上的系统安装步骤,转成Shell 脚本进行安装,在我写好这个脚本之后自己测试是可以正常安装的,但是当我把这个脚本添加到原来的产品一键部署脚步后,发现这个脚本异常终止,遇到这个情况第一反应就是换一个虚拟机重新试一下,发现还是不行,依旧异常终止;确定不是电脑环境问题,这个时候就需要看启动日志了,我cd 到seaweedFS  的安装目录,然后用less命令查看日志,发现是ElasticSearch 报错,当前集群状态为“red”,seaweedFS 配置错误;询问了开发人员了解到,初始化安装的时候默认往seaweedFS 存储了一些文件,然后需要保存到ElasticSearch 方便检索,但是现在ES状态为Red不允许插入数据,所以报错;后面更改了脚本逻辑在安装seaweedFS之前先判断ES集群状态,等待集群健康值为yellow或为green时再进行,seaweedFS的安装。其中提升了排错的能力,然后也了解到学技术,做SRE不是埋头苦干,需要和同事多交流,才能够提示自己的效率[吃瓜ing]”面试官:“有了解ES状态为什么会是red吗?或者说什么情况下才是green,yellow?”我:“有了解,只要是ES有一个主分片未分配完成就是red状态,主分片分配完成,但是副本分片没有分配完成就是yellow,可以把yellow当成是一个warning其实是不影响我们的正常使用的(毕竟我搭建ES的状态全是yellow 哈哈哈[吃瓜ing]),副本分片和主分片均分配完毕,集群状态就是green”2.计算机网络面试官:“我问点计算机基础,TCP四次挥手过程讲一下”我:“四次指的是,客户端A发出一次断开请求,服务端先返回一次我收到了你的断开请求,然后再返回一次我已经断开了,之后客户端向服务端发送一次,我知道你已经断开了,总共四次;具体的细节就是三次握手后Client端和Server端都进入ESTABLISHED状态,Client 发送SYN=1,和序列号seq=u 给服务端,自身进入FIN_WAIT_1 状态,服务器收到请求后发送ack=u+1,seq=v,ACK=1,Server端进入close_wait状态,Client端接收到后进入FIN_WAIT_2状态,之后Server端再次向Client端发送报文,FIN=1(表示关闭),seq=w,ack=u+1,进入LAST_ACK状态,Client收到后进入TIME_WAIT状态,像Server端发送ACK=1,seq=uu+1,ack=w+1等待2MLS后进入Closed转态,Server端收到后也进入Closed状态”大概是下面这个样子面试官:“TCP拥塞控制是怎么做的?”我:“TCP进行拥塞控制有四个部分,慢开始,拥塞避免,快重传,快恢复;慢开始从小到大加倍增加拥塞窗口的数值,拥塞避免:每经过一个往返时间RTT就把发送发的拥塞窗口加1,而不是像慢开始阶段那样加倍增长;快重传:接收方快速重传丢失的报文;快恢复:与慢开始类似,慢开始在TCP连接建立时或者是网络拥塞后才使用,快恢复是在遇到3-ACK时触发,常常伴随着快重传”3.操作系统面试官:“操作系统内存寻址过程”我:“忘了”面试官:“操作系统中死锁的处理策略?”我:“构成死锁有几个必要条件,资源独占,不可剥夺,保持申请,循环等待;死锁预防可以通过破坏这几个条件来实现,死锁避免银行家算法”面试官:“Linxu 防火墙配置 禁用一个ip,禁用某个TCP 端口,聊天框打出来”禁用一个端口firewalled-cmd  --zone=public  --remove-port = 8080/tcp  --permant禁用一个ipfirewalled-cmd --permant --remove-rich-role="rule family="ipv4" source address = "xxx.xxx.xx.xx" port protocol="tcp" port="8080" accept"面试官:“iptables 会吗?”我:“不会,我都是用的firewalld-cmd”4.Java  Java 忘的有点多,大佬们帮忙补充吧 面试官:“Java String,StringBuilder,StringBuffer 的区别联系”HashMap底层怎么实现的 HashMap 怎么解决哈希冲突SpringBoot Bean的生命周期面试官:“SpringBoot, IOC是什么,设计的好处?”我:“IOC 控制反转,是一种软件开发的思想,将对象创建交给了IOC容器进行管理,然后我们通过依赖注入@ Autowired @ Resource 的方式来调用;好处是降低了程序的耦合性,让程序员更加专注于业务,比如操作数据库,xml到mapper再到service,再到Controller,每一层我们不太需要关注他的下层是怎么操作的,只管用就行,这也是我理解的Java面向接口编程;对于测试来说,也只需要依赖注入对应的层进行测试,同样是减少耦合”面试官:“MySQL索引采用什么数据结构,说下自己的理解?”我:“MySQL采用的是B+树的存储结构,查询数据其实都是和磁盘IO次数有关,越少的话查的也就相对越快,而B+树的特点就是树的高度其实不会很高,他的数据存储在最下面一层也就是叶子结点当中,查找从根节点开始,每一个子节点都有关键字和一些记录项,顺着树的分支进行查找,就能找到目标节点”5.算法算法题:数组第k大个数(自己写样例输入输出,尽量不要用库)(一个 快排+分治 敲了20多分钟,提交19次,我tm真是个菜b[黑牛问号]) c++ 版#include<iostream>#include<vector>using namespace std;int quickSortGetK(vector<int> v, int left, int right, int k) {    if (left >= right) return v[left];    int key = v[left];    int i = left;    int j = right;    while (i < j) {        while (key <= v[j] && i < j) j--;        while (key >= v[i] && i < j)i++;        cout << i << " " << j << endl;        swap(v[i], v[j]);    }    swap(v[i], v[left]);    if (i == k) return v[i];    if (k < i) return quickSortGetK(v, left, i - 1, k);    else return  quickSortGetK(v, i + 1, right,k);}int main() {    vector<int> v;    for (int i = 0; i < 10; i++) {        int data;        cin >> data;        v.push_back(data);    }    int k = 3;    cout << "到这" << endl;    cout<<quickSortGetK(v, 0, v.size() - 1, v.size()-k);}/** 10 2 5 3 6 3 6  3 6 3*/go 版package mainimport "fmt"func sortArray(nums []int, k int) int { var quick func(nums []int, left, right int, k int) int quick = func(nums []int, left, right int, k int) int {  // 递归终止条件  if left >= right {   return nums[left]  }  // 左右指针及主元  i, j, pivot := left, right, nums[left]  for i < j {   // 寻找小于主元的右边元素   for i < j && nums[j] >= pivot {    j--   }   // 寻找大于主元的左边元素   for i < j && nums[i] <= pivot {    i++   }   // 交换i/j下标元素   nums[i], nums[j] = nums[j], nums[i]  }  // 交换元素  nums[i], nums[left] = nums[left], nums[i]  if k < i {   return quick(nums, left, i-1, k)  }  if k > i {   return quick(nums, i+1, right, k)  }  return nums[i] } return quick(nums, 0, len(nums)-1, k)}func main() { var number = []int{8, 9, 20, 12, 23, 32, 10, 10, 9, 12} /* n 是一个长度为 10 的数组 */ k := 1 answer := sortArray(number, len(number)-k) fmt.Print(answer)}网页没代码提示,字母打错了报错我也找不到位置 ,size打成zize[扮鬼脸] ,排编译错误浪费很多时间,没看懂网页的那个报错提示,早知道粘IDE上,脑袋抽了,我当时为什么不在IDE上写[掉小珍珠了])反问:贵公司是哪个部门,部门业务
点赞 72
评论 14
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务