小编Ant*_*era的帖子

关闭某些代码关闭Sonar

是否可以关闭特定代码块的声纳(www.sonarsource.org)测量值,哪一个不想测量?

一个例子是Findbugs输出的"保留堆栈跟踪"警告.离开服务器时,我可能只想将消息传递回客户端,不包括我刚捕获的实际异常,如果客户端不知道该异常(因为客户端没有JAR,那么例如包含例外).

java findbugs jenkins sonarqube

130
推荐指数
6
解决办法
14万
查看次数

如何将特征混合到实例中?

鉴于一个特点MyTrait:

trait MyTrait {
  def doSomething = println("boo")
}
Run Code Online (Sandbox Code Playgroud)

它可以与extendsor 混合成一个类with:

class MyClass extends MyTrait
Run Code Online (Sandbox Code Playgroud)

它也可以在实例化一个新实例时混合:

var o = new MyOtherClass with MyTrait
o.doSomething
Run Code Online (Sandbox Code Playgroud)

但是......可以将特征(或任何其他如果产生影响的特征)添加到现有实例中吗?

我在Java中使用JPA加载对象,我想使用traits为它们添加一些功能.有可能吗?

我希望能够按如下方式混合特征:

var o = DBHelper.loadMyEntityFromDB(primaryKey);
o = o with MyTrait //adding trait here, rather than during construction
o.doSomething
Run Code Online (Sandbox Code Playgroud)

scala traits

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

eclipse 3.6中的"inspect"窗口不记得被调整大小

在eclipse 3.6之前,在调试透视图中,您可以通过突出显示变量并按ctrl + shift + i来"检查"变量.然后你可以调整弹出窗口的大小,eclipse记得你下次检查时的大小.

在eclipse 3.6中,您可以检查变量,但无论您是否调整窗口大小,下次检查时,窗口都会恢复为默认大小.这很烦人,因为我喜欢那个窗户,好看又大.

有没有办法设置eclipse来记住这个窗口的大小,还是一个bug?

eclipse

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

具有数千个线程的内存设置

我玩弄的JVM(甲骨文1.7 64位)在Linux机器上(AMD 6核心,16 GB RAM)看到线程的应用程序的数量如何影响系统性能.我希望测量上下文切换会降低性能.

我创建了一个创建线程执行池的小应用程序:

Executors.newFixedThreadPool(numThreads)
Run Code Online (Sandbox Code Playgroud)

numThreads每次运行程序时都会调整,以查看它的效果.

然后我将numThread工作(实例java.util.concurrent.Callable)提交到池中.每一个增加一个AtomicInteger,做一些工作(创建一个随机整数数组并将其洗牌),然后睡一会儿.我们的想法是模拟Web服务调用.最后,作业重新提交给池,以便我总是有numThreads工作.

我正在测量吞吐量,就像每分钟处理的作业数一样.

有几千个线程,我每分钟可以处理多达400,000个工作.超过8000个线程,结果开始变化很大,这表明上下文切换正成为一个问题.但我可以继续将线程数增加到30,000,并且仍然可以获得更高的吞吐量(每分钟420,000到570,000个作业).

现在的问题是:我获得了java.lang.OutOfMemoryError: Unable to create new native thread超过31,000个工作岗位.我试过设置-Xmx6000M没有帮助.我试过玩,-Xss但这也无济于事.

我读过这ulimit可能很有用,但增加ulimit -u 64000并没有改变任何东西.

有关信息:

[root@apollo ant]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127557
max locked memory       (kbytes, -l) 64
max memory size …
Run Code Online (Sandbox Code Playgroud)

java memory multithreading

11
推荐指数
2
解决办法
6315
查看次数

ArgoUML并调用"子程序"

我不知道它是否是UML 1.4或ArgoUML的限制,但在序列图中,我想显示一个对象在自己的类中调用一个方法,即调用一个子过程.

如果我从对象拖到自己,没有任何反应:-(

谢谢,蚂蚁

uml argouml

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

在 nginx 反向代理后面运行的 Kubernetes Ingress

我已经在可以从 Internet 访问的服务器上安装了 minikube。

我创建了一个可用的 kubernetes 服务:

>kubectl get service myservice
NAME        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
myservice   10.0.0.246   <nodes>       80:31988/TCP   14h
Run Code Online (Sandbox Code Playgroud)

minikube的IP地址为:

>minikube ip
192.168.42.135
Run Code Online (Sandbox Code Playgroud)

我希望 URL http://myservice.myhost.com(即端口 80)映射到 minikube 中的服务。

我在主机上运行了 nginx(与 kubernetes 完全无关)。我可以设置一个虚拟主机,将 URL 映射到192.168.42.135:31988(节点端口)并且它工作正常。

我想使用入口。我已经添加并启用了入口。但我不确定:

a) yaml 文件应该包含什么

b) 来自浏览器的端口 80 上的传入流量如何重定向到入口和 minikube。

c) 我还需要使用 nginx 作为反向代理吗?

d) 如果是这样,运行 ingress-nginx 的地址是什么(以便我可以将流量映射到它)?

nginx kubernetes minikube

7
推荐指数
2
解决办法
9937
查看次数

确定用例的参与者

我正在做一个小爱好项目,我正在尝试做一些不同的事情.

我正在构建的系统是ERP系统,包括产品目录,销售数据库,销售日志(类似于数据库,但用于会计目的),打印机,支付合作伙伴和购物篮(购物车).

虽然打印机是硬件,但我需要编写更高级别的代码来打印收据.

我不需要编程的唯一部分是支付合作伙伴.

我有两个问题.

1)向用户出售一堆产品的用例是一个名为"直到销售商品"的用例,或者将被分成几个,例如"添加产品到购物车"和"完全销售"(其中会编写销售日志并打印收据).

2)虽然我正在编写目录,销售数据库,销售日志,购物篮等,但我可以将它们建模为我的用例中的演员吗?或者是销售人员和付款合作伙伴的唯一参与者?

uml

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

java.util.function.Predicate#and 和 Groovy 2.2 闭包

我有这个运行良好的 Java 8 代码:

//Java 8
@Test public void testPredicates(){
    Predicate<Integer> p1 =  (i) -> true;
    Predicate<Integer> p2 =  (i) -> true;
    Predicate<Integer> p3 =  p1.and(p2);
    List<Integer> is = new ArrayList<>();
    is.add(1);
    is.add(2);
    assertTrue(is.stream().allMatch(p1.and(p2)));
}
Run Code Online (Sandbox Code Playgroud)

我在 Groovy (2.2) 中最接近它的是:

//Groovy 2.2
@Test
void test(){
    Predicate<Integer> p1 = { i -> true}
    Predicate<Integer> p2 = {i -> true}
    Predicate<Integer> p3 = p2.and(p1)
    List<Integer> is = new ArrayList<>()
    is.add(1)
    is.add(2)
    assert(is.stream().allMatch(p1.and(p2)))
}
Run Code Online (Sandbox Code Playgroud)

Groovy 代码在调用该and方法的行上失败并显示以下内容:

java.lang.ClassCastException: java.lang.Boolean 
    cannot be cast to …
Run Code Online (Sandbox Code Playgroud)

groovy predicate java-8

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

带有抑制的 Kafka SessionWindow 仅在有稳定的输入记录流时发送最终事件

如果没有恒定的输入记录流,则看起来好像带有宽限期和抑制的会话窗口的 Kafka Stream 无法输出最终事件。

上下文:我们正在使用变更数据捕获 (CDC) 来监控对旧数据库的更改。当用户使用 UI 进行更改时,数据库事务将更改 1..n 个表。每个 SQL 语句都会生成一条 Kafka 记录。这些需要聚合以创建一个“触发记录”,用于启动一个昂贵的过程。该过程应在提交遗留数据库中事务的一秒钟内启动。只有少数用户使用旧应用程序,因此事务之间可能会有大量时间。

我们有一个 Kafka Stream 应用程序,它使用会话窗口和 400 毫秒的不活动间隔来聚合共享相同密钥(事务 ID)的传入记录,并输出触发记录。

我们有一个可行的解决方案,但只要其他事务正在运行,触发器记录只会写入输出主题,以便生成稳定的传入记录流。我们需要关闭窗口并写入触发记录,即使没有进一步的输入记录。

工作代码在这里:https : //github.com/maxant/kafka-data-consistency/blob/714a44689fd48aa28b05b855638ac7ed50dd5ee9/partners/src/main/java/ch/maxant/kdc/partners/ThroughputTest5Stream.java#L6

以下是该代码的摘要:

      stream.groupByKey()
            .windowedBy(SessionWindows.with(Duration.ofMillis(400)).grace(Duration.ofMillis(0)))
            .aggregate(...)
            .suppress(Suppressed.untilWindowCloses(Suppressed.BufferConfig.unbounded()))
            .toStream((k,v) -> k.key())
            .to("throughput-test-aggregated");
Run Code Online (Sandbox Code Playgroud)

最初我没有压制,也没有宽限期。仅使用默认配置,我总是收到包含所有聚合记录的窗口的最终事件,但在 400 毫秒窗口之后最多需要 6 秒,这对我们来说太长了,无法等待。

