java考试复习

471 阅读17分钟

目录:

(1)汇总题

选择,填空,简答,编程

(2)考前模拟

(3)课堂测试题

一. InetAddress, 二. URL,三. IO, 四. 综合, 五. 测试一,六. 测试二,七. 测试三,八. 综合测试

java在线运行网址:tool.lu/coderunner/

--------------------------------------------


1在UDP中发送数据报的方法名( )

  1. 2 定制序列化需要实现 ( ) 接口

  2. 3 Java序列化需要使用的流是( )

  3. 4 Java反序列化需要使用的流是 ()

  4. 5 Java中UDP的数据报类 ( ) DatagramPacket

  5. 6 Java提供的安全的客户端套接字类为 (),对应的工厂类()

send Serializable

ObjectOutputStream ObjectlnputStream

7 序列化的作用是将对象转变为() 一个字节数组
8 JDK中提供的公私钥密钥管理应用为 ( ) KeyTool
9 Cipher类的加密模式常量为 (),Cipher类的解密模式常量为() 第一空:ENCRYPT_ MODE 第二空:DECRYPT_ MODE 11Java提供的认证和授权服务简称为 (),提供的安全套接字扩展简称为() 第一空:JAAS第二空:JSSE 12定制序列化需要覆盖的序列化方法是( ) readObject
1 3 Java提供的安全的服务 器套接字类为(),对应的工厂类() 第一空:ServerSocket第二空:ServerSocketFactory 14实现序列化的方法是() Serializable
15反序列化的作用是将 ( ) 转变为对象 byte
1 6定制序列化需 要覆盖的反序列化方法是() writeObject
1 7 Java中UDP多播/组播类() MulScastSocket
1 8 Java对DSA提供的签名类是 ( ) DSAKey
19十进制56与十六进制0x3E的按位异或的十进制结果是() 6
20 Java中UDP的套接宇类 () DatagramSocket
21在通信中,防止被窃听可以对数据进行( ) 操作,保证数据的完整性和可靠性,可以进行( ) 操作 第一空:加密 第二空:序列化
22 UDP配置非阳塞的方法 () reccfrom
23将byte类 型数值14循环右移5位的十进制结果是( ) 0
24在所有的破解中,暴力破解(即枚举法) 最容易实现,其依赖于的可能密钥的数据集合被称为( )
第一空:
25 Cipher类通过 ()方法指定加密算法与模式 getInstance
26在JCA中安全架构类为 ( ) ,JCE中提供的基于密钥加密的类为( )
第一空:
第二空:
27 Java中安全被拆分为两个部分:不含加密功能的java安全架构简称为( ) ,含加密功能的Java安全扩展简称 第一空:JCA 第二空:JCE
28在UDP中 接收数据报的方法名() getData
29序列化中用于修饰成员变量为短暂的关键字 () transient

第一空:Socket 第二空:SocketFactory

考前模拟:

  1. 使用NIO获得一个FileChannel,所用的方法是 getChannel

  2. 套接字编程中的三要素是 Port ,IP ,Transfer Protocol

  3. 在JAVA RMI编程中,两个标准机制分别是 (stub) 和 (skeleton)

  4. JDBC中Connection, Statement, ResultSet作用:Connection创建执行SQL语句对象,管理事务Statement 执行SQL,执行批处理

    ResultSet 结果集的遍历

InetAddress类

1. InetAddress类的作用:实现主机名与IP地址的关联
2.isReachable使用ICMP协议: 正确
3.以下哪个InetAddress的getByName方法使用是正确的:InetAddress inet =InetAddress.getByName("www.xupt.edu.cn"); (含义:getByName在给定主机名的情况下确定主机的IP地址;如果参数为null,获得的是本机的IP地址) 4.使用getByName实例化对象时,如果使用的IP地址不符合规则,例如(“322.24.12.700”),则会抛出什么异常?UnknowHostException 5.Java通过以下()调用外部ping命令? Runtime.getRuntime().exec("ping -c 1 222.24.101.1")(分析:JAVA执行外部命令主要通过调用

平台的shell去完成。Runtime.getRuntime().exec() 克隆一个和当前虚拟机拥有相同环境变量的进程,再利用新进程去执行外部命令,最

后推出新进程。频繁执行此命令,系统消耗大,CPU、内存负担很重)
6. 在JAVA语言中( )是给按钮组件增加一个按键监听 该按键是否被按下事件?button.addActionListener(new ActionListener());

