有没有办法OutOfMemoryError为我的Java应用程序构建全局侦听器?
我想try-catch在OOM上优雅地停止JVM(不是一个选项).
我住在中国,无法通过命令下载和安装 GO 包(事件我使用 vpn 网络):
go get -u <repo_url>
Run Code Online (Sandbox Code Playgroud)
但我可以访问repo_url并下载其源代码。所以我的问题是我可以将源代码放在src文件夹下并运行命令吗?:
go install
Run Code Online (Sandbox Code Playgroud)
如果是,两种方式有什么不同?
我想通过一个可空字段对对象列表进行排序.
为了避免NullPointerexception我使用Comparator.nullsLast.但例外情况仍然存在:
public class Test {
public static void main(String[] args) {
List<Bean> l = new ArrayList<>();
for (int i=0;i<5;i++) {
Bean b = new Bean("name_"+i,i);
l.add(b);
}
l.get(2).setVal(null);
System.out.println(l);
Collections.sort(l, Comparator.nullsLast(Comparator.comparing(Bean::getVal)));
System.out.println(l);
}
static class Bean{
String name;
Integer val;
// omit getters & setters & constructor
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能对这种清单进行排序?
我使用的是spring-kafka,如果不设置ConcurrentKafkaListenerContainerFactory的并发性,则一切正常,当我将其设置为大于1的数字时,会出现异常:
javax.management.InstanceAlreadyExistsException:kafka.consumer:type = app-info,id = client-3
我的配置:
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String>
kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new
ConcurrentKafkaListenerContainerFactory<String, String>();
factory.setConcurrency(kafkaConfig.getConcurrency());
factory.getContainerProperties().setAckMode(AckMode.MANUAL);
factory.setConsumerFactory(consumerFactory());
return factory;
}
Run Code Online (Sandbox Code Playgroud)
特性:
kafka.enable-auto-commit=false
kafka.client-id=client-1
kafka.concurrency=2
Run Code Online (Sandbox Code Playgroud) 我对 kafka 很陌生(也对英语......),我面临这个问题并且无法谷歌任何解决方案。
我使用 spring-boot,spring-kafka 支持,我在本地机器上安装了 kafka_2.11-0.10.1.1(只有一个 broker 0)
s1.then 我创建主题
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 5 --topic tracking
Run Code Online (Sandbox Code Playgroud)
我的消费者配置:applitions.properties:
kafka.servers.bootstrap=localhost:9092
kafka.topic.tracking=tracking
kafka.group.id=trackingGroup
kafka.client.id=client-1
Run Code Online (Sandbox Code Playgroud)
s2。然后我通过更改 'kafka.client.id' 并运行 spring-boot main class 来启动 3 个消费者。在 Eclipse 控制台上,我可以检查分区分配:
client-1: partitions assigned:[tracking-4, tracking-3]
client-2: partitions assigned:[tracking-2, tracking-1]
client-3: partitions assigned:[tracking-0]
Run Code Online (Sandbox Code Playgroud)
s3. 启动pruducer向topic发送20条消息,每条消息开始消费特定分区的消息
s4. 我关闭消耗 1,kafka 自动重新平衡,新分区分配:
client-1: partitions assigned:[]
client-2: partitions assigned:[tracking-2,tracking-1, tracking-0]
client-3: partitions assigned:[tracking-4,tracking-3]
Run Code Online (Sandbox Code Playgroud)
s5. 我发现分区 'tracking-3' 上的消息没有被消耗!!
问题每次都可以重现,在新分配的分区中丢失一些消息,你有什么建议吗?请帮助我,谢谢
Spring Security 提供了一些方便的方法控制注解:
@PreAuthorize("hasRole('ADMIN')")
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
@PreAuthorize("hasPermission('ADD')")
Run Code Online (Sandbox Code Playgroud)
我想用一些自定义方法来扩展它,比如
@PreAuthorize("hasCompany('XX')")
Run Code Online (Sandbox Code Playgroud)
其验证数据应来自 JWT 令牌。
任何人都可以帮忙吗?
我在goland IDE中执行此代码片段,但发现输出顺序与我的预期不一样:
package main
import (
"fmt"
"errors"
)
func main() {
println("===========================")
println("---------------------------")
r,_:= div(6,3)
fmt.Println(r)
}
func div(x, y int) (int, error) {
defer println("dispose...")
if y == 0 {
return 0, errors.New("division by zero")
}
return x / y, nil
}
Run Code Online (Sandbox Code Playgroud)
输出:
我无法在https://play.golang.org/p/2T5LOt7FRDn 我的本地环境中重现:windows 10 + go1.10.3 windows/amd64 + GoLand 2018.1.4
以下代码让我感到困惑,任何人都可以解释为什么这两个测试表现不同?为什么第一个测试中的String比较返回false而第二个测试中的比较返回true?
public class Student {
/**
* Why the string "java" doesn't added to the 'String Pool' by intern() method ?
*/
@Test
public void test1() {
String str1 = new String("ja") + new String("va");
str1.intern();
String str2 = "java";
// Result:false
System.out.println("Result:" + (str1 == str2));
}
/**
* Any other strings will be added to 'String Pool' as expected after intern() is invoked.
*/
@Test
public void test2() {
String str1 = new String("ja1") …Run Code Online (Sandbox Code Playgroud) 我需要迭代任何指定的日期范围,例如2017-12-21至2018-01-05。在Go中实现该功能的最佳方法是什么?
output?
20171221
20171222
20171223
...
20180104
20180105
Run Code Online (Sandbox Code Playgroud) java ×4
go ×3
java-8 ×3
apache-kafka ×2
spring-kafka ×2
collections ×1
comparator ×1
go-micro ×1
goa ×1
goland ×1
java-stream ×1
jwt ×1
spring ×1
stomp ×1