小编maa*_*nus的帖子

为什么这种方法没有得到优化?

Java方法用于基准测试以模拟慢速计算:

static int slowItDown() {
    int result = 0;
    for (int i = 1; i <= 1000; i++) {
        result += i;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这是恕我直言,这是一个非常糟糕的主意,因为它的身体可以被取代return 500500.这似乎永远不会发生1 ; 可能是因为这样的优化与Jon Skeet所说的实际代码无关.

有趣的是,一个稍微简单的方法result += 1;得到了完全优化(卡尺报告0.460543 ns).

但即使我们同意优化离开返回常量结果的方法对于实际代码也没用,但仍然存在循环展开,这可能会导致像

static int slowItDown() {
    int result = 0;
    for (int i = 1; i <= 1000; i += 2) {
        result += 2 * i + 1;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题仍然存在:为什么这里没有进行优化?

1与我最初写的相反; 我必须看到一些不存在的东西.

java compiler-optimization guava

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

在无辜改变一个简单的程序后奇怪的性能下降

想象一下,您想要计算给定char[]包含的非ASCII字符数.想象一下,表演真的很重要,所以我们可以跳过我们最喜欢的口号.

最简单的方法显然

int simpleCount() {
    int result = 0;
    for (int i = 0; i < string.length; i++) {
        result += string[i] >= 128 ? 1 : 0;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

然后你认为许多输入都是纯ASCII,并且单独处理它们可能是个好主意.为简单起见,假设您只是写这个

private int skip(int i) {
    for (; i < string.length; i++) {
        if (string[i] >= 128) break;
    }
    return i;
}
Run Code Online (Sandbox Code Playgroud)

这种简单的方法可以用于更复杂的处理,在这里它不会造成任何伤害,对吧?所以让我们继续

int smartCount() {
    int result = 0;
    for (int i = skip(0); i < string.length; i++) {
        result += string[i] >= …
Run Code Online (Sandbox Code Playgroud)

java performance

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

Java可以使用无符号比较进行一般范围内测试吗?

我已经见过该JITC使用用于检查数组边界(所述测试符号比较0 <= x < LIMIT相当于0 ? LIMIT其中?把数字视为无符号数量).所以我很好奇它是否适用于任意形式的比较0 <= x < LIMIT.

结果我的基准是相当混乱.我已经创建了三个表单实验

for (int i=0; i<LENGTH; ++i) {
    int x = data[i];
    if (condition) result += x;
}
Run Code Online (Sandbox Code Playgroud)

条件不同

  • 0 <= xabove
  • x < LIMITbelow
  • 0 <= x && x < LIMITinRange
  • 0 <= x & x < LIMITinRange2

并准备数据,使条件成立的概率相同.

结果应该非常相似,above因为它与零相比可能略快一些.即使JITC无法使用无符号比较进行测试,结果abovebelow应该相似.

谁能解释一下这里发生了什么?我做错了很可能...... …

java performance unsigned

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

如何使用angularjs处理文件下载错误?

下载文件看起来非常简单,有许多工作解决方案.工作直到服务器说401 UNAUTHORIZED.我的要求很自然:

  • 在任何情况下都不能替换当前窗口.
  • 我不想打开一个新窗口,因为它没有任何意义.
  • 如果出现错误,必须向用户显示一些消息.

我尝试使用an iframe作为链接的目标,并希望在出现错误时收到通知.我觉得我很天真.

  • 我可以想象在iframe中放置一些脚本来通知主页面onunload.它看起来有点复杂,所以我先问一下.
  • 我可以向服务器询问结果.不管怎么说,这肯定会起作用.但它也很复杂,因为时间问题并且会话已经过期,所以我不得不绕过这个.

javascript iframe download angularjs

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

从Gradle运行后台作业

我创建了一个任务,开始像这样的远程工作

task mytask(type: Exec) {
    commandLine 'ssh'
    args '-f -l me myserver ./start'.split(' ')
}
Run Code Online (Sandbox Code Playgroud)

并且它有效,但是,它似乎在等待作业终止。但是它永远不会终止,也不会终止。

在命令行中执行相同的操作是有效的:由于进行了-f切换,因此ssh命令在后台执行。

我尝试将'>&' /dev/null(csh stdout和stderr redirect)添加到命令行,但是没有成功。同样显而易见的&是什么也没做。我还将命令行提取到脚本中,并且始终相同:Gradle等待终止。

我已经通过使用脚本并在脚本中同时重定向stdout和stderr来解决了该问题。我的问题来自于令人困惑的重定向……通过传递,'>&' /dev/null我重定向了远程计算机上的流,但是需要的是在本地计算机上进行重定向(即,不将重定向操作符放在引号中)。

background-process gradle

5
推荐指数
2
解决办法
7720
查看次数

如何确定给定div中的某些内容是否具有焦点?

使用angularjs,我正在显示这样的2级列表

- first main item
  - first subitem of the first main item
  - second subitem of the first main item
  - AN EMPTY ITEM AS PLACEHOLDER TO ENTER THE NEXT SUBITEM
- second main item
  - first subitem of the second main item
  - second subitem of the second main item
  - AN EMPTY ITEM AS PLACEHOLDER TO ENTER THE NEXT SUBITEM
Run Code Online (Sandbox Code Playgroud)

为了节省空间,我只想在相应的任何东西div都有焦点的情况下展示PLACEHOLDER ,这样只有一个这样的占位符.我知道有ngFocus,但我更喜欢比创建大量事件处理程序更简单的东西.也许是这样的:

<div ng-focus-model="mainItem.hasFocus" ng-repeat="mainItem in list">
   ... main item line
   ... all …
Run Code Online (Sandbox Code Playgroud)

focus angularjs

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

显式Hibernate连接表

我有一个M:N relationsship喜欢这里,除了那有一些信息是与相关联的AuthorBook实体.所以我想,我不需要@JoinTable在所有的,应该建立一个class AuthorBook由一个链接到每个AuthorBook和附加信息,对不对?

我试过了

@Entity
public class AuthorBook {
    @Id @ManyToOne Author author;
    @Id @ManyToOne Book book;
    @LobOrWhatever AdditionalInformation additionalInformation;
}
Run Code Online (Sandbox Code Playgroud)

我遇到了问题(我不记得了).所以我介绍了一个@GeneratedId int id并更改了引用@NaturalId.这个作品大多良好,但好笑,它迫使我通过连接AuthorBookSession#byNaturalId这是没有意义的我(我有识别码与实体应取在一起).我也试过了

session.byNaturalId(AuthorBook.class)
     .using("author.id", someAuthorId)
     .using("book.id", someBookId)
     .load();
Run Code Online (Sandbox Code Playgroud)

但这被拒绝告诉我"author.id"不是自然的id(实际上这是真的,因为自然id是"作者",但它的"id"同样有效).

看着网络,我发现每个人都在这样的表中使用id而不是实体,所以我想知道我是不是在尝试一些不可能的东西....(或者是愚蠢的).

java many-to-many hibernate

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

安全的git rebase

很多时候,在处理一件事情时,我会发现一些不相关的代码中的丑陋,修复它并单独提交.通常,有多个这样的提交,因为我后来发现类似的问题.

最后,我重新定义(重新排序和压缩),以便提交更有意义.有时候,我会遇到合并冲突,有时候生成的工作树与变基前的工作树不同.

  • 即使没有冲突,也会出现这种差异吗?
  • 当差异发生时,有没有办法得到(巨大的闪烁)警告?

git rebase

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

保留单独的keydown事件可用于焦点后代

我有一个(自制)表,有几个物理行和许多逻辑行,我想用键盘滚动(也).如果一个后代被聚焦,它理解了键,我希望事件由后代处理并被我的表忽略.

也许代码说清楚了:

scroll.keydown = function(e) {
    if (e.shiftKey | e.controlKey | e.altKey) return;
    var isText = e.target.type === "text";
    var K = $.ui.keyCode;
    switch (e.keyCode) {
    case K.HOME: if (isText) return; scroll.move(-1000000); break;
    case K.END: if (isText) return; scroll.move(+1000000); break;
    case K.PAGE_UP: scroll.move(-10); break;
    case K.PAGE_DOWN: scroll.move(+10); break;
    case K.UP: scroll.move(-1); break;
    case K.DOWN: scroll.move(+1); break;
    default: return;
    }
    e.preventDefault();
};


<table tabindex="0" ng-keydown="scroll.keydown($event)" ...>
      ... <input ...>
Run Code Online (Sandbox Code Playgroud)

它工作得很完美,但它非常愚蠢:表知道它包含input元素,并且它知道这样的元素可以利用例如HOME密钥,所以它做了一个测试,不管它.

那是非常错的.现在,我添加了一个select …

html javascript jquery keydown angularjs

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

可靠地跟踪Hibernate所做的更改

我正在使用PostUpdateEventListener注册的via

registry.appendListeners(EventType.POST_COMMIT_UPDATE, listener)
Run Code Online (Sandbox Code Playgroud)

以及其他一些听众,以便跟踪Hibernate所做的更改.这很好用,但是,我看到一个问题:

比方说,对于跟踪一些amount通过id,我简单地执行

 amountByIdConcurrentMap.put(id, amount);
Run Code Online (Sandbox Code Playgroud)

在每一个POST_COMMIT_UPDATE(让我们忽略其他操作).问题是这个调用在提交后的某个时间发生.因此,两个提交一个接一个地写一个相同的实体,我可以以错误的顺序接收事件,最终amount存储旧的.

  • 这真的有可能还是以某种方式同步操作?
  • 有没有办法如何预防或至少检测到这种情况?

java concurrency hibernate transactions

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