7.( )是申明Vector对象内元素为String类型的语句? Vector<String> rs = new Vector<String>(); URL
1.URL类对象不可以执行POST操作
2.www.xupt.edu.cn 是错误的URL地址

3.URL类的openStream()方法是创建一个 InputStream
4.以下语句说明 Value = new String(Value.getBytes(“utf8”), “GBK”); 字符编码由utf8转为gbk 5.URLConnection类不是URL类的子类
6. URLConnection提供了对HTTP首部的访问
7.当访问服务器⻚面成功时,返回代码 : 200
8. HttpClient支持https访问
9. JEditPane属于 swing控件组
10.URLConnection类可以使用以下( )获得流?getInputStream(), openStream()
IO
1. 以下()是NIO的三要素? Buffer, Channel,Selector
2.FileWriter是字符输出流
3.new RandomAccessFile(file, true) 表示不可以file尾部进行追加内容操作
4.Buffer属性中position表示 缓冲当前操作位置
5.Buffer的flip()表示: 将limit设置为position值,并将position设置为0
6.用户向Buffer写数据方法是 put
7.获得File的Channel方法是 FileInputStream f = new FileInputStream(filename);FileChannel ch = f.getChannel(); 8. StringTokenizer是利用(对象)形式拆分字符串
9.XML文件的第一行往往是 文件XML版本和编码申明

综合

1.NIO中( )是Buffer的状态值: position,limit,capacity
2.( )是SelectionKey的常量: OP_ACCEPT , OP_CONNECT, OP_READ ,OP_WRITE
3. 以下( )句正确SocketAddress sa = new InetSocketAddress("localhost", 8080);InetAddress inet =

InetAddress.getByName("localhost");
4.SelectableChannel中的 register方法用于: 注册监听事件 5.在SocketChannel中设置非阻塞模式的方法是( ): socketChannel.configureBlocking(false); 6. Hashtable存储的是( 对象 ) Socket.getPort方法获得 本地端口号
7.new ServerSocket(8000)表示,8000端口的状态是 LISTENNING
8.Socket的由( IP,port )组成
9. http的默认端口是( 80 ),https的默认端口是( 443 ) 

 I/ O包括四个抽象基类:字节输入流InputStream,字节输出流OutputStream,字符输入流Reader,字符输出流Writer

NIO包括几个不同区:

(1)缓冲区Buffer:有以下几个属性

容量capacity:表示缓冲区能存多少数据。

极限limit:表示缓冲区当前终点,不能对缓冲区中超过极限的区域进行读写。

位置position:表示缓冲区中下一个读写单元的位置,每次读写缓冲的数据时,都会改变该值,为下次读写数据做准备。

标记mark:表示记录当前position的位置,通过reset()恢复到mark位置。

缓冲区有以下类型:ByteBuffer, charBuffer, shortBuffer,IntBuffer, LongBuffer, FloatBuffer, DoubleBuffer

(2)通道Channel:用来连接缓冲区与数据源或数据目的地。

如何构建:1. Socket通道: 使用ServerSocketChannel类具有负责接收客户连接的accept()方法,要用它的静态工厂方法open()来创建ServerSocketChannel。SocketChannel类通过它的静态工厂方法open()来创建SocketChannel 。以及DatagramChannel类。

2. FileChannel对象可以通过一个打开的RandomAccessFile, FileInpuyStream, FileOutputStream的getChannel方法得到。

(3)选择器selector:只要SeverSocketChannel向Selector注册了指定的事件,Selector就监控这些时间是否发生。如何注册?

SelectableChannl的register()方法负责注册事件,该方法返回一个SelectionKey ,对象,该对象是用于跟踪这些被注册事件的句柄。

TCP包括

1. Socket类:提供了getInputStream()方法和getOutputStream()方法,分别返回输入流InputStream对象和输出流OutputStream对象。

2. ServerSocket类构造方法负责在操作系统中把当前进程注册为服务器进程。服务器程序接下来调用ServerSocket对象的accept()方法,该方法会一直监听端口,等待客户的连接和请求,若收到连接请求,accpet()方法就会返回一个Socket对象。这个Socket对象与客户端的Socket对象形成一条通信线路。

