我正在阅读Joshua Bloch撰写的Effective Java.
在第17项:"仅使用接口定义类型"中,我遇到了不建议使用接口存储常量的解释.我在下面解释.
"更糟糕的是,它代表了一种承诺:如果在将来的版本中修改了类以便它不再需要使用常量,它仍然必须实现接口以确保二进制兼容性."
二进制兼容性意味着什么?
有人可以用Java中的示例指导我,以显示代码是二进制兼容的.
我在Amazon EMR上使用hive脚本来分析一些数据.
我正在将输出传输到Amazon s3存储桶.现在,hive脚本的结果不包含列标题.
我也试过用这个:
set hive.cli.print.header=true;
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.你能帮我吗?
我正在尝试使用Java枚举实现Singleton.
但是我也想在第一次初始化时将一些参数传递给构造函数.
我如何实现这一目标?拥有参数的单身人士是一个好习惯吗?
public enum DaoManager {
INSTANCE;
private static ILog logger; //for passing the logger;
private static DatabasePool pool; //passing the Database pool
public void init(ILog logger, DatabasePool pool){
this.logger = logger;
this.pool = pool;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我使用init方法将记录器和数据库池传递给DaoManager.
但是如果客户端无法调用init()方法,那么很有可能失败.
有人可以指导我如何做到这一点?
我正在阅读关于Java序列化的知识,并且知道如果实现了Serializable接口,那么类是序列化的.
但Serializable是一个标记界面.那么JVM如何知道应该使用哪些方法进行序列化或反序列化?
根据我的理解,接口中声明的方法是通过多态来调用的.
我将在下面举例说明我的问题.
public class MySerializable implements Serializable{
public void serialize(){
//Some code to serialize to a file output stream.
}
public void deSerialize(){
//Some code to de-serialize to a file input stream.
}
}
Run Code Online (Sandbox Code Playgroud)
那么现在JVM将如何调用serialize/deSerialize方法呢?
如果我必须通过代码手动调用它们,为什么编译器应该知道Serializable接口是否已实现?
public class OverloadingTest extends Format{
public int add(String s1){
System.out.println("With String");
return 1;
}
public int add(Object a){
System.out.println("With Object");
return 1;
}
public static void main(String[] args) {
OverloadingTest overloadingTest = new OverloadingTest();
overloadingTest.add(null);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么是程序的输出 With String ?
我试过阅读第6版的JLS,但我仍然找不到答案.
我猜的唯一原因是选择了继承层次结构中最接近的匹配.
所以在这种情况下,它需要String作为Object是它的超类.
我试图决定应该使用哪种Http方法PUT或POST.
在查看StackOverlflow上的一些帖子时,我可以看到这篇文章.
帖子中的答案之一说
PUT是幂等的,所以如果你将对象PUT两次,它就没有效果.这是一个很好的属性,所以我会尽可能使用PUT.
有人可以通过一个例子来帮助我.让我们说我有一个场景,我正在尝试创建一个学生,其条目将在RDBMS中的Student表中传递.
所以,如果我尝试一次又一次地输入那个条目会不会有效果?
我试图在Servlet响应中设置一个值未知的cookie#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D.
但是当我在浏览器中设置cookie时,会返回带有引号的内容,如下所示:
"未知#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D".
为什么会这样?我们使用Jetty作为应用程序服务器.
我会把我写的代码
String cookieValue = "unkown#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D";
Cookie zedoCookie = new Cookie("cookiename", cookieValue);
zedoCookie.setMaxAge(31536000); // this is one year duration.
zedoCookie.setDomain("somedomain.com");
zedoCookie.setPath("/");
response.addCookie(zedoCookie);
Run Code Online (Sandbox Code Playgroud)
有人可以对此有所了解吗?
我已经看过了这个.但它似乎没有解决我的问题.
互联网上有许多资源可供使用,其中讨论了PUT与POST。但是我不明白这将如何影响在RestFul服务下完成的Java实现或后端实现?我提到的链接如下所述:
https://www.keycdn.com/support/put-vs-post/
https://spring.io/understanding/REST#post
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
例如,假设有一个针对地址的RestFul Web服务。因此,POST /addresses将完成更新地址PUT /addresses/1的工作,并完成创建地址的工作。现在,HTTP方法PUT和POST如何控制后台服务代码在做什么?
PUT /addresses/1
Run Code Online (Sandbox Code Playgroud)
可能最终在数据库中创建相同地址的多个条目。
所以我的问题是,幂等行为为什么链接到HTTP方法?
您将如何使用指定的HTTP方法控制幂等行为?还是只是建议准则或标准做法?
我不是在寻找什么是幂等行为的解释,但是是什么使我们标记这些HTTP方法呢?
我读过几篇讨论使用规则引擎的用例的文章。他们中的许多人说您不应该将其用于工作流程管理。
我参考的帖子:
但我还没有得到任何简单的解释,说明规则引擎在使用时会给系统添加哪些开销?
如果我用它来进行工作流程管理会怎么样?会造成内存开销吗?
有人可以关注这个吗?
我还将介绍我们将使用规则引擎的场景:
我们有一个竞价引擎,其输入根据业务分析师的预测经常变化。因此,简单来说,我们将针对基于规则提供的某些值采取行动。例如:如果业务分析师将价值设置为 2 美元,则规则引擎将决定发送给客户的出价价值。
java ×7
rest ×3
amazon-emr ×1
amazon-s3 ×1
cookies ×1
hive ×1
jax-rs ×1
jersey ×1
jetty ×1
overloading ×1
post ×1
put ×1
rule-engine ×1
servlets ×1