华为 PaaS岗面试

Part 1 Linux/Shell知识点

1.Linux系统怎么查看当前进程?怎么执行退出?怎么查看当前路径?

答:查看当前进程:ps;执行退出:exit;查看当前路径:pwd

2.什么是Linux硬链接与软连接?

答:硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号号(Inode Index)或者Inode,它是文件或者目录在一个文件系统中的唯一标识,文件的实际数据放置在数据区域(data block),它存储着文件重要参数信息,也就是元数据(metadata),比如创建时间、修改时间、文件大小、属主、归属的用户组、读写权限、数据所在block号等。
软链接(也叫符号链接),类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。

3.Linux系统中目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?

答:创建目录:mkdir
创建文件:典型的如 touch,vi 也可以创建文件,其实只要向一个不存在的文件输出,都会创建文件
复制文件:cp

4.Linux系统中文件权限修改用什么命令?格式是怎么样的?

答:文件权限修改:chmod,例如:chmod 770 filename

5.Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?

答:(1)、不可中断状态:进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指进程不响应异步信号。
(2)、暂停状态/跟踪状态:向进程发送一个 SIGSTOP 信号,它就会因响应该信号而进入 TASK_STOPPED 状态;当进程正在被跟踪时,它处于 TASK_TRACED 这个特殊的状态。“正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。
(3)、就绪状态:在 run_queue 队列里的状态
(4)、运行状态:在 run_queue 队列里的状态
(5)、可中断睡眠状态:处于这个状态的进程因为等待某某事件的发生(比如等待 socket 连接、等待信号量),而被挂起
(6)、zombie 状态(僵尸):父亲没有通过 wait 系列的系统调用会顺便将子进程的尸体(task_struct)也释放掉。
(7)、退出状态

6.Linux系统中使用什么命令查看磁盘使用空间?空闲空间呢?

答:df -hl
image.png

7.什么是 Linux 内核?

答:Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。包括:系统内存管理、应用程序管理、硬件设备管理、文件系统管理等。

8.Linux的基本组件是什么?

答:就像任何其他典型的操作系统一样,Linux拥有所有这些组件:内核,shell和GUI,系统实用程序和应用程序。Linux比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。

9.Linux 开机启动过程?

答:1、主机加电自检,加载 BIOS 硬件信息。2、读取 MBR 的引导文件(GRUB、LILO)。3、引导 Linux 内核。4、运行第一个进程init(进程号永远为 1 )。5、进入相应的运行级别。6、运行终端,输入用户名和密码。

10.Shell脚本是什么、它是必需的吗?

答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。

11.什么是默认登录shell,如何改变指定用户的登录shell?

答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示:
image.png

12.如何在脚本中使用参数?

答:第一个参数:$1,第二个参数:$2

13.在shell脚本中,如何写入注释?

答:注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以#开头。例子如下:
image.png

14.Shell中如何执行算术运算?

答:使用expr命令
image.png

15. shell脚本中while循环语法?

答:如同for循环,while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法:
image.png

Part2 K8s、Docker知识点

16.Kubernetes是如何实现集群管理?

答:在集群管理方面,Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node。其中,在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。

17.如何解释 kubernetes 架构组件之间的不同?

答:Kubernetes由两层组成:控制平面和数据平面。 控制平面是容器编排层包括:1)控制集群的 Kubernetes 对象。2)有关集群状态和配置的数据。 数据平面是处理数据请求的层,由控制平面管理。

18.K8s中什么是Pod?

答:Pod是最基本的Kubernetes对象。Pod由一组在集群中运行的容器组成。最常见的是,一个pod运行一个主容器。

19.K8s中daemonset、deployment、replication 之间有什么区别?

答:daemonset:确保您选择的所有节点都运行Pod的一个副本。
deployment:是Kubernetes中的一个资源对象,它为应用程序提供声明性更新。它管理Pod的调度和生命周期。它提供了几个管理Pod的关键特性,包括Pod健康检查、Pod滚动更新、回滚能力以及轻松水平扩展Pod的能力。
replication:指定应该在集群中运行多少个Pod的精确副本。它与deployment的不同之处在于它不提供pod健康检查,并且滚动更新过程不那么健壮。

20.简述Kubernetes 中什么是 Minikube、Kubectl、Kubelet?

