近5年常考Java面试题及答案整理(三)
如果希望用NIO的多路复用套接字实现服务器,代码如下所示。NIO的操作虽然带来了更好的性能,但是有些操作是比较底层的,对于初学者来说还是有些难于理解。 ECHO_SERVER_PORT = 6789 ECHO_SERVER_TIMEOUT = 5000 BUFFER_SIZE = 1024 ServerSocketChannel serverChannel = Selector selector = ; ByteBuffer buffer = ; serverChannel = buffer = serverChannel.socket().bind( serverChannel.configureBlocking( selector = } ( (selector.select(ECHO_SERVER_TIMEOUT) != 0 Iterator? String UTF_8 = "UTF-8" CharsetEncoder encoder = CharsetDecoder decoder = ByteBuffer encode(CharBuffer in) CharBuffer decode(ByteBuffer in) }73、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 答:XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束,其本质区别在于Schema本身也是一个XML文件,可以被XML解析器解析,而且可以为XML承载的数据定义类型,约束能力较之DTD更强大。对XML的解析主要有DOM(文档对象模型,Document Object Model)、SAX(Simple API for XML)和StAX(Java 6中引入的新的解析XML的方式,Streaming API for XML),其中DOM处理大型文件时其性能下降的非常厉害,这个问题是由DOM树结构占用的内存较多造成的,而且DOM解析方式必须在解析文件之前把整个文档装入内存,适合对XML的随机访问(典型的用空间换取时间的策略);SAX是事件驱动型的XML解析方式,它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过事件回调代码来处理XML文件,适合对XML的顺序访问;,StAX把重点放在流上,实际上StAX与其他解析方式的本质区别就在于应用程序能够把XML作为一个事件流来处理。将XML作为一组事件来处理的想法并不新颖(SAX就是这样做的),但不同之处在于StAX允许应用程序代码把这些事件逐个拉出来,而不用提供在解析器方便时从解析器中接收事件的处理程序。 74、你在项目中哪些地方用到了XML? 答:XML的主要作用有两个方面:数据交换和信息配置。在做数据交换时,XML将数据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理,XML曾经是异构系统间交换数据的事实标准,但此项功能几乎已经被JSON(JavaScript Object Notation)取而代之。当然,目前很多软件仍然使用XML来存储配置信息,我们在很多项目中通常也会将作为配置信息的硬代码写在XML文件中,Java的很多框架也是这么做的,而且这些框架都选择了dom4j作为处理XML的工具,因为Sun公司的官方API实在不怎么好用。
75、阐述JDBC操作数据库的步骤。 答:下面的代码以连接本机的Oracle数据库为例,演示JDBC操作数据库的步骤。 加载驱动。 Class.forName("oracle.jdbc.driver.OracleDriver");创建连接。 Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");创建语句。 PreparedStatement ps = con.prepareStatement("select * from emp where sal between ? and ?" ps.setInt(1,1000 ps.setInt(2,3000);执行语句。 ResultSet rs = ps.executeQuery();处理结果。 System.out.println(rs.getInt("empno") + " - " + rs.getString("ename" }关闭资源。 (con != } }
76、Statement和PreparedStatement有什么区别?哪个性能更好? 答:与Statement相比,①PreparedStatement接口代表预编译的语句,它主要的优势在于可以减少SQL的编译错误并增加SQL的安全性(减少SQL注射攻击的可能性);②PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全;③当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)。
77、使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能? (编辑:武汉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |