我知道:
仍然最终IMO都可以作为大多数应用程序用例的类型.例如:目前我正在运行一个批处理作业,我需要根据日期计算下一次运行,我很难找到这两种类型之间的优缺点(除了Instant的纳秒级精度优势和时区部分) of LocalDateTime).
您能说出一些应用示例,其中只应使用Instant或LocalDateTime吗?
编辑:注意有关精度和时区的LocalDateTime的误读文档
我非常喜欢JVM的远程调试工具.但我想知道它是如何在内部工作的.
我的假设:它是通过JVM功能完成的,其中正在运行的进程正在下载/使用附加的远程调试器(如IDE)的源代码.它知道当前堆栈跟踪的行,然后可以跳转到相应的IDE断点.然后通过套接字或共享内存(远程调试器的设置)完成堆栈跟踪和应用程序状态内省的通信.
有没有人有趣的链接/资源?
我看了一下API版本的最佳实践?,但我不太相信答案,所以我再次用更具体的例子质疑版本控制部分.我有两个URI(一个版本作为URI的一部分,一个没有):
http://xxxx/v1/user/123 -> favored solution in discussed thread
http://xxxx/user/123
Run Code Online (Sandbox Code Playgroud)
我怀疑第一个链接是否表达了REST的想法.我觉得很http://xxxx/v1/user/123困惑,因为它表明有一天会有更高的api版本http://xxxx/v2/user/123.但这在REST术语中没有意义,api版本本身是HTTP 1.0或1.1,它已经在HTTP请求中发送.这个以REST资源为中心的视图与其他api接口(如SOAP或Java接口)非常不同(其中通常有限定名称的api版本).
在REST中,版本控制唯一有意义的是该资源的表示(例如,添加或删除新字段).此版本控制属于内容协商的部分,如:
http://xxx/user/123 + HTTP 'Accept' Header -> Content negotation through header
http://xxx/user/123?v=1 -> for perma-links/hyperlinks
Run Code Online (Sandbox Code Playgroud)
人们还可以争辩说,这样的版本内容协商可能是路径中URI的一部分,但我觉得它反直觉,因为你最终可能会为同一资源使用不同的URI,并且必须在某些时候维护重定向.
总结:在REST URI中,没有api版本,只有资源表示的版本控制.表示版本信息属于内容协商(作为queryParam或HTTP'接受').
你怎么看?你不同意/同意哪些事情?
我正在使用ExecutorService以方便并发多线程程序.请参考以下代码:
while(xxx) {
ExecutorService exService = Executors.newFixedThreadPool(NUMBER_THREADS);
...
Future<..> ... = exService.submit(..);
...
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,问题是submit()如果所有人NUMBER_THREADS都被占用则不会阻塞.结果是任务队列被许多任务淹没.这样做的结果是,关闭执行服务ExecutorService.shutdown()需要ExecutorService.isTerminated()很长时间(长时间都是假的).原因是任务队列仍然很满.
现在我的解决方法是使用信号量来禁止在任务队列中包含许多条目ExecutorService:
...
Semaphore semaphore=new Semaphore(NUMBER_THREADS);
while(xxx) {
ExecutorService exService = Executors.newFixedThreadPool(NUMBER_THREADS);
...
semaphore.aquire();
// internally the task calls a finish callback, which invokes semaphore.release()
// -> now another task is added to queue
Future<..> ... = exService.submit(..);
...
}
Run Code Online (Sandbox Code Playgroud)
我确信有更好的封装解决方案?
最近我切换到了Mockito框架并且对它非常满意(另见blog-post).从EasyMock到Mockito的转换非常简单,我设法使测试兼容(即测试用例表现相同).
你是否看到真正的理由或枪战标准更喜欢EasyMock而不是Mockito?到目前为止我使用的代码库不能,但我对你的观点感兴趣.
svn help log 不会给我一个递归看历史的选项.
svn log -l3 --recursive SVN_ROOT_URL不起作用.我希望它能在SVN_ROOT_URL下面提供最后3次提交.
这真的很烦人.我总是要启动我的IDE或者看团队城市以查看项目的最后提交(虽然我不确定这些工具在幕后执行哪个svn命令).
我认为这个功能非常重要,并且希望在没有高bash脚本工作的情况下支持svn-CLI框.
对于我们的api用户,我们需要两种身份验证:
标准挑战与响应是通过WWW-Authenticate和AuthorizationHeaders 处理的.我想重用这个.
我有以下用例:在第一级我们验证api用户(例如移动设备),对于一些api-actions我们还需要验证用户(例如移动设备的用户).因此,我们有一个特殊情况,我们需要"同时"两个身份验证方案.
查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html我看不到在"授权"标题中有两个不同的方案是可能的.
// I just made up delimiter ';'
Authorization: Digest .... ; CustomXXX ...
我是否正确,如果有的话还有其他选择吗?
默认情况下,Connection标题设置为Keep-Alive浏览器,以便为浏览器的其他请求保持连接打开.
当我Connection标题时close,可能有什么区别?这会影响任何性能问题吗?
(一个补充:我从xmlhttprequest设置标题)
我们有一个搜索/列表资源:
在内部,页面大小是静态的,并返回20个项目.用户可以通过增加页码来前进.但为了更灵活,我们现在也在考虑公开页面的大小:
http://xxxx/users/?page=1&size=20
因此,这是灵活的,因为客户端现在可以在搜索时决定网络呼叫与响应的大小.当然,这有一个缺点,即服务器可能会因意外或有目的而遭受严重打击:
http://xxxx/users/?page=1&size=1000000
为了稳健性,解决方案可以是配置页面大小的上限(例如100),并且当超过页面大小时,或者表示错误响应或HTTP重定向到具有最高页面大小参数的URL.
你怎么看?
我喜欢递归,但在Java,你在某个时刻遇到了死胡同.例如,我有一个大约100K迭代的递归不起作用的情况(StackOverflowError).糟糕的是,我不得不为这个运行时堆栈限制原因切换到恼人的"命令性循环".
我想知道其他(特别是功能性)语言如何在运行时绕过堆栈溢出?我想特别是函数式语言运行时更好地处理这个问题,因为递归是核心概念......
有人有一些信息或外部资源吗?
java ×5
rest ×3
http ×2
api ×1
api-design ×1
concurrency ×1
datetime ×1
debugging ×1
easymock ×1
http-headers ×1
java-8 ×1
mocking ×1
mockito ×1
recursion ×1
security ×1
svn ×1
unit-testing ×1
versioning ×1