我正在设计一个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