Java面试深度解析:核心概念与编程挑战

需积分: 0 1 下载量 100 浏览量 更新于2024-09-08 收藏 93KB DOCX 举报
"这是一份关于Java面试的资料,包含了多个经典的面试题目,涉及编码转换、JDBC操作、事务特性、反射、单例模式、线程同步、代码执行顺序、继承与构造、查询优化和内存管理等多个核心Java知识点。" 1. 编码转换:在Java中,可以使用`new String(bytes, "GB2312").getBytes("ISO-8859-1")`来将GB2312编码的字符串转换为ISO-8859-1编码。首先,使用源编码(GB2312)创建一个新的字符串,然后将其转换为目标编码(ISO-8859-1)的字节数组。 2. JDBC操作数据库:通常包括四个步骤:加载驱动、建立连接、执行SQL和关闭资源。示例代码如下: ```java Class.forName("com.mysql.jdbc.Driver"); // 加载驱动 Connection conn = DriverManager.getConnection(url, username, password); // 建立连接 Statement stmt = conn.createStatement(); // 创建Statement对象 ResultSet rs = stmt.executeQuery("SELECT * FROM table"); // 执行查询 while (rs.next()) { // 处理结果集 } rs.close(); // 关闭结果集 stmt.close(); // 关闭Statement conn.close(); // 关闭连接 ``` 3. 事务的ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这些特性确保了数据库交易的完整性和可靠性。 4. 反射创建对象:使用`Class.forName("类全名").newInstance()`方法可以动态创建对象。首先,通过类名获取`Class`对象,然后调用`newInstance()`方法实例化对象。 5. 单例模式:常见的单例实现方式有饿汉式、懒汉式、双重检查锁定(DCL)和静态内部类等。DCL示例如下: ```java public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 6. 线程执行:在给定代码中,`t.run()`会立即执行`run()`方法,不会启动新线程。因此,输出结果是"ping"。 7. NULL类调用方法:代码会抛出`NullPointerException`,因为尝试对null对象调用方法。 8. 构造与静态初始化:在`HelloA`和`HelloB`的例子中,输出将是"staticA"、"staticB"、"HelloA"、"I'mAclass"、"HelloB"、"I'mBclass",因为静态初始化块先于构造器执行,且父类的静态块先于子类。 9. SQL查询:查询语句可能如下: ```sql SELECT C.CName, S.SName, S.Score FROM SC AS S JOIN Student AS St ON S.SID = St.SID JOIN Course AS C ON S.CID = C.CID WHERE S.Score IN (SELECT TOP 3 Score FROM SC GROUP BY CID ORDER BY Score DESC) ORDER BY C.CID ASC, S.Score DESC ``` 这个查询需要数据库支持窗口函数或者子查询来获取每个课程的前三个最高分。 10. 内存溢出:以下代码可能会导致堆内存溢出: ```java List<byte[]> list = new ArrayList<>(); while (true) { list.add(new byte[1024 * 1024]); // 每次添加1MB的数据 } ``` 不断地向列表中添加大对象,会消耗大量内存,最终可能导致堆内存溢出。 11. 内存泄漏:内存泄漏通常发生在对象不再被使用但引用仍然存在,导致垃圾收集器无法回收的情况。例如,全局集合类中存储了大量的临时对象,但没有及时清理,可能导致内存泄漏。