Java面试题(十四)

1、Java 中如何实现序列化,有什么意义

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)。

要实现序列化,需要让一个类实现 Serializable 接口,该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过 writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过 readObject 方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆

2、Java 中有几种类型的流

字节流和字符流。字节流继承于 InputStream、OutputStream,字符流继承于Reader、Writer。在 java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。关于 Java 的 I/O 需要注意的有两点:一是两种对称性(输入和输出的对称性,字节和字符的对称性);二是两种设计模式(适配器模式和装潢模式)。另外 Java 中的流不同于 C#的是它只有一个维度一个方向。

3、编程实现文件拷贝

java 复制代码
public final class MyUtil {
    private MyUtil() {
        throw new AssertionError();
    }
    public static void fileCopy(String source, String target) throws IOException {
        try (InputStream in = new FileInputStream(source)) {
            try (OutputStream out = new FileOutputStream(target)) {
                byte[] buffer = new byte[4096];
                int bytesToRead;
                while((bytesToRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesToRead);
                }
            }
        }
    }
    public static void fileCopyNIO(String source, String target) throws IOException {
		try (FileInputStream in = new FileInputStream(source)) {
			try (FileOutputStream out = new FileOutputStream(target)) {
				FileChannel inChannel = in.getChannel();
  				FileChannel outChannel = out.getChannel();
                ByteBuffer buffer = ByteBuffer.allocate(4096);
                while(inChannel.read(buffer) != -1) {
                buffer.flip();
                outChannel.write(buffer);
                buffer.clear();
				}
			}
		}
	}
}

4、写一个方法**,**输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数

java 复制代码
public static int countWordInFile(String filename, String word) {
	int counter = 0;
	try (FileReader fr = new FileReader(filename)) {
		try (BufferedReader br = new BufferedReader(fr)) {
            String line = null;
            while ((line = br.readLine()) != null) {
                int index = -1;
                while (line.length() >= word.length() && (index = line.indexOf(word)) >= 0) {
                    counter++;
                    line = line.substring(index + word.length());
                }
			}
		}
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	return counter;
}

5、阐述 JDBC 操作数据库的步骤

  • 加载驱动
java 复制代码
Class.forName("oracle.jdbc.driver.OracleDriver");
  • 创建连接
java 复制代码
Connection con =DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott", "tiger");
  • 创建语句
java 复制代码
PreparedStatement ps = con.prepareStatement("select * from empwhere sal between ? and ?");

ps.setInt(1, 1000);

ps.setInt(2, 3000);
  • 执行语句
java 复制代码
ResultSet rs = ps.executeQuery();
  • 处理结果
java 复制代码
while(rs.next()) {

	System.out.println(rs.getInt("empno") + " - " +rs.getString("ename"));

}
  • 关闭资源
java 复制代码
finally {

    if(con != null) {

        try {

            con.close();

            } catch (SQLException e) {

            	e.printStackTrace();

        }

    }

}
相关推荐
louisgeek7 分钟前
Java 位运算
java
Zonda要好好学习10 分钟前
Python入门Day5
python
VBA63371 小时前
VBA之Word应用第三章第十一节:Document对象的事件
开发语言
hweiyu001 小时前
Maven 私库
java·maven
wjs20241 小时前
SOAP Header 元素
开发语言
Super Rookie1 小时前
Spring Boot 企业项目技术选型
java·spring boot·后端
写不出来就跑路1 小时前
Spring Security架构与实战全解析
java·spring·架构
电商数据girl1 小时前
有哪些常用的自动化工具可以帮助处理电商API接口返回的异常数据?【知识分享】
大数据·分布式·爬虫·python·系统架构
CoooLuckly1 小时前
numpy数据分析知识总结
python·numpy
无限远的弧光灯1 小时前
c语言学习_函数递归
c语言·开发语言·学习