小编Que*_*ger的帖子

SLF4J Java日志设计

我开始使用SLF4J进行日志记录,而对我来说第一件事就是下面这段代码

public class MyClass
{
   private static final logger = org.slf4j.LoggerFactory.getLogger(MyClass.class)
}
Run Code Online (Sandbox Code Playgroud)

使用类作为参数来获取记录器实例的设计原则或逻辑是什么?

java logging slf4j

4
推荐指数
1
解决办法
629
查看次数

使用加密哈希函数之前和之后

在查看了多个用于生成 Java MD5 和 SHA* 散列的在线参考资料后,我注意到纯文本(文件字符串)在被馈送到 Digest 对象以生成散列之前和之后经过了一定的准备。具体来说,数据首先转换为字节数组,然后馈送到摘要,然后输出哈希转换为十六进制流。为什么所有这些字节和十六进制转换?

PS:我想答案与 Java 和 Digest 对象如何开展业务有关,我提出这个问题的动机是为了理解这种行为,并可能获得对一些文档/文献的引用,这些文档/文献对此进行了深入解释.

丹克!

java hex checksum bytearray cryptographic-hash-function

4
推荐指数
1
解决办法
943
查看次数

按照 Google 的 Jeff Dean 的要求请求延迟

我正在观看 Jeff Dean 谈论延迟和缩放的视频 - https://www.youtube.com/watch?v=nK6daeTZGA8#t=515

在 00:07:34 标记处,他给出了这样的延迟示例 -

假设您有一堆服务器。他们对请求的平均响应时间为 10 毫秒。但是有 1% 的时间他们需要 1 秒或更长时间来响应。因此,如果您接触其中一台服务器,则 1% 的请求需要 1 秒或更长时间。接触其中的 100 个服务器,63% 的请求需要 1 秒或更长时间。

他是如何得出这个 63% 的数字的?这背后的逻辑/数学是什么?

math latency request response-time

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

番石榴秒表课程有哪些优点?

在Google Guava库中,有一个Stopwatch类,其文档说明了这一点 -

测量经过时间的对象,以纳秒为单位.System.nanoTime()由于以下几个原因,使用此类而不是直接调用来测量已用时间非常有用 :

  1. 出于测试或性能原因,可以替换备用时间源.
  2. 如记录所示nanoTime,返回的值没有绝对意义,只能被解释为相对于nanoTime在不同时间返回的另一个时间戳.Stopwatch是一种更有效的抽象,因为它只暴露这些相对值,而不是绝对值.

问题 - 他们所指的"替代时间源"是什么?JRE/JVM也提供此选项吗?

java time stopwatch nanotime guava

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

用于计算整数中设置位数的查找表

试图解决这个流行的面试问题 - http://www.careercup.com/question?id=3406682

我能够掌握两种方法 -

  1. Brian Kernighan's algo - 整数时间复杂度的比特计数算法 (Brian Kernighan)

  2. 查找表。

我假设当人们说使用查找表时,他们指的是一个以整数为键、以设置位数为值的哈希图。

如何构建这个查找表?我们是否使用布莱恩算法来计算第一次遇到整数时的位数,将其放入哈希表中,下次遇到该整数时,从哈希表中检索值?

PS:我知道硬件和软件 api 可用于执行 popcount (Integer.bitCount()),但在本次面试问题中,我们不允许使用这些方法。

hashmap lookup-tables bit

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

perl eval没有捕获错误

'eval'区块捕获'死'尝试.但是在下面的代码中,它无法捕获"未初始化的值"异常.

perl代码 -

#!/usr/bin/perl
package poc::template;

use strict;
use warnings;
use Log::Log4perl;

my $log_conf = "../conf/log4perl.conf";
Log::Log4perl::init($log_conf);
my $logger = Log::Log4perl->get_logger();

sub doSome {
    $logger->info('doing something');
    my $add = $ARGV[0] + 4;
}

#main
$logger->info('start');
eval { doSome(); };
if ($@) {
    $logger->info('error');
}
$logger->info('stop');
Run Code Online (Sandbox Code Playgroud)

这是日志conf -

log4perl.rootLogger              = DEBUG, SCREEN
log4perl.appender.SCREEN         = Log::Log4perl::Appender::Screen
log4perl.appender.SCREEN.stderr  = 0
log4perl.appender.SCREEN.layout  = Log::Log4perl::Layout::PatternLayout
log4perl.appender.SCREEN.layout.ConversionPattern = %d [%M:%L] %p  %F{2} - %m%n
Run Code Online (Sandbox Code Playgroud)

这是脚本输出 -

2013/02/03 16:47:02 [main:::18] INFO  template\POCTemplate.pl - start
Use of uninitialized …
Run Code Online (Sandbox Code Playgroud)

perl eval exception try-catch

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

无法在Java字节数组中使用文件

我正在研究为给定文件生成校验和的Java代码.我正在使用Gogole的Guava库进行散列.这是代码 -

import com.google.common.hash.HashCode;
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;

private HashCode doHash(File file) throws IOException {
    HashFunction hc = Hashing.murmur3_128();
    HashCode hsCode = hc.newHasher().putBytes(com.google.common.io.Files.asByteSource(file).read()).hash();
    return hsCode;
}
Run Code Online (Sandbox Code Playgroud)

我运行此代码的文件大小为2.8GB.它抛出以下错误 -

Exception in thread "main" java.lang.OutOfMemoryError: 2945332859 bytes is too large to fit in a byte array
    at com.google.common.io.ByteStreams.toByteArray(ByteStreams.java:232)
    at com.google.common.io.Files$FileByteSource.read(Files.java:154)
    ...
Run Code Online (Sandbox Code Playgroud)

我可以在这里使用其他数据结构吗?或者我应该寻找另一种策略来将文件提供给哈希函数?

java arrays hash checksum guava

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

16位状态字perlvar

当我遇到这个时,我正在读perlvar -

最后一个管道关闭,反引号(``)命令,成功调用wait()或waitpid()或来自system()操作符返回的状态.这只是传统Unix wait()系统调用返回的16位状态字(或者看起来像是这样).因此,子进程的退出值实际上是($?>> 8),而$?&127给出了哪个信号

什么是16位状态字?操作'$?>> 8'表示什么?在我做'$?>> 8'之后,像'512'这样的16位字如何被转换为'2'?

perl 16-bit perlvar

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