小编Pra*_*abu的帖子

HDFS块大小与实际文件大小相同

我知道HDFS使用数据节点中的常规linux文件系统存储数据.我的HDFS块大小是128 MB.假设10 GB我的hadoop集群中有磁盘空间,这意味着HDFS最初具有80 blocks可用存储空间.

如果我创建一个小文件说12.8 MB,#available HDFS块将变为79.如果我创建另一个小文件12.8 MB会怎么样?#availbale区块会保持在79还是会降到78?在前一种情况下,HDFS基本上根据可用的可用磁盘空间重新计算每个块分配后的#available块,因此,只有在消耗了超过128 MB的磁盘空间后,#available块才会变为78.请澄清.

filesize hdfs

15
推荐指数
1
解决办法
1万
查看次数

C++ STL Vector:Push_back参考

从cpp文档中std::vector,我看到了:

void push_back ( const T& x );
Run Code Online (Sandbox Code Playgroud)

据我所知,push_back它复制了我传递的对象.但是,为什么签名const T& ?通过查看这个,我最初认为它需要const参考我推动的任何对象vector.

c++ stl

10
推荐指数
3
解决办法
7392
查看次数

金额N的变更方式

我遇到了这个问题:

http://www.geeksforgeeks.org/dynamic-programming-set-7-coin-change/

给定值N,如果我们想要改变N美分,并且我们每个S = {S1,S2,..,Sm}值硬币都有无限供应,我们可以通过多少方式进行更改?硬币的顺序无关紧要.

例如,对于N = 4和S = {1,2,3},有四个解:{1,1,1,1},{1,1,2},{2,2},{1, 3}.因此输出应为4.对于N = 10且S = {2,5,3,6},有五种解决方案:{2,2,2,2,2},{2,2,3,3}, {2,2,6},{2,3,5}和{5,5}.所以输出应该是5.

我提出了解决方案:

// recurrence relation
count[N] = count[N-d] for all denomination <= N

Source code
-----------

public static int numWays(int N, int[] denoms) {
  if (N == 0)
     return 0;

  int[] ways = new int[N+1];
  ways[0] = 1;

  for (int i=1; i<=N; i++) {
     ways[i] = 0;
     for (int d : denoms) {
        if (d <= i) {
           ways[i] += ways[i-d];
        }
     }
  }

  return …
Run Code Online (Sandbox Code Playgroud)

algorithm dynamic-programming

9
推荐指数
1
解决办法
2710
查看次数

访谈:系统/ API设计

这个问题是在一家大型软件公司中提出的.我想出了一个简单的解决方案,我想知道其他人对解决方案的看法.

您应该为系统设计API和后端,以便为居住在城市中的人分配电话号码.电话号码将从111-111-1111开始,到999-999-9999结束.API应该使客户(城市中的人)能够执行以下操作:

  1. 当客户请求电话号码时,它会向其分配一个可用号码.
  2. 有些客户可能需要花哨的数字,所以他们可以专门要求分配一个数字.如果请求的号码可用,则系统将其分配给它们,否则系统将分配任何可用的号码.

系统无需知道哪个号码分配给哪个客户端.同一个客户可以连续发出请求并为自己获取多个电话号码,但系统不会受到打扰.在任何时候,系统只知道分配了哪些电话号码以及哪些电话号码是免费的.

从111-111-1111到999-999-9999的数字大致相当于80亿个数字.假设内存不是约束,我可以想到以下两种方法(几乎相似).

  1. 维护一个长度为80亿的巨大布尔数组,并有一个next指向数组索引的指针(next初始化为零).如果指向的值next不是空闲的,则转发next直到找到空闲数字.当请求花哨的数字时,只需检查相应的索引位置是否空闲并返回该数字.这种方法的缺点是,当以常规方式分配数字时,如果中间有一个巨大的块(比如10亿个)由花式分配分配,那么next指针必须移动10亿次.

  2. 为了克服previos设计中提到的困难,我们可以使用某种链接的hashmap.我们维护一个双向链表(这取代了前一个设计中的数组)和另一个与列表长度相同的数组,其中数组的每个元素指向列表中的相应元素.因此,当在常规方法中分配数字时,我们在链表中推进指针并在分配时标记节点(与前一个方法相同).在分配花哨数字时,我们可以直接在列表中找到与首先索引到数组所需的特殊数字相对应的节点,然后是指针.一旦识别出节点,就会使前一个节点和下一个节点短路,这样我们就不必在进行常规分配时逐个跳过使用过的数字(这是前一种方法的问题).

让我知道我是否走在正确的轨道上.请告诉我任何我遗漏的重要细节.

system-design

8
推荐指数
2
解决办法
1万
查看次数

Traceroute打印星号符号

我正在尝试使用tracerouteunix程序来查找到主机的路由.

我试过traceroute www.google.com,最后我看到只打印了星号.互联网上的示例使用相同的命令,它似乎运作良好.我尝试waitime使用-wswitch 增加值.仍然无法正常工作.

traceroute

7
推荐指数
1
解决办法
1万
查看次数

跨进程如何确保线程调度的公平性?

每个进程至少有一个执行线程,我在某处读到现代操作系统只调度线程而不是进程.

因此,如果系统中有两个进程运行 - P1为1个线程,P2为100个线程,OS调度算法将如何确保P1和P2获得大致相同的CPU时间?如果操作系统盲目地调度线程,P2将获得比P1多100倍的CPU时间.

它是否还考虑了特定线程属于哪个进程?否则,进程似乎很容易通过创建更多线程来占用所有CPU.

multithreading operating-system scheduling

5
推荐指数
1
解决办法
92
查看次数

查找所有与会者都可用的会议时隙的算法

在采访博客中遇到了这个问题。鉴于形式自由安排时间(a - b) i.e., from 'a' to 'b'n人,所有的打印时间间隔,所有n的参与者都可以。这就像一个日历应用程序,提示可能的会议提示。

Example:

Person1: (4 - 16), (18 - 25)
Person2: (2 - 14), (17 - 24)
Person3: (6 -  8), (12 - 20)
Person4: (10 - 22)

Time interval when all are available: (12 - 14), (18 - 20).
Run Code Online (Sandbox Code Playgroud)

请分享任何已知的最佳算法来解决此问题。

我正在考虑以下解决方案。

  • 创建currentList一个间隔,每个间隔包含一个间隔。最初currentList = [4-16, 2-14, 6-8, 10-22]

  • 寻找max_startand min_endin currentList和输出(max_start, min_end)if max_start < min_end; 更新中的所有时间间隔以currentList …

schedule

4
推荐指数
2
解决办法
3319
查看次数

指向另一个进程的内存位置的指针

我遇到过这个问题:'如果进程A包含指向进程B中变量的指针,A是否可以访问和修改该变量?'

我的直觉是,由于进程A和B不同,因此不应允许它们访问彼此的地址空间,因为它会违反保护.

但经过一番思考后,我脑海中浮现出以下问题,并希望得到澄清.

(一世).当我们说A有一个指向B中变量V的指针时,A是否保存对应于V或物理地址的虚拟地址(进程B)?

我相信当我们谈论虚拟内存系统中的地址时,我们总是谈论虚拟地址.请澄清.

(ⅱ).如果A包含虚拟地址,由于A和B都可能具有相同的虚拟地址,A的页面表可能包含A保存的虚拟地址的映射(实际上是变量V的虚拟地址)过程B).然后,当A尝试访问和修改该虚拟地址时,它会在自己的地址空间中修改某些内容(由于A访问自己的地址,因此将允许此访问).

