我正在设计一个API来通过HTTP,我想知道是否使用HTTP POST命令,但只使用URL查询参数而没有请求体,是一个很好的方法.
注意事项:
Content-Length: 0
必须明确添加标头.通过URL查询而不是请求体在POST请求上发送参数是否还有其他缺陷或优势?
编辑:正在考虑的原因是操作不是幂等的,并且除了检索之外还有副作用.请参阅HTTP规范:
特别是,已经建立了这样的惯例:GET和HEAD方法不应该具有采取除检索之外的动作的重要性.这些方法应该被认为是"安全的".这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作.
...
方法也可以具有"幂等"的属性(除了错误或到期问题)N> 0个相同请求的副作用与单个请求相同.方法GET,HEAD,PUT和DELETE共享此属性.此外,方法OPTIONS和TRACE不应该有副作用,因此本质上是幂等的.
我用谷歌搜索找不到权威的答案.在Java servlet中,可以通过response.getOutputStream()或response.getWriter()访问响应主体.应该在写入之后在此流上调用.close()吗?
一方面,Blochian劝告总是关闭输出流.另一方面,我认为在这种情况下不存在需要关闭的底层资源.套接字的打开/关闭在HTTP级别进行管理,以允许诸如持久连接之类的事情.
我有一个10 ^ 7行文件,其中我想从文件中随机选择1/100行.这是我所拥有的AWK代码,但它会预先包含所有文件内容.我的PC内存无法处理这样的问题.还有其他办法吗?
awk 'BEGIN{srand()}
!/^$/{ a[c++]=$0}
END {
for ( i=1;i<=c ;i++ ) {
num=int(rand() * c)
if ( a[num] ) {
print a[num]
delete a[num]
d++
}
if ( d == c/100 ) break
}
}' file
Run Code Online (Sandbox Code Playgroud) 我最近发现了这个成语,我想知道是否有我遗失的东西.我从来没有见过它.我在野外工作的几乎所有Java代码都倾向于将数据压入字符串或缓冲区,而不是像这个例子(例如使用HttpClient和XML API):
final LSOutput output; // XML stuff initialized elsewhere
final LSSerializer serializer;
final Document doc;
// ...
PostMethod post; // HttpClient post request
final PipedOutputStream source = new PipedOutputStream();
PipedInputStream sink = new PipedInputStream(source);
// ...
executor.execute(new Runnable() {
public void run() {
output.setByteStream(source);
serializer.write(doc, output);
try {
source.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}});
post.setRequestEntity(new InputStreamRequestEntity(sink));
int status = httpClient.executeMethod(post);
Run Code Online (Sandbox Code Playgroud)
该代码使用Unix管道样式技术来防止XML数据的多个副本保留在内存中.它使用HTTP Post输出流和DOM Load/Save API将XML Document序列化为HTTP请求的内容.至于我可以告诉它最大限度地减少用很少的额外代码使用的内存(只是几行了Runnable
,PipedInputStream
和PipedOutputStream
).
那么,这个成语有什么问题?如果这个成语没有错,为什么我没有看到它?
编辑:澄清PipedInputStream …
我正在使用Apache HttpClient,并希望通过Java异常机制将HTTP错误(400 Bad Request,404 Not Found,500 Server Error等)传达给调用代码.Java标准库或广泛使用的库中是否存在异常,以便为此目的使用或子类化?
另一种方法是检查状态返回码.这似乎是HttpClient的设计理念,但由于这些错误在我的应用程序中确实非常出色,我希望在它们发生时为我设置堆栈跟踪和其他好的异常事项.
每个想要使用java.util.logging的类通常都需要声明一个这样的记录器:
public class MyClass {
private static Logger _log = Logger.getLogger(MyClass.class.getName());
}
Run Code Online (Sandbox Code Playgroud)
你如何避免这个MyClass.class.getName()样板代码?
出于某种原因,我无法想出一个重写此函数的好方法,因此它使用不变的堆栈空间.大多数关于树递归的在线讨论都是通过使用Fibonacci函数并利用该特定问题的属性来作弊.有没有人对这个"真实世界"(嗯,比Fibonacci系列更现实世界)使用递归有任何想法?
Clojure是一个有趣的案例,因为它没有尾调用优化,但只通过"recur"特殊形式进行尾递归.它也强烈反对使用可变状态.它确实有许多惰性结构,包括tree-seq,但我无法看到他们如何能够帮助我解决这个问题.任何人都可以分享他们从C,Scheme,Haskell或其他编程语言中学到的一些技巧吗?
(defn flatten [x]
(let [type (:type x)]
(cond (or (= type :NIL) (= type :TEXT))
x
(= type :CONCAT)
(doc-concat (flatten (:doc1 x))
(flatten (:doc2 x)))
(= type :NEST)
(doc-nest (:level x)
(flatten (:doc x)))
(= type :LINE)
(doc-text " ")
(= type :UNION)
(recur (:doc1 x)))))
Run Code Online (Sandbox Code Playgroud)
编辑:通过评论中的请求...
在一般术语和使用Scheme中重述 - 如何重写以下递归模式,以便它不消耗堆栈空间或需要非自调用的尾调用优化?
(define (frob x)
(cond ((foo? x)
x)
((bar? x)
(macerate (f x) (frob (g x))))
((thud? x)
(frobnicate (frob (g x))
(frob (h x)))))) …
Run Code Online (Sandbox Code Playgroud) language-agnostic tree recursion functional-programming clojure
许多宏的例子似乎都是关于隐藏lambda,例如在CL中使用open-file.我正在寻找一些更奇特的宏用途,特别是在PLT Scheme中.我想了解何时考虑使用宏与使用函数.
我有四个变量,我想检查它们中的任何一个是否为空.我可以
if (null == a || null == b || null == c || null == d) {
...
}
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是
if (anyNull(a, b, c, d)) {
...
}
Run Code Online (Sandbox Code Playgroud)
但我不想自己写.这个函数是否存在于任何常见的Java库中?我检查了Commons Lang并没有看到它.它应该使用varargs来获取任意数量的参数.
我把"chunk transposition"放在引号中,因为我不知道技术术语应该是什么或者是什么.只知道该过程是否有技术术语将非常有帮助.
通过考虑"块转置",我的意思是
Turing, Alan.
Run Code Online (Sandbox Code Playgroud)
应该匹配
Alan Turing
Run Code Online (Sandbox Code Playgroud)
比它更匹配
Turing Machine
Run Code Online (Sandbox Code Playgroud)
即距离计算应检测文本的子串何时在文本中移动.常见的Levenshtein距离公式不是这种情况.
字符串最多只有几百个字符 - 它们是作者姓名或作者姓名列表,可以是各种格式.我没有做DNA测序(虽然我怀疑那些会对这个主题有所了解的人).
language-agnostic algorithm edit-distance levenshtein-distance