小编Kir*_*ill的帖子

为什么 dig 不能通过 dns 名称解析 K8s 服务,而 nslookup 却没有问题?

以下是重现步骤:

minikube start
kubectl run nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=ClusterIP

kubectl run -i --tty --rm alpine --image=alpine --restart=Never -- sh
apk add --no-cache bind-tools
Run Code Online (Sandbox Code Playgroud)

现在让我们尝试查询 kibe-dns 的nginx服务

nslookup

/ # nslookup nginx.default 10.96.0.10
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   nginx.default.svc.cluster.local
Address: 10.97.239.175
Run Code Online (Sandbox Code Playgroud)

dig

dig nginx.default @10.96.0.10 any

; <<>> DiG 9.11.3 <<>> nginx.default @10.96.0.10 any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46414
;; flags: …
Run Code Online (Sandbox Code Playgroud)

nslookup dig kubernetes kube-dns kubernetes-service

14
推荐指数
2
解决办法
3114
查看次数

由于Java 9 HashMap.computeIfAbsent()在尝试memoize递归函数结果时抛出ConcurrentModificationException

今天我从一些JS课程中学到了什么是memoization并尝试用Java实现它.我有一个简单的递归函数来评估第n个Fibonacci数:

long fib(long n) {
    if (n < 2) {
        return n;
    }

    return fib(n - 1) + fib(n - 2);
}
Run Code Online (Sandbox Code Playgroud)

然后我决定使用HashMap来缓存递归方法的结果:

private static <I, O> Function<I, O> memoize(Function<I, O> fn) {
    final Map<I, O> cache = new HashMap<>();
    return in -> {
        if (cache.get(in) != null) {
            return cache.get(in);
        } else {
            O result = fn.apply(in);
            cache.put(in, result);
            return result;
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

这按照我的预期工作,它允许我fib()像这样记忆memoize(this::fib)

然后,我用Google搜索记忆化的Java中的主题,发现了一个问题:Java的记忆化方法,其中computeIfAbsent提出比我的条件表达式短得多.

所以我期望工作的最终代码是:

public class FibMemo {
    private …
Run Code Online (Sandbox Code Playgroud)

java recursion concurrenthashmap java-9

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

Bitbucket和GitHub是否有正在进行的工作[WIP]拉取请求功能?

我知道GitLab上有一个正在进行工作(WIP)合并请求功能.当你想要向同行展示代码并希望阻止按下"接受"按钮时,我发现它非常有用.Bitbucket有类似的功能吗?试图[WIP]在Bitbucket中使用Pull Request名称上的前缀,但它没有成功.

我也很好奇GitHub是否也有类似的功能,或者你的浏览器还需要一个插件

git github bitbucket

10
推荐指数
2
解决办法
5435
查看次数

尝试通过前缀删除所有键并重新放入时,在txn请求中给出重复键

尝试coreos/jetcd用于etcd从Java代码更新haproxy设置.

我想要实现的是:

  1. 删除单个主机的所有端点
  2. 为给定的主机添加更新的数据

我想通过前缀删除所有键,并将实际数据作为原子操作放入etcd中.

这就是我尝试使用etcd交易的原因.我的代码是:

Op.DeleteOp deleteOp = Op.delete(
        fromString(prefix),
        DeleteOption.newBuilder().withPrefix(fromString(prefix)).build()
);
Txn tx = kvClient.txn().Else(deleteOp);
newKvs.forEach((k,v) -> {
    tx.Else(Op.put(fromString(k), fromString(v), DEFAULT));
});
try {
    tx.commit().get();
} catch (InterruptedException | ExecutionException e) {
    log.error("ETCD transaction failed", e);
    throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)

使用ETCD v3 API(etcd v3.2.9).KVstore最初是空的,我想添加3条记录. prefix价值是:

/proxy-service/hosts/example.com
Run Code Online (Sandbox Code Playgroud)

并且kvs是一张地图:

"/proxy-service/hosts/example.com/FTP/0" -> "localhost:10021"
"/proxy-service/hosts/example.com/HTTPS/0" -> "localhost:10443"
"/proxy-service/hosts/example.com/HTTP/0" -> "localhost:10080"
Run Code Online (Sandbox Code Playgroud)

异常发生在commit().get()以下根本原因:

Caused by: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: etcdserver: duplicate key given in txn request
    at …
Run Code Online (Sandbox Code Playgroud)

etcd etcd3

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

杰克逊的地图 SORT_PROPERTIES_ALPHABETICALLY

我使用杰克逊2.5.0。我想编写一个方法,它接受任意 JSON 字符串,并使用 Jackson 按字母顺序对每个属性进行排序。包括嵌套的。

我了解到 Jackson 的 ObjectMapper 有一个SORT_PROPERTIES_ALPHABETICALLY功能,我想使用它来实现我的目标。所以我基于这个想法的最初代码是:

class FooBar {
    String foo
    String bar
}

def sortFields(String source) {
    def om = new ObjectMapper().configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)

    def obj = om.readValue(source, Map.class)
    return om.writeValueAsString(obj)
}

println sortFields('{"foo":"f","bar":"b"}')
Run Code Online (Sandbox Code Playgroud)

请注意,我无法提前知道输入 JSON 具有什么结构,因此 Jackson 默认将其解组MapLinkedHashMap更准确地说)。我希望它输出一个字符串,其中键按字母顺序排序:

{"bar":"b","foo":"f"}

不幸的SORT_PROPERTIES_ALPHABETICALLY是,当要序列化的对象是Map. 如果我替换Map.classFooBar.classJSON 属性,将按预期排序。但正如我所说,我无法提前知道输入 JSON 的类型,也无法在代码中为任何可能的类型创建一个类。对于杰克逊我还有什么其他选择?

jackson

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

BFG之后的git说明?

我从SVN迁移到git,我在每个git提交中都有一个注释,引用了SVN版本号.在repo import之后我使用BFG repo清理器从二进制文件和其他垃圾中清除git历史记录.不幸的是现在我输入时没有注意到git log.我想BFG忘记更新笔记提交的引用.BFG以下列格式留下*.txt报告,将旧对象id映射到新对象id:

0001b24011381e8885683cd1119ba4cb077fa64b c81149b1b52b9e1e1767d6141f292891d715edb5
00024eecdc31f2f6e67018f7d6f00e7c1ad03f1f 326ee3b508e3dd2934ec1f50069195f86ea1a1c7
00028e04dcc2d59bd835b447bd3a207ae481696c 3d18e9b9d3336e59d62093200b81603ffefcc747
Run Code Online (Sandbox Code Playgroud)

在给出上述映射的情况下,您能否建议一些脚本快速修复注释?

PS:我几乎可以肯定问题是由于没有更新refs引起的,因为当我输入git notes第二名时,我可以看到在BFG报告中被认为是旧的引用object-id-map.old-new.txt

git git-notes bfg-repo-cleaner

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

对于现代应用程序,我应该使用 Oracle 的 UCP 还是 HikariCP?

对于使用 Oracle OLTP 数据库作为数据源的现代后端 Java 应用程序,我应该使用哪一个?

对我来说 HikariCP 看起来像是现代 Java 应用程序事实上的标准池。但现在我需要维护一些过去的项目,该项目目前停留在 Oracle 驱动程序 v11 并使用 UCP。我现在想知道:Oracle的UCP比HikariCP有什么优势吗?您会使用 UCP 还是 HikariCP?

在start.spring.io生成的新 Spring Boot 项目将默认使用 HikariCP(尽管从 2.4 开始支持 UPC),直到您在 application.properties 中明确强制执行 UCP:

spring.datasource.type=oracle.ucp.jdbc.PoolDataSource
Run Code Online (Sandbox Code Playgroud)

Spring Boot 文档说:

1. We prefer HikariCP for its performance and concurrency. If HikariCP is available, we always choose it.
...
4. If none of HikariCP, Tomcat, and DBCP2 are available and if Oracle UCP is available, we use it.
Run Code Online (Sandbox Code Playgroud)

Oracle 网站包含有关如何将 UCP 与 …

oracle ucp hikaricp

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

无法识别的选项:--add-opens 与 _JAVA_OPTIONS 一起传递时

我正在尝试解决使用 Java 17 运行时运行 Nexus IQ 扫描仪的问题。

错误是

java.lang.reflect.InaccessibleObjectException:无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) 抛出 java.lang .ClassFormatError 可访问:模块 java.base 不会向未命名模块“打开 java.lang”@7225790e

所以我尝试将--add-opens java.base/java.lang=ALL-UNNAMED修复传递给运行的 JVM nexus-iq-cli.jar

不幸的是,我无法完全控制java -jar ...在 CI 上执行的命令,否则我只会--add-opens java.base/java.lang=ALL-UNNAMED显式地传递。由于该限制,我尝试使用其他一些方法来设置全局 JVM 参数设置。我想到的一种方法是使用_JAVA_OPTIONS环境变量。

令我惊讶的是 Java 因错误而退出:

无法识别的选项:--add-opens

当我尝试按如下方式传递时:

# with unix shell you can set value to some variable and execute something in one line
_JAVA_OPTIONS='--add-opens java.base/java.lang=ALL-UNNAMED' java
Run Code Online (Sandbox Code Playgroud)

另一方面,当我直接传递此选项时,Java 完全正常并且按预期运行:

java --add-opens java.base/java.lang=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)