答:Minikube:单节点的Kubernetes集群⼯具。
Kubectl:⼀个命令⾏的⼯具,使⽤这个⼯具可以控制Kubernetes集群。
Kubelet:⼀个代理服务,在每个节点上运⾏,主要作⽤,与Kubernetes中的Master节点通信,执⾏Master节点下发的相关任务。

21.简述Kubernetes 常⻅的部署⽅式?

答:常⻅的部署⽅式有三种:
minikube:本地的最简单的安装⽅式。
kubeadm:安装的⼯具,⼀些组件以容器化的⽅式进⾏安装,简化了其中的⼀些步骤。
⼆进制的安装:最复杂的,原⽣的安装⽅式。

22. 简述 Kubernetes 相关基础概念?

答:master:是集群的控制节点
node:是Pod运⾏的宿主机。
pod:是⼀组相关的容器的组合,可以是单个容器,运⾏在node节点上。Pod是K8S当中最⼩的调度、创建、管理的最⼩单位。
label:是⼀系列key、value的形式。标签选择器通过标签来筛选资源对象。 Replication Controller(副本控制器):⽤来管理Pod的副本。
Deployment(部署):控制Pod的部署,内部使⽤了Replication Controller来控制Pod副本的数量的。
Service(服务):封装了⼀组相同label的Pod,Service提供⼀个统⼀的服务访问⼊⼝,及实现了服务的代理和发现。
Namespace(命名空间):⽤于实现多租户的资源隔离,实际上是⼀个逻辑上的分组。
volume(卷):volume是定义在Pod上的,可以被Pod中的容器挂载到对应的⽬录下进⾏访问,实现了Pod中的多个容器访问的共享。

23. 简述Kubernetes 中 Pod 可能处于的状态?

答:Pending:Pod已被Kubernetes系统接受,但有⼀个或者多个容器尚未创建亦未运⾏。此阶段包括等待 Pod被调度的时间和通过⽹络下载镜像的时间。
Running:Pod内所有的容器都已经创建,⾄少有⼀个容器处于运⾏、启动、重启的状态。
Succeeded:Pod内所有的容器都已经成功执⾏退出,不会再重启。
Failed:Pod内所有的容器都已经退出,但是⾄少有⼀个容器是失败退出的。
Unknown:⽹络的原因,导致我们⽆法获取Pod的状态。

24.Kubernetes Service 类型有哪些?

答:主要有三种类型,Service主要是给相关功能的容器提供⼀个统⼀的⼊⼝地址:
ClusterIP:创建了就不会发⽣变化,在Kubernetes的集群内部访问的地址。 NodePort:宿主机的端⼝的⽅式,这种⽅式可以使Kubernetes集群外的机器可以访问我们的服务。
LoadBalancer:⼀般⽤在公有云上,⽤于服务的负载转发。

25.Kubernetes的工作负载类型有哪些?

答:Kubernetes的工作负载包括五种类型,如下:
(1)Deployments:一个 Deployment 控制器为 Pods 和 ReplicaSets 提供声明式的更新能
(2)StatefulSets:StatefulSet 是用来管理有状态应用的工作负载 API 对象;StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证;和 Deployment 相同的是,StatefulSet 管理了基于相同容器定义的一组 Pod。但和 Deployment 不同的是,StatefulSet 为它们的每个 Pod 维护了一个固定的 ID
(3)DaemonSet:DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本;当有节点加入集群时,也会为他们新增一个 Pod。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
(4)Job :Job创建一个或多个Pod,并确保指定数量的Pod成功终止。当Pods成功完成时,Job将跟踪成功的完成情况。当达到指定的成功完成数时,Job即完成。删除Job将清理它创建的Pods。
(5)CronJob:CronJob为定时Job,CronJob启动时会根据CronJob设置创建符合条件的Job。

26.Docker是什么?

答:Docker一个开源的应用容器引擎,是实现容器技术的一种工具,让开发者可以打包他们的应用以及环境到一个镜像中,可以快速的发布到任何流行的操作系统上。

27.Docker的三大核心是什么?

镜像:Docker的镜像是创建容器的只读模板,通过镜像启动一个容器或多个容器。
容器:Docker的容器是镜像创建出来的运行实例,可以把容器看做是一个简易版的linux环境和运行在其中的应用程序。
仓库:用来存放镜像的地方,每个镜像有不同标签(tag)。

