记微软的一次面试

一面就凉凉了…一道中等难度的深度优先搜索题死活想不出来,无语了啊,其实还是不熟的原因,只能说技不如人还有很长的路要走,权当涨见识了

我尝试把题目回忆了一下:

“微服务”-在拥挤的软件体系结构大街上的又一个新名词。尽管我们的天性是轻蔑地掠过这些事物,但是这种术语描述了一种越来越受欢迎的软件系统样式。在过去的几年中,我们已经看到许多项目都使用这种样式,到目前为止,结果是非常积极的,以至于对于我们的许多同事来说,这已成为构建企业应用程序的默认样式。但是,令人遗憾的是,没有太多信息可以概述微服务风格是什么以及如何实现。

简而言之,微服务架构样式[1]是一种将单个应用程序开发为一组小服务的方法,每个小服务都在自己的进程中运行并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,并且可以由全自动部署机制独立部署。这些服务的集中管理几乎没有,可以用不同的编程语言编写并使用不同的数据存储技术。

目前,微软sharepoint组开始重构项目,并使用微服务技术,现在给出一些dll以及它的依赖,请你将这些dll组件合理的划分成几个组.

例如:
stswel.dll 依赖 onetutil.dll, a.dll, b.dll, c.dll
onetutil.dll 依赖 a.dll, b.dll, c.dll, d.dll
owssvr.dll 依赖 killswitch.dll,a.dll b.dll,e.dll, f.dll
killswitch.dll 依赖 e.dll, f.dll

划分成: [stswel.dll, onetutil.dll], [owssvr.dll, killswitch.dll]两组

输入:
shippingFiles = [stswel.dll, onetutil.dll, owssvr.dll, killswitch.dll]

dependencies= (stswel.dll, [onetutil.dll, a.dll, b.dll, c.dll]), (onetutil.dll, [a.dll, b.dll, c.dll, d.dll]),
(owssvr.dll, [killswitch.dll,a.dll b.dll,e.dll, f.dll]), (killswitch.dll, [e.dll, f.dll])

函数:
List<List> FindIndependentComponents(List shippingFiles, Dictionary<string, List> dependencies){
// write your code
}

List<string> shippingFiles = new List<string>() { "stswel.dll", "onetutil.dll", "owssvr.dll", "killswitch.dll" };
Dictionary<string, List<string>> dependencies = new Dictionary<string, List<string>>();
dependencies.Add("stswel.dll", new List<string>() { "onetutil.dll", "a.dll", "b.dll", "c.dll"});
dependencies.Add("onetutil.dll", new List<string>() { "a.dll", "b.dll", "c.dll", "d.dll" });
dependencies.Add("owssvr.dll", new List<string>() { "killswitch.dll" , "a.dll", "b.dll", "e.dll", "f.dll" });
dependencies.Add("killswitch.dll", new List<string>() { "e.dll", "f.dll" });


List<List<string>> results = FindIndependentComponents(shippingFiles, dependencies);

for(int i = 0; i < results.Count; i++)
{
    for(int j=0;j< results[i].Count; j++)
    {
        Console.Write(results[i][j]+" ");
    }
    Console.WriteLine();
}


List<List<string>> FindIndependentComponents(List<string> shippingFiles, Dictionary<string, List<string>> dependencies)
{
    List<List<string>> results = new List<List<string>>();
    List<string> visited = new List<string>();
    if (shippingFiles == null || shippingFiles.Count == 0)
    {
        return results;
    }
    for(int i = 0; i < shippingFiles.Count; i++)
    {
        FindIndependentComponentsRecr(shippingFiles, dependencies, results, new List<string>(), visited, shippingFiles[i]);
    }

    return results;
}


void FindIndependentComponentsRecr(List<string> shippingFiles, Dictionary<string, List<string>> dependencies, List<List<string>> results, List<string> result,List<string> visited, string current)
{
    if (visited.Contains(current))
    {
        return;
    }
    result.Add(current);
    visited.Add(current);

    int count = dependencies[current].Count;
    foreach(string dll in dependencies[current])
    {
        if (shippingFiles.Contains(dll))
        {
            FindIndependentComponentsRecr(shippingFiles, dependencies, results, result,visited, dll);
        }
        else
        {
            count--;
        }
    }
    if(count == 0)
    {
        results.Add(new List<string>(result));
    }

    result.Remove(current);
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值