如果V的运行时类型是与(§5.2)try语句的任何catch子句的可捕获异常类兼容的赋值,则选择第一个(最左边)这样的catch子句.
什么是最左边的?我们从上到下放置catch子句,例如:
try{ }
catch(IndexOutOfBoundException e){ }
catch(SQLException e){ }
catch(NullPointerException e){ }
//etc
Run Code Online (Sandbox Code Playgroud) 我正在阅读关于构造函数的JLS,并且遇到了以下内容:
如果构造函数体不以显式构造函数调用开头,并且声明的构造函数不是 原始类Object的一部分
事情是我无法想象如何声明构造函数可以成为类Object的一部分?你能提供一个例子吗?
我有方面:
public aspect TestAspect {
pointcut publicMethodExecuted(): execution(public !static * *(..));
int around() : publicMethodExecuted() {
//I need parameters values here
//to write their to log
int original_return_value = proceed();
return original_return_value * 100;
}
}
Run Code Online (Sandbox Code Playgroud)
如何获取调用该方法的参数?我需要将它们写入日志文件.
我最感兴趣的是当地人AspectJ,而不是反思.
Java 7
我有一个界面:
public interface MyInt{
public Map<String, WhereClause> createClauses(Parameters<Object> params);
}
Run Code Online (Sandbox Code Playgroud)
以及它的一些实施:
public class MyImpl implements MyInt{
@Override
public Map<String, WhereClause> createClauses(Parameters<Object> p) { //1
//return some
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以将其返回类型设置为通用.我试过这个:
public interface MyInt <T extends SomeType>{
public Map<String, ? extends WhereClause> createClauses(Parameters<Object> params);
}
Run Code Online (Sandbox Code Playgroud)
但是我在实现中得到了编译时错误//1:
The method createClauses(Parameters<Object>) of type `MyImpl` must
override or implement a supertype method
Run Code Online (Sandbox Code Playgroud)
但是当我删除Generification时,实现编译得很好.
为什么即使不使用,也会影响编译type parameter.
我编写了以下简单示例来了解map方法的工作原理:
object Main{
def main (args : Array[String]) = {
val test = "abc"
val t = Vector(97, 98, 99)
println(test.map(c => (c + 1))) //1 Vector(98, 99, 100)
println(test.map(c => (c + 1).toChar)) //2 bcd
println(t.map(i => (i + 1))) //3 Vector(98, 99, 100)
println(t.map(i => (i + 1).toChar)) //4 Vector(b, c, d)
};
}
Run Code Online (Sandbox Code Playgroud)
我不太明白为什么要打印bcd //2.因为每个String都被Scala视为Seq我认为test.map(c => (c + 1).toChar)应该生成另一个Seq.如//1建议Vector(b, c, d).但正如你所看到的,它没有.为什么?它是如何实际工作的?
在求职面试中,我被问到以下问题:
我们有一个客户端应用程序可以发送请求并接收一个int数据流(可能很大,但小于INT_MAX).我们需要这样做:
Int Data ----> Our ----> Sorted Int Data
Stream App Data Stream
Run Code Online (Sandbox Code Playgroud)
所以我会按如下方式编写方法:
public int[] sort(int[] array){
Arrays.sort(array);
return array;
}
Run Code Online (Sandbox Code Playgroud)
问题是大的 array不能装入堆栈并将被放入堆中,这会降低性能.如何以良好的性能重构它?
我正在尝试使用sys_brksyscall 在Linux中分配一些内存。这是我尝试过的:
BYTES_TO_ALLOCATE equ 0x08
section .text
global _start
_start:
mov rax, 12
mov rdi, BYTES_TO_ALLOCATE
syscall
mov rax, 60
syscall
Run Code Online (Sandbox Code Playgroud)
事情是按照linux调用约定,我希望返回值在rax寄存器中(指向已分配内存的指针)。我在gdb中运行了此文件,并在进行了sys_brksyscall 后注意到以下寄存器内容
在系统调用之前
rax 0xc 12
rbx 0x0 0
rcx 0x0 0
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
Run Code Online (Sandbox Code Playgroud)
系统调用后
rax 0x401000 4198400
rbx 0x0 0
rcx 0x40008c 4194444 ; <---- What does this value mean?
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
Run Code Online (Sandbox Code Playgroud)
rcx在这种情况下,我不太了解寄存器中的值。哪个指针可以用作我分配给它的8个字节的开头的指针sys_brk?
我写了以下非常简单的测试:
import scala.collection.immutable.HashSet
class Test {
def m() = {
var s = new HashSet[Int]
s = s + 1
}
}
Run Code Online (Sandbox Code Playgroud)
并想通了它编译成这段代码:
public class Test {
public void m();
Code:
0: new #12 // class scala/collection/immutable/HashSet
3: dup
4: invokespecial #15 // Method scala/collection/immutable/HashSet."<init>":()V
7: astore_1
8: aload_1
9: iconst_1
10: invokestatic #21 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
13: invokevirtual #25 // Method scala/collection/immutable/HashSet.$plus:(Ljava/lang/Object;)Lscala/collection/immutable/HashSet;
16: astore_1
17: return
public Test();
Code:
0: aload_0
1: invokespecial #30 // Method java/lang/Object."<init>":()V
4: return …Run Code Online (Sandbox Code Playgroud) 我知道async_profiler工具很棒,我用它来分析我的生产项目。在这里我想了解perf以及如何理解它的输出。
我正在使用 perf 来采样堆栈跟踪。我使用选项运行 JVM-XX:+UnlockDiagnosticVMOptions -XX:+PreserveFramePointer -XX:+ShowHiddenFrames以避免堆栈跟踪混乱。
我使用命令运行它,sudo perf record -e cycles -g -p <my_pid>以便对用户和内核堆栈跟踪进行采样并比较结果百分比。这是我得到的:
这个start_thread符号对我来说似乎很清楚。它们来自libjvm.so,我可以假设我运行 3 个工作线程来完成一些工作,这正是我在这里看到的。十六进制数字似乎是运行时编译的java代码指令地址。
问题:但是它从哪里来perf-27405.map以及为什么它出现在顶部。
我是VSCode的新手,这个问题看起来很傻。但我希望能够将编辑器窗口设为全屏。
我的意思是,我通常有两个带有代码的垂直拆分窗口,这对于不使用资源管理器终端和所有其他栏(仅代码)进行全屏缩放很有用。
我的意思是最初我有以下内容:
但我想配置一个快捷方式,使活动窗口全屏显示如下:
就像F11,关闭资源管理器,并合并拆分。一直手工做是很麻烦的。