我认为当我们尝试从进程访问一些随机虚拟地址时,上述推理适用,即,我们尝试访问的地址意外地具有有效映射.

请抛出你的想法.

virtual-memory

3
推荐指数
1
解决办法
4463
查看次数

Python subprocess.Popen创建一个新目录

我知道我可以使用os模块创建一个新目录.但我试图用子进程模块创建一个新目录,如下所示:

p=subprocess.Popen("mkdir extractions", shell=True)
os.chdir("extractions")
Run Code Online (Sandbox Code Playgroud)

当脚本执行时,我注意到创建了目录提取,但是下一个os.chdir调用失败,说目录提取不存在.我知道我在使用子进程方面缺少一些东西,这使得下一行不知道创建的目录.请帮忙!

python

2
推荐指数
1
解决办法
4950
查看次数

Python列表副本

我知道可以通过L [:]复制列表L. 但我面临一个问题,我不明白为什么.

src = [1,2,3]
dest = [[5,6,7]]
dest.append(src[:].append(4))
dest
[[5, 6, 7], None]
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,当我尝试复制并向其追加4时,src列表不会复制到dest(请参阅None).

dest.append(src[:])
dest
[[5, 6, 7], None, [1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

如上面的代码片段所示,如果我添加简单地添加列表(到dest)而没有任何追加尝试,它就会被插入.任何的想法?

python list

0
推荐指数
1
解决办法
349
查看次数

C++:在堆上分配的对象

当我们使用new创建一个对象时, 它会在堆上分配.但是,我们正在实例化的类成员会发生什么?例如,

class foo {
 Bar x;
 Bar *y;

 foo() {
   x = 10;
   y = new Bar();
 }
}
Run Code Online (Sandbox Code Playgroud)

这里,x是一个对象,而y是Bar的一个实例.它们都分配在堆上吗?所以如果foo的对象˚F是一个方法内本地创建的,会发生什么Ÿ当f超出范围是什么?

另外,如果在堆上创建F,我们何时会得出结论F是悬空(没有人指向它)?因为,有可能是F无引用,但有可能会引用ÿ.

c++

0
推荐指数
1
解决办法
1395
查看次数