关于Java库的一个非常简单快速的问题:是否有一个现成的类,它实现了Queue一个固定的最大大小 - 即它总是允许添加元素,但它会默默地删除头元素以容纳新添加元素的空间.
当然,手动实现它是微不足道的:
import java.util.LinkedList;
public class LimitedQueue<E> extends LinkedList<E> {
private int limit;
public LimitedQueue(int limit) {
this.limit = limit;
}
@Override
public boolean add(E o) {
super.add(o);
while (size() > limit) { super.remove(); }
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,Java stdlibs中没有标准的实现,但可能是Apache Commons中的那个或类似的东西?
如果我想require在Ruby中使用相关文件并且希望它在1.8.x和> = 1.9.2中工作,那么最佳实践是什么?
我看到几个选项:
$LOAD_PATH << '.'忘记一切$LOAD_PATH << File.dirname(__FILE__)require './path/to/file'RUBY_VERSION<1.9.2,然后定义require_relative为require,require_relative随后在需要的地方使用require_relative已存在,如果已存在,请尝试按上一种情况继续操作require File.join(File.dirname(__FILE__), 'path/to/file')
Run Code Online (Sandbox Code Playgroud)它们似乎不能在Ruby 1.9中工作,因为,例如:$ cat caller.rb
require File.join(File.dirname(__FILE__), 'path/to/file')
$ cat path/to/file.rb
puts 'Some testing'
$ ruby caller
Some testing
$ pwd
/tmp
$ ruby /tmp/caller
Some testing
$ ruby tmp/caller
tmp/caller.rb:1:in 'require': no such file to load -- tmp/path/to/file (LoadError)
from tmp/caller.rb:1:in '<main>' …Run Code Online (Sandbox Code Playgroud)我正在做一个处理结构化文档数据库的项目.我有一个类别树(约1000个类别,每个级别最多约50个类别),每个类别包含数千个(最多,比方说,~10000)结构化文档.每个文档都是几千字节的数据,采用某种结构化形式(我更喜欢YAML,但它也可能是JSON或XML).
该系统的用户可以进行多种操作:
当然,传统的解决方案是使用某种文档数据库(例如CouchDB或Mongo)来解决这个问题 - 然而,这个版本控制(历史)的东西诱惑我一个疯狂的想法 - 为什么我不应该使用git存储库作为一个这个应用程序的数据库后端?
乍一看,它可以像这样解决:
这个解决方案还有其他常见的陷阱吗?有没有人试图实现这样的后端(即任何流行的框架 - RoR,node.js,Django,CakePHP)?这个解决方案是否会对性能或可靠性产生任何影响 - 即它是否证明git比传统数据库解决方案慢得多,或者存在任何可扩展性/可靠性缺陷?我认为推送/拉取彼此存储库的这类服务器集群应该相当强大和可靠.
基本上,告诉我,如果这个解决方案将工作和为什么它会或不会做?
database git database-replication database-performance document-database
从StringJava中删除所有不可打印字符的最快方法是什么?
到目前为止,我已经尝试并测量了138字节,131个字符的字符串:
replaceAll()- 最慢的方法
replaceAll()
codepointAt()逐个获取代码点并附加到StringBuffer
charAt()逐个获取字符并附加到StringBuffer
char[]缓冲区,charAt()逐个获取字符并填充此缓冲区,然后转换回String
char[]缓冲区 - 旧的和新的,一次获取现有String的所有字符,getChars()逐个迭代旧缓冲区并填充新缓冲区,然后将新缓冲区转换为String - 我自己的最快版本
byte[],getBytes()并指定编码为"utf-8"
byte[]缓冲区的相同内容,但将编码指定为常量Charset.forName("utf-8")
byte[]缓冲区相同的东西,但指定编码为1字节本地编码(几乎没有理智的事情要做)
我最好的尝试如下:
char[] oldChars = new char[s.length()];
s.getChars(0, s.length(), oldChars, 0);
char[] newChars = new char[s.length()];
int newLen = 0;
for (int j = 0; j < s.length(); …Run Code Online (Sandbox Code Playgroud) 正如广泛宣传的那样,现代x86_64处理器具有64位寄存器,可以以向后兼容的方式用作32位寄存器,16位寄存器甚至8位寄存器,例如:
0x1122334455667788
================ rax (64 bits)
======== eax (32 bits)
==== ax (16 bits)
== ah (8 bits)
== al (8 bits)
Run Code Online (Sandbox Code Playgroud)
这样的方案可以从字面上理解,即,总是可以使用指定的名称仅访问寄存器的一部分用于读取或写入目的,并且这将是高度逻辑的.实际上,对于高达32位的所有内容都是如此:
mov eax, 0x11112222 ; eax = 0x11112222
mov ax, 0x3333 ; eax = 0x11113333 (works, only low 16 bits changed)
mov al, 0x44 ; eax = 0x11113344 (works, only low 8 bits changed)
mov ah, 0x55 ; eax = 0x11115544 (works, only high 8 bits changed)
xor ah, ah ; eax = 0x11110044 (works, only high 8 …Run Code Online (Sandbox Code Playgroud) 从2011年开始,现代浏览器的通用cookie限制是什么?我特别感兴趣的是:
我知道RFC 2109指定:
但什么是现实世界的规格?
每次当我使用IDEA并使用普通的"New Java class"菜单选项创建Java类时,它会在类本身之前生成一个丑陋且无用的Javadoc样式头:
/**
* Created by greycat on 18.03.14.
*/
Run Code Online (Sandbox Code Playgroud)
我可能会咆哮很多,为什么它没用,例如:
@author或@since标记)有没有办法禁用这种行为,即只创建普通,干净的类模板,没有这个标题?
Adobe有一个标准,理论上指定从浏览器中单击的链接打开PDF文档,以打开PDF文档的特定部分(AKA"锚点","命名参考").如果想要引用大型PDF的特定部分(例如某些标准或规范),此功能应该非常有用.
但是,从我现在看来,对这个标准的支持几乎不存在.
例如,这些链接应在第3.2.6节"注释类型"中打开Scala参考PDF:
(Techincally,变体#3应该打开第23页,它本质上是相同的目的地)
是否有一种工作方式(可能有几个垫片,专有包装或其他任何东西)使这个工作在大多数系统上?如果我关心其他系统,Adobe Reader插件的使用份额是多少?
如果不可能,至少我想为每个平台(即Windows,Linux,Mac)找到一个可行的解决方案,如果他们希望能够使用命名的目标链接,我可以向我的网站的用户推荐.
从我测试过:
\\HOST\dir\file.pdf#something),"http"(或可能是"https")方案之外的任何其他内容都不起作用如果您尝试以各种不同的组合进行测试,我将不胜感激.
是否有一种干净的方法以非阻塞的方式异步解析Java中的DNS查询(通过主机名获取IP)(即状态机,而不是1个查询= 1个线程 - 我想同时运行数万个查询,但是没有运行成千上万的线程)?
到目前为止我发现了什么:
InetAddress.getByName()实现是阻塞的,看起来标准Java库缺少任何非阻塞实现.Future范式使用,以及非常有限的仅限队列的实现.Fun类我错过了任何其他想法/实施?
澄清.我有一个相当大(每天几TB)的日志量.每个日志行都有一个主机名,可以来自互联网上的任何地方,我需要一个IP地址作为我的进一步统计计算的主机名.行的顺序并不重要,所以,基本上,我的想法是开始2个线程:首先迭代线:
第二个线程将:
epoll/ kqueuelike技术)Perl中的一个简单的模型实现AnyEvent向我展示了我的想法通常是正确的,我可以通过这种方式轻松实现每秒15-20K查询的速度(天真的阻塞实现每秒2-3次查询 - 只是为了比较 - 所以这就像4个数量级的差异).现在我需要在Java中实现相同的 - 我想跳过我自己的DNS实现;)
通过放置类似的内容,可以很容易地在Java中初始化2D数组(或者实际上是任何多维数组):
int[][] x = new int[][] {
{ 3, 5, 7, },
{ 0, 4, 9, },
{ 1, 8, 6, },
};
Run Code Online (Sandbox Code Playgroud)
它易于阅读,类似于2D矩阵等.
但是我如何在Scala中做到这一点?
最好的我可以想出看起来,更简洁:
val x = Array(
Array(3, 5, 7),
Array(0, 4, 9),
Array(1, 8, 6)
)
Run Code Online (Sandbox Code Playgroud)
我在这里看到的问题:
Array),在每个Array调用中省略尾随如果我搞砸了,除了插入一些Array()在阵列的中间,它会好与编译器,但类型x将变得悄无声息Array[Any],而不是Array[Array[Int]]:
val x = Array(
Array(3, 5, 7),
Array(0, 4), 9, // <= OK with compiler, silently ruins x
Array(1, 8, 6)
)
Run Code Online (Sandbox Code Playgroud)
有一个防范它,直接指定类型,但它看起来比在Java中更难过:
val …Run Code Online (Sandbox Code Playgroud)java ×4
anchor ×1
assembly ×1
asynchronous ×1
browser ×1
collections ×1
cookies ×1
database ×1
dns ×1
event-driven ×1
git ×1
html ×1
hyperlink ×1
javascript ×1
limit ×1
nonblocking ×1
optimization ×1
pdf ×1
performance ×1
queue ×1
ruby ×1
ruby-1.8 ×1
ruby-1.9 ×1
scala ×1
string ×1
x86-64 ×1