搜狐畅游-运维开发

秋意零 2024-4-21 758 4/21

搜狐畅游-运维开发

一面

2024年4月12日 | 15:30 | 一面 | 30 min 左右

1)你最熟悉的技术

Linux、容器

2)Linux最熟悉什么?

部署服务、Shell

3)写一个简单的流水线脚本

时间比较长很久没用了,写不出

4)那写一个Shell脚本。取出Linux的主机IP

ip -4 a | grep ens33 | tail -n 1 | awk '{print $2}' | awk -F '/' '{print $1}'

5)Shell脚本。打印出2月份的日期

# 打印2月份的日期
for day in $(seq 29); do
    date +"%Y-%m-%d" -d "2024-02-${day}" 2>/dev/null
done

6)熟悉Linux三剑客、以及正则表达式?

7)写出两个Shell脚本后,面试官说技术掌握还是比较扎实,为什么还没拿到Offer。我说一直在实习,最近才开始正式准备春招。

8)实习收获最大的是什么?

9)给公司带来的最大的价值主要是什么?

业务不受影响

IT运维

10)通过实习经历有学习方面的规划嘛?

11)实习遇到了什么问题?有需要学习的东西嘛?

反问:

面试官回答了很多,只记录了重点

1)该岗位一天工作情况是?

游戏日常的更新维护

日常接受一些问题优化改进

2)K8s集群规模

不知道。但是服务器都有好几千台。主要使用云

3)该岗位看重应聘者的什么点

良好的学习能力、好的学习方法和习惯、热爱该岗位

4)问了我期望工资是多少,你目前薪资是?

base北京,期望6k左右

闲聊:有其它Offer吗?有面试机会的有几家?想来实习?

二面(gg)

2024年4月17日 | 11:30 | 二面 | 18-20 min

1)现在还在实习,重新找是什么原因?

2)当前的工作主要是?

3)K8s 里面 Flannel 网络实现逻辑

Flannel 提供的是一个覆盖网络(Overlay Network)解决方案,目的是在各个 Kubernetes 节点间创建一个扁平化的、跨越物理网络的虚拟网络空间,使得 Pod 之间可以直接通过各自的 Pod IP 地址进行通信,而无需关心 Pod 所在的实际物理位置。

4)Pod 探针有几种,分别作用是?

Pod 探针在 Kubernetes 中主要有三种类型:存活探针(Liveness Probe)就绪探针(Readiness Probe)**和**启动探针(Startup Probe)

  1. 存活探针(Liveness Probe)
    • 作用:存活探针用于检查容器内应用是否还在正常运行,即应用是否“活着”。如果存活探针失败,Kubernetes 会认为容器内的主进程已经死掉或者不再响应,这时 Kubernetes 会杀掉该容器并重新创建一个新的容器实例。
    • 应用场景:例如,当应用由于某种原因卡死或进入了一个无法恢复的错误状态时,存活探针可以帮助系统自动重启容器以恢复服务。
  2. 就绪探针(Readiness Probe)
    • 作用:就绪探针用于检查容器内的应用是否已经准备好接受流量。只有当就绪探针成功时,Kubernetes Service 才会将该 Pod 添加到负载均衡池中,开始向其发送请求。如果就绪探针失败,Kubernetes 会从负载均衡池中移除该 Pod,直至探针再次成功。
    • 应用场景:在应用启动初期需要进行一些初始化操作,此时还不适宜接收外部请求,就绪探针可以确保在应用真正准备就绪后再对外提供服务。
  3. 启动探针(Startup Probe)
    • 作用:启动探针用于在容器启动初期代替存活探针和就绪探针,直到容器启动成功。它主要用于检查容器内的应用是否已经启动完成。当启动探针成功时,才会开始执行存活探针和就绪探针。
    • 应用场景:对于那些启动时间较长或者启动过程复杂的应用,启动探针可以避免在应用未完全启动时过早触发存活探针而导致的不必要的重启。

