小编St.*_*rio的帖子

"最左边"在该定义中意味着什么?

JLS在14.20.1说:

如果V的运行时类型是与(§5.2)try语句的任何catch子句的可捕获异常类兼容的赋值,则选择第一个(最左边)这样的catch子句.

什么是最左边的?我们从上到下放置catch子句,例如:

try{ }
catch(IndexOutOfBoundException e){ }
catch(SQLException e){ }
catch(NullPointerException e){ }
//etc
Run Code Online (Sandbox Code Playgroud)

java exception

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

构造函数,它是Object类的一部分

我正在阅读关于构造函数的JLS,并且遇到了以下内容:

如果构造函数体不以显式构造函数调用开头,并且声明的构造函数不是 原始类Object的一部分

事情是我无法想象如何声明构造函数可以成为类Object的一部分?你能提供一个例子吗?

java constructor

4
推荐指数
1
解决办法
43
查看次数

如何获取方法参数的值?

我有方面:

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 methods aspectj

4
推荐指数
1
解决办法
1198
查看次数

接口的泛化会导致编译错误

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.

java generics

4
推荐指数
1
解决办法
109
查看次数

了解Scala中的字符串和map方法

我编写了以下简单示例来了解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).但正如你所看到的,它没有.为什么?它是如何实际工作的?

string dictionary scala

4
推荐指数
1
解决办法
167
查看次数

如何对大量的int进行排序?

在求职面试中,我被问到以下问题:

我们有一个客户端应用程序可以发送请求并接收一个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不能装入堆栈并将被放入堆中,这会降低性能.如何以良好的性能重构它?

java arrays

4
推荐指数
1
解决办法
1395
查看次数

为什么x86-64 Linux系统调用会修改RCX,值是什么意思?

我正在尝试使用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

linux assembly x86-64 system-calls

4
推荐指数
1
解决办法
1229
查看次数

为什么scalac盒子Int?

我写了以下非常简单的测试:

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)

int scala

4
推荐指数
1
解决办法
58
查看次数

了解 perf.map

我知道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以及为什么它出现在顶部。

java linux jvm perf

4
推荐指数
1
解决办法
3760
查看次数

是否可以在VSCode中创建全屏编辑器?

我是VSCode的新手,这个问题看起来很傻。但我希望能够将编辑器窗口设为全屏。

我的意思是,我通常有两个带有代码的垂直拆分窗口,这对于不使用资源管理器终端和所有其他栏(仅代码)进行全屏缩放很有用。

我的意思是最初我有以下内容:

在此处输入图片说明

但我想配置一个快捷方式,使活动窗口全屏显示如下:

在此处输入图片说明

就像F11,关闭资源管理器,并合并拆分。一直手工做是很麻烦的。

visual-studio-code

4
推荐指数
3
解决办法
7300
查看次数