小编gai*_*nco的帖子

计算机程序运行时会发生什么?

我知道一般理论,但我不能适应细节.

我知道程序驻留在计算机的辅助内存中.程序开始执行后,它将完全复制到RAM中.然后处理器一次检索一些指令(它取决于总线的大小),将它们放入寄存器并执行它们.

我也知道计算机程序使用两种内存:堆栈和堆,它们也是计算机主存储器的一部分.堆栈用于非动态内存,堆用于动态内存(例如,与newC++中的运算符相关的所有内容)

我无法理解的是这两件事是如何联系起来的.用于执行指令的堆栈在什么时候?指令从RAM,堆栈到寄存器?

c++ memory x86 operating-system computer-architecture

176
推荐指数
4
解决办法
2万
查看次数

在Java中使用可选的Streams

我试图重构旧代码以使用流,我的第一个方法是这样的:

public void run() throws IOException {
   Files.list(this.source)
        .filter(Images::isImage)
        .map(Image::new)
        .filter(image -> image.isProportional(this.height, this.width))
        .map(image -> image.resize(this.height, this.width))
        .forEach(image -> Images.write(image, this.destination));
}
Run Code Online (Sandbox Code Playgroud)

这不是编译,因为新的Image()和Images.write()抛出IOExceptions.

使用UncheckedIOException包装这些异常将不起作用,因为如果其中一个失败,我不想阻止处理其他图像.

所以我结束了写2个私有方法:

private Optional<Image> createImage(Path imagePath) {
    try {
        return Optional.of(new Image(imagePath));
    } catch (IOException e) {
        return Optional.empty();
    }
}

private void write(Image image) {
    try {
        Images.write(image, this.destination);
    } catch (IOException e) {
        // log error
    }
}
Run Code Online (Sandbox Code Playgroud)

createImage()返回一个Optional,因为这看似合理.但是在此之后我的代码变得非常难看:

public void run() throws IOException {
    Files.list(source)
         .filter(Images::isImage)
         .map(this::createImage)
         .filter(image -> image.isPresent() && image.get().isProportional(this.height, this.width)) …
Run Code Online (Sandbox Code Playgroud)

java optional java-8 java-stream

8
推荐指数
1
解决办法
1万
查看次数

在Scala中的命名参数中不能使用负数

我正在使用Scala 2.11.2.

如果我有这个Fraction类:

case class Fraction(numerator: Int, denominator: Int) {}
Run Code Online (Sandbox Code Playgroud)

然后这给出了一个错误:

val f = new Fraction(numerator=-1, denominator=2)
Run Code Online (Sandbox Code Playgroud)

但这不是:

val f = new Fraction(-1, denominator=2)
Run Code Online (Sandbox Code Playgroud)

错误消息是:

Multiple markers at this line
- not found: value 
 numerator
- not found: value 
 numerator
Run Code Online (Sandbox Code Playgroud)

我尝试在其他片段中使用负数而得到相同的结果,但文档中没有提到这是不可能的.

难道我做错了什么?

谢谢

scala named-parameters

6
推荐指数
1
解决办法
1247
查看次数

每个不可变的班级应该是最终的吗?

我正在设计一个用于二十一点游戏的Card类.

我的设计是使用getValue()创建一个Card类,例如返回J为11,Q为12,K为13,然后使用BlackjackCard类扩展它以覆盖该方法,以便这些卡返回10.

然后有些东西击中了我:Card类的对象应该是不可变的.所以我重新阅读了Effective Java 2nd Edition,看看该做什么,我发现不可变类需要是最终的,以避免子类打破不变性.

我也看过互联网,每个人似乎都同意这一点.

Card类应该是最终的吗?

你如何打破这个类的不变性,扩展它:

class Card {
  private final Rank rank;
  private final Suit suit;
  public Card(Rank rank, Suit suit) {
    this.rank = rank;
    this.suit = suit;
  }
  public Rank getRank() {
    return rank;
  }
  public Suit getSuit() {
    return suit;
  }
  public int getValue() {
    return rank.getValue();
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java final immutability

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

在构造函数上注入 java.util.Random

我有一个带有此构造函数的 HiddenNumber 类:

\n\n
public HiddenNumber(java.util.Random random, int maxNumberOfDigits) {\n  /* some code */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

I\xc2\xb4m 尝试使用 DI 注释:

\n\n
@Autowired\npublic HiddenNumber(@Value("T(java.util.Random") random, \n    @Value("4")int maxNumberOfDigits) {\n  /* some code */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这不起作用。我也尝试过:

\n\n
@Autowired\npublic HiddenNumber(@Value("#{T(java.util.Random}") random, \n    @Value("4")int maxNumberOfDigits) {\n  /* some code */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我做:

\n\n
@Autowired\npublic HiddenNumber(Random random, @Value("4") int maxNumberOfDigits) {\n  /* some code */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

并在 app-context.xml 中执行以下操作:

\n\n
<bean class="java.util.Random" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

工作正常。但当然我更喜欢只做注释。

\n\n

注入 java.util.Random 的正确方法是什么?

\n\n

谢谢。

\n

java spring code-injection

3
推荐指数
1
解决办法
3710
查看次数

用流编写嵌套循环

我曾经写过这样的函数的替代品:

 int[][] createMatrix(int height, int width) {
   int[][] matrix = new int[height][width];
   for (int i = 0; i < height; ++i) {
      for (int j = 0; j < width; ++j) {
         matrix[i][j] = i * width + j;
      }
   }
   return matrix;
}
Run Code Online (Sandbox Code Playgroud)

但现在,我发现自己再也无法做到了.如何重构代码以在Java 8中使用流?

functional-programming java-8 java-stream

0
推荐指数
1
解决办法
1001
查看次数