在Grails中的入门 - 2e,第42页(电子页面,而不是纸质页面)中,列出了以下示例.
class Race {
static constraints = {
name(blank:false, maxSize:50)
// NOTE: This doesn’t do
// what you think it does
startDate(min: new Date())
// And this is what we're supposed
// to be using:
// startDate(validator: {return (it > new Date())})
}
String name
Date startDate
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后建议读者使用startDate
上面注释的版本.引用的原因是:该static constraints
属性仅被评估一次(在服务器启动时),而我们的目的是在每个实例化和随后的验证中评估它Race
.
我的问题是:为什么name
约束的非闭包样式适用于每次验证尝试但不适用于startDate
约束?而且,相反,如果需要封闭口味startDate
,那么为什么它也不是必需的name
呢?
如果我正确理解上面的Groovy语法,似乎static constraint
块中列出的每个约束在语法上都是对函数的调用,该函数将各种验证属性作为一个Map
.现在,由于静态块将在服务器启动时进行评估(一次),因此两个函数调用也会在服务器启动时发生(一次),并且应该在非闭包形式中导致相同且一致的行为.不是吗?
在Perl 6中,如何在运行时从其体内获取函数/子例程的名称?
例如,
sub foo {
say "My name is: " ~ <WHAT-API-HERE??> ;
}
...
foo();
Run Code Online (Sandbox Code Playgroud)
上面的代码应该打印:
My name is: foo
Run Code Online (Sandbox Code Playgroud)
我查看了MOP,FAQ和Functions等地方.
我有一个ELF文件,我想将其反编译为C
代码,并对生成的C
代码进行简单的更改,然后将其重建为ELF。
反编译的C
代码不需要完全可读。例如,如果混淆了变量和函数名称,那就可以了。
我可以使用哪些工具在Linux上完成此任务?
PS:如果C
无法进行编译或不容易进行编译,尽管对汇编源进行调整对我来说非常困难,但我愿意考虑对汇编语言进行反编译。
更新:您可能会假设我正在使用以下C
程序来获取我的a.out
ELF。现在,进一步假设我已经失去了这个原始C
资料。所以,我现在想将其编译到(一个可能混淆),C
其中我至少能够改变像琴弦的小东西源"world"
,"Hello"
和"Bye"
,或能扭转感if
等语句
#include <stdio.h>
#include <string.h>
char buf[256];
const char *Hello = "Hello";
const char *Bye = "Bye";
const char *Who = "world";
char * greet(const char *greeting, const char *str) {
strcpy(buf, greeting);
strcat(buf, ", ");
strcat(buf, str);
strcat(buf, "!");
return buf;
}
int main(int argc, char *argv[]) {
int sayHello …
Run Code Online (Sandbox Code Playgroud) JDK 7文档对此有一个说法SoftReference
:
" 在虚拟机抛出OutOfMemoryError之前,保证可以清除对软可访问对象的所有软引用."
然而,在我的测试程序中,我看到的OutOfMemoryError
一致(除了"陌生人行为"一节):
// RefObjectTest.java
import java.util.*;
import java.lang.ref.*;
public class RefObjectTest {
public static void main(String[] args) {
ArrayList<byte[]> leaks = new ArrayList<>();
byte[] obj = new byte[10 * 1024 * 1024];
SoftReference<byte[]> ref = new SoftReference<>(obj);
// WeakReference is supposed to be eagerly GC'ed, but I see no
// difference in terms of program behavior: still get OOME.
//
// WeakReference<byte[]> ref = new WeakReference<>(obj);
obj = null; …
Run Code Online (Sandbox Code Playgroud) java garbage-collection weak-references out-of-memory soft-references
纯粹作为一种自学习练习,我正在尝试使用该Parse::RecDescent
模块在Perl中编写Java解析器.我稍后可能会使用Antlr,Bison等其他工具重新实现解析器.
但是,根据Java语言规范,我如何确保我的解析器确实生成了正确的解析?意义,正确处理悬空else
,操作员关联和优先等.
一种方法是通过让两个解析器为大量测试Java程序生成AST,然后比较两组AST来将我的解析器与已知的无错解析器进行比较.
如果这确实是唯一的方法,我在哪里可以找到一整套测试Java程序,完全覆盖整个Java语言规范?
我查看了JavaParser,但它似乎没有详尽的测试数据集.
当然,另一种方法是自己手工编写成千上万的测试Java程序,这对我来说是非常不切实际的,不仅在时间方面,而且在确保其详尽无遗!
是否有任何工具可以从 Java .class 文件中删除调试信息,就像/usr/bin/strip
可以从 Linux 上的 C/C++ 对象文件中删除一样?
编辑:我喜欢 Thilo 和 Peter Mmm 的回答:Peter 的回答很短,以至于暴露了我对 JDK 附带的内容的无知;Thilo 的 ProGuard 建议无论如何我肯定会检查它似乎提供的所有额外功能。谢谢蒂洛和彼得!
当反向代理主要用于负载平衡时,很明显为什么将请求路由到 N 个代理服务器池应该有助于平衡负载。
然而,一旦请求的服务器端计算完成并且是时候将响应分派回客户端,为什么单个反向代理服务器永远不会成为瓶颈?
我对反向代理概念的直观理解告诉我,
代理 N 个源服务器的反向代理服务器显然不会像涉及 N 个代理服务器的单服务器等价物的设置那样容易或早成为瓶颈,但它也会在某些时候成为瓶颈,因为所有 N 个代理服务器的响应都通过它。
也就是说,为了进一步延迟上述瓶颈点(避免到达),N 个代理服务器实际上应该“以某种方式”直接将响应分派给客户端,而不是通过位于前面的单个反向代理来完成他们。
我对反向代理概念的理解哪里有问题?也许第 2 点是根据定义不是反向代理服务器设置,但保留定义,为什么 #2 相对于反向代理选项不流行?
grep
诸如、sed
、awk
、 和 之类的命令行工具perl
允许执行文本搜索和替换操作。
但是,是否有任何工具允许我从命令行在 Java 代码库中执行语义搜索和替换操作?
例如,Eclipse IDE 允许我轻松地重命名变量、字段、方法或类。但我希望能够从命令行执行相同的操作。
上面的重命名操作只是一个示例。我还希望能够选择具有附加语义约束的替换文本,例如:
使用此类任意语义约束选择代码后,我希望能够对其进行任意转换。
所以,基本上,我需要访问代码的符号表。
问题:
以下命令在终端中以交互方式按预期工作.
$ find . -name '*.foo' -o -name '*.bar'
./a.foo
./b.bar
$
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,我就没有结果!
$ ftypes="-name '*.foo' -o -name '*.bar'"
$ echo $ftypes
-name '*.foo' -o -name '*.bar'
$ find . $ftypes
$
Run Code Online (Sandbox Code Playgroud)
我的理解是,在有机会跑之前,它$ftypes
会被扩展.在这种情况下,该方法也应该有效.bash
find
ftypes
这里发生了什么?
提前谢谢了.
PS:我需要动态构建一个文件类型列表(ftypes
上面的变量),以便find
稍后在脚本中给出.
我看到一个非常非常奇怪的行为与bash(RHEL 5.3版本3.2.25).
我有一个'Launcher'脚本执行以下操作(作为前台进程,在一个始终保持打开的终端中运行):
上面的想法主要是让A,C和两个B彼此通信,直到它们被用户杀死.(它们继续while sleep DURATION; do ... ; done
循环运行.)
问题:
完成上述3个步骤之后,当我ps -ef
从另一个终端窗口重复发出时,我有时会看到一些额外的,虚假的B实例(比如说B3,B4 ......)和/或有时会列出一个额外的,虚假的A实例!
这些额外的实例是暂时的 - 它们来自ps -ef
列表.
此外,这些虚假实例恰好是有效(或期望)过程的子项 - 而不是兄弟姐妹.例如,B3和B4将分别列出B1和B2作为其父级; 同样,假的A2会将A列为其父级!
现在,我PRETTY非常确信我是NO WAY从B内部产生的任何追加B的情况下,也没有任何一个实例从里面A.
那么,这里发生了什么?
提前谢谢了.
PS:我已经看到了一个类似的问题(多个虚假实例),一段时间回到cron作业的背景下,这些作业被设计成在初次首次发布时无限期地挂起.在这里,我会看到我的cron作业的多个实例,即使我有明确的逻辑来防止crond
启动任何其他实例(通过检查磁盘上是否存在锁定文件).而且,即使在这里,我也无法弄清楚问题.
$ ps -ejfH
UID PID PPID PGID SID C STIME TTY TIME CMD
root 28503 1 28474 11126 0 22:14 pts/1 00:00:31 /bin/bash A
root 28525 28503 28474 11126 0 22:14 pts/1 00:00:26 …
Run Code Online (Sandbox Code Playgroud) java ×4
bash ×2
linux ×2
.class-file ×1
background ×1
c ×1
closures ×1
command-line ×1
constraints ×1
elf ×1
find ×1
function ×1
grails ×1
groovy ×1
interactive ×1
javaparser ×1
jobs ×1
parsing ×1
perl6 ×1
refactoring ×1
sed ×1
strip ×1
testing ×1
toolkit ×1
transform ×1
validation ×1