此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与我最初写的相反; 我必须看到一些不存在的东西.
想象一下,您想要计算给定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) 我已经见过该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 <= x 叫 abovex < LIMIT 叫 below0 <= x && x < LIMIT 叫 inRange0 <= x & x < LIMIT 叫 inRange2并准备数据,使条件成立的概率相同.
结果应该非常相似,above因为它与零相比可能略快一些.即使JITC无法使用无符号比较进行测试,结果above也below应该相似.
谁能解释一下这里发生了什么?我做错了很可能...... …
下载文件看起来非常简单,有许多工作解决方案.工作直到服务器说401 UNAUTHORIZED.我的要求很自然:
我尝试使用an iframe作为链接的目标,并希望在出现错误时收到通知.我觉得我很天真.
onunload.它看起来有点复杂,所以我先问一下.我创建了一个任务,开始像这样的远程工作
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我重定向了远程计算机上的流,但是需要的是在本地计算机上进行重定向(即,不将重定向操作符放在引号中)。
使用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) 我有一个M:N relationsship喜欢这里,除了那有一些信息是与相关联的AuthorBook实体.所以我想,我不需要@JoinTable在所有的,应该建立一个class AuthorBook由一个链接到每个Author与Book和附加信息,对不对?
我试过了
@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.这个作品大多良好,但好笑,它迫使我通过连接Author和Book到Session#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而不是实体,所以我想知道我是不是在尝试一些不可能的东西....(或者是愚蠢的).
很多时候,在处理一件事情时,我会发现一些不相关的代码中的丑陋,修复它并单独提交.通常,有多个这样的提交,因为我后来发现类似的问题.
最后,我重新定义(重新排序和压缩),以便提交更有意义.有时候,我会遇到合并冲突,有时候生成的工作树与变基前的工作树不同.
我有一个(自制)表,有几个物理行和许多逻辑行,我想用键盘滚动(也).如果一个后代被聚焦,它理解了键,我希望事件由后代处理并被我的表忽略.
也许代码说清楚了:
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 …
我正在使用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 ×5
angularjs ×3
hibernate ×2
javascript ×2
performance ×2
concurrency ×1
download ×1
focus ×1
git ×1
gradle ×1
guava ×1
html ×1
iframe ×1
jquery ×1
keydown ×1
many-to-many ×1
rebase ×1
transactions ×1
unsigned ×1