28.Docker与虚拟机的区别是什么?

答:内核:虚拟机有单独的系统内核,Docker与宿主机共享系统内核,所以虚拟机相对与Docker隔离性更好一些,虚拟机相当于物理层面的隔离,Docker相当于应用层面的额隔离。
大小:Docker镜像一般在几十M到几百M,比较轻量,虚拟机一般在在几G,比较笨重。
速度:Docker共享宿主机内核一般秒级启动,虚拟机时分钟级别的。
资源:Docker占用更少的资源,虚拟机有完整的系统所以占用资源比较多。

29.进入容器的方法有哪些?

答:可以通过 docker exec 进入容器内部。

30.如何查看容器日志信息?

答:可以使用 docker logs

31.Docker容器的运行状态有哪些?

答:
image.png

32.如何从 Docker 镜像创建 Docker 容器?

答:为了从镜像创建容器,我们从 Docker 存储库中提取我们想要的镜像并创建一个容器。我们可以使用以下命令:$ docker run -it -d

33.如何访问正在运行的docker容器?

答:要访问正在运行的容器,我们可以使用以下命令:
$ docker exec -it bash

34. 如何列出所有正在运行的容器?

答:要列出所有正在运行的容器,我们可以使用以下命令:$ docker ps

35.Docker 组件包括哪些?

image.png

Part3 中间件知识点

36.Redis的基本数据结构类型有哪些?(对应华为云的DCS)

答:Redis有以下这五种基本类型: String(字符串) Hash(哈希) List(列表) Set(集合) zset(有序集合)。

37.Redis为什么快?

答:(1)基于内存存储实现;(2)高效的数据结构;(3)合理的数据编码;(4)合理的线程模型;(5)虚拟内存机制;Redis直接自己构建了VM机制,不会像一般的系统会调用系统函数处理,会浪费一定的时间去移动和请求。

38.Redis 的持久化机制有哪些?

答:Redis是基于内存的非关系型K-V数据库,既然它是基于内存的,如果Redis服务器挂了,数据就会丢失。为了避免数据丢失了,Redis提供了持久化,即把数据保存到磁盘。Redis提供了RDB和AOF两种持久化机制。RDB,就是把内存数据以快照的形式保存到磁盘上。AOF(append only file) 持久化,采用日志的形式来记录每个写操作,追加到文件中,重启时再重新执行AOF文件中的命令来恢复数据。它主要解决数据持久化的实时性问题。默认是不开启的。

39.怎么实现Redis的高可用?

答:Redis 实现高可用有三种部署模式:主从模式,哨兵模式,集群模式。
主从模式:主从模式中,Redis部署了多台机器,有主节点,负责读写操作,有从节点,只负责读操作。从节点的数据来自主节点,实现原理就是主从复制机制。
哨兵模式:主从模式中,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址。显然,多数业务场景都不能接受这种故障处理方式。Redis从2.8开始正式提供了Redis Sentinel(哨兵)架构来解决这个问题。
Cluster集群模式:哨兵模式基于主从模式,实现读写分离,它还可以自动切换,系统可用性更高。但是它每个节点存储的数据是一样的,浪费内存,并且不好在线扩容。因此,Cluster集群应运而生,它在Redis3.0加入的,实现了Redis的分布式存储。对数据进行分片,也就是说每台Redis节点上存储不同的内容,来解决在线扩容的问题。并且,它也提供复制和故障转移的功能。

40.Redis分布式锁有哪些实现方式?

答:分布式锁,是控制分布式系统不同进程共同访问共享资源的一种锁的实现。秒杀下单、抢红包等等业务场景,都需要用到分布式锁,我们项目中经常使用Redis作为分布式锁。
Redis分布式锁的几种实现方法如下:
image.png

41.Redis的Hash 冲突怎么办?

答:哈希冲突:通过不同的key,计算出一样的哈希值,导致落在同一个哈希桶中。
Redis为了解决哈希冲突,采用了链式哈希。链式哈希是指同一个哈希桶中,多个元素用一个链表来保存,它们之间依次用指针连接。

42.如何获取kafka中的 topic 主题的列表?