5)自己知识库有没有做到智能应答?

6)知识库的日常更新和维护是怎么做的?都是手动做的?

7)Django 和 Flask 的区别

真正搞明白Python中Django和Flask框架的区别 - 可优 - 博客园 (cnblogs.com)

8)单例模式和工厂模式的区别?

单例模式(Singleton): 单例模式确保一个类在整个应用中只有一个实例,并提供一个全局访问点来获取这个实例。这种模式在需要控制全局资源访问、管理共享状态或者确保单一实例时非常有用。

工厂模式(Factory): 工厂模式是一种创建型设计模式,它提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体的类。工厂模式将对象的创建过程隐藏起来,客户只需指定需要的产品类型,即可获得所需的对象实例,而不必知道具体的创建细节。

class ShapeFactory:
 @staticmethod
 def get_shape(shape_type):
     if shape_type == 'circle':
         return Circle()
     elif shape_type == 'square':
         return Square()
     else:
         raise ValueError("Invalid shape type")

# 示例使用
circle = ShapeFactory.get_shape('circle')
square = ShapeFactory.get_shape('square')

9)异步非阻塞?

异步非阻塞是一种编程模型和并发处理机制,主要应用于IO密集型任务的处理,特别是网络编程和文件操作。异步和非阻塞的概念常常一起提及,但它们各有含义:

非阻塞(Non-blocking)

  • 在操作系统层面,非阻塞通常是指一个IO操作(如读写文件、网络通信等)在执行时不等待IO操作完成。也就是说,当一个非阻塞调用发起后,如果没有数据可供读取或写入条件不满足,函数不会被挂起等待,而是立刻返回一个状态,告诉调用者当前没有数据可处理。

例如,在非阻塞socket编程中,当你尝试从一个非阻塞socket读取数据时,如果当前没有数据到达,调用不会阻塞,而是立即返回一个错误指示(如EAGAIN或EWOULDBLOCK)。

异步(Asynchronous)

  • 异步则是相对于同步而言的另一种编程范式。在异步编程中,调用一个函数或方法并不会立即得到结果,而是通过回调函数、Future/Promise、事件循环等机制在将来某个时刻得到结果的通知。
  • 异步操作通常配合非阻塞IO,当一个异步操作(如网络请求)开始后,程序可以继续执行其他任务,当IO操作完成后,操作系统会通过回调函数、事件通知等方式告知应用程序可以继续处理数据。

10)ngixn 有接触过?当我出现有大量的访问,不是单 IP 而是 IP 池。从 Nignx 侧如何做一个拦截

当遇到大量来自IP池的访问时,你可以使用Nginx进行IP访问限制以减轻服务器的负载。

  1. 基于IP地址的访问限制

    nginxCopy codehttp {
        # 定义一个名为blocked_ips的IP地址列表
        geo $blocked_ips {
            default 0;
            10.0.0.0/24 1; # 这里填写你要屏蔽的IP段
            192.168.1.0/24 1;
        }
        
        server {
            # 在 server 或 location 块中根据IP地址进行访问限制
            if ($blocked_ips) {
                return 403; # 返回拒绝访问的状态码
            }
            # 其他配置
        }
    }

    这段配置会根据IP地址列表 $blocked_ips 来决定是否拒绝访问。

  2. 限制每个IP的并发连接数

    nginxCopy codehttp {
        limit_conn_zone $binary_remote_addr zone=addr:10m;
        limit_conn addr 5; # 允许每个IP最多5个并发连接
        
        server {
            # 其他配置
        }
    }

    这个配置会限制每个IP的并发连接数,超过限制的连接会被延迟或拒绝。

  3. 设置访问频率限制

    nginxCopy codehttp {
        limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
        limit_req zone=req_limit burst=10;
        
        server {
            # 其他配置
        }
    }

    这个配置会限制每个IP的请求速率,超过限制的请求会被延迟或拒绝。

  4. 使用模块进行动态拦截: 你也可以使用第三方模块(如ngx_http_limit_req_modulengx_http_limit_conn_module)或者lua脚本实现更复杂的动态IP拦截逻辑。

