小编Cra*_*lus的帖子

HttpURLConnection实现

我已经读过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没有做任何缓存,因为我看到谢谢!

java network-programming jdk1.6 httpurlconnection

17
推荐指数
2
解决办法
3万
查看次数

深度与树的高度.刷新基本面

我正在复习算法和数据结构.

我对树的深度高度的概念感到困惑.在许多情况下,特别是在关注面试评估的网站上,在我看来,这些术语可以互换使用.

在我看来,基本的文学将它们定义为适用于节点不会在一棵树上.

所以根(它是一个节点)的深度是0.根(或任何子节点)的高度是其子节点的最大高度.

但是当你在树上应用这些术语,即找到树的最大深度时,似乎这些术语现在是"无意义的"并且可以互换使用,即找到最大深度只计算最大高度.

例如,在这篇文章中检查树是否平衡,答案集中在树的高度,而平衡的定义可以在树的深度上

我的理解是正确的还是我搞砸了这些基本原理?

algorithm tree computer-science data-structures

17
推荐指数
2
解决办法
2万
查看次数

为什么GridBagLayout集中我的组件而不是把它放在角落?

到目前为止,我设法尽可能避免使用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)

java user-interface swing gridbaglayout

16
推荐指数
2
解决办法
2万
查看次数

keytool - 查看公钥和私钥

我以编程方式创建了类型为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查看私人(或公钥)?

java security digital-certificate keystore keytool

15
推荐指数
2
解决办法
4万
查看次数

创建CA证书的x.509 V3扩展基本约束和密钥用法有什么区别?

这两个动作似乎也是一样的:

  • 使用X.509证书中的Basic Constraints扩展名表示它是CA证书和
  • 使用密钥用法扩展例如,表示公钥可用于证书登录.

这些扩展有什么区别?
它们是出于同一目的还是相互补充?

security encryption ssl cryptography x509certificate

15
推荐指数
1
解决办法
2万
查看次数

是否在线程结束时发出通知?为什么这个代码示例有效?

我正在寻找线程的一些难题,我无法弄清楚为什么以下一致打印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打印结果而不是"卡住"等待?

java concurrency multithreading notify wait

15
推荐指数
1
解决办法
769
查看次数

在查询中使用except时出错

此查询有效:

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)

mysql sql select except

15
推荐指数
2
解决办法
6万
查看次数

"可选操作"在Javadoc中的含义是什么,例如Set#add(E)?

在用于Set的java文档中时,它在方法的规范中说,Optional Operation例如(由我强调)

add(E e)
如果指定的元素尚不存在,则将其添加到此集合中(可选操作).

可选的含义是什么?

如果我使用除SUN/Oracle之外的JVM,Java的实现可能不提供此操作?

java javadoc set

14
推荐指数
2
解决办法
8315
查看次数

如何使用树找到最长的常见子串?

根据wiki的最长公共子串问题可以使用后缀树来解决.
来自维基:

可以通过为字符串构建一个通用后缀树,然后找到最深的内部节点来找到一组字符串中最长的公共子字符串,这些节点具有来自其下面子树中所有字符串的叶节点

我不懂.
例如:如果我有:
ABCDEXABCZ
然后后缀树是(一些分支从XABCZ由于空间中省略):
在此输入图像描述

最长的常见子串ABC但是我不知道wiki的描述在这里有什么帮助.
ABC不是叶节点最深的内部节点.
任何帮助,以了解这是如何工作的?

java algorithm tree substring data-structures

14
推荐指数
2
解决办法
6602
查看次数

为html输入文本指定3个字符的宽度

如何创建一个HTML恰好3个字符可以容纳的文本框?
我在网上找到了它: <input type="text" style="width: 10px; padding: 2px; border: 1px solid black"/>
它创建了一个宽度为10px的文本框.我可以使用这个,但我想知道我们是否可以明确地设置3个字符宽度而不是"玩"像素,

html css

14
推荐指数
2
解决办法
8046
查看次数