UDP包括

3. DatagramSocket类用来发送和接收数据报包的套接字,DatagramPacket类表示数据报文,用于处理报文。将Byte数组,目标地址,目标端口等数据包装成报文,或者将报文拆卸为Byte数组。

4. MulticastSocket()组播通信。用joinGroup()加入到组播组,leaveGroup()离开组播组。


HTTP协议 包括HTTP请求和HTTP响应

HTTP请求包括

1.请求方式,URL(统一资源定位符),http协议版本

请求方式:常用的:get,post

不常用的:head、put、delete

①get方式:客户端访问服务器的一个文档,服务器将文档传给客户端。

②post方式:客户端将信息发送给服务器,除了访问URL,还有请求正文。

  1. 2.请求头部

头部包含有关客户端的环境和请求正文的有用信息:浏览器类型(代码中出现agent),所用语言(出现language),请求正文类型(出现content type),请求正文长度(出现length),远程主机(出现Host)。

3.请求正文

头部拆分,代码

POST代表请求方式

/hello.htm代表URL

HTTP/1.1代表版本协议

HTTP响应包括

  1. HTTP协议的版本、状态代码、描述

响应的第一行包括HTTP协议的版本、状态代码、描述

状态代码,三位数字组成

1××:信息提示,临时响应

2××:响应成功,服务器成功接收客户端请求

3××: 重定向

4××: 客户端错误,表明客户端请求了不正确的资源或请求格式错误。

5××: 服务器错误,表明服务器遇到了某种错误不能响应客户端请求。

  1. 响应头(Response Header)

包含服务器类型,正文类型,正文长度等信息。

  1. 响应正文(Response Content)

响应正文就是服务器返回的具体的文档,最常见HTML

文档。

RMI:JDK提供的一个完善的、简单易用的远程方法调用框架,要求客户端与服务器端都是Java程序。封装了底层的通信细节。

采用客户/服务器通信方式,在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上的方法。

创建RMI框架:

  1. 1.创建远程接口:继承java.rmi.Remote接口
  2. 2.创建远程类:实现远程接口
  3. 3.创建服务器程序:负责在rmiregistry注册表中注册远程对象
  4. 4.创建客户程序:负责定位远程对象,并且调用远程对象的方法。





--------------------------------------------

考前模拟:

1.使用NIO获得一个FileChannel,所用的方法是 getChannel

2.套接字编程中的三要素是  Port ,IP ,Transfer Protocol

3.在JAVA RMI编程中,两个标准机制分别是 (stub) 和 (skeleton)

4. JDBC中Connection, Statement, ResultSet作用:

Connection创建执行SQL语句对象,管理事务

Statement 执行SQL,执行批处理

ResultSet 结果集的遍历

5. 以下实现了一个探测某主机开发TCP端口的RMI分布服务,补充完善。


第一空: java.rmi.Remote

 第二空: implements ScanPort 

第三空: RemoteException

第四空: createRegistry(3000) 

第五空:rebind

--------------------------------------------

一. InetAddress

1. InetAddress类的作用:实现主机名与IP地址的关联

2. isReachable使用ICMP协议: 正确

3. 以下哪个InetAddress的getByName方法使用是正确的: InetAddress inet = InetAddress.getByName("www.xupt.edu.cn");

(含义:getByName在给定主机名的情况下确定主机的IP地址;如果参数为null,获得的是本机的IP地址)

4. 使用getByName实例化对象时,如果使用的IP地址不符合规则,例如(“322.24.12.700”),则会抛出什么异常?UnknowHostException

5. 使用InetAddress.getAddress()获得对象IP地址为"222.24.12.128",如byte[] bytes = addr.getAddress();//获取字节数组形式的那么通过语句的结果为for(byte b: bytes)System.out.print(b+"."); -34.24.12.-128.

(分析:在Java中byte类型的取值范围是-128〜127。如果返回的IP地址的某个字节是大于127的整数,在byte数组中就是负数。)

6. Java通过以下( )调用外部ping命令? Runtime.getRuntime().exec("ping -c 1 222.24.101.1")

