这两个是等价的吗?换句话说,++和 - 运算符是原子的吗?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
Run Code Online (Sandbox Code Playgroud) 是的,私有成员变量bar应该是final对的吗?但实际上,在这种情况下,简单地读取a的值是一个原子操作int.这在技术上是线程安全吗?
class Foo {
private int bar;
public Foo(int bar) {
this.bar = bar;
}
public int getBar() {
return bar;
}
}
Run Code Online (Sandbox Code Playgroud)
//假设无数个线程重复调用getBar同一个实例Foo.
编辑:
假设这是Foo该类的所有代码; 任何引用Foo实例的线程都无法更改bar(不使用反射等长度)
我已经尝试了几种不同的Java静态分析器,特别是Findbugs和PMD.
我正在寻找可能值得在Java代码上运行的其他静态分析器的示例.
我有一个接口Producer<T>和一个FooProducer实现的具体Producer<Foo>.在guice中绑定这个看起来像罪恶一样丑陋:
bind(new TypeLiteral<Producer<Foo>>() {}).to(FooProducer.class);
Run Code Online (Sandbox Code Playgroud)
我有很多这样的绑定.我尝试过以下方法:
static <T> TypeLiteral<Producer<T>> producer() {
return new TypeLiteral<Producer<T>>(){};
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式拨打电话:
bind(ContainingClass.<Foo>producer()).to(FooProducer.class);
Run Code Online (Sandbox Code Playgroud)
但它给出了一个错误Producer<T> is not specific enough....
我是以错误的方式解决这个问题吗?
PHP代码:
echo hash('sha256', 'jake');
PHP输出:
cdf30c6b345276278bedc7bcedd9d5582f5b8e0c1dd858f46ef4ea231f92731d
Java代码:
String s = "jake";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(s.getBytes(Charset.forName("UTF-8")));
byte[] hashed = md.digest();
String s2 = "";
for (byte b : hashed) {
s2 += b;
}
System.out.println(s2);
Run Code Online (Sandbox Code Playgroud)
Java输出:
-51-1312107528211839-117-19-57-68-19-39-43884791-1141229-4088-12110-12-223531-11011529
我曾预料到两者会返回相同的结果.显然,事实并非如此.我怎样才能让两者相匹配或者不可能?
编辑:我犯了一个错误,认为我现在已经回答了这个问题.
我有一个PHP应用程序通过端口80上的apache提供服务.我有一个nodejs应用程序在端口3000上独立运行.我想从PHP生成的客户端代码向nodejs应用程序发出ajax请求.问题是相同的源策略不允许不同的端口,我不能在端口80上运行nodejs和apache.
我理想的做法是让它们从客户端的角度看起来都在端口80上运行.如何设置apache以重新路由/别名/对nodejs应用程序的任何特定请求?
希望有道理.注意:不确定这是否可行,或者我是否以正确的方式进行 - 请接受建议.
哪些编程语言是高完整性系统的不错选择?
糟糕选择的一个例子是Java,因为程序员无法访问大量代码.我正在寻找强类型块结构语言的例子,其中程序员负责100%的代码,并且尽可能少地受到JVM之类的干扰.
编译器显然是一个问题.语言必须有完整而明确的定义.
编辑:高完整性系统是安全关键系统等,安全系统等的总称.
编辑编辑:我想要不受平台影响的语言示例,无论编译器如何,都会产生相同的结果,并且是完全定义的.
简单服务器的经典示例:
class ThreadPerTaskSocketServer {
public static void main(String[] args) throws IOException {
ServerSocket socket = new ServerSocket(80);
while (true) {
final Socket connection = socket.accept();
Runnable task = new Runnable() {
public void run() {
handleRequest(connection);
}
};
new Thread(task).start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么要Socket宣布为final?是因为Thread处理请求的新函数可以引用回方法中的socket变量并导致某种情况ConcurrentModificationException?
在拥有类:
...
@Embedded
private LatLon location;
...
Run Code Online (Sandbox Code Playgroud)
在引用的类中:
@Embeddable
public class LatLon implements Serializable {
private double lat;
private double lon;
...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用null值保存拥有类的实例时LatLon:
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.*.location.
如何在拥有类中允许此值为null?我试过制作它Nullable并没有效果.