Java面试常见问题集锦

4星 · 超过85%的资源 需积分: 17 24 下载量 181 浏览量 更新于2024-07-29 收藏 771KB DOC 举报
"Java面试宝典是一份针对Java程序员面试准备的资料,涵盖了基础语法、编程技巧、异常处理、多线程、集合框架、IO流、JVM内存管理等多个核心知识点。这份资料旨在帮助求职者熟悉Java语言的关键概念,提高面试成功率。" 一、Java基础部分 1. 一个.java源文件可以包含多个类,但只能有一个公共类(public class),其他类可以是非公共的。 2. Java中没有goto语句,提倡使用流程控制结构如if、for、while等替代。 3. &是位运算符,&&是逻辑运算符。前者用于按位操作,后者用于布尔逻辑判断,只有当左侧为真时才会评估右侧。 4. 使用break语句可以跳出多重嵌套循环。 5. switch语句不能作用于byte,但Java 7以后可以作用于char,不能作用于long和String。 6. short s1 = 1; s1 = s1 + 1; 会隐式转换为int,需要强制类型转换;s1 += 1; 直接在原类型上进行运算,无需转换。 7. char型变量可以存储中文汉字,因为UTF-16编码每个中文汉字占用2个字节。 8. 最有效率的方法计算2乘以8是直接使用位移运算:2 << 3。 9. 设计一个计算器要考虑数据范围、进制转换、运算符优先级等。 二、核心概念 10. final修饰变量时,变量引用不可变,但如果是对象,则对象的属性可以变。 11. ==比较基本类型值,equals比较对象内容。 12. 静态变量属于类,实例变量属于对象。 13. 不可以从static方法内部调用非static方法。 14. Integer是int的封装类,有额外功能,如缓存,但性能稍逊。 15. Math.round(11.5)等于12,Math.round(-11.5)等于-11。 16. 需要检查代码具体实现来分析不妥之处。 17. public、private、protected及默认访问修饰符分别对应不同的访问级别。 18. Overload是重载,方法名相同但参数列表不同;Override是重写,子类方法覆盖父类方法,不能改变返回类型。 19. 构造器不能被override,但可以被重载。 20. 接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类可以有静态main方法。 三、高级特性 21. 写clone()方法时,通常会调用super.clone()。 22. 面向对象特征包括封装、继承、多态。 23. Java通过方法的动态绑定实现多态。 24. abstract class可以有方法实现,而interface只能声明方法。 25. abstract method不能同时是static、native或synchronized。 26. 内部类是定义在另一个类内部的类,Static Nested Class是静态内部类,不依赖外部类实例;Inner Class是普通内部类,依赖外部类实例。 27. 内部类可以访问其外部类的所有成员,包括私有成员。 28. 匿名内部类可以继承其他类或实现接口。 29. super.getClass()获取对象的类信息。 30. String不是基本数据类型,是对象。 31. 原始的String对象内容不变,s + " world!"创建了一个新的String对象。 32. 不可以继承String类,它是final的。 四、异常处理 33. String s = new String("xyz")创建了两个Object,一个常量池中的,一个堆中的。 34. String和StringBuffer的区别在于String是不可变的,而StringBuffer是线程安全的可变字符串。 35. 使用split(",")方法将逗号分隔的字符串转换为数组。 36. 数组有length属性,String有length()方法。 37. 创建了3个对象。 38. try后的finally{}总是会被执行,无论是否有return,它会在return前执行。 39. 编程代码未给出,无法确定输出结果。 40. final修饰变量,finally确保代码块始终执行,finalize是对象被垃圾收集前调用的方法。 41. 运行时异常是程序运行时可能发生且需要处理的异常,一般异常在编译阶段就需处理。 42. error是严重问题,如系统崩溃,exception是程序可处理的异常。 43. 异常处理机制涉及try、catch、finally、throw、throws关键字,try块中可以抛出异常。 44. 如:NullPointerException、ArrayIndexOutOfBoundsException等。 45. throws表示方法可能抛出异常,throw用于抛出异常,try用于捕获异常,finally用于确保代码执行。 46. 通过Thread类或实现Runnable接口创建线程,synchronized修饰同步方法。 47. sleep()使线程休眠,wait()使线程等待,两者都在对象锁上操作。 48. 同步(synchronized)用于多线程同步,防止数据冲突;异步不保证执行顺序,提高并发性能。 49. 未给出代码,无法判断。 50. 多线程实现:继承Thread类、实现Runnable接口。同步实现:synchronized关键字、Lock接口。 五、集合框架 51. 启动线程应使用start()而非run(),start()会调用run()。 52. 其他线程不能进入同步方法,除非获得对象锁。 53. 线程状态包括新建、可运行、运行、阻塞和死亡,它们之间通过API进行状态转换。 54. synchronized与Lock异同在于synchronized是内置机制,简单但粒度较粗;Lock是显式锁,粒度更细,提供更多控制。 55. 示例代码实现四个线程交替操作共享变量j。 56. 示例代码实现子线程、主线程交替循环。 57. Collection是所有集合的顶级接口,结构包括List、Set、Queue等。 58. 实现比较需实现Comparable接口。 59. ArrayList线程不安全,允许null,效率高;Vector线程安全,效率低。 60. HashMap非同步,允许null键值;Hashtable同步,不允许null键值。 61. List存储有序元素,可重复;Set存储无序不重复元素;Map存储键值对。 62. List、Set、Map都是Collection接口的子接口。 63. List:有序、可重复;Set:无序、不重复;Map:键值对,键唯一。 64. ArrayList效率高,适合随机访问;Vector效率低,线程安全;LinkedList适合遍历插入删除。 65. 使用removeAll()方法去除Vector中重复元素。 66. Collection是接口,Collections是工具类,提供集合操作。 67. 使用equals()判断对象内容是否相等,==比较对象引用。 68. 集合类包括ArrayList、LinkedList、HashSet、HashMap等,主要方法包括add、get、remove等。 69. 可能,两个对象值相等但哈希码不同。 70. 使用子类的compareTo方法,因为实际对象是子类实例。 71. 常用类:ArrayList, HashMap, String, Thread, Exception;包:java.util, java.io, java.net, java.awt, java.sql;接口:Runnable, Comparable, Iterator, ActionListener。 六、IO流与序列化 72. 流分为字节流和字符流,字节流处理任意数据,字符流处理字符。 73. 序列化是将对象的状态转化为字节流,便于持久化或网络传输。Serializable接口表示对象可序列化。 74. JVM加载class文件通过类加载器,从磁盘加载到内存并验证字节码。 75. heap存储对象实例,stack存储方法调用帧。heap用于垃圾回收,stack速度快但大小有限。 76. GC自动回收不再使用的内存,避免内存泄露。 77. 垃圾回收优点:自动管理内存,防止内存泄露。机制:可达性分析、标记-清除等。 78. 垃圾回收器不一定立即回收,手动调用System.gc()建议少用。 79. 使用System.gc()请求回收,但不保证立即执行,可使用finalize()方法。 80. assert用于断言,调试代码时检查特定条件是否满足。 81. Java中可能导致内存泄漏,如未关闭流、静态集合中引用对象等。 82. 不能,java.lang.String是预定义的,不能创建同名类。 83. 查错题目的具体错误需要查看代码。 84. 算法与编程题目涉及文件操作、字符串处理、二叉树、排序、递归等。 七、HTML、JavaScript和Ajax 85. 判断日期大小通常使用JavaScript的Date对象。 86. 使用CSS样式实现表格行颜色变化。 87. 使用正则表达式验证数字。 88. 验证数字的JavaScript代码。 以上