假设我在java中有一个方法,它在数据库中查找用户并返回他们的地址和他们所在的团队.
我想从方法中返回两个值,并且不希望将方法拆分为两个,因为它涉及数据库调用,并且拆分涉及调用次数的两倍.
鉴于中到大型软件项目的典型问题,最佳选择是什么?
whatGoesHere getUserInfo(String name) {
// query the DB
}
Run Code Online (Sandbox Code Playgroud)
我知道这个问题与现有的问题有些重复,但是每一个问题都有一些元素使得它与这个例子不同,我认为值得再次提问.
一些热点 JVM 标志,例如-XX:+PrintCompilation,会导致输出出现在 stdout 或 stderr 上。GC 相关的输出,例如由 -verbose:gc 启用的输出,可以使用 重定向-Xloggc:<path>,但我找不到任何方法重定向其他本机输出,除了重定向整个过程(出于某些原因,这可能是不可取的,例如以及捕获所有 System.out 输出)。
我正在尝试让Java 2D图形"hello world"继续进行,并且发现它非常困难(即,我正在使用谷歌搜索"java hello world example"的变体并且空出来).任何人都可以用最小的hellow世界示例来帮助我吗?
编辑
这是一个很好的起点,"Java教程:执行自定义绘画".
例如,给定结构S:
typedef struct {
int a, b;
} S;
Run Code Online (Sandbox Code Playgroud)
...以及一个带指针的方法S,我可以在一行中为它分配聚合初始值设定项1的值吗?这是我使用临时的现有解决方案:
void init_s(S* s) {
S temp = { 1, 2 };
*s = temp;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用C11.
1对于那些不了解我的问题的非常罕见的超级学生,因为不知何故"聚合初始化器"在这里不适用,因为LHS没有声明一个新对象,我的意思是"聚合初始化器一样的语法与括号和东西".
c compound-literals assignment-operator aggregate-initialization c11
如果使用std::atomic模板声明变量,例如std::atomic<int>,是否保证通过方法访问std::atomic将导致一致的值(即通过std::atomic方法写入的值),而不管顺序如何?
据我所知,这相当于询问读取或写入是否可以"撕裂" - 即在ISA级别可见的多个部分中写入或写入.
假设你有值rax,rdx你想加载到xmm寄存器中.
一种方法是:
movq xmm0, rax
pinsrq xmm0, rdx, 1
Run Code Online (Sandbox Code Playgroud)
虽然这很慢!有没有更好的办法?
考虑以下 x86 程序集:
; something that sets rax
mov rcx, [rdi]
xor rax, rcx
xor rax, rcx
Run Code Online (Sandbox Code Playgroud)
在序列末尾,rax的值与进入时的值相同,但从 CPU 的角度来看,它的值取决于从内存加载到 的值rcx。特别是,rax在该加载和两条指令完成之前,后续的使用不会开始xor。
有没有什么方法可以比双xor序列更有效地实现这种效果,例如,使用单个单微指令单周期延迟指令?如果某个常量值需要在序列之前设置一次(例如,有一个归零的寄存器),这是可以的。
在具有有理数的小学数学中,表达式(a / b) / c相当于a / (b * c)基本的代数操作.
/在C和大多数其他语言中截断整数除法时是否相同?也就是说,我可以用所有除数的乘积用一个除法代替一系列的除法吗?
你可以假设乘法不会溢出(如果是的话,显然它们不是等价的).
是否有任何整数2操作数x86-64指令仅将其第一个操作用作目标,而不用作源+目标1或仅源2,并且p0156在Intel Haswell和/或更高版本的CPU上运行?
对mov指令不感兴趣,即mov名称中的任何内容。
例如,BMI1 blsi eax, edx是2操作数,目标为只写,但只能在Skylake的端口1或端口5上执行。
1大多数指令都属于此类,例如,add eax, ebx代表eax = eax + ebx。
2少数2个操作数整数指令仅将其第一个操作数用作源,例如cmp eax, ebx。
Intel 有时使用MSR_MSR 名称的前缀,有时IA32_甚至对于相同的 MSR 也使用 。
例如,在 SNB 上,在SDM 第 4 卷中,它们记录了IA32_PERF_STATUS和MSR_PERF_STATUS对于 MSR 0x198,其位值有些不同(但不完全不一致1):
那是怎么回事?
1在版本中定义为保留的IA32位在版本中被赋予特定含义MSR。
x86 ×4
assembly ×3
java ×3
c ×2
intel ×2
c++ ×1
c11 ×1
coding-style ×1
concurrency ×1
debugging ×1
division ×1
jvm-hotspot ×1
math ×1
memory-model ×1
msr ×1
oop ×1
performance ×1
simd ×1
sse ×1
stdatomic ×1
sun ×1
swing ×1
x86-64 ×1