我已经读过HttpURLConnection支持持久连接,因此可以为多个请求重用连接.我尝试了它,发送第二个POST的唯一方法是第二次调用openConnection.否则我得到一个IllegalStateException("已经连接"); 我使用了以下内容:
try{
URL url = new URL("http://someconection.com");
}
catch(Exception e){}
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//set output, input etc
//send POST
//Receive response
//Read whole response
//close input stream
con.disconnect();//have also tested commenting this out
con = (HttpURLConnection) url.openConnection();
//Send new POST
Run Code Online (Sandbox Code Playgroud)
第二个请求是通过相同的TCP连接发送的(用wireshark验证它)但我无法理解为什么(虽然这是我想要的)因为我已经调用了disconnect.我检查了HttpURLConnection的源代码,并且实现确实保持了对相同目标的连接的keepalive缓存.我的问题是,在发送第一个请求后,我无法看到连接如何放回缓存中.断开连接关闭连接,没有断开连接,我仍然无法看到连接如何放回缓存.我看到缓存有一个run方法来遍历所有空闲连接(我不确定它是如何被调用的),但我找不到连接如何放回缓存中.似乎唯一发生的地方是httpClient的完成方法,但是没有调用带响应的POST.谁可以帮我这个事?
编辑 我的兴趣是,对于tcp连接重用,HttpUrlConnection对象的正确处理是什么.应该关闭输入/输出流,然后是url.openConnection(); 每次发送新请求(避免disconnect())?如果是,我第二次调用url.openConnection()时无法看到连接是如何重用的,因为第一个请求已从缓存中删除了连接,但无法找到返回的连接方式.是否有可能连接没有返回到keepalive缓存(bug?),但操作系统尚未发布tcp连接,在新连接上,OS返回缓冲连接(尚未发布)或类似的东西? EDIT2 我找到的唯一相关内容来自JDK_KeepAlive
...当应用程序在URLConnection.getInputStream()返回的InputStream上调用close()时,JDK的HTTP协议处理程序将尝试清理连接,如果成功,则将连接放入连接缓存以供将来的HTTP请求重用.
但我不确定这是哪个处理程序.sun.net.www.protocol.http.Handler没有做任何缓存,因为我看到谢谢!
我正在复习算法和数据结构.
我对树的深度与高度的概念感到困惑.在许多情况下,特别是在关注面试评估的网站上,在我看来,这些术语可以互换使用.
在我看来,基本的文学将它们定义为适用于节点并不会在一棵树上.
所以根(它是一个节点)的深度是0.根(或任何子节点)的高度是其子节点的最大高度.
但是当你在树上应用这些术语,即找到树的最大深度时,似乎这些术语现在是"无意义的"并且可以互换使用,即找到最大深度只计算最大高度.
例如,在这篇文章中检查树是否平衡,答案集中在树的高度,而平衡的定义可以在树的深度上
我的理解是正确的还是我搞砸了这些基本原理?
到目前为止,我设法尽可能避免使用GridBagLayout(手动代码),但这次我无法避免,我正在阅读SUN的教程GridBagLayout
到目前为止它还不顺利.我想我很想念一些事情.
例如,我尝试以下代码(类似于SUN的帖子中的代码):
public class MainFrame extends JFrame {
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainFrame frame = new MainFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame
*/
public MainFrame() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container mainContainer = getContentPane();
mainContainer.setLayout(new GridBagLayout());
//add label
JLabel someLabel = new JLabel("Label 1:");
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0; …Run Code Online (Sandbox Code Playgroud) 我以编程方式创建了类型为jks的Java密钥库(即默认类型).
它最初是空的,所以我创建了一个DSA证书.
keytool -genkey -alias myCert -v -keystore trivial.keystore
Run Code Online (Sandbox Code Playgroud)
我怎样才能看到公钥和私钥?
即是否有一个命令打印我的证书的私钥?
我只能keytool -certreq在我的理解中找到整个证书:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIICaTCCAicCAQAwZTELMAkGA1UEBhMCR1IxDzANBgNVBAgTBkdyZWVjZTEPMA0GA1UEBxMGQXRo
BQADLwAwLAIUQZbY/3Qq0G26fsBbWiHMbuVd3VICFE+gwtUauYiRbHh0caAtRj3qRTwl
-----END NEW CERTIFICATE REQUEST-----
Run Code Online (Sandbox Code Playgroud)
我认为这是整个证书.如何通过keytool查看私人(或公钥)?
这两个动作似乎也是一样的:
这些扩展有什么区别?
它们是出于同一目的还是相互补充?
我正在寻找线程的一些难题,我无法弄清楚为什么以下一致打印999999:
class Job extends Thread {
private Integer number = 0;
public void run() {
for (int i = 1; i < 1000000; i++) {
number++;
}
}
public Integer getNumber() {
return number;
}
}
public class Test {
public static void main(String[] args)
throws InterruptedException {
Job thread = new Job();
thread.start();
synchronized (thread) {
thread.wait();
}
System.out.println(thread.getNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
notify在同一个锁上没有(并且虚假的唤醒似乎被忽略).
如果一个线程完成了一个通知获取信号或什么?
怎么main打印结果而不是"卡住"等待?
此查询有效:
mysql> SELECT s.sno FROM students s;
+------+
| sno |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+------+
10 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
此查询也有效:
mysql> SELECT t.sno FROM take t WHERE t.cno = 'CS112';
+------+
| sno |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows …Run Code Online (Sandbox Code Playgroud) 在用于Set的java文档中时,它在方法的规范中说,Optional Operation例如(由我强调)
add(E e)
如果指定的元素尚不存在,则将其添加到此集合中(可选操作).
可选的含义是什么?
如果我使用除SUN/Oracle之外的JVM,Java的实现可能不提供此操作?
根据wiki的最长公共子串问题可以使用后缀树来解决.
来自维基:
可以通过为字符串构建一个通用后缀树,然后找到最深的内部节点来找到一组字符串中最长的公共子字符串,这些节点具有来自其下面子树中所有字符串的叶节点
我不懂.
例如:如果我有:
ABCDE和XABCZ
然后后缀树是(一些分支从XABCZ由于空间中省略):
最长的常见子串ABC但是我不知道wiki的描述在这里有什么帮助.
ABC不是叶节点最深的内部节点.
任何帮助,以了解这是如何工作的?
如何创建一个HTML恰好3个字符可以容纳的文本框?
我在网上找到了它: <input type="text" style="width: 10px; padding: 2px; border: 1px solid black"/>
它创建了一个宽度为10px的文本框.我可以使用这个,但我想知道我们是否可以明确地设置3个字符宽度而不是"玩"像素,