小编Luk*_*der的帖子

Java XPath(Apache JAXP实现)性能

注意:如果您遇到此问题,请在Apache JIRA上进行投票:

https://issues.apache.org/jira/browse/XALANJ-2540

我得出了一个令人惊讶的结论:

Element e = (Element) document.getElementsByTagName("SomeElementName").item(0);
String result = ((Element) e).getTextContent();
Run Code Online (Sandbox Code Playgroud)

似乎是比这快100倍的令人难以置信的:

// Accounts for 30%, can be cached
XPathFactory factory = XPathFactory.newInstance();

// Negligible
XPath xpath = factory.newXPath();

// Negligible
XPathExpression expression = xpath.compile("//SomeElementName");

// Accounts for 70%
String result = (String) expression.evaluate(document, XPathConstants.STRING);
Run Code Online (Sandbox Code Playgroud)

我正在使用JVM的JAXP默认实现:

org.apache.xpath.jaxp.XPathFactoryImpl
org.apache.xpath.jaxp.XPathImpl
Run Code Online (Sandbox Code Playgroud)

我真的很困惑,因为很容易看出JAXP如何优化上面的XPath查询来实际执行一个简单的getElementsByTagName().但它似乎并没有这样做.此问题仅限于大约5-6个经常使用的XPath调用,这些调用由API抽象和隐藏.这些查询涉及/a/b/c仅针对始终可用的DOM文档的简单路径(例如,无变量,条件).因此,如果可以进行优化,则很容易实现.

我的问题:XPath的缓慢是一个公认的事实,还是我忽略了什么?是否有更好(更快)的实施?或者我应该完全避免XPath,简单查询?

java apache performance xpath jaxp

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

如何生成Maven项目的所有模块之间的依赖关系图?

如何生成Maven项目的所有模块之间的依赖关系图(不包括第三方库,如JUnit,SLF4J等)?我找不到使用m2eclipse将所有模块包含到一个图中的方法.谢谢.

java maven-2

49
推荐指数
5
解决办法
5万
查看次数

Lambda表达式和方法重载疑问

好的,所以方法重载是一个糟糕的事情.既然已经解决了这个问题,我们假设我实际上想要重载这样的方法:

static void run(Consumer<Integer> consumer) {
    System.out.println("consumer");
}

static void run(Function<Integer, Integer> function) {
    System.out.println("function");
}
Run Code Online (Sandbox Code Playgroud)

在Java 7中,我可以使用非模糊的匿名类作为参数轻松地调用它们:

run(new Consumer<Integer>() {
    public void accept(Integer integer) {}
});

run(new Function<Integer, Integer>() {
    public Integer apply(Integer o) { return 1; }
});
Run Code Online (Sandbox Code Playgroud)

现在在Java 8中,我当然想用lambda表达式调用这些方法,我可以!

// Consumer
run((Integer i) -> {});

// Function
run((Integer i) -> 1);
Run Code Online (Sandbox Code Playgroud)

既然编译器应该能够推断出来Integer,为什么我不离开Integer呢?

// Consumer
run(i -> {});

// Function
run(i -> 1);
Run Code Online (Sandbox Code Playgroud)

但这不编译.编译器(javac,jdk1.8.0_05)不喜欢这样:

Test.java:63: error: reference to run is …
Run Code Online (Sandbox Code Playgroud)

java lambda overloading jls java-8

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

我如何对持久性进行单元测试?

作为实践测试驱动开发的新手,我常常陷入困境,如何将持久性单元测试数据库.

我知道技术上这将是一个集成测试(不是单元测试),但我想找到以下最佳策略:

  1. 测试查询.
  2. 测试插页.我如何知道插件出现故障?我可以通过插入然后查询来测试它,但是我怎么知道查询没有错呢?
  3. 测试更新和删除 - 与测试插入相同

这些最佳做法是什么?


关于测试SQL:我知道这可以做到,但如果我使用像NHibernate这样的O/R Mapper,它会在用于输出查询的别名中附加一些命名瑕疵,因为这有点不可预测我不确定我可以测试一下.

我应该放弃一切,只是信任NHibernate吗?我不确定这是谨慎的.

sql-server tdd unit-testing

46
推荐指数
2
解决办法
5727
查看次数

Java中的时间测量开销

在低水平测量经过时间时,我可以选择使用以下任何一种:

System.currentTimeMillis();
System.nanoTime();
Run Code Online (Sandbox Code Playgroud)

两种方法都已实施native.在深入研究任何C代码之前,有没有人知道是否有任何大量的开销要求调用其中一个?我的意思是,如果我真的不关心额外的精度,那么预期哪个CPU耗时更少?

注意:我使用的是标准的Java 1.6 JDK,但问题可能对任何JRE都有​​效......

java timestamp overhead

45
推荐指数
5
解决办法
4万
查看次数

如何从表中创建以max值开头的Oracle序列?

尝试在Oracle中创建一个以特定表的最大值开头的序列.为什么这不起作用?

CREATE SEQUENCE transaction_sequence
  MINVALUE 0
  START WITH (SELECT MAX(trans_seq_no)
     FROM TRANSACTION_LOG) 
  INCREMENT BY 1
  CACHE 20;
Run Code Online (Sandbox Code Playgroud)

sql oracle sequence

43
推荐指数
6
解决办法
20万
查看次数

设置内联元素的宽度

您可以设置内嵌元素的宽度,例如<span>,<em><strong>,但在定位之前您不会注意到任何效果.

a)我认为内联元素的宽度不能设置?

b)假设可以设置宽度 - 在我们定位内联元素之前,我们不会注意到任何效果(因此我们指定的宽度).定位如何/在哪里?

c)为什么内联元素的宽度只有在我们"定位"它们时才会显现?

html css xhtml

43
推荐指数
4
解决办法
6万
查看次数

如何强制两个元素始终保持在<td>中的同一行

代码非常简单:

<table id="tabel_user" style="width: 100%; border: 0; background-color: white;" cellpadding="0" cellspacing="0">
<tr>
    <td style="border: 0; padding: 0; padding-left: 5px;">
        <label for="abcd"><input class="check_useri" id="abcd" name="abcd" type="checkbox" /> abcd </label>
    </td>
</tr>
</table> 
Run Code Online (Sandbox Code Playgroud)

它们整齐地保持在同一条线上,除非标签中的文字变得非常长并且桌子需要伸展以容纳它,然后文本有时会强制在复选框下面.我怎么能阻止它呢?

html css

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

SQL DATE与java.sql.Date中的时区

我对SQL DATE数据类型的行为感到有些困惑java.sql.Date.以下语句为例:

select cast(? as date)           -- in most databases
select cast(? as date) from dual -- in Oracle
Run Code Online (Sandbox Code Playgroud)

让我们用Java准备并执行该语句

PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setDate(1, new java.sql.Date(0)); // GMT 1970-01-01 00:00:00
ResultSet rs = stmt.executeQuery();
rs.next();

// I live in Zurich, which is CET, not GMT. So the following prints -3600000, 
// which is CET 1970-01-01 00:00:00
// ... or   GMT 1969-12-31 23:00:00
System.out.println(rs.getDate(1).getTime());
Run Code Online (Sandbox Code Playgroud)

换句话说,我绑定到语句的GMT时间戳成为我回来的CET时间戳.添加时区的步骤是什么?为什么?

注意:

  • 我已经观察到这对于任何这些数据库都是如此:

    DB2,Derby,H2,HSQLDB,Ingres,MySQL,Oracle,Postgres,SQL Server,Sybase ASE,Sybase SQL Anywhere

  • 我发现这对SQLite来说是假的(它实际上没有真正的DATE数据类型)
  • 当使用java.sql.Timestamp而不是使用时,所有这些都是无关紧要的 …

java sql timezone date jdbc

37
推荐指数
4
解决办法
4万
查看次数

参考文献对泛型不明确

我在这里有一个非常棘手的案例,有泛型和方法重载.看看这个示例类:

public class Test {
    public <T> void setValue(Parameter<T> parameter, T value) {
    }

    public <T> void setValue(Parameter<T> parameter, Field<T> value) {
    }

    public void test() {
        // This works perfectly. <T> is bound to String
        // ambiguity between setValue(.., String) and setValue(.., Field)
        // is impossible as String and Field are incompatible
        Parameter<String> p1 = getP1();
        Field<String> f1 = getF1();
        setValue(p1, f1);

        // This causes issues. <T> is bound to Object
        // ambiguity between setValue(.., Object) and setValue(.., Field) …
Run Code Online (Sandbox Code Playgroud)

java eclipse generics overloading javac

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