11)Nginx 常用哪些模块?

  1. HttpCoreModule: 这是Nginx的核心模块,提供了HTTP服务器的基本功能,如配置解析、URI处理等。
  2. HttpProxyModule: 用于实现反向代理功能,可以将客户端的请求转发到其他服务器上。
  3. HttpRewriteModule: 提供URL重写功能,可以修改请求的URI或者重定向请求。
  4. HttpSslModule: 支持SSL/TLS协议,用于配置HTTPS服务器。
  5. HttpGzipModule: 提供gzip压缩功能,可以压缩服务器返回的内容以减少传输数据量。
  6. HttpCacheModule: 提供HTTP缓存功能,可以缓存服务器返回的内容以提高访问速度。
  7. HttpLimitReqModule: 限制请求速率,可以防止恶意请求导致服务器过载。
  8. HttpLimitConnModule: 限制并发连接数,可以防止单个客户端占用过多的服务器资源。
  9. HttpAccessModule: 提供访问控制功能,可以限制特定IP地址或者IP地址段的访问。
  10. HttpLogModule: 提供日志记录功能,可以记录客户端请求和服务器响应的日志。
  11. HttpHeadersModule: 提供HTTP头部操作功能,可以添加、修改或者删除HTTP头部。
  12. HttpLuaModule: 允许使用Lua脚本扩展Nginx的功能,可以实现复杂的请求处理逻辑。
  13. HttpAuthBasicModule: 提供基本身份验证功能,可以要求用户输入用户名和密码进行访问控制。
  14. HttpEchoModule: 提供简单的echo功能,可以用于调试和测试。

12)A 访问 B 主机 3306 端口,Iptable 防火墙规则如何写?

iptables -A INPUT -s <A的IP地址> -p tcp --dport 3306 -j ACCEPT

13)如何取文件的最后两列如何取?不知道列数的情况下

$NF:取出最后一列

$NF-1:取出最后两列

awk -F '-' '{print $(NF-1),$NF}'

OFS是一个预定义变量,代表“Output Field Separator”(输出字段分隔符)

# 输出 584fc68786-5tsh5
echo "web-activities-584fc68786-5tsh5" | awk -F '-' '{OFS="-";print $(NF-1),$NF}'

14)CDN 和 DNS 有了解吗?

  1. CDN(内容分发网络):CDN是一种分布式网络架构,旨在提高网站和应用程序内容的传递速度、安全性和可靠性。它通过将内容分布到全球各地的边缘节点,使用户能够从距离更近、网络质量更好的服务器获取内容。CDN的工作原理是通过缓存内容、负载均衡和智能路由技术,将用户的请求路由到最近的CDN节点,从而降低了网站的加载时间,并减轻了源服务器的负载压力。
  2. DNS(域名系统):DNS是互联网中用于将域名解析为与之对应的IP地址的系统。当用户在浏览器中输入一个域名时,DNS系统会将这个域名转换为对应的IP地址,以便浏览器能够向正确的服务器发送请求。DNS工作原理涉及到域名解析器、DNS服务器和域名记录。域名解析器通常是用户设备上的软件或者网络设备,它会向DNS服务器发送域名解析请求。DNS服务器则负责根据域名解析请求返回相应的IP地址。域名记录包括各种类型,例如A记录、CNAME记录、MX记录等,用于指定域名与IP地址之间的映射关系、邮件服务器的地址等信息。

15)CDN 回源过程

CDN的回源过程是指当CDN边缘节点无法直接提供所需内容时,会向源服务器请求内容的过程。这通常发生在边缘节点的缓存中没有所需内容或者缓存内容已经过期时。

