我开始使用SLF4J进行日志记录,而对我来说第一件事就是下面这段代码
public class MyClass
{
private static final logger = org.slf4j.LoggerFactory.getLogger(MyClass.class)
}
Run Code Online (Sandbox Code Playgroud)
使用类作为参数来获取记录器实例的设计原则或逻辑是什么?
在查看了多个用于生成 Java MD5 和 SHA* 散列的在线参考资料后,我注意到纯文本(文件字符串)在被馈送到 Digest 对象以生成散列之前和之后经过了一定的准备。具体来说,数据首先转换为字节数组,然后馈送到摘要,然后输出哈希转换为十六进制流。为什么所有这些字节和十六进制转换?
PS:我想答案与 Java 和 Digest 对象如何开展业务有关,我提出这个问题的动机是为了理解这种行为,并可能获得对一些文档/文献的引用,这些文档/文献对此进行了深入解释.
丹克!
我正在观看 Jeff Dean 谈论延迟和缩放的视频 - https://www.youtube.com/watch?v=nK6daeTZGA8#t=515
在 00:07:34 标记处,他给出了这样的延迟示例 -
假设您有一堆服务器。他们对请求的平均响应时间为 10 毫秒。但是有 1% 的时间他们需要 1 秒或更长时间来响应。因此,如果您接触其中一台服务器,则 1% 的请求需要 1 秒或更长时间。接触其中的 100 个服务器,63% 的请求需要 1 秒或更长时间。
他是如何得出这个 63% 的数字的?这背后的逻辑/数学是什么?
在Google Guava库中,有一个Stopwatch类,其文档说明了这一点 -
测量经过时间的对象,以纳秒为单位.
System.nanoTime()由于以下几个原因,使用此类而不是直接调用来测量已用时间非常有用 :
- 出于测试或性能原因,可以替换备用时间源.
- 如记录所示
nanoTime,返回的值没有绝对意义,只能被解释为相对于nanoTime在不同时间返回的另一个时间戳.Stopwatch是一种更有效的抽象,因为它只暴露这些相对值,而不是绝对值.
问题 - 他们所指的"替代时间源"是什么?JRE/JVM也提供此选项吗?
试图解决这个流行的面试问题 - http://www.careercup.com/question?id=3406682
我能够掌握两种方法 -
Brian Kernighan's algo - 整数时间复杂度的比特计数算法 (Brian Kernighan)
查找表。
我假设当人们说使用查找表时,他们指的是一个以整数为键、以设置位数为值的哈希图。
如何构建这个查找表?我们是否使用布莱恩算法来计算第一次遇到整数时的位数,将其放入哈希表中,下次遇到该整数时,从哈希表中检索值?
PS:我知道硬件和软件 api 可用于执行 popcount (Integer.bitCount()),但在本次面试问题中,我们不允许使用这些方法。
'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) 我正在研究为给定文件生成校验和的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)
我可以在这里使用其他数据结构吗?或者我应该寻找另一种策略来将文件提供给哈希函数?
当我遇到这个时,我正在读perlvar -
最后一个管道关闭,反引号(``)命令,成功调用wait()或waitpid()或来自system()操作符返回的状态.这只是传统Unix wait()系统调用返回的16位状态字(或者看起来像是这样).因此,子进程的退出值实际上是($?>> 8),而$?&127给出了哪个信号
什么是16位状态字?操作'$?>> 8'表示什么?在我做'$?>> 8'之后,像'512'这样的16位字如何被转换为'2'?