--add-opens java.base/java.lang=ALL-UNNAMED如果我无法直接控制java -jarCI 执行 Nexus IQ 扫描步骤的命令,我缺少什么以及传递参数的其他可能方法是什么?

java java-opts javaoptions

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

为什么Kotlin的Type的vararg被视为Array &lt;out Type&gt;而不是Array &lt;Type&gt;

以下方法使用Java进行编译:

public class Main {
    public static void main(String[] args) {
        varargMethod(1, 2.0);
    }

    static void varargMethod(Number... va) {
        arrayMethod(va);
    }

    static void arrayMethod(Number[] arr) {
        for (Number number : arr) {
            System.out.println(number);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试在Kotlin中编写类似的代码,则会出现类型不匹配错误:

fun main() {
    varargFun(1, 2.0)
}

fun varargFun(vararg va: Number) {
    arrayFun(va) // Error:(6, 14) Kotlin: Type mismatch: inferred type is Array<out Number> but Array<Number> was expected
}

fun arrayFun(arr: Array<Number>) {
    arr.forEach {
        println(it)
    }
}
Run Code Online (Sandbox Code Playgroud)

我期望va是这样的Array<String>,但是是Array<out …

generics variadic-functions kotlin

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

Spring Boot 测试尝试第二次初始化 cache2k 并失败

将 cache2k 添加到我的项目后, some 因@SpringBootTest错误而停止工作:

java.lang.IllegalStateException:缓存已经创建:'缓存'

下面我提供了重现的最小示例:

前往 start.spring.io 并使用 Cache starter 创建一个最简单的 Maven 项目,然后添加 cache2k 依赖项:

<properties>
    <java.version>1.8</java.version>
    <cache2k-version>1.2.2.Final</cache2k-version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.cache2k</groupId>
        <artifactId>cache2k-api</artifactId>
        <version>${cache2k-version}</version>
    </dependency>
    <dependency>
        <groupId>org.cache2k</groupId>
        <artifactId>cache2k-core</artifactId>
        <version>${cache2k-version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.cache2k</groupId>
        <artifactId>cache2k-spring</artifactId>
        <version>${cache2k-version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

现在配置最简单的缓存:

@SpringBootApplication
@EnableCaching
public class CachingDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(CachingDemoApplication.class, args);
    }

    @Bean
    public CacheManager springCacheManager() {
        SpringCache2kCacheManager cacheManager = new SpringCache2kCacheManager();
        cacheManager.addCaches(b -> b.name("cache"));
        return …
Run Code Online (Sandbox Code Playgroud)

spring-test spring-boot cache2k

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