我在面试时遇到了一个疯狂的问题。他们希望我提供可以解决系统中相当大问题的工作代码。但是,我应该在我的系统上开发这个代码,而不是他们的。他们没有告诉我他们使用的是什么版本的Perl,我无法创建包含他们将运行我的代码的数千万条记录的数据库。所以基本上,我是盲目的,我无法测试我的代码。
我似乎无法解决的问题是如何按数值降序排列DB_FILE DB_BTREE。在处理了数百万个域名记录之后,我应该选出前五十个。这是我正在使用的代码:
$DB_BTREE->{'compare'} = \&compare_values;
unlink "domain_count_btree";
tie my %domain_count, "DB_File", "domain_count_btree", O_RDWR|O_CREAT, 0666,
$DB_BTREE or die "Cannot open file 'domain_count_btree': $!\n";
一旦我使用域名及其计数填充%domain_count,我会尝试将这50个值排除在外:
my $num_top_domains = min(50, $total_count);
my @top_domains_names = ();
my @top_domains_counts = ();
my $current_count = 0;
while (($current_count <= $num_top_domains) && ((my $domain, my $count) = each
%domain_count))
{
push(@top_domains_names, $domain);
push(@top_domains_counts, $count);
$current_count++;
}
我的排序功能是:
sub compare_values
{
my ($key1, $key2) = @_;
$domain_count{$key2} <=> $domain_count{$key1};
}
我的理解是每次调用&#34;每个%domain_count&#34;调用排序功能。但是,我不确定我实际上是按照数值下降的顺序对键值对进行排序,而且我不确定我是否会返回前50位。
当然,剧本比我所展示的要大得多。我希望这足以进行分析。所有问题和建议都表示赞赏。
问候。