加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 交互 > 正文

史上最全Java面试题整理(附参考答案)

发布时间:2020-12-24 11:32:57 所属栏目:交互 来源:网络整理
导读:下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 1、面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类。 继承:基于基类创建新类。 封装:将数据

}

<span class="cke_reset cke_widget_drag_handler_container"><img class="cke_reset cke_widget_drag_handler" title="点击并拖拽以移动" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="" width="15" height="15" data-cke-widget-drag-handler="1">

如果希望用NIO的多路复用套接字实现服务器,代码如下所示。NIO的操作虽然带来了更好的性能,但是有些操作是比较底层的,对于初学者来说还是有些难于理解。

<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static <span class="hljs-keyword"&gt;final <span class="hljs-keyword"&gt;int ECHO_SERVER_PORT = <span class="hljs-number"&gt;6789;
<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static <span class="hljs-keyword"&gt;final <span class="hljs-keyword"&gt;int ECHO_SERVER_TIMEOUT = <span class="hljs-number"&gt;5000;
<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static <span class="hljs-keyword"&gt;final <span class="hljs-keyword"&gt;int BUFFER_SIZE = <span class="hljs-number"&gt;1024;

<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static ServerSocketChannel serverChannel = <span class="hljs-keyword"&gt;null;
<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static Selector selector = <span class="hljs-keyword"&gt;null;    <span class="hljs-comment"&gt;// 多路复用选择器
<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static ByteBuffer buffer = <span class="hljs-keyword"&gt;null;    <span class="hljs-comment"&gt;// 缓冲区

<span class="hljs-function"&gt;<span class="hljs-keyword"&gt;public <span class="hljs-keyword"&gt;static <span class="hljs-keyword"&gt;void <span class="hljs-title"&gt;main<span class="hljs-params"&gt;(String[] args) {
    init();
    listen();
}

<span class="hljs-function"&gt;<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static <span class="hljs-keyword"&gt;void <span class="hljs-title"&gt;init<span class="hljs-params"&gt;() {
    <span class="hljs-keyword"&gt;try {
        serverChannel = ServerSocketChannel.open();
        buffer = ByteBuffer.allocate(BUFFER_SIZE);
        serverChannel.socket().bind(<span class="hljs-keyword"&gt;new InetSocketAddress(ECHO_SERVER_PORT));
        serverChannel.configureBlocking(<span class="hljs-keyword"&gt;false);
        selector = Selector.open();
        serverChannel.register(selector,SelectionKey.OP_ACCEPT);
    } <span class="hljs-keyword"&gt;catch (Exception e) {
        <span class="hljs-keyword"&gt;throw <span class="hljs-keyword"&gt;new RuntimeException(e);
    }
}

<span class="hljs-function"&gt;<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static <span class="hljs-keyword"&gt;void <span class="hljs-title"&gt;listen<span class="hljs-params"&gt;() {
    <span class="hljs-keyword"&gt;while (<span class="hljs-keyword"&gt;true) {
        <span class="hljs-keyword"&gt;try {
            <span class="hljs-keyword"&gt;if (selector.select(ECHO_SERVER_TIMEOUT) != <span class="hljs-number"&gt;0) {
                Iterator<SelectionKey> it = selector.selectedKeys().iterator();
                <span class="hljs-keyword"&gt;while (it.hasNext()) {
                    SelectionKey key = it.next();
                    it.remove();
                    handleKey(key);
                }
            }
        } <span class="hljs-keyword"&gt;catch (Exception e) {
            e.printStackTrace();
        }
    }
}

<span class="hljs-function"&gt;<span class="hljs-keyword"&gt;private <span class="hljs-keyword"&gt;static <span class="hljs-keyword"&gt;void <span class="hljs-title"&gt;handleKey<span class="hljs-params"&gt;(SelectionKey key) <span class="hljs-keyword"&gt;throws IOException {
    SocketChannel channel = <span class="hljs-keyword"&gt;null;

    <span class="hljs-keyword"&gt;try {
        <span class="hljs-keyword"&gt;if (key.isAcceptable()) {
            ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel();
            channel = serverChannel.accept();
            channel.configureBlocking(<span class="hljs-keyword"&gt;false);
            channel.register(selector,SelectionKey.OP_READ);
        } <span class="hljs-keyword"&gt;else <span class="hljs-keyword"&gt;if (key.isReadable()) {
            channel = (SocketChannel) key.channel();
            buffer.clear();
            <span class="hljs-keyword"&gt;if (channel.read(buffer) > <span class="hljs-number"&gt;0) {
                buffer.flip();
                CharBuffer charBuffer = CharsetHelper.decode(buffer);
                String msg = charBuffer.toString();
                System.out.println(<span class="hljs-string"&gt;"收到" + channel.getRemoteAddress() + <span class="hljs-string"&gt;"的消息:" + msg);
                channel.write(CharsetHelper.encode(CharBuffer.wrap(msg)));
            } <span class="hljs-keyword"&gt;else {
                channel.close();
            }
        }
    } <span class="hljs-keyword"&gt;catch (Exception e) {
        e.printStackTrace();
        <span class="hljs-keyword"&gt;if (channel != <span class="hljs-keyword"&gt;null) {
            channel.close();
        }
    }
}

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读