知乎面试记
本人马上大四,现在在找运维开发的工作,投的是知乎运维开发的岗位,面试时间大约 40 分钟。以下是面试过程中问到的,自我感觉整体回答的不太好。
1,什么是鸭子类型
这个问题我没有深入研究过,回答的不太好,以下是总结的。
鸭子类型(duck type):不同的对象可以相互替代,只要他们有相同的属性或者方法
多态类型,用于动态语言
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为”鸭子”的对象,并调用它的”走”和”叫”方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的”走”和”叫”方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的”走”和”叫”方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。
2,tcp 3 次握手和 4 次分手
这个还是比较简单的。。。。
3,keepalived 原理
面试官问我高可用可以用哪些软件实现,我答有 keepalived 和 heartbeat 等,这两个玩意以前经常用,后来没咋研究,所以回答的一般。
keepalived 是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。keepalived 起初是专为 LVS 设计的,专门用来监控集群系统中各个服务节点的状态。后来又加入了 VRRP(Virtual Router Redundancy Protocol) 功能。
VRRP 协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
4,nginx 和 apache 的区别
这个知道,
nginx 相对 apache 的优点:
- 轻量级,同样起 web 服务,比apache 占用更少的内存及资源
- 抗并发,nginx 处理请求是异步非阻塞的,支持更多的并发连接,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
- 配置简洁
- 高度模块化的设计,编写模块相对简单
- 社区活跃
apache 相对nginx 的优点:
- rewrite 功能比 nginx 的强大
- 模块超多,基本想到的都可以找到
- 少bug ,nginx 的bug 相对较多
- 超稳定
5,异步非阻塞模式和阻塞模式的区别
这个只答对了一部分,只是说明了两者的区别,当时忘了同步异步与阻塞和非阻塞关注的层面。
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。一旦调用返回,就得到返回值了。
换句话说,就是由调用者主动等待这个调用的结果。
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
6,docker 与 xen,kvm 的区别
xen 和 kvm 只是了解,所以回答的不太好,面试官也没有追问,说了下 docker 的优点
xen、kvm 是针对硬件的虚拟化,需要 hypervisor 进行管理, docker 是对操作系统层次的虚拟化
xen、kvm 是一个完整的操作系统,而 docker 中跑的是一个进程
docker 所需要的资源少,启动特别快,而且对系统资源的利用率较高
7,mysql 主从复制原理以及复制过程可能出现的问题
复制原理非常清楚,但是可能出现的问题,只知道由于网络或带宽原因会出现延时
复制原理:
- 1,主服务器将数据更新记录到二进制日志中
- 2,从服务器通过IO线程把主服务器的二进制日志复制到自己的中继日志中
- 3,从服务器通过SQL线程执行中继日志,把更新应用到自己的数据库
最常见的几种问题:
由于是异步复制,且sync_binlog=0,会造成一小部分binlog没接收完导致同步报错。
- 1,网络延时是产生mysql主从不同步的主要原因
- 2,删除失败:由于master删除了一条记录,而slave上找不到故报错
- 3,主键重复:在slave已经有该记录,又在master上插入了同一条记录
- 4,更新丢失:在master上更新一条记录,而slave上找不到,丢失了数据
延迟的原因及解决方案:
- 1,慢 SQL 语句过多
- 2,主从库之间的网络延迟
- 3,主库读写压力大,导致复制延迟
- 4,主库的从库太多,导致复制延迟
- 5,从库硬件比主库差
8,mysql 索引
这个有点复杂,只知道索引的目的在于提高查询效率,索引的数据结构是 B+ 树,使用 B+ 树是为了减少 IO。
索引的数据结构是 B+ 树,它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘 IO。查找数据项时,首先会把磁盘块由磁盘加载到内存,此时发生一次 IO,在然后内存中用二分查找确定数据的范围。
9,RAID 的原理
这个比较熟悉,回答了 RAID0,RAID1,RAID5,RAID6,RAID10 各个级别的原理及配置
10,怎么理解 RESTful API
概念不太清除,知道是为了方便前后端交互设计的,使用 json 格式的字符串进行传递数据。
RESTful 架构是一种统一的互联网软件架构,其目的是为了统一接口,方便不同的前端设备与后端进行通信。
RESTful API 是目前比较标准的一套应用程序的 API 设计理论。
工作原理就是,客户端发送request,服务端response一个json对象
11,sed 命令的使用
没有想出来有哪些特定的使用场景,只想到了输出文件中特定的行或删除特定的行
12,对 Django 框架的理解
介绍了下框架的优点,MTV 模式的使用方法,如何写业务逻辑,对协议的封装,有自己的 CMS
Django 是 python 中目前最流行的 Web 框架,能够帮助你把程序的整体架构搭建好, 而我们所需要做的工作就是填写逻辑, 而框架能够在合适的时候调用你写的逻辑, 而不需要我们自己去调用逻辑, 让 Web 开发变的更敏捷.
13,CentOS 系列的区别
用的最多的还是 6 系列,7 与 6 区别在于启动的方式,对服务的管理,其他不太了解
- 1,默认使用 xfs 文件系统,6 使用 ext* 文件系统
- 2,引入 systemd 进程管理器,使用 systemctl 管理服务。6 使用传统的 SysVinit 初始化脚本,它通常情况下在 /etc/rc.d/init.d/ 文件夹下。sysvinit一次一个串行地启动进程,而Systemd则并行地启动系统服务进程,
- 3,防火墙由 iptables 改为 firewalld