(分析:JAVA执行外部命令主要通过调用平台的shell去完成。Runtime.getRuntime().exec() 克隆一个和当前虚拟机拥有相同环境变量的进程,再利用新进程去执行外部命令,最后推出新进程。频繁执行此命令,系统消耗大,CPU、内存负担很重)

7. 在JAVA语言中( )是给按钮组件增加一个按键监听 该按键是否被按下事件?button.addActionListener(new ActionListener());

(分析:JAVA中的Swing组件,按钮的重点是进行事件的监听,可以通过调用JButton的addActionListener()方法。这个方法接受一个实现ActionListener接口的对象作为参数,ActionListener接口中只包含一个actionPerformed()方法。)

8. ( )是申明Vector对象内元素为String类型的语句? Vector<String> rs = new Vector<String>();

(分析:上述创建一个动态数组的普通对象,这个对象数组里面的值都是string类型。)

9. 在Java中使用implement Runnable接口的类实例化对象后,以下哪项是正确的 class WorkLine implement Runnable{}

WorkLine wl = new WorkLine();

Thread t = new Thread(wl);

t.start();

10。 在JAVA的网络编程中,需要引入以下哪个类库? java.io.*java.net.*

--------------------------------------------

二. URL

1. URL类对象不可以执行POST操作

2. www.xupt.edu.cn是错误的URL地址

3. URL类的openStream()方法是创建一个 InputStream

4. 以下语句说明 Value = new String(Value.getBytes(“utf8”), “GBK”); 字符编码由utf8转为gbk

5. URLConnection类不是URL类的子类

6. URLConnection提供了对HTTP首部的访问

7. 当访问服务器页面成功时,返回代码 : 200

8. HttpClient支持https访问

9. 9 JEditPane属于 swing控件组

10. URLConnection类可以使用以下( )获得流?getInputStream()openStream()

--------------------------------------------

三. IO

1. 以下()是NIO的三要素? Buffer​​​​​​​, Channel​​​​​​​, Selector

2. FileWriter是字符输出流

3. new RandomAccessFile(file, true) 表示不可以file尾部进行追加内容操作

4. Buffer属性中position表示 缓冲当前操作位置

5.

Buffer的flip()表示: 将limit设置为position值,并将position设置为0