答:执行命令--list,例如:bin/kafka-topics.sh --list --zookeeper localhost:2181

43.Kafka中生产者和消费者的命令行是什么?

答:生产者在主题上发布消息,示例:
bin/kafka-console-producer.sh --broker-list 192.168.43.49:9092 --topic Hello-Kafka
消费者接受消息:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic Hello-Kafka --from-beginning

44.Zookeeper 对于 Kafka 的作用是什么?

答:Zookeeper 是一个开放源码的、高性能的协调服务,它用于Kafka的分布式应用。Zookeeper主要用于在集群中不同节点之间进行通信。在Kafka中,它被用于提交偏移量,因此如果节点在任何情况下都失败了,它都可以从之前提交的偏移量中获取。除此之外,它还执行其他活动,如leader检测、分布式同步、配置管理、识别新节点何时离开或连接、集群、节点实时状态等等。

45.请简述下在哪些场景下会选择Kafka?

image.png

46.讲一下kafka集群的组成?

image.png

47.讲一讲kafka的ack的三种机制?

48.什么是Nginx?

Nginx是一个轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发。

49.Nginx有哪些优点?

跨平台、配置简单。非阻塞、高并发连接:处理 2-3 万并发连接数,官方监测能支持5万并发。内存消耗小:开启10个Nginx才占150M内存。成本低廉,且开源。稳定性高,宕机的概率非常小。内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。

50.Nginx配置文件nginx.conf有哪些属性模块?

image.png

51.Tomcat是什么?

答:Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

52.Tomcat的缺省端口是多少,怎么修改?

image.png

53.怎么使用Tomcat部署项目?

答:先使用eclipse或IDEA把项目打成.war包,然后上传到Linux服务器,然后把项目放在Tomcat的bin目录下的webapps,在重启Tomcat就行了。

54.Tomcat工作模式是怎么样的?

答:Tomcat作为servlet容器,有三种工作模式:
(1)独立的servlet容器,servlet容器是web服务器的一部分;
(2)进程内的servlet容器,servlet容器是作为web服务器的插件和java容器的实现,web服务器插件在内部地址空间打开一个jvm使得java容器在内部得以运行。反应速度快但伸缩性不足;
(3)进程外的servlet容器,servlet容器运行于web服务器之外的地址空间,并作为web服务器的插件和java容器实现的结合。反应时间不如进程内但伸缩性和稳定性比进程内优。

55.Tomcat的目录结构是怎么样的?

image.png

Part4 DevOps及微服务框架知识点

56.什么是DevOps?

image.png
DevOp 是两个词的组合,一个是软件 Development(开发)、另一个是 Operations (运营)。它允许一个团队处理从开发到测试、部署和运营的整个应用程序生命周期。DevOps 可帮助您减少软件开发人员、质量保证(QA)工程师和系统管理员之间的联系。

57.DevOps 有几个阶段?

image.png

58.描述 DevOps 的主要优势有哪些?

DevOps 的主要优点是:
l 持续交付软件
l 需要处理的复杂问题更少
l 更早识别并更快速修复缺陷
l 更快地交付功能
l 可靠的工作条件
l 增强团队合作和沟通

59.持续交付和持续部署有何不同?

image.png

60.您能列举一些最常用的 DevOps 工具吗?

image.png
答:以下是一些使用最广泛的 DevOps 工具的列表:

61.什么是微服务?

答:微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。

62.微服务框架有哪些?

答:常见的微服务框架有:Spring cloud Netflix、Spring cloud Alibaba、Dubbo等。

63.SpringCloud常见组件有哪些?

SpringCloud包含的组件很多其中最常用组件包括:
•注册中心组件:Eureka、Nacos等
•负载均衡组件:Ribbon
•远程调用组件:OpenFeign
•网关组件:Zuul、Gateway
•服务保护组件:Hystrix、Sentinel
•服务配置管理组件:SpringCloudConfig、Nacos

64.微服务中什么是熔断?什么是服务降级?

答:服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。

65.什么是SpringCloud Config分布式配置中心?

答:SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

66.什么是 Ribbon负载均衡?

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。

67.什么是 Hystrix断路器?

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等, Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

68.什么是 zuul路由网关?

Zuul 包含了对请求的路由和过滤两个最主要的功能:其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

69.SpringBoot和SpringCloud的区别?