下面是一般情况下CDN的回源过程:

  1. 内容未缓存或已过期:当用户请求的内容在CDN的边缘节点中不存在或者已经过期时,边缘节点无法直接提供所需内容。
  2. 边缘节点请求源服务器:边缘节点会向配置好的源服务器发起请求,请求源服务器提供所需内容。
  3. 源服务器响应:源服务器收到边缘节点的请求后,会根据请求的内容生成响应,并将响应返回给边缘节点。
  4. 边缘节点缓存内容:边缘节点收到源服务器的响应后,会将内容缓存到自己的缓存中,以便下次相同内容的请求可以直接从边缘节点获取,而无需再次请求源服务器。
  5. 将内容返回给用户:最后,边缘节点将从源服务器获取的内容返回给用户,用户可以在浏览器或应用程序中加载并显示内容。

需要注意的是,CDN的回源过程可能会引入额外的延迟,因为需要经过源服务器的处理和网络传输。为了最大程度地减少回源带来的延迟,CDN提供商通常会优化回源流程,并采用各种技术手段来加速内容的获取和传输,例如与源服务器之间的持久连接、TCP加速、压缩等。

PS:边缘节点是指分布在全球各地的CDN网络中的服务器节点。

16)CDN:我原站更新了,但是客户端还是之前的信息,是什么原因?

  1. 缓存未过期:CDN边缘节点可能仍然在缓存原站的旧内容,并且该缓存尚未过期。CDN通常会根据内容的缓存规则(如缓存时间、缓存控制头等)来确定何时更新缓存内容。如果原站更新后,CDN的缓存尚未过期,则客户端仍然会获取到旧的缓存内容。
  2. 缓存刷新延迟:即使原站更新了,CDN边缘节点也可能存在缓存刷新的延迟。在CDN进行缓存更新时,可能需要一定的时间才能将新内容传播到所有的边缘节点。在这个过程中,部分客户端可能会继续获取到旧的缓存内容。
  3. 客户端缓存:除了CDN边缘节点的缓存外,客户端本身也可能存在缓存。即使CDN已经更新了缓存内容,但如果客户端的浏览器或者其他缓存机制仍然保留着旧的内容,则客户端仍然会看到旧的信息。
  4. DNS缓存:CDN服务可能会使用DNS来将用户的请求路由到最近的边缘节点。如果DNS记录的缓存尚未过期,客户端可能会继续向之前的边缘节点发送请求,从而获取到旧的内容。

解决这个问题的方法包括:

  • 等待缓存过期:等待CDN边缘节点的缓存过期,这样新内容就会被缓存并且提供给客户端。
  • 手动刷新缓存:如果CDN服务支持,可以尝试手动刷新CDN缓存,以强制刷新缓存内容。
  • 清除客户端缓存:通过清除客户端的浏览器缓存或其他缓存机制,确保客户端能够获取到最新的内容。
  • 更新DNS记录:如果CDN使用了DNS来路由请求,可以尝试更新DNS记录以使新的请求路由到更新的边缘节点。

17)OpenStack 是自己部署的?用的什么版本?

18)OpenStack 自己有做对比吗?跟云上这些区别?

反问:

1)咱们业务的维护流程?

业务:游戏周边充值、账号类别,web平台内的

主要面向对象:云、K8s、TKE。基于这个做日常管理(监控、日志、AI预警)

自动化能力

2)部门组织架构

游戏、DBA、Web运维、网络、安全、一部分前端开发

3)对这个岗位的人期待

学习能力、落地能力、提到的想法能尽快实现、加入新的技术

4)面试通知

最近2-3天时间

这篇文章有用吗?

点击星号为它评分!

平均评分 5 / 5. 投票数: 4

到目前为止还没有投票!成为第一位评论此文章。

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

- THE END -

秋意零

4月21日12:00

最后修改:2024年4月21日
0

非特殊说明,本博所有文章均为博主原创。

共有 2 条评论

  1. Autumn

    UP这么强,最后去哪了

    1. 秋 意零

      @Autumn: 研祥