6. 用户向Buffer写数据方法是 put

      7. 获得File的Channel方法是

      FileInputStream f = new FileInputStream(filename);

      FileChannel ch = f.getChannel();

        8. StringTokenizer是利用(对象)形式拆分字符串

        9. XML文件的第一行往往是 文件XML版本和编码申明

          10. JSON文件中{ }表示 对象

          --------------------------------------------

          四. 综合

          1. NIO中( )是Buffer的状态值: position,limit,capacity

          2. ( )是SelectionKey的常量: OP_ACCEPT , OP_CONNECT, OP_READ ,OP_WRITE

          3. 以下( )句正确SocketAddress sa = new InetSocketAddress("localhost", 8080);

          InetAddress inet = InetAddress.getByName("localhost");

          4. SelectableChannel中的 register方法用于: 注册监听事件

          5. 在SocketChannel中设置非阻塞模式的方法是( ): socketChannel.configureBlocking(false);

          6. Hashtable存储的是( 对象 )

          7. Socket.getPort方法获得 本地端口号

          8. new ServerSocket(8000)表示,8000端口的状态是 LISTENNING

          9. Socket的由( IP,port )组成

          10. http的默认端口是( 80 ),https的默认端口是( 443 )

          --------------------------------------------

          五. 测试一

          假设你的IP地址是192.168.0.100,现在需要探测目标C类网络(222.24.16.0)中主机可连通数,将可连通主机的IP地址保存在文件中(学号-姓名.dat)。
          
          思路:
          
          1)  一个C类网络主机数254台,必须开启多线程,设立共享的资源主机号
          
          线程的构成方法中,至少包括 (线程名称、共享资源)
          
          class GetPort{
          
                   private int host = 0;
          
                   (                      ) int getHost(){
          
                             return (                    );
          
              }
          
          }
          
           
          
          class ScanThread extends Thread{
          
                   public ScanThread(String threadName, GetPort gp)
          
                   public void run(){
          
                            ……………..
          
                   }
          
          }
          
          2)  你的IP地址是内网地址,目标网络是外网,在探测过程中可能受到防火墙的阻塞,建议采用ping的方法,根据返回的字符串判断 目标主机是否能连通
          
          Process pro = Runtime.getRuntime().exec("ping " + ipAddress);
          
          BufferedReader buf = new BufferedReader(
          
                              new InputStreamReader(pro.getInputStream()));
          
          要逐行读取,判断是否能连通目标主机
          
          3)  将可连通的IP地址保存在  学号-姓名.dat 中
          
          设主机IP为 String host
          
          FileOutputStream fos = new FileOutputStream(             
          
          fos.write(主机IP的字节数组形式)
          
           
          我的答案
          
          package com.zhu.experiment1;
          public class GetHost{
           private int host = 0;
             public GetHost(){ }
             synchronized int add(){
                return ++host; 
              }  
          }
          
          
          
          package com.zhu.experiment1;
          
          import java.io.BufferedReader;
          import java.io.File;
          import java.io.InputStreamReader;
          import java.io.RandomAccessFile;
          import java.net.InetAddress;
          public class ScanThread extends Thread{ 
           private GetHost host ; 
           private String netid;
          
           public ScanThread(String netid, GetHost host){
                  this.host = host;  
                 this.netid = netid;
           }
          
           
           public void run(){
               try{
                   int i;
                   while((i = host.add()) < 255) {
                   String ip = netid + "." + i;
                   RandomAccessFile raf = new RandomAccessFile(new File("E:\\04172066-刘鑫海.dat"), "rw");
          
                   Process pro = Runtime.getRuntime().exec("ping " + ip);
                   BufferedReader buf = new BufferedReader(
                                       new InputStreamReader(pro.getInputStream()));
          
                        String line;
                   while ((line = buf.readLine()) != null) {
                          if(line.indexOf(ip) > 0){
                                raf.seek(raf.length());
                              raf.writeBytes(ip + "\r\n");
                          }
                       }
                   }
               }catch(Exception e){
                    e.printStackTrace();
               }
              }
          }
          
                   
          
          package com.zhu.experiment1;
          public class SumDemo{
           public static void main(String [] args) throws Exception{
           GetHost host = new GetHost();
           ScanThread st1 = new ScanThread("222.24.16", host);   
           st1.start();
           st1.join();    
           }
          }

          --------------------------------------------

          六. 测试二

          有以下学生信息info.xml,采用NIO方式转存到 学号-姓名.txt 文件中
          
          <?xml version="1.0" encoding="utf-8"?>
          
          <students>
          
                     <student>
          
                              <id>12345</id>
          
                              <name>宋江</name>
          
                              <major>行政管理</major>
          
                     </student>
          
                     <student>
          
                              <id>23456</id>
          
                              <name>吴用</name>
          
                              <major>计算机</major>
          
                     </student>
          
          </students>
          
          1)  采用DOM4J的解析方法,引用以下类库
          
          import org.dom4j.Document;
          import org.dom4j.Element;
          import org.dom4j.Node;
          import org.dom4j.io.OutputFormat;
          import org.dom4j.io.SAXReader;
          import org.dom4j.io.XMLWriter;
          
           
          
          基本操作
          
          SAXReader reader = new SAXReader();
          Document document = reader.read("info.xml");
          
          Element element = document.getRootElement();
          
          遍历的方法
          
          public static void treeWalk(Element element) {
          
               for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
              Node node = element.node(i);
              if ( node instanceof Element ) {
                System.out.println(node.getName() + "-" + node.getText());
                treeWalk( (Element) node );
          } } }
          
          2)  NIO的使用方法
          
          RandomAccessFile raf = new RandomAccessFile
          
          FileChannel fc = raf.getChannel();   获得channel
          
          ByteBuffer buf = ByteBuffer.allocate(64);
          
          将xml中数据put到buf中,加载完毕后要调用 ByteBuffer.flip 方法
          
          再将buf数据write到channel中 
          
          while(buf.hasRemaining()) {
          
              channel.write(buf);
          
          }
          
          


          我的答案
          
          public class Util {
          
              public static void main(String[] args) throws java.io.IOException{
          
                  Person p1 = new Person("04172066","刘鑫海",22);
          
                  java.io.File file = new java.io.File("C:\\04172066刘鑫海.txt");
          
                  java.io.BufferedWriter bw = new java.io.BufferedWriter(new java.io.OutputStreamWriter(new java.io.FileOutputStream(file)));
          
                  bw.write("学号:" + p1.id);
          
                  bw.write("\r\n姓名:" + p1.name);
          
                  bw.write("\r\n性别:" + p1.age);
          
                  bw.flush();
          
                  bw.close();
          
              }
          
          }
          
          class Person{
          
              public String id;
          
              public String name;
          
              public int age;
          
              public Person(String id, String name, int age){
          
                  this.id = id;
          
                  this.name = name;
          
                  this.age = age;
          
              }
          
          }

          --------------------------------------------

          七. 测试三

          编写 一对一 的服务器和客户端程序
          
          1)  服务器端开启8080端口,并只接收1个客户端的连接
          
          2)  服务器确认客户端连接后,发送“ welcome to my Server”字符串
          
          3)  客户端收到欢迎信息后,发送 你的姓名和学号。
          我的答案
          import java.io.BufferedReader;
          import java.io.InputStreamReader;
          import java.io.PrintStream;
          import java.net.InetAddress;
          import java.net.Socket;
          public class Client {
           public static void main(String[] args)throws Exception 
           {
           InetAddress ip = InetAddress.getByName("192.168.1.1");
           Socket s = new Socket(ip, 8899);
           PrintStream ps = new PrintStream(s.getOutputStream());
           BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
           String str = null;
           while(null != (str=br.readLine()))
           {
           ps.println(str);
           }
           }
          }
          import java.io.BufferedReader;
          import java.io.InputStream;
          import java.io.InputStreamReader;
          import java.io.OutputStream;
          import java.net.ServerSocket;
          import java.net.Socket;
          public class Server {
           public static void main(String[] args) throws Exception
           {
           ServerSocket server = new ServerSocket(8899);
            Socket  s = server.accept();
            System.out.println("welcome to my Server");
            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String str=null;
            while(null != (str=br.readLine()))
            {
            System.out.println("Client应答:"+str);
            }
           }
          }

          --------------------------------------------

          八. 综合测试

          class GetPort{ 共享资源类
          
          	(_________) int port;		共享的端口
          
          	
          
          	public GetPort(int port){	构造方法
          
          		this.port = port;
          
          	}
          
          		
          
          	(_________) int getPort(){	获得端口累加号
          
          		return port++;
          
          	}
          
          }
          
          
          
          class ScanThread extends (_________){		扫描端口线程类
          
          	String host;		目标主机
          
          	GetPort port;		共享的端口资源
          
          	Thread t;		主线程
          
          	String name;		子线程名称
          
          	public ScanThread(String host, GetPort port, String name, Thread t){	构造方法
          
          		this.host 	= host;
          
          		this.t 		= t;
          
          		this.port 	= port;
          
          		this.name 	= name;
          
          	}
          
          	
          
          	(_________)(){		线程运行方法
          
          		try{
          
          			Socket s = new (_________)();
          
          			RandomAccessFile raf;
          
          			int p = 0;
          
          			while((p = port.getPort())<(_________)){
          
          				SocketAddress inet = new (_________)(host, p);
          
          				s.(_________)(inet, 5000);
          
          				if(s.(_________)()){
          
          					raf = new RandomAccessFile("record.dat", "rw");
          
          					raf.(_________)(raf.length());
          
          					raf.(_________)(p);
          
          					raf.close();
          
          				}
          
          			}	
          
          			s.close();
          
          		}(_________)(Exception e){
          
          			e.printStackTrace();
          
          		}(_________){
          
          			try{
          
          				t.(_________)();
          
          			}catch(Exception e){
          
          				e.printStackTrace();
          
          			}
          
          		}
          
          	}
          
          }
          
          
          
          class mainThread{		主类
          
          	public static void main(String [] args){	主方法
          
          		int 	flag = 0;			线程累计数
          
          		String 	host;				目标主机
          
          		Thread 	t = Thread.currentThread();	获得主线程
          
          		GetPort p = new GetPort(0);		共享的端口累加资源
          
          
          
          		try{
          
          			host = (new (_________)(System.in)).next();
          
          			for(int i=0; i<10; i++){
          
          				(new ScanThread(host, p, "Thread-"+i, t)).(_________);
          
          			
          
          			while(flag < 10){	采用唤醒等待的方法,保证子线程都正常结束
          
          	        		synchronized(t){
          
          					flag++;	
          
          					t.(_________)();
          
          				}
          
          			}
          
          		}catch(Exception e){
          
          			e.printStackTrace();
          
          		}	
          
          	}
          
          }
          
          
          
          (10.0分)
          private
          
          synchronized
          
          Thread
          
          public void run
          
          Socket
          
          65535
          
          InetSocketAddress
          
          connect
          
          isReachable
          
          seek
          
          writeUTF
          
          catch 
          
          finally
          
          close
          
          Scanner
          
          start


          第一空: 
          java.nio.
          
          new SAXReader()
          
          read
          
          getRootElement()
          
          Element
          
          raf.getChannel()
          
          
          
          allocate
          
          isEmpty
          
          
          
          Element
          
          clear
          
          getBytes
          
          flip
          
          hasRemaining


          3
          import java.io.IOException;
          
          import java.net.InetSocketAddress;
          
          import java.nio.ByteBuffer;
          
          import java.nio.channels.Channel;
          
          import java.nio.channels.SelectionKey;
          
          import java.nio.channels.Selector;
          
          import java.nio.channels.ServerSocketChannel;
          
          import java.nio.channels.SocketChannel;
          
          
          
          public class ChatRoomServer {
          
              private Selector selector = null;	事件选择器
          
              static final int port = 9999;
          
              
          
              public void init() throws IOException
          
              {
          
                  selector = Selector.(_________)();	获得selector对象
          
                  ServerSocketChannel server = ServerSocketChannel.(_________)(); 获得channel对象
          
                  server.(_________)(new InetSocketAddress(port));
          
                  server.configureBlocking(_________);	
          
                  server.register(selector, (_________));	注册监听事件
          
                  
          
                  System.out.println("Server is listening now...");
          
                  
          
                  while(true) {
          
                      int readyChannels = selector.select();
          
                      if(readyChannels == 0) continue; 
          
                      Set selectedKeys = selector.(_________)();  	获得事件列表
          
                      Iterator keyIterator = selectedKeys.iterator();
          
                      while(keyIterator.hasNext()) {
          
                           SelectionKey sk = (SelectionKey) keyIterator.next();
          
                           keyIterator.(_________)();		移除已处理过的事件
          
                           dealWithSelectionKey(server,sk);
          
                      }
          
                  }
          
              }
          
              
          
              public void dealWithSelectionKey(ServerSocketChannel server,SelectionKey sk) throws 
          
          
          
          IOException {
          
                  if(sk.isAcceptable())	有连接请求
          
                  {
          
                      SocketChannel sc = server.(_________)();
          
                      sc.(_________)(false);
          
                      sc.register(selector, SelectionKey.OP_READ);
          
                      sk.interestOps(SelectionKey.OP_ACCEPT);
          
                  }
          
                  if(sk.isReadable())	有数据到达
          
                  {
          
                      SocketChannel sc = (SocketChannel)sk.(_________)(); 
          
                      ByteBuffer buff = ByteBuffer.(_________)(1024);
          
                      StringBuilder content = new StringBuilder();
          
                      try
          
                      {
          
                          while(sc.read(buff) > 0)
          
                          {
          
                              buff.(_________)();
          
                              content.append(buff);
          
                              
          
                          }
          
                          System.out.println(content);
          
                          sk.(_________)(SelectionKey.OP_READ);		追加关注事件
          
                      }
          
                      catch (IOException io)
          
                      {
          
                          sk.cancel();
          
                          if(sk.channel() != null)
          
                          {
          
                              sk.channel().close();
          
                          }
          
                      }
          
                  }
          
              }
          
              
          
              public static void main(String[] args) throws IOException 
          
              {
          
                  new ChatRoomServer().init();
          
              }
          
          }
          
          
          
          (10.0分)
          我的答案:
          
          第一空: 
          open
          
          open
          
          bind
          
          false
          
          selectionKey.OP ACCEPT
          
          selectedKeys
          
          remove
          
          accept
          
          configureBlocking
          
          channel
          
          allocate
          
          flip
          
          interestOps