小编el *_*gli的帖子

CompletableFuture runAsync vs supplyAsync,什么时候选择一个?

选择其中之一的理由是什么?阅读文档后我可以推断出的唯一区别是 runAsync 将 Runnable 作为输入参数,而 supplyAsync 将供应商作为输入参数。

这篇stackoverflow 帖子讨论了使用带有 supplyAsync 方法的供应商背后的动机,但它仍然没有回答何时选择一个而不是另一个。

java asynchronous java-8 completable-future

15
推荐指数
1
解决办法
9064
查看次数

在Python 3中使用按位运算添加两个整数时的无限循环

我试图解决一个问题,即编写python代码以添加两个整数而不使用'+'或' - '运算符.我有以下代码,它适用于两个正数:

def getSum(self, a, b):

    while (a & b):
        x = a & b
        y = a ^ b
        a = x << 1
        b = y

    return a ^ b
Run Code Online (Sandbox Code Playgroud)

如果输入是两个正整数或两个负整数,那么这段代码就可以完美地工作,但是当一个数字为正数而另一个数字为负数时,它会失败.它进入无限循环.知道为什么会这样吗?

python bit-manipulation bitwise-operators python-3.x

5
推荐指数
1
解决办法
545
查看次数

CompletableFuture 异常处理 runAsync &amp; thenRun

假设我有这个示例代码并且在runAsync. 我的问题是这个异常是否会阻止在thenRunthenRun此代码的调用方方法相同的线程中运行时被执行。

private void caller() {
    CompletableFuture.runAsync(() -> {
          try {
              // some code
          } catch (Exception e) {
              throw new CustomException(errorMessage, e);
          }
         }, anInstanceOfTaskExecutor).thenRun(
         // thenRun code
     ));
}
Run Code Online (Sandbox Code Playgroud)

我已经浏览了这个线程,它解释了如何处理从异步块抛出的异常(即通过阻塞和使用join)。我想知道thenRun如果CompletableFuture completesExceptionally.

更新

我运行了一些代码来测试这个:

CompletableFuture.runAsync(() -> {
      List<Integer> integerList = new ArrayList<>();
      integerList.get(1);    // throws exception
    }).thenRun(() -> {
      System.out.println("No exception occurred");
    });
Run Code Online (Sandbox Code Playgroud)

它不打印任何内容,这意味着异常不会从异步块“传播到/到达”调用方方法的线程。我现在了解这里的预期行为,但我有以下问题:

  1. 为什么即使 CompletableFuture 完成异常,它也会默默失败?
  2. 它在后台如何工作?
  3. 是不是因为这两个线程(调用者的线程和异步线程)都有自己的堆栈空间?

java asynchronous exception java-8 completable-future

5
推荐指数
2
解决办法
5453
查看次数

Python:自定义可变类可以用作字典的键吗?

假设我们有一个像这样的自定义节点类:

class Node:
    def __init__(self, val, next, random):
        self.val = val
        self.next = next
        self.random = random
Run Code Online (Sandbox Code Playgroud)

我有一个节点对象,我想将其用作字典的键。
我的理解是,一个对象应该是不可变和可哈希的,才能可靠地用作字典键,因为可变对象可能会导致哈希值发生变化,并且该对象是可变的。

我知道 python 确实允许将自定义可变对象用作字典键,这是如何工作的?

更新:引用的链接不涉及自定义对象的可变性方面。他们只是提供了一种方法来覆盖哈希函数的默认实现。这个问题应该重新打开,因为它与引用的“重复”问题不同。

答案:自定义可变对象的哈希方法的默认实现使用identity,它保证在对象的生命周期内是唯一且恒定的。可变的自定义对象不应该覆盖哈希函数的默认实现。下面提供了更详细的答案。

hashtable hashmap networkx python-3.x

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

什么时候`string.swapcase().swapcase()` 不等于`string`?

str.swapcase() 方法的文档说:

返回字符串的副本,其中大写字符转换为小写,反之亦然。请注意, s.swapcase().swapcase() == s 不一定正确

我想不出一个例子s.swapcase().swapcase() != s,谁能想到一个?

python string character character-encoding python-3.x

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

重叠子问题和最优子结构有什么区别?

我了解两种方法的目标方法,其中最优子结构根据输入 n 计算最优解,而重叠子问题针对输入范围内的所有解,比如从 1 到 n。

对于像杆切割问题这样的问题。在这种情况下,在找到最佳切割时,我们是否考虑每个切割,因此可以将其视为重叠子问题并自下而上地工作。或者我们是否考虑给定输入 n 的最佳切割并自上而下工作。

因此,虽然他们最终确实处理了最优性,但两种方法之间的确切区别是什么。

我尝试参考这个重叠子问题最优子结构这个页面

另外,这是否与制表(自上而下)和记忆(自下而上)的解决方法有关?

这个线程提出了一个有效的观点,但我希望它可以更容易地分解。

dynamic-programming overlapping

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

为什么当 maxsize 是 2 的幂时 python lru_cache 性能最好?

文档是这样说的:

如果 maxsize 设置为 None,则禁用 LRU 功能,缓存可以无限制地增长。当 maxsize 是 2 的幂时,LRU 功能表现最佳。

有人会碰巧知道这个“二的幂”从何而来?我猜它必须对实现做些什么。

caching lru python-3.x

3
推荐指数
2
解决办法
1845
查看次数

Python N-Queen 解决方案说明

我正在从编程面试的元素,递归一章中为 n-queen 问题解决这个非常巧妙的解决方案,但似乎无法理解特定的代码段。如果有人可以解释这里的逻辑,那将非常有帮助。如果检查冲突的条件是我试图在这里解决问题但没有成功。

def n_queens(n: int) -> List[List[int]]:
    def solve_n_queens(row):
        if row == n:
            # All queens are legally placed.
            result.append(col_placement.copy())
            return
        for col in range(n):
            # Test if a newly place queen will conflict any earlier queens place before
            # I am struggling to make sense of this if condition
            if all(abs(c - col) not in (0, row - i)
                for i, c in enumerate(col_placement[:row])):
                    col_placement[row] = col
                    solve_n_queens(row + 1)

    result: List[List[int]] = []
    col_placement = [0] * …
Run Code Online (Sandbox Code Playgroud)

recursion backtracking n-queens python-3.x

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