#P2637. 12.18华为可信科目一-专业级-第2题-微服务管理
-
ID: 2063
Tried: 22
Accepted: 6
Difficulty: 7
所属公司 :
可信
时间 :12月18日考试
-
算法标签>哈希表dfs
12.18华为可信科目一-专业级-第2题-微服务管理
题解
题目描述
在微服务架构中,每个微服务可能有依赖关系,我们需要模拟微服务的运行、访问以及服务器重启的过程。微服务的运行规则如下:
- 部署:一个微服务在一台服务器上只能部署一个实例,但可以部署在多台服务器上。
- 运行状态:微服务可以独立启动并运行,也可以依赖其他微服务。
- 提供服务:当微服务没有依赖时,只要有一个实例运行即可提供服务;当微服务有依赖时,它自身以及所有依赖的微服务都必须运行才能提供服务。
操作要求:
本题使用核心代码模式
题目内容
微服务的运行规则如下:
-
部署:一个微服务在一台服务器上只能部署一个实例,但可部署在多台服务器上。
-
运行状态:一个微服务可以不依赖其它微服务独立启动并运行。
-
提供服务:一个微服务,当无依赖时,只要有一个实例运行即可提供服务;当有依赖时,当仅当其自身在运行及其所依赖的所有微服务都可提供服务,则该微服务才能提供服务。
如:某时刻,微服务 A 依赖微服务 B 、B 依赖 C 、C 无依赖,则:
-
若 C 至少有一个实例处于运行状态,则 C 可提供服务:
-
同时,B 至少有一个实例处于运行状态,则 B 也可提供服务;
-
再者,A 至少有一个实例处于运行状态,则 A 也可提供服务。
然后,若把 B 的所有实例停止,则 A、B 都不能提供服务;但 C 仍可提供服务。
模拟微服务运行、访问、服务器重启,请实现如下功能:
-
ServiceWgSys()−系统初始化,假设机房内的所有服务器都已上传可供运行微服务。
-
rebootServers(int[]serverIds)−服务器 serverIds 批量重启,这些服务器上的微服务不会自动 启动。
-
startService(int serverId,String serviceName) 在指定的服务器 serverId上启动微服务serviceName;
如果此服务器上已运行该微服务,则直接返回 false ;
否则,启动该微服务(可能是新的微服务实例,也可以是之前配置服务器重启而停止运行的微服务),该微服务处于运行状态。返回 true。
addDependency(String fromServiceName,String to ServiceName)−令微服务fromService 依赖微服务 toService,输入保证无循环依赖。
如果此依赖关系已经存在,则直接返回 false;
否则,新添加此依赖关系(无论两个微服务是否启动过),返回 true
isServiceAvailable(String serviceName)−如果指定的微服务的提供服务,返回 true ;否则,返回 false 。
输入描述
每行表示一个函数调用,初始化函数仅首行调用一次,累计函数调用不超过 1000 次。
0<=serverId<=1000,且是存在的服务器。
0<serverIds.length<=500;0<=serverIds[i]<=1000,各不相同且是存在的服务器。
serviceName、fromServiceName、toServiceName 由英文字母或数字组成,0<长度<15。
输出描述
答题时按照函数方法原型中的要求(含返回值)进行实现,输出由框架完成(其中首行固定输出 null)。
样例1
输入
ServiceWgSys()
startService(1, "serviceA")
startService(2, "serviceA")
startService(2, "serviceA")
addDependency("serviceB", "serviceA")
rebootServers([2])
isServiceAvailable("serviceA")
startService(2, "serviceB")
isServiceAvailable("serviceB")
rebootServers([2, 1])
isServiceAvailable("serviceA")
startService(1, "serviceA")
isServiceAvailable("serviceA")
输出
null
true
true
false
true
null
true
true
true
null
false
true
true
模板
Python
class ServiceMgrSys:
def __init__(self):
def rebootServers(self, serverIds):
def startService(self, serverId, serviceName):
def addDependency(self, fromServiceName, toServiceName):
def isServiceAvailable(self, serviceName):
Java
import java.util.*;
class ServiceMgrSys {
ServiceMgrSys() {
}
void rebootServers(int[] serverIds) {
}
boolean startService(int serverId, String serviceName) {
}
boolean addDependency(String fromServiceName, String toServiceName) {
}
boolean isServiceAvailable(String serviceName) {
}
}
C++
#include<bits/stdc++.h>
using namespace std;
class ServiceMgrSys {
public:
ServiceMgrSys(){}
void rebootServers(vector<int>& serverIds) {
}
bool startService(int serverId, string serviceName) {
}
bool addDependency(string fromServiceName, string toServiceName) {
}
bool isServiceAvailable(string serviceName) {
}
};