面试复习-算法-排序
计数法排序
适用于数值范围比较小的情形
时间复杂度为O(n + k)
空间复杂度为O(k)
12345678910111213141516class Solution: def sortArray(self, nums: List[int]) -> List[int]: minNum = nums[0] maxNum = nums[0] for n in nums: minNum = min(minNum, n) maxNum = max(maxNum, n) count = [0 for _ in range(maxNum - minNum + 1)] for n in nums: count[n - minNum] += 1 res = [] for i, c in enumerate(count): while c > 0: res.append( ...
面试复习-算法-回溯法
回溯法回溯法是一种搜索算法,常用于解决组合优化问题和枚举问题等。以下是关于回溯法的详细介绍:
基本概念
解空间:回溯法通常用于求解问题的所有可能解,这些解构成一个解空间。解空间可以用树或图的结构来表示,其中每个节点代表一个部分解。
约束条件条件:在搜索解空间的过程中,需要根据问题的约束条件来判断一个部分解是否有可能扩展为一个完整的可行解。
递归和回溯:回溯法通常使用递归的方式来遍历解空间树。在递归的过程中,当发现当前的部分解不满足约束条件或者不可能得到更优的解时,就进行回溯,即撤销上一步的选择,尝试其他的选择。
算法步骤
定义问题的解空间:确定问题的解可以表示为什么形式,以及所有可能的解构成的空间结构。
确定状态空间树的结构:根据问题的特点构建状态空间树,树的节点代表问题的部分解,从根节点到叶子节点的路径代表一个完整的解。
深度优先搜索:从根节点开始,以深度优先的方式搜索状态空间树。在搜索过程中,根据约束条件判断每个节点是否可行,如果可行则继续向下搜索,否则回溯到上一层。
剪枝操作:在搜索过程中,利用约束条件进行剪枝,即剪掉那些不可能产生可行解或最优解的子树,以提高算法的效率。
记录 ...
Linux虚拟化面试题汇总
CPU虚拟化是怎么实现的?硬件辅助虚拟化的情况下,CPU提供了根模式和非根模式,VMM 运行在根模式下,拥有最高的特权级别,可以直接访问物理硬件资源。Guest OS 运行在非根模式(VMX)下,当它执行敏感指令时,处理器会自动切换到根模式,由 VMM 进行处理。
QEMU会为每个vcpu创建一个线程,这个线程会通过ioctl给KVM发送KVM_RUN指令让CPU进入VMX模式并切换成VM的上下文。
VMCB(VM控制块)可以被两种模式(root, vmx)访问,所以可以用来存储:
HOST CPU上下文
Guest CPU上下文
Guest Entry/EXECUTION/EXIT 控制区,KVM可以配置哪些指令和异常能导致VM exit.
Exit information: VM exit的原因
敏感指令包括:
访问或修改控制寄存器(如 CR0、CR3、CR4 等)的指令。这些寄存器控制着处理器的关键运行模式和特性。
执行输入 / 输出(I/O)指令。例如,直接对硬件设备进行读写操作的指令,因为这些指令可能会影响整个系统的稳定性和安全性。
启动和停止中断的指令。对中断的控 ...
Openstack Trove概要
Trove简介Openstack Trove是openstack为用户提供的数据库即服务(DBaaS)。所谓DBaaS,即trove既具有数据库管理的功能,又具有云计算的优势。使用trove,用户可以:
“按需”获得数据库服务器
配置所获得的数据库服务器或者数据库服务器集群
对数据库服务器或者数据库服务器集群进行自动化管理
根据数据库的负载让数据库服务器集群动态伸缩
与openstack的其他组件一样,trove也提供RESTful API,并通过RESTful API和其他组件进行交互。
Trove架构Trove API和用户进行交互,当Trove API接收到用户请求时,trove API首先会调用Keystone的API来对用户进行认证,认证通过后才会去执行相应的操作。Trove API会同步处理操作简单的一些请求,复杂的请求则会通过Message Queue (RabbitMQ)交给Task Manager来处理。Task Manager会监听RabbitMQ的一个topic,收到请求后就会进行处理。这些请求通常是分配数据库实例、管理数据库实例的生命周期、操 ...
面试复习-项目-HLFS
HLFS的存储体系结构HLFS是开源云计算平台cloudxy的虚拟机镜像存储系统,为cloudxy提供安全、可靠、高效的分布式镜像存储服务。从实现方式上来讲,HLFS由三个逻辑层次组成:接口层、逻辑层、后台存储层。接口层主要以应用函数库的形式给虚拟机监管者(Virtual Machine Monitor)提供存储接口。逻辑层实现了核心功能,包括快照和回滚、文件系统组织等。HDFS(Hadoop分布式文件系统)是Hadoop应用程序的主要存储系统[6]。主要的特点是将数据的多个副本分布地存储于计算机集群的多个节点上,以提供存储的高可靠性。后台存储层借助HDFS实现存储集群管理。图1是HLFS的存储体系结构。
HLFS由三个组件构成:主节点(Name Node)、数据节点(Data Node)、客户端组成,如图2所示。主节点通过处理注册及心跳检测来维护数据节点的机架关系(cluster membership)、处理来自数据节点的报告及数据块的位置、处理文件数据块操作并管理文件数据块的冗余副本。数据节点在本地文件系统上存储HDFS的文件数据块。客户端通过则HLFS动态链接库来使用HLFS ...
面试复习-数据结构-图
图可以用邻接表或者邻接矩阵表示
在无权图中找出两个节点最短距离通常用广度优先算法 - 队列实现
在无权图中找出符合条件的路径通常用深度优先算法 - 栈或者递归实现
求最大岛屿面积链接: https://leetcode.cn/problems/max-area-of-island/
123456789101112131415161718192021222324252627282930313233343536373839404142import queueclass Solution: def maxAreaOfIsland(self, grid: List[List[int]]) -> int: lenRows = len(grid) lenCols = len(grid[0]) visited = [[False for _ in range(lenCols)] for _ in range(lenRows)] maxArea = 0 for row in range(lenRows): ...
面试复习-专利
Heterogenous replication in a hybrid cloud database链接:https://patents.google.com/patent/WO2023040954A1/en
该专利旨在解决混合云计算环境中数据冗余的问题,通过将文件拆分为块、计算块签名、比较块签名来识别重复文件,并选择删除候选文件,以减少存储重复数据,提高存储效率。
Protecting container images and runtime data链接: https://patents.google.com/patent/WO2024007733A1/en
在 Kubernetes 中保护敏感容器镜像对于机密计算至关重要,因为需要保护容器资源免受其他容器和主机访问。目前有一些解决方案,如 Kata 和 gVisor,可以限制 Kubernetes Pod 中的容器隔离,还有一些像 Firecracker 的 Hypervisor 可以增强虚拟化。然而,现有解决方案虽然可以隔离 CPU、内存、存储等资源,但无法保护容器镜像和根文件系统免受主机访问,因为所有容器根文件系统都驻 ...
面试复习-Python-面向对象
面向对象编程的特点
封装是将数据和操作数据的方法封装在一个类中,对外隐藏内部的实现细节,只提供一些公共的方法来访问和修改数据。这样可以提高代码的安全性和可维护性,避免外部直接访问和修改内部数据,导致程序出现错误。
继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。子类可以继承父类的所有公共属性和方法,并可以根据需要添加自己的属性和方法,或者重写父类的方法
多态是指同一个方法可以根据调用对象的不同而表现出不同的行为。在 Python 中,多态是通过方法重写和方法重载来实现的。方法重写是指子类重写父类的方法,方法重载是指在同一个类中定义多个同名方法,但参数列表不同。
抽象类是一种不能被实例化的类,它只能作为其他类的父类,用于定义一些抽象方法,这些方法没有具体的实现,需要在子类中实现
12345678910from abc import ABC, abstractmethodclass Shape(ABC): @abstractmethod def area(self): pass @abstractmethod d ...
面试复习-Python-模块
模块模块是一个包含 Python 定义和语句的文件,其作用包括:
代码组织与复用
每个模块都有自己的全局作用域,不同模块中的同名变量和函数不会相互干扰
要点:
模块的搜索路径存在于PYTHONPATH环境变量中,解释器中可以通过sys.path查看
命名空间:局部空间 > 全局空间 > 内建空间
python的对象可以看做一个命名空间,可以通过’.’给其添加属性。
模块导入
import module_name
from module_name import obj1, obj2...
from module_name import obj1 as obj
import module_name as obj
被导入模块只在第一次导入的时候执行
被导入的模块或Python对象遵循全局或者局部作用域的原则
包包是一种组织模块的方式,它可以将多个相关的模块放在一个目录下,以便更好地管理和复用代码。一个包实际上是一个包含 init.py 文件的目录。这个文件可以是空的,也可以包含一些初始化代码,当包被导入时会自动执行。一个拥有子包的目录结构如下:
12345678my_p ...
面试复习-Python-函数
函数的参数组123456789101112131415>>> def myfunc(*args, **kwargs):... print(args)... print(kwargs)...>>> myfunc(1, 2, name="sen")(1, 2){'name': 'sen'}>>> myfunc(1, 2, name="sen", 3) File "<stdin>", line 1 myfunc(1, 2, name="sen", 3) ^SyntaxError: positional argument follows keyword argument>>> myfunc(name="sen")(){'name': ' ...