为了减少延迟并加快速度,我将 CACHE_MAX_BYTES_BUFFERING_CONFIG 设置为 1,但这会在每次聚合后导致输出记录,而不仅仅是单个输出记录。

我引入了抑制(并随之引入了 0 毫秒的宽限期),以确保仅创建一个输出记录。

现在的问题是我只收到一个输出记录,如果新的输入记录在窗口关闭后到达(不管它们的键)。

该测试创建了 10 个输入记录,所有输入记录都具有相同的键,相隔 10 毫秒,都在 100 毫秒内。然后它休息 3 秒钟,让我在一组 10 个记录后将其关闭。我希望收到一个输出记录,但没有到达,除非我让测试运行,以创建第二组输入记录。这个问题是可重现的。

我已阅读以下文章,但找不到任何描述我所看到的内容的内容,即最终记录仅在处理附加记录(无论键值如何)后才会发送到输出主题。

我必须更改什么才能将最终记录发送到我的输出主题,即使没有进一步处理记录?

(在 Linux 上将 Kafka 2.4.1 与客户端和服务器一起使用)

apache-kafka-streams

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

node.js - 单进程还是多进程?

这里笔者使得后续的语句:

而不是为每个连接产生一个新的OS线程(并为其分配附带的内存),每个连接都创建一个PROCESS,它不需要内存块.

Node是否真的为每个请求生成一个进程?!这不是我理解的方式......我认为node是一个单线程,单个进程?当然,你可以在许多过程中实现负载平衡,但这不是他所声称的.

谢谢,
蚂蚁

node.js

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

Scala中的隐式函数未按预期工作

如果我定义了以下需要Long的函数,并且我定义了以下隐式函数,那么当我将Date传递给第一个函数并且一切按预期工作时,将使用隐式函数:

def millisToDays(in: Long): Int = (in / (1000L * 3600L * 24L)).toInt
implicit def dateToLong(d: Date) = d.getTime
println(millisToDays(new Date))
Run Code Online (Sandbox Code Playgroud)

但是对于下面的第二个例子,我在第三行得到编译器错误:"推断类型参数[Int]不符合方法mySum的类型参数bounds [t <:java.lang.Number]"

def mySum[T <: Number](as: T*): Double = as.foldLeft(0d)(_ + _.doubleValue)
implicit def intToInteger(n: Int): Integer = new Integer(n.toInt)
var r = mySum(2, 3)
Run Code Online (Sandbox Code Playgroud)

我做错了什么?为什么不使用intToInteger隐式函数?

我猜测问题是隐式函数不返回"T <:Number",而是返回一个Integer,因此编译器无法猜测隐式函数实际上是否有用.

无论如何,我可以给编译器一个提示,它应该使用隐式函数?

谢谢!蚂蚁

scala

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

KSQL 是在后台发出远程请求,还是 Table 实际上是一个全局 KTable?

我有一个包含客户记录的 Kafka 主题,称为“客户创建”。每个客户都是主题中的一个新记录。有4个分区。

我有两个基于 docker image 的 ksql-server 实例正在运行confluentinc/cp-ksql-server:5.3.0。两者都使用相同的KSQL 服务 ID

我创建了一个表:

CREATE TABLE t_customer (id VARCHAR, 
                         firstname VARCHAR, 
                         lastname VARCHAR)
WITH (KAFKA_TOPIC = 'customer-created', 
      VALUE_FORMAT='JSON', 
      KEY = 'id');
Run Code Online (Sandbox Code Playgroud)

我是 KSQL 的新手,但我的理解是 KSQL 构建在 Kafka Streams 之上,并且每个 ksql-server 实例大致相当于一个 Kafka 流应用程序实例。我注意到的第一件事是,一旦我启动 ksql-server 的新实例,它就已经知道在第一个实例上创建的表/流,即使它是开发人员模式下的交互式实例。其次,我可以根据两个实例的 ID 选择同一个客户,但我希望只能从其中一个实例中选择相同的客户,因为我假设 KSQL 表等同于 KTable,即它应该只包含本地数据,即来自 ksql-server 实例正在处理的分区。

SET 'auto.offset.reset'='earliest';
select * from t_customer where id = '7e1a141b-b8a6-4f4a-b368-45da2a9e92a1';
Run Code Online (Sandbox Code Playgroud)

无论我将 ksql-cli 附加到哪个 ksql-server 实例,我都会得到结果。在使用普通的 Kafka Streams 时,我可以让它工作的唯一方法是使用全局 KTable。我从两个实例中得到结果的事实让我有点惊讶,因为根据文档,“只有 …

apache-kafka